基于python2.7安装pymodbus库--ubuntu16.04

对网络公开信息进行整合验证测试后的可行方案

版本介绍

python 2.3
pip 20.3.4
pymodbus 2.5.3

安装过程

1.会遇到的问题

pip版本过低

ubuntu16.04LTS(ubuntu18默认python3并内置pip,不会遇到这个问题)系统自带python分别为2.7和3.5两个版本,不做更改的情况下,默认调用2.7,这个时候我们直接pip安装pymodbus会提示pip版本过低。

终端运行:

curl 'https://bootstrap.pypa.io/pip/2.7/get-pip.py' > get-pip.py
sudo python get-pip.py

另外, 如果想针对python3.5更行安装对应pip,将2.7修改为3.5即可,如下:

curl 'https://bootstrap.pypa.io/pip/3.5/get-pip.py' > get-pip.py

sudo python get-pip.py

通过指令检查,有对应信息显示即可。

which pip  
pip            #或直接pip

2.安装pymodbus

解决掉1中的问题后,我们就可以顺利指令安装了。

pip install -U pymodbus
pip list                 #查询pymodbus安装情况和版本

在这里插入图片描述

测试

1.没有实际PLC硬件

可以利用pymodbus库来实现一个虚拟的服务端,代码中的ip和端口为虚拟服务端的信息,粘贴运行即可:

'''
 * @Author: liuzhao 
 * @Last Modified time: 2022-10-05 09:56:13 
'''

from pymodbus.server.sync import (
    StartTcpServer,
)
from pymodbus.datastore import (
    ModbusSequentialDataBlock,
    ModbusServerContext,
    ModbusSlaveContext,
)
from pymodbus.version import version

datablock = ModbusSequentialDataBlock.create()
context = ModbusSlaveContext(
    di=datablock,
    co=datablock,
    hr=datablock,
    ir=datablock,
    )
single = True

# Build data storage
store = ModbusServerContext(slaves=context, single=single)


if __name__ == '__main__':

	address = ("127.0.0.1", 8000)
	StartTcpServer(
	    context=store,  # Data storage
	    address=address,  # listen address
	  	allow_reuse_address=True,  # allow the reuse of an address
	)

终端运行该脚本,即开启了服务端:

python modbus_server.py

2.有实际PLC硬件

设置好与网口同一网段,才能正常连接,后面的测试代码按照实际硬件的IP和端口号设置就行,没什么特别的地方。

3.通讯测试

这里只展示了寄存器的写/读

from pymodbus.client.sync import ModbusTcpClient
from pymodbus.bit_read_message import ReadCoilsResponse
from pymodbus.register_read_message import ReadInputRegistersResponse
from pymodbus.exceptions import ConnectionException   
import time

host = '127.0.0.1'
port = 8000
client = ModbusTcpClient(host,port)
for i in range(0,10):    
    client.write_register(address=0+i,value=i)    #写入寄存器地址
    request = client.read_holding_registers(address=0+i,count=2)  #读取保持寄存器内的值
    result = request.getRegister(0)
    print('read_holding_registers ', result)

其他更完整的测试代码请参考python使用pymodbus库进行modbus tcp通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值