大家好,本节主要介绍使用PLC实现modbus RTU通讯的两种常用方法,在电气工程师的工作中,此协议可以说是用的最多的了,不管是各种仪表、上位机、触摸屏等等均支持此协议。
本节就简单介绍下modbus RTU协议,大家最好从网上检索详细资料,理解此协议是使用PLC的最基本的要求,本节侧重给大家介绍最常使用的两种方法。
Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单。
modbus RTU主要包括以下格式:
1、报文一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,就像上面的一串数据。
2、CRC校验意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是010600010017加起来的值,然后它的算法就是加法)。作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。比如主机发出01 06 00 01 00 17 98 04,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。( **此步骤可以不用理解,大体知道即可** )
3、功能码意义:modbus 定义。( 很重要,重点学习下 )。
01 (0x01) 读线圈 相当于西门子PLC的Q点
02 (0x02) 读离散量输入 相当于西门子PLC的I点
03 (0x03) 读保持寄存器 相当于西门子PLC的V区
04(0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器
以下为本人经常用到的两种modbus RTU通讯程序,请大家根据个人需求理解:
方法一:
上面的程序逻辑为建立通讯主站,然后触发第一条通讯指令,使用第一条通讯指令的结束标志,作为下一条通讯指令的触发条件。其中通讯主站可以设置波特率、校验位、超时时间等,而下面的每一条指令可以设置读或者写,从站站号、从站地址以及读取数据后的存放位置。
方法二:
此方法原理与第一种方法是一样的,不过此方法只建立了一条读写指令,然后给此指令的各项值均定义为变量,配合计数器一起使用,当计数器为1时,赋予变量特定的值,计数器等于其他值时,再赋予其他的值,此种方法个人感觉虽然节省了程序结构,但是在理解和直观性上就差了不少,当然了具体使用哪种方法,需要根据现场的使用要求。
相信大家在稍微了解此协议的基础上,能够很容易的明白这几步程序多代表的意义,当然了,不理解的同学也可以私信我。
全部0条评论
快来发表一下你的评论吧 !