我用我的modbus rtu写的轮询程序,两个写入线圈,一个读取保持寄存器40009即运行速度,监控时读的数正确,写入应该也是写入了,但是我实际运行时,run的时候两个电机一卡一顿,感觉像是指令被重复调用,导致指令冲突,然后我stop之后两个电机开始执行我的指令,向前运动50mm。




我用我的modbus rtu写的轮询程序,两个写入线圈,一个读取保持寄存器40009即运行速度,监控时读的数正确,写入应该也是写入了,但是我实际运行时,run的时候两个电机一卡一顿,感觉像是指令被重复调用,导致指令冲突,然后我stop之后两个电机开始执行我的指令,向前运动50mm。




关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
// 定义变量
VB0 字节用于存储通讯状态
V100 双字用于存储读取的速度值
V200 双字用于存储写入的控制值
// 主程序
Network 1
LD SM0.0
MOVB 0, VB0 // 初始化通讯状态为0
Network 2
LD SM0.0
CALL MBUS_CTRL, VB0, 1, 9600, 8, 1, 0, 0 // 初始化Modbus RTU通讯,波特率9600,数据位8,停止位1
Network 3
LD SM0.0
CALL MBUS_MSG, VB0, 1, 0, 0, 0, &VB200, 2, &VB300, 0 // 发送写入线圈指令,写入地址为0,数据为&VB200中的值,长度为2字节
Network 4
LD SM0.0
CALL MBUS_MSG, VB0, 0, 40009, 1, &V100, 4, &VB400, 0 // 发送读取保持寄存器指令,读取地址为40009,长度为4字节
Network 5
LD SM0.0
// 记录通讯状态
MOVB VB0, SMB34
// 记录读取的速度值
MOVD V100, SMB40
// 记录写入的控制值
MOVD &VB200, SMB50
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。