modbus rtu和python,简单的工业使用
第一次使用心得总结:
1.工业产品的储存架构和逻辑:
首先工业产品,拿可编程式驱动器来说,它是有存储单元和运动单元来组成;
存储单元即由一系列寄存器来构成,存储内容分为固定参数空间、可设置参数空间和动作指令空间三种;
固定参数空间保存驱动器运行的一些固定参数,设置参数空间可以用来设置转速、扭矩、距离等一些参数,动作指令空间用来储存相应的指定动作;
如图所示,只需要我们通过电脑去修改驱动器中相应存储空间参数,驱动器自动读取和执行动作,理解了上面的图那我们剩下的问题只有如何和驱动器通讯交换信息修改对应存储空间内容;
2.电脑和驱动器的数据写入和读取方式(modbus协议)
电脑和驱动器怎么交互信息需要大家约定一个协议,即我们如何联系,就比如打电话要拨电话号一样,我们只需要在这个规则性完成指定动作就行了,使用modbus协议;通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括图上电脑设备等;典型的从设备可编程驱动器等;
modbus协议当今工业控制领域的通用通讯协议包括:
- 主设备(上位机)向从设备(驱动器)发送请求(执行读写内存寄存器操作);
- 从设备(驱动器)分析并处理主设备(上位机)的请求,然后向主设备发送结果(读取结果和读取状态值);
- 如果出现错误,从设备(驱动器)将返回一个异常码给主设备(上位机);
具体的报文格式和要求可参考此博客;
3.python实现modbus rtu协议通讯
python可以使用modbus_tk来进行通讯:
代码如下:
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
#port:串口号; baudrate:波特率
master = modbus_rtu.RtuMaster(serial.Serial(port="COM3",
baudrate=19200, bytesize=8, parity='N', stopbits=1))
master.set_timeout(5.0)
#测试首先使用读取测试,防止写入错误参数
#2为站点号slave;cst.READ_HOLDING_REGISTERS读取保持寄存器,1为读取的寄存器开始地址,8为读取寄存器的个数
master.execute(2, cst.READ_HOLDING_REGISTERS, 1, 8)
#写入操作当对动作指令寄存器写入对应动作参数,就会立刻进行执行动作