wenliang
擡頭白雲悠悠,前竟一片黯愁……
级别: 家园常客
精华主题: 0
发帖数量: 695 个
工控威望: 883 点
下载积分: 42959 分
在线时间: 530(小时)
注册时间: 2014-04-04
最后登录: 2024-04-22
查看wenliang的 主题 / 回贴
楼主  发表于: 2021-12-01 08:49
请问各位大师三菱MODBUS通讯,现在问题是PC发送一条数据给PLC,当PLC收到数据时M8123动作、而且马上回复PC已经收到指令,但是现连机讯运行时偶而会出现PC发送数据给PLC、而PLC收到后并没有回复PC,现在用串口软件来测试也是一样的情况,PC轮询指令间隔时间160MS,轮询N多条指令后就会出现PLC少回复的情况,另外也问过三菱客户了,说是把D8129超时改成1也没有用,不知道各位大师有什么高见,烦请多多指点一下,在此谢过了!!!


  
[ 此帖被wenliang在2021-12-01 09:32重新编辑 ]
zhangqi_1234
级别: 略有小成
精华主题: 0
发帖数量: 336 个
工控威望: 487 点
下载积分: 4001 分
在线时间: 245(小时)
注册时间: 2013-03-22
最后登录: 2024-04-28
查看zhangqi_1234的 主题 / 回贴
1楼  发表于: 2021-12-04 00:02
MODBUS通信中,主站发起通信请求,从站被动响应;从站不会主动发起通信请求。从你的例子中看出,你把PLC作为主站,PC机作为从站。
1、PLC使用RS指令的目的是,指定数据发送区和接收区。
2、PLC用边沿触发指令使M8122置1,M8122置1后PLC会自动把数据发送区的数据(通信报文)通过串口顺序发送出去,用于发起对指定从站的通信请求。数据发送完毕后,M8122自动复位。因此通常用上升沿指令接[SET M8122],一般不用M8122作其它事情。另外,发送的通信报文,要包含CRC校验码,需要使用CRC校验码指令,并同时使M8161置1。
3、从站收到主站的通信请求,检查通信报文是否符合MODBUS协议,如果不符合协议要求,会向主站发送错误代码,但有些错误不会回复任何数据,例如CRC校验码错误。如果通信报文符合MODBUS协议,从站响应主站请求,执行主站的请求,并发送应答的通信报文。这个应答的通信报文会存储在RS指令指定的数据接收区中。
4、PLC作为主站接收完从站回复的数据后,M8123置1,M8123需要手动复位,为下一次接收数据做准备。PLC的M8123置1表示是主站接收完从站的回复数据,根据MODBUS通信协议,主站不会发送数据告诉从站,收到了回复数据。主站发送数据给从站,是向从站发起通信请求。

5、如果是PC机作为主站,PLC作为从站。则PLC既不需要使用RS指令,也不需要使用M8122和M8123,而是要设置一些参数,指定站号、通信速率、通信接口、MODBUS存储器(线圈、输入位元件、输入寄存器、保持寄存器)寻址等。

6、FX3U配备FX3U-385ADP-MB适配器作为主站,不使用RS指令、CRC校验码指令和M8122、M8123,而是使用ADPRW指令。7、FX3U的通信参数设置不使用D8120,如果用FX3U-485-BD,则是使用D8400、D8401、D8409-D8416。FX3G没使用过,不清楚是用D8400、还是D8120。
[ 此帖被zhangqi_1234在2021-12-04 00:17重新编辑 ]