1、项目背景:
工业采集设备支持ModbusRtu 协议,通讯端口为232串口 或485接口,上位机连接采集终端,不方便走线【串口线 、485总线】,利用现有网络,通过串口服务器进行连接。
实现方案:
1、虚拟串口,上位机通过串口直接采集数据,缺点:需要安装、开启虚拟串口程序,增加不稳定因素,且上位机为Linux系统的话不太好搞。
2、modbus_rtu_over_tcp,通过网络连接直接采集数据。不用加载虚拟串口,稳定性好,跨平台性强。
2、引入功能库:
modbus_tk
https://github.com/ljean/modbus-tk/文章来源:https://www.toymoban.com/news/detail-514556.html
3、代码实现:
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu_over_tcp
import struct
import os
import time
def main():
master_1=modbus_rtu_over_tcp.RtuOverTcpMaster('172.16.1.22', 8023) # 建立Modbus主机连接 串口服务器
master_1.set_timeout(5.0) #连接超时:5秒
while True:
try:
data=master_1.execute(1, cst.READ_INPUT_REGISTERS, 0, 2) #读 输入寄存器
print('读取 172.16.1.22:8023 串口服务器的数据')
print(data)
x=struct.unpack('>f',struct.pack('>I',(data[0]<<16)+data[1]))[0] # 两个 双字节无符号整数 转成 浮点数
x=round(x,2) #保留两位小数
print(x)
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
e=repr(traceback.format_exception(exc_type, exc_value, exc_traceback))
print('172.16.1.22 数据读取发生异常')
print(e)
time.sleep(60) #采集频率 一分钟一次
if __name__ == "__main__":
main()
4、运行效果:
文章来源地址https://www.toymoban.com/news/detail-514556.html
到了这里,关于Python3通过串口服务器读取设备Modbus数据【modbus_rtu_over_tcp】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!