文章目录

  • 前言
  • 一、modbus_tk是什么?
  • 二、modbus_tk的使用步骤
  • 三、使用modscan测试
  • 四、32位无符号短整型数据转为64位float数据
  • 五、总结

前言

在做项目的时候,需要使用python来实时读取网线通过Modbus/TCP协议传输过来的数据。今天总结一下如何使用python来读取Modbus/TCP协议数据。先介绍需要使用的模块modbus_tk,再介绍如何使用modbus_tk、如何调试以及如何将读取的无符号短整型整数转化为64位的float类型数据(这一块网上只有文字过程描述,没有简明的python代码)。最后总结做项目的时候如何进行python+Modbus的部署。

一、modbus_tk是什么?

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。
modbus_tk是modbus的一个python模块包,它可以提供ModbusTCP和RTUIT的从机和主机的实施,有助于使用Python轻松创建Modbus应用。官网地址如下:https://pypi.org/project/modbus_tk/
modbus_tk可以使用简单的pip来安装:

pip install modbus_tk

二、modbus_tk的使用步骤

  1. import包
import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
  1. 配置
    假设数据传输的IP是192.168.10.101,端口使用505端口,那么相应的配置如下:
master = mt.TcpMaster("192.168.10.101",505)
master.set_timeout(5.0)
  1. 读取数据
    通过函数调用进行数据读取,每次需要读取数据的时候调用该函数,返回的是一个数组:
def data_collect():data_sam = master.execute(slave=1,function_code=md.READ_HOLDING_REGISTERS,starting_address=0,quantity_of_x=100,output_value=100)return data_sam

需要注意的是参数的选取:
初始地址 starting_address
读取的数据数量 quantity_of_x

三、使用modscan测试

使用下载的modbus测试软件,测试读取的数据是否正确,modscan的配置类似,需要注意的是模式要选择HOLDING REGISTER,下面是工控机上使用时拍的照片:


测试发现modbus数据已经通过网线传输到工控机了,可以用modbus_tk读取了,并且可以对比结果

四、32位无符号短整型数据转为64位float数据

modbusTCP传来的数据可能是32位的无符号短整型数据,而实际上这个数据代表的是64位的float数据(2个32位短整型数据代表一个64位float数据),因此我们需要使用程序来进行转换,转换的步骤网上有文字描述,但是没有落实在代码上,下面是博主为此写的代码:
先转为二进制

#无符号短整型数据转化为二级制表示
def ushort2bin(x):strx = str(bin(x))lens = len(strx)strx = strx[2:lens]lens = len(strx)a=np.zeros((16))for i in range(lens):a[16-i-1] = int(strx[lens-1-i])return a

计算指数

def cal_exp(x):sum_exp = 0for i in range(len(x)):tem = ma.pow(ma.pow(2,i),x[7-i])if x[7-i] == 0:tem = 0sum_exp = sum_exp + tem#print(tem)return sum_exp - 127

计算数据

def cal_data(ab,num_exp):data_s = 0for i in range(num_exp):tem = ma.pow(ma.pow(2,i),ab[8+num_exp-i])if ab[8+num_exp-i] == 0:tem = 0data_s = data_s + temdata_s = data_s + ma.pow(2,num_exp)return data_s

转换为64位float

def ushort2float(value1,value2):a = ushort2bin(value1)b = ushort2bin(value2)ab = np.zeros((32))for i in range(16):ab[i] = a[i]for i in range(16):ab[16+i] = b[i]if ab[0] == 0:flag = 1else:flag = 0num_exp = int(cal_exp(ab[1:9]))#print(num_exp)data = cal_data(ab,num_exp)if data < 1:data = 0return data

使用的时候只需要先读取传输的数据,然后调用ushort2float函数做转换即可:

data_sam = data_collect()
asu4 = ushort2float(data_sam[45],data_sam[44])

五、总结

在部署的过程中,我们首先要知道传输过来的数据代表的是哪些位点,然后使用modbus_tk来配置和读取,最后将读取的数据转化为相应的格式即可。

