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重新编辑 ]