Przeglądaj źródła

删除一次性读取所有单数个寄存器功能

main
the_deepest 3 dni temu
rodzic
commit
c50fae554f
2 zmienionych plików z 798 dodań i 872 usunięć
  1. +796
    -798
      iar/uCOS_Modbus.dep
  2. +2
    -74
      modbus/modbus_parse.c

+ 796
- 798
iar/uCOS_Modbus.dep
Plik diff jest za duży
Wyświetl plik


+ 2
- 74
modbus/modbus_parse.c Wyświetl plik

@@ -108,12 +108,8 @@ void AppTaskModbusParse (void *p_arg)
ModbusErr = ModbusErrReply(frame.func, ERR_FUNC);
break;
}
/*实现附加功能时不在这里启动发送*/
if(frame.func == 0x03 && frame.opeAddres == 0XFFFF);
else
{
ModbusSend(ModbusTxBuf, ModbusTxLen);
}
/*发送响应帧*/
ModbusSend(ModbusTxBuf, ModbusTxLen);

if(ModbusErr == 0 && (frame.func == 0x0F || frame.func == 0x10
|| frame.func == 0x05 || frame.func == 0x06))
@@ -292,11 +288,6 @@ uint8_t ModbusReadRegs(uint16_t addres, uint16_t num)
ModbusTxBuf[3] = readValH;
ModbusTxBuf[4] = readValL;
}
/*附加功能:读取大量奇数寄存器*/
else if(addres == 0xFFFF && num == 1)
{
return ModbusExtReadOdd(ModbusExtOdd[0]);
}
else
{
for(uint16_t i = 0; i < num; i++)
@@ -492,69 +483,6 @@ uint8_t ModbusWriteReg(uint16_t addres, uint8_t *data)
}


uint8_t ModbusExtReadOdd(uint16_t num)
{
uint8_t i = 0;
uint8_t numJ = (num + 124) / 125;
uint8_t numI = num % 125;

uint8_t index;
uint16_t indexR;
uint8_t readValH;
uint8_t readValL;
uint8_t dataLen;

for(uint16_t j = 0; j < numJ; j++)
{
if(j == numJ - 1)
{
for(i = 0; i < numI; i++)
{
index = 3 + (i * 2);
indexR = j * 250 + 2 * i + 1;
/*将16位寄存器值拆分为两个8位*/
readValH = (uint8_t)(ModbusReg[indexR] >> 8);
readValL = (uint8_t)(ModbusReg[indexR] & 0x00FF);

ModbusTxBuf[index] = readValH;
ModbusTxBuf[index + 1] = readValL;
}
dataLen = 2 * numI;

ModbusTxBuf[0] = SLAVE_ADDRES;
ModbusTxBuf[1] = 0x03;
ModbusTxBuf[2] = dataLen;
AddCrc16(ModbusTxBuf, 3 + dataLen);
ModbusTxLen = 5 + dataLen;
}
else
{
for(i = 0; i < 125; i++)
{
index = 3 + (i * 2);
indexR = j * 250 + 2 * i + 1;
/*将16位寄存器值拆分为两个8位*/
readValH = (uint8_t)(ModbusReg[indexR] >> 8);
readValL = (uint8_t)(ModbusReg[indexR] & 0x00FF);

ModbusTxBuf[index] = readValH;
ModbusTxBuf[index + 1] = readValL;
}
dataLen = 250;

ModbusTxBuf[0] = SLAVE_ADDRES;
ModbusTxBuf[1] = 0x03;
ModbusTxBuf[2] = dataLen;
AddCrc16(ModbusTxBuf, 3 + dataLen);
ModbusTxLen = 5 + dataLen;
}
/*演示2ms*/
OSTimeDly(OS_TICKS_PER_SEC / 500);
ModbusSend(ModbusTxBuf, ModbusTxLen);
}
return 0;
}


uint8_t ModbusErrReply(uint8_t func, uint8_t err)
{


Ładowanie…
Anuluj
Zapisz