gzlai 发表于 2023-2-19 13:47:36

通讯中遇到的问题

我在官方移植版中去掉了原来的各个任务,只建立了一个用户任务,通过485通讯,定时开启多台escalator设备,其中有个定义
unsigned char TURN_ON = { 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 = escalator_number;
                        crc = MODBUS_CRC16(TURN_ON, 9);
                        TURN_ON = (unsigned char)crc;
                        TURN_ON = (unsigned char)(crc >> 8);
                        for (i = 0; i < 11; i++)
                        {
                                TX3_Buffer = 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 = escalator_number;
                                crc = MODBUS_CRC16(TURN_ON, 9);
                                TURN_ON = (unsigned char)crc;
                                TURN_ON = (unsigned char)(crc >> 8);
                                for (i = 0; i < 11; i++)
                                {
                                        TX3_Buffer = 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();
                }
        }


从机截取的报文如下:



研究了半天没搞明白哪里出问题,请大佬门指导下,谢谢

梁工 发表于 2023-2-19 20:57:25

通信一堆二进制数据我们看不懂的,看着像是MODBUS-RTU协议,报文有什么问题?多点文字描述吧,我们不参与你的项目,是很难知道你的问题的。
页: [1]
查看完整版本: 通讯中遇到的问题