如何使用python读取modbus/TCP协议数据相关推荐

  1. Python 基于modbus tcp 协议 实现与plc通信

    仅作为本人学习记录分享:学习是一层窗户纸,没实现之前什么都会觉得困难.前后找了许多教程,c++.java等,最后选择了python来实现,希望本文可以让读者少走弯路. 实现结果:python程序作为c ...

  2. Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议)

    1.Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议),转化为后台需要的数据格式 2.调试工具:Modbus Poll  , 3. 所有端口配置为同一个,配置好本地和远程ip地址 ...

  3. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...

    M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...

  4. Modbus tcp协议学习总结

    Modbus=报文头(MBAP)+帧结构(PDU) 注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容.看这个章节的时候最好下载Modbus Slave(服务 ...

  5. Modbus和Modbus/TCP协议

    Modbus和Modbus/TCP协议 文章目录 Modbus和Modbus/TCP协议 一. 概述 二. 协议规范 (1) Modbus应用协议 (2)通用Modbus帧结构--协议数据单元(PDU ...

  6. C# modbus TCP协议应用

    C# modbus TCP协议应用 协议简介 Modbus由MODICON公司(现施耐德公司)于1979年开发,是一种工业现场总线协议标准.主要分为了RTU,ASCII,TCP三种协议类型.本文我们只 ...

  7. ModBus/TCP协议分析

    ModBus/TCP协议分析 一.术语 1 word = 2 byte; 1 byte = 8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性.代码作为数据在向计算 ...

  8. MODBUS TCP协议实例数据帧详细分析

    MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01:读线圈 3.2. 0x02:读 ...

  9. 在ROS上使用ModBus/Tcp协议控制机械手爪

    机械臂的控制原本使用的就是ROS进行的,奈何实验室机械臂上买的机械二指夹爪并不支持ROS平台,及没有对应的模型文件和控制的包,因此控制机械手爪就需要其他办法. 所使用的机械手爪为nGripper90, ...

最新文章

  1. Javascript创建数组的方式你了解了吗
  2. Eclipse相关问题总结
  3. 百度 Java 后端三轮面试题,这些你会吗?
  4. 推荐15个 JavaScript 和 CSS 库
  5. python anaconda安装不上_Anaconda3 2.4与python 3.5安装错误(程序条目未找到; Windows 10)...
  6. 大变革!苹果设计团队三名核心元老离职
  7. php inputcsv,php实现CSV文件导入和导出
  8. 梦笔记20211017
  9. java服务器 c 服务器_c 编写服务器
  10. mysql密码错误解决方法--windows和ubuntu18.04
  11. 如何让android的service一直在后台运行
  12. 任务调度Schedulerx2.0分布式计算之MapReduce模型
  13. 博弈的扩展式纳什均衡贝叶斯均衡是什么纳什均衡说明什么纳什均衡(Nash Equilibrium)
  14. 程序员埋逻辑炸弹,被判 6 个月
  15. 火山引擎:数字化时代,如何给金融业注入“内容活水”?
  16. 变分自编码器背后的直觉【VAE】
  17. 区块链技术在产品溯源领域的应用
  18. MySQL(DDL DML DQL DCL)
  19. MLX90640 红外热成像仪测温传感器 手机 APP 软件 RedEye 连接详细
  20. 【数据结构与算法基础】模式匹配问题与KMP算法

热门文章

  1. linux系统日志及其管理
  2. BT06串口蓝牙模块的配置以及与电脑的配对
  3. 基于Apache Curator框架的ZooKeeper基本用法详解
  4. 《安富莱嵌入式周报》第245期:2021.12.20--2021.12.26
  5. Fiddler爬取抓包(网页及小程序包)
  6. linux 运行QQ /Tim(超简单)
  7. lwip-SNMP移植
  8. Android jenkins 自动化打包
  9. 石头机器人拖地水量调节_用石头扫地机器人扫地拖地是一种什么体验
  10. MonsoonRF推出新型RFID读取器,安装难度和换灯泡差不多