| @@ -153,7 +153,7 @@ | |||||
| <RecentlyUsedMenus>1</RecentlyUsedMenus> | <RecentlyUsedMenus>1</RecentlyUsedMenus> | ||||
| <MenuShadows>1</MenuShadows> | <MenuShadows>1</MenuShadows> | ||||
| <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay> | <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay> | ||||
| <CommandsUsage>1F0200001D0013860000090000001B8F000001000000108600009100000020810000010000000D800000020000000C81000001000000048600000200000056860000EF0000001481000001000000008400000100000030840000010000001F810000050000005E8600000B0000000E810000010000000B8100000100000000E10000010000008E860000010000001486000003000000698600000100000005840000010000000086000002000000118600004A00000002840000020000000581000001000000198F000001000000468100002D00000010840000060000005D860000040000000886000002000000</CommandsUsage> | |||||
| <CommandsUsage>B80200001D001B8F000001000000138600000B00000010860000CF00000020810000010000000C810000020000000D800000020000000486000002000000568600001B0100000084000001000000148100000100000030840000010000000E810000010000005E8600000B0000001F8100000B0000008E8600000100000000E10000010000000B81000001000000058400000100000069860000010000001486000003000000198F00000100000005810000010000000284000002000000118600006800000000860000020000001084000006000000468100003500000008860000020000005D86000004000000</CommandsUsage> | |||||
| </MFCToolBarParameters> | </MFCToolBarParameters> | ||||
| <CommandManager> | <CommandManager> | ||||
| <CommandsWithoutImages>0400FFFFFFFF838600005886000004DC0000</CommandsWithoutImages> | <CommandsWithoutImages>0400FFFFFFFF838600005886000004DC0000</CommandsWithoutImages> | ||||
| @@ -625,12 +625,14 @@ | |||||
| <IarPane-34080> | <IarPane-34080> | ||||
| <MemGotoHistory> | <MemGotoHistory> | ||||
| <item>ModbusRxBuf</item> | <item>ModbusRxBuf</item> | ||||
| <item>ModbusCoil</item> | |||||
| <item>ModbusTxBuf</item> | <item>ModbusTxBuf</item> | ||||
| <item>ModbusReg</item> | |||||
| <item>rxBuf</item> | <item>rxBuf</item> | ||||
| </MemGotoHistory> | </MemGotoHistory> | ||||
| <ZoneNumber>0</ZoneNumber> | <ZoneNumber>0</ZoneNumber> | ||||
| <SelectionAnchor>536900356</SelectionAnchor> | |||||
| <SelectionEnd>536900612</SelectionEnd> | |||||
| <SelectionAnchor>536903428</SelectionAnchor> | |||||
| <SelectionEnd>536903684</SelectionEnd> | |||||
| <UnitsPerGroup>1</UnitsPerGroup> | <UnitsPerGroup>1</UnitsPerGroup> | ||||
| <EndianMode>0</EndianMode> | <EndianMode>0</EndianMode> | ||||
| <DataCovEnabled>0</DataCovEnabled> | <DataCovEnabled>0</DataCovEnabled> | ||||
| @@ -638,7 +640,7 @@ | |||||
| <AutoRefresh>0</AutoRefresh> | <AutoRefresh>0</AutoRefresh> | ||||
| <FindAsHex>0</FindAsHex> | <FindAsHex>0</FindAsHex> | ||||
| <HScroll>0</HScroll> | <HScroll>0</HScroll> | ||||
| <VScroll>33556267</VScroll> | |||||
| <VScroll>33556459</VScroll> | |||||
| </IarPane-34080> | </IarPane-34080> | ||||
| <Pane-34081> | <Pane-34081> | ||||
| <ID>34081</ID> | <ID>34081</ID> | ||||
| @@ -1012,6 +1014,8 @@ | |||||
| <item>j</item> | <item>j</item> | ||||
| <item>i</item> | <item>i</item> | ||||
| <item>indexR</item> | <item>indexR</item> | ||||
| <item>readVal</item> | |||||
| <item>data</item> | |||||
| <item></item> | <item></item> | ||||
| </expressions> | </expressions> | ||||
| <col-names> | <col-names> | ||||
| @@ -16,15 +16,15 @@ | |||||
| <ShowSource>1</ShowSource> | <ShowSource>1</ShowSource> | ||||
| </Trace1> | </Trace1> | ||||
| <StLinkDriver> | <StLinkDriver> | ||||
| <CStepIntDis>_ 0</CStepIntDis> | |||||
| <LeaveTargetRunning>_ 0</LeaveTargetRunning> | |||||
| <stlinkResetStyle>0</stlinkResetStyle> | |||||
| <stlinkResetStrategy>0</stlinkResetStrategy> | |||||
| <stlinkserialNo>30303031</stlinkserialNo> | <stlinkserialNo>30303031</stlinkserialNo> | ||||
| <stlinkfoundProbes /> | <stlinkfoundProbes /> | ||||
| <stlinkResetStyle>0</stlinkResetStyle> | |||||
| <stlinkResetStrategy>0</stlinkResetStrategy> | |||||
| <CStepIntDis>_ 0</CStepIntDis> | |||||
| <LeaveTargetRunning>_ 0</LeaveTargetRunning> | |||||
| </StLinkDriver> | </StLinkDriver> | ||||
| <DebugChecksum> | <DebugChecksum> | ||||
| <Checksum>4279408766</Checksum> | |||||
| <Checksum>3595631932</Checksum> | |||||
| </DebugChecksum> | </DebugChecksum> | ||||
| <Exceptions> | <Exceptions> | ||||
| <StopOnUncaught>_ 0</StopOnUncaught> | <StopOnUncaught>_ 0</StopOnUncaught> | ||||
| @@ -120,22 +120,15 @@ | |||||
| <ShowTimeSum>1</ShowTimeSum> | <ShowTimeSum>1</ShowTimeSum> | ||||
| <SumSortOrder>0</SumSortOrder> | <SumSortOrder>0</SumSortOrder> | ||||
| </EventLog> | </EventLog> | ||||
| <DisassembleMode> | |||||
| <mode>0</mode> | |||||
| </DisassembleMode> | |||||
| <Breakpoints2> | |||||
| <Bp0>_ 1 "EMUL_CODE" "{$PROJ_DIR$\..\modbus\modbus.c}.176.17" 0 0 1 "" 0 "" 0</Bp0> | |||||
| <Count>1</Count> | |||||
| </Breakpoints2> | |||||
| <TermIOLog> | |||||
| <LoggingEnabled>_ 0</LoggingEnabled> | |||||
| <LogFile>_ ""</LogFile> | |||||
| </TermIOLog> | |||||
| <LogFile> | <LogFile> | ||||
| <LoggingEnabled>_ 0</LoggingEnabled> | <LoggingEnabled>_ 0</LoggingEnabled> | ||||
| <LogFile>_ ""</LogFile> | <LogFile>_ ""</LogFile> | ||||
| <Category>_ 0</Category> | <Category>_ 0</Category> | ||||
| </LogFile> | </LogFile> | ||||
| <Aliases> | |||||
| <Count>0</Count> | |||||
| <SuppressDialog>0</SuppressDialog> | |||||
| </Aliases> | |||||
| <DriverProfiling> | <DriverProfiling> | ||||
| <Enabled>0</Enabled> | <Enabled>0</Enabled> | ||||
| <Mode>3</Mode> | <Mode>3</Mode> | ||||
| @@ -149,8 +142,14 @@ | |||||
| <CallStackStripe> | <CallStackStripe> | ||||
| <ShowTiming>1</ShowTiming> | <ShowTiming>1</ShowTiming> | ||||
| </CallStackStripe> | </CallStackStripe> | ||||
| <TermIOLog> | |||||
| <LoggingEnabled>_ 0</LoggingEnabled> | |||||
| <LogFile>_ ""</LogFile> | |||||
| </TermIOLog> | |||||
| <DisassembleMode> | |||||
| <mode>0</mode> | |||||
| </DisassembleMode> | |||||
| <Breakpoints2> | |||||
| <Count>0</Count> | |||||
| </Breakpoints2> | |||||
| <Aliases> | |||||
| <Count>0</Count> | |||||
| <SuppressDialog>0</SuppressDialog> | |||||
| </Aliases> | |||||
| </settings> | </settings> | ||||
| @@ -5,7 +5,7 @@ | |||||
| #include "modbus.h" | #include "modbus.h" | ||||
| extern OS_EVENT* ModbusWriteFlash; /*接收到modbus写入coil请求报文*/ | extern OS_EVENT* ModbusWriteFlash; /*接收到modbus写入coil请求报文*/ | ||||
| extern OS_EVENT* ModbusConnect; /*已接收到modbus正确报文*/ | |||||
| extern OS_EVENT* ModbusConnect; /*已接收到modbus正确报文*/ | |||||
| uint8_t ModbusErr; | uint8_t ModbusErr; | ||||
| /*0x270F + 1 = K10000 */ | /*0x270F + 1 = K10000 */ | ||||
| @@ -128,28 +128,30 @@ void AppTaskModbusParse (void *p_arg) | |||||
| rxLen = ModbusRxLen; | rxLen = ModbusRxLen; | ||||
| memcpy(rxBuf, ModbusRxBuf, rxLen); | memcpy(rxBuf, ModbusRxBuf, rxLen); | ||||
| /*拼接crc校验码(高前低后),接收到的数据帧crc校验码是低前高后*/ | |||||
| /*帧分解*/ | |||||
| frame.crc = ((uint16_t)(rxBuf[rxLen - 2])) | ((uint16_t)rxBuf[rxLen - 1] << 8); | frame.crc = ((uint16_t)(rxBuf[rxLen - 2])) | ((uint16_t)rxBuf[rxLen - 1] << 8); | ||||
| frame.slaveAddres = rxBuf[0]; | |||||
| frame.func = rxBuf[1]; | |||||
| frame.opeAddres = ((uint16_t)rxBuf[2] << 8) | ((uint16_t)rxBuf[3]); | |||||
| frame.opeNum = ((uint16_t)rxBuf[4] << 8) | ((uint16_t)rxBuf[5]); | |||||
| /*crc校验判断*/ | |||||
| if(ChcekCrc16(frame.crc, rxBuf, rxLen) != 0) | if(ChcekCrc16(frame.crc, rxBuf, rxLen) != 0) | ||||
| { | { | ||||
| /*crc校验错误,直接丢弃*/ | /*crc校验错误,直接丢弃*/ | ||||
| ModbusErr = ERR_CRC; | ModbusErr = ERR_CRC; | ||||
| continue; | continue; | ||||
| } | } | ||||
| frame.slaveAddres = rxBuf[0]; | |||||
| /*从机地址判断*/ | |||||
| if(frame.slaveAddres != SLAVE_ADDRES) | if(frame.slaveAddres != SLAVE_ADDRES) | ||||
| { | { | ||||
| /*从机地址错误,直接丢弃*/ | /*从机地址错误,直接丢弃*/ | ||||
| ModbusErr = ERR_SLAVE_ADDRES; | ModbusErr = ERR_SLAVE_ADDRES; | ||||
| continue; | continue; | ||||
| } | } | ||||
| /*释放正确接收信号量*/ | |||||
| OSSemPost(ModbusConnect); | OSSemPost(ModbusConnect); | ||||
| frame.func = rxBuf[1]; | |||||
| frame.opeAddres = ((uint16_t)rxBuf[2] << 8) | ((uint16_t)rxBuf[3]); | |||||
| frame.opeNum = ((uint16_t)rxBuf[4] << 8) | ((uint16_t)rxBuf[5]); | |||||
| /*功能码分类*/ | /*功能码分类*/ | ||||
| switch(frame.func) | switch(frame.func) | ||||
| { | { | ||||
| @@ -164,39 +166,23 @@ void AppTaskModbusParse (void *p_arg) | |||||
| case 0x0F:/*写多个线圈*/ | case 0x0F:/*写多个线圈*/ | ||||
| frame.wNum = rxBuf[6]; | frame.wNum = rxBuf[6]; | ||||
| memcpy(frame.wData, &rxBuf[7], frame.wNum); | memcpy(frame.wData, &rxBuf[7], frame.wNum); | ||||
| ModbusErr = ModbusWriteCoils(frame.opeAddres, frame.opeNum, frame.wData); | |||||
| if(ModbusErr == 0) | |||||
| { | |||||
| OSSemPost(ModbusWriteFlash); | |||||
| } | |||||
| ModbusErr = ModbusWriteCoils(frame.opeAddres, frame.opeNum, frame.wData); | |||||
| break; | break; | ||||
| case 0x10:/*写多个寄存器*/ | case 0x10:/*写多个寄存器*/ | ||||
| frame.wNum = rxBuf[6]; | frame.wNum = rxBuf[6]; | ||||
| memcpy(frame.wData, &rxBuf[7], frame.wNum); | memcpy(frame.wData, &rxBuf[7], frame.wNum); | ||||
| ModbusErr = ModbusWriteRegs(frame.opeAddres, frame.opeNum, frame.wData); | ModbusErr = ModbusWriteRegs(frame.opeAddres, frame.opeNum, frame.wData); | ||||
| if(ModbusErr == 0) | |||||
| { | |||||
| OSSemPost(ModbusWriteFlash); | |||||
| } | |||||
| break; | break; | ||||
| case 0x05:/*写单个线圈*/ | case 0x05:/*写单个线圈*/ | ||||
| memcpy(frame.wData, &rxBuf[4], 2); | memcpy(frame.wData, &rxBuf[4], 2); | ||||
| ModbusErr = ModbusWriteCoil(frame.opeAddres, frame.wData); | ModbusErr = ModbusWriteCoil(frame.opeAddres, frame.wData); | ||||
| if(ModbusErr == 0) | |||||
| { | |||||
| OSSemPost(ModbusWriteFlash); | |||||
| } | |||||
| break; | break; | ||||
| case 0x06:/*写单个寄存器*/ | case 0x06:/*写单个寄存器*/ | ||||
| memcpy(frame.wData, &rxBuf[4], 2); | memcpy(frame.wData, &rxBuf[4], 2); | ||||
| ModbusErr = ModbusWriteReg(frame.opeAddres, frame.wData); | ModbusErr = ModbusWriteReg(frame.opeAddres, frame.wData); | ||||
| if(ModbusErr == 0) | |||||
| { | |||||
| OSSemPost(ModbusWriteFlash); | |||||
| } | |||||
| break; | break; | ||||
| default:/*功能码错误*/ | default:/*功能码错误*/ | ||||
| @@ -205,15 +191,19 @@ void AppTaskModbusParse (void *p_arg) | |||||
| break; | break; | ||||
| } | } | ||||
| /*实现附加功能时不在这里启动发送*/ | /*实现附加功能时不在这里启动发送*/ | ||||
| if(frame.func == 0x03 && frame.opeAddres == 0XFFFF) | |||||
| { | |||||
| ; | |||||
| } | |||||
| if(frame.func == 0x03 && frame.opeAddres == 0XFFFF); | |||||
| else | else | ||||
| { | { | ||||
| /*启动发送*/ | |||||
| ModbusSend(ModbusTxBuf, ModbusTxLen); | ModbusSend(ModbusTxBuf, ModbusTxLen); | ||||
| } | } | ||||
| if(ModbusErr == 0 && (frame.func == 0x0F | |||||
| || frame.func == 0x10 | |||||
| || frame.func == 0x05 || frame.func == 0x06)) | |||||
| { | |||||
| /*释放写FLASH信号量*/ | |||||
| OSSemPost(ModbusWriteFlash); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||