找回密码
 立即注册
查看: 1245|回复: 1

通讯中遇到的问题

[复制链接]
  • TA的每日心情
    奋斗
    13 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    12

    主题

    98

    回帖

    1394

    积分

    金牌会员

    积分
    1394
    发表于 2023-2-19 13:47:36 | 显示全部楼层 |阅读模式
    我在官方移植版中去掉了原来的各个任务,只建立了一个用户任务,通过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();
                    }
            }

    从机截取的报文如下:
    通讯中遇到的问题-1.png


    后面修改程序,想每次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();
                    }
            }


    从机截取的报文如下:
    通讯中遇到的问题-2.png


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

    使用道具 举报

    该用户从未签到

    45

    主题

    2841

    回帖

    6388

    积分

    超级版主

    积分
    6388
    发表于 2023-2-19 20:57:25 | 显示全部楼层
    通信一堆二进制数据我们看不懂的,看着像是MODBUS-RTU协议,报文有什么问题?多点文字描述吧,我们不参与你的项目,是很难知道你的问题的。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-19 22:01 , Processed in 0.057515 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表