- 打卡等级:以坛为家II
- 打卡总天数:449
- 最近打卡:2025-05-01 08:38:15
金牌会员
- 积分
- 1072
|
我在官方移植版中去掉了原来的各个任务,只建立了一个用户任务,通过485通讯,定时开启多台escalator设备,其中有个定义
unsigned char TURN_ON[11] = { 0x00,0x10,0x00,0x0B,0x00,0x01,0x02,0x00,0x01,0x00,0x00 }
刚开始在用户任务里如下编写程序,可以每次RTC中断时,从485发送开启1台escalator设备指令:
while (1)
{
if (B_Alarm)
{
B_Alarm = 0;
TURN_ON[0] = escalator_number;
crc = MODBUS_CRC16(TURN_ON, 9);
TURN_ON[9] = (unsigned char)crc;
TURN_ON[10] = (unsigned char)(crc >> 8);
for (i = 0; i < 11; i++)
{
TX3_Buffer[COM3.TX_write++] = TURN_ON;
if (COM3.TX_write >= COM_TX3_Lenth)
{
COM3.TX_write = 0;
}
}
if (!COM3.B_TX_busy)
{
RS485dir = 1;//RS485_dir设置为发送状态
COM3.B_TX_busy = 1;
S3TI = 1;
}
xTaskDelayUntil(&xlastwaketime, 50);
if (escalator_number < 10)
{
escalator_number++;
}
else
{
escalator_number = 1;
}
if (alarm_number < 9)
{
alarm_number++;
set_alarm();
}
else
{
alarm_number = 1;
set_alarm();
}
}
else
{
taskYIELD();
}
}
从机截取的报文如下:
后面修改程序,想每次RTC中断时,从485发送开启多台escalator设备指令,但是总是不成功:
while (1)
{
if (B_Alarm)
{
B_Alarm = 0;
for (escalator_number = 1; escalator_number < 10; escalator_number++)
{
TURN_ON[0] = escalator_number;
crc = MODBUS_CRC16(TURN_ON, 9);
TURN_ON[9] = (unsigned char)crc;
TURN_ON[10] = (unsigned char)(crc >> 8);
for (i = 0; i < 11; i++)
{
TX3_Buffer[COM3.TX_write++] = TURN_ON;
if (COM3.TX_write >= COM_TX3_Lenth)
{
COM3.TX_write = 0;
}
}
if (!COM3.B_TX_busy)
{
RS485dir = 1;
COM3.B_TX_busy = 1;
S3TI = 1;
}
xTaskDelayUntil(&xlastwaketime, 50);
}
if (alarm_number < 9)
{
alarm_number++;
set_alarm();
}
else
{
alarm_number = 1;
set_alarm();
}
}
else
{
taskYIELD();
}
}
从机截取的报文如下:
研究了半天没搞明白哪里出问题,请大佬门指导下,谢谢
|
|