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