在当今急剧发展的工业自动化和智能制作领域,对高效、、靠得住的通讯和谈的需要日益增长。。。Modbus,作为一个汗青悠久且宽泛选取的工业通讯和谈,表演着至关重要的角色。。。结合Python的壮大编程能力,我们能够越发矫捷和高效地实现工业自动化解决规划。。。
本篇文章将通过教程介绍若何利用Python与Modbus和谈进行通讯,以及若何在现实的工业环境中利用这些技术。。。

什么是Modbus???
Modbus 是一种宽泛使用的工业通讯和谈,由 Modicon Systems 开发。。。它选取主从架构,允许一个主设备(Master)与多达 247 个从设备(Slaves)进行通讯。。。
Modbus的类型
Modbus重要分为两种类型::
Modbus串行::使用串行线(如 RS232 或 RS485)进行通讯。。。
Modbus TCP/IP::基于以太网,克服了串行通讯的限度。。。
Modbus串行是使用串行电缆传输信号,若是以点对点方式衔接(一主一从),则将使用 RS232或RS422 电缆, 但若是以点对多点方式衔接。。。 (一主多从)使用RS485电缆,但由于串行电缆的很多限度,蕴含距离、、设置和数量,它此刻已经发展到可能支持使用Modbus TCP/IP通过以太网衔接。。。

在本次教程中,我们选择使用Modbus TCP,但是Modbus Serial也能够使用一样的代码进行测试。。。
筹备工作
为了起头使用Python与Modbus通讯,你必要::
1.装置pymodbus(能够使用pip或下载)
2.下载并设置Modbus从设备法式以进行测试。。。
尝试起头
使用 Python 作为服务器,modbus sim 作为客户端,你能够实现 Modbus 和谈的通讯。。。以下是尝试步骤::
from pymodbus.client.sync import (
ModbusSerialClient,
ModbusTcpClient,
ModbusTlsClient,
ModbusUdpClient,
)
from pymodbus.transaction import (
ModbusAsciiFramer,
ModbusBinaryFramer,
ModbusRtuFramer,
ModbusSocketFramer,
ModbusTlsFramer,
)
client = ModbusTcpClient(host='localhost',port=502,framer=ModbusSocketFramer)
def WriteData(slave_id,address,count,value):
client.write_registers(address,[value]*count,unit=slave_id)
def ReadData(slave_id,address,count):
x = client.read_holding_registers(address,count,unit = slave_id)
print(x.registers)
def ReadCoil(slave_id,address,count):
x = client.read_coils(address,count,unit=slave_id).bits
print(x)
def WriteCoil(slave_id,address,count,value):
if value == "ON":
status = True
else:
status = False
x = client.write_coils(address,[status]*count,unit=slave_id)
# print(x)
def WriteString(slave_id,address,count,value):
client.write_registers(address,[0]*count,unit=slave_id)
if len(value)%2 > 0:
value = value + " "
c = len(value)//2
for i in range(c):
y = value[0 + (2*i):2 + (2*i)]
print(y)
q = [ hex(ord(r))[2:4] for r in y]
print(q)
k = int(q[0]+q[1],16)
client.write_registers(address+i,k,unit=slave_id)
print(client.connect())
# WriteData(1,0,2,555)
# WriteCoil(1,0,8,"ON")
# ReadData(1,0,8)
# ReadCoil(1,0,8)
# WriteString(1,0,8,"banana")
从代码中能够看出,能够通过更改客户端和成帧器来更改为使用串行或 TCP。。。
打开modbus从站法式并进入设置并选择Modbus TCP/IP。。。

选择模式为 Modbus TCP

Slavev id 和地址类型能够从 setup -> Slavev 界说中设置
尝试使用WriteData (2,0,2,555)号令,其中前2个数字是slave_id,0是默认数据,2是要使用的数字,555是按运行后将发送的数据。。。

从机 ID 2 在地址 1 和 2 处的值为 555
若是使用 WriteCoil(3,0,3,”ON”),将在线圈输出存储器中号令一个打开或关闭位,其中0是初始位,3是要使用的编号,on是要打开的号令。。。

从机 ID 3 的线圈位于地址 1,2,3
能够使用其他读取地址号令尝试使用已写入的函数。。。

尝试读取从站3的值
通过测试,我们能够看到,仅仅通过这段代码就可能通过Modbus和谈进行通讯。。。你应该已经对Modbus和谈及其在工业自动化中的利用有了更清澈的理解。。。

Python作为一种高效矫捷的编程说话,与Modbus和谈结合,为工业节制系统的设计和执行提供了无限可能。。。无论你是工业自动化领域的新手,还是经验丰硕的专业人士,把握Python与Modbus的通讯技术都将极大提升工作效能和系统的智能化水平,助你在工业自动化的路线上走得更远。。。