Parcourir la source

代码结构略微更改

main
the_deepest il y a 5 jours
Parent
révision
c72fee9dc7
4 fichiers modifiés avec 61 ajouts et 68 suppressions
  1. +14
    -14
      iar/settings/F407_uCOSii_Modbus.wsdt
  2. +8
    -4
      iar/settings/uCOS_Modbus.dbgdt
  3. +19
    -20
      iar/settings/uCOS_Modbus.dnx
  4. +20
    -30
      modbus/modbus.c

+ 14
- 14
iar/settings/F407_uCOSii_Modbus.wsdt
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 8
- 4
iar/settings/uCOS_Modbus.dbgdt Voir le fichier

@@ -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>


+ 19
- 20
iar/settings/uCOS_Modbus.dnx Voir le fichier

@@ -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>

+ 20
- 30
modbus/modbus.c Voir le fichier

@@ -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);
}
}
}



Chargement…
Annuler
Enregistrer