注:目前的开发只涉及 modbus master即 client端的开发,未涉及 slave端服务器的开发,slave服务器的设计,一般开发嵌入式设备作为数据采集器的时候用到,市面上有现成的slave数据采集器使用。

python封装的modbus库有这几个:

modbus_tk :完整modbus协议栈的实现,支持modbus tcp/RTU{1.提供slave模拟器,即模拟modbus server:502),  web-based hmi master支持}

pymodbus:使用twisted实现的modbus完整协议(支持异步通讯)

MinimalModbus :只支持modbus rtu

使用modbus tcp模式通讯是推荐modbus_tk库

==============================================================================

modbus master 为client,连接远程的slave来请求采集到的数据。

modbus slave 为 server ,监听502端口,一般slave为plc,plc为嵌入式设备从modbus网络上采集数据。master发送modbus协议数据请求salve获取数据。

1.连接到远程的slave(即modbus server的502端口服务器)

master = modbus_tcp.TcpMaster("192.168.2.20",502)

master.set_timeout(5.0)

2.进行调用modbus_tk库的接口,向slave请求采集的数据

类TcpMaster下有如下接口:

set_timeout(秒)

_send(modbus请求) modbus请求,即:需要自己封装modbus协议头和请求命令

_recv() 返回modbus协议数据

open()

close()

execute(slave,功能代码,开始地址,quantity_of_x=0,output_value=0,data_format="",指定长度=-1)//execute为线程安全函数

使用例子:

import modbus_tk.defines as de

master.execute(slave_id=1,de.READ_HOLDING_REGISTERS,100,3)

slave_id:1

slave_id : identifier of the slave. from 1 to 247.  0为广播所有的slave

功能代码:de.READ_HOLDING_REGISTE  定义见:defines.py

开始地址为: 100

quantity_of_x = 3 (寄存器或者线圈的数量)

output_value: (一个整数或者可迭代的值) 如:

output_value = 1或 54 或 output_value=[1,1,0,1,1,0,1,1] 或者 output_value = xrange(12)

返回的一个元祖类型的数据,返回的元祖取决于查询的功能码,参考详细的modbus协议说明书来构造data_format

modbus 功能代码: defines.py

#modbus 异常代码

ILLEGAL_FUNCTION = 1  功能代码不合法

ILLEGAL_DATA_ADDRESS = 2  数据地址不合法

ILLEGAL_DATA_VALUE = 3  数据值不合法

SLAVE_DEVICE_FAILURE = 4 slave设备失败

COMMAND_ACKNOWLEDGE = 5  命令已收到

SLAVE_DEVICE_BUSY = 6    slave设备忙

MEMORY_PARITY_ERROR = 8 内存奇偶误差

#supported modbus 功能代码

READ_COILS = 1 读线圈

READ_DISCRETE_INPUTS = 2 读离散输入

READ_HOLDING_REGISTERS = 3  【读乘法寄存器】

READ_INPUT_REGISTERS = 4  读输入寄存器

WRITE_SINGLE_COIL = 5  写单一线圈

WRITE_SINGLE_REGISTER = 6  写单一寄存器

WRITE_MULTIPLE_COILS = 15 写多个线圈 【强制多点线圈】

WRITE_MULTIPLE_REGISTERS = 16  写多寄存器 【写乘法寄存器】

#supported block types 支持的块类型

COILS = 1   线圈

DISCRETE_INPUTS = 2  离散输入(数字量输入)

HOLDING_REGISTERS = 3  乘法寄存器

ANALOG_INPUTS = 4 模拟量输入

下面这段话来自网络

The master uses function codes 5, 6, 15 & 16 to send data to the slave.Function code 5 allows the master to write a single coil (address 00001->) to the slave device

Function code 15 allows the master to write multiple coils (address 00001->) to the slave device

Function code 6 allows the master to write a single holding register (address 40001->) to the slave device

Function code 16 allows the master to write multiple holding registers (address 40001->) to the slave device

3.接下来的工作就是进行modbus协议的封装 和 对接受的modbus数据解析

用python采集modbus_python modbus_tk库学习记录相关推荐

  1. python modbus tk 库_python modbus_tk库 学习记录

    注:目前的开发只涉及 modbus master即 client端的开发,未涉及 slave端服务器的开发,slave服务器的设计,一般开发嵌入式设备作为数据采集器的时候用到,市面上有现成的slave ...

  2. Python文本词频率统计---学习记录

    目录 英文词频率统计 构建排除词库 对字典进行排序 中文词频率统计 jieba库 方法 英文词频率统计 统计英文词频的第一步是分解并提取英文文章的单词.同一个单词会存在大小写不同形式,但计数却不能区分 ...

  3. Python练习——Turtle库学习记录

    概述: turtle是Python标准库之一,能够进行基本的图形绘制 基本框架: 一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形.对于小海龟来说,有"前进"."后退& ...

  4. Python数据分析入门--SciPy库学习笔记

    文章目录 前言 Scipy库简单入门 1.cluster模块 2. constants模块 3. fftpack模块 4. integrate 模块 5. interpolate 模块 6. lina ...

  5. argparse库 学习记录

    初始化 始见参数 name or flags action nargs default type choices required help dest metavar 总结 继上次的optparser ...

  6. Python采集群人员数据,记录JavaScript逆向分析过程

     目录 前言 准备工作 分析(x0) 分析(x1) 分析(x2) 分析(x3) 代码 结语 前言 本人所有文章内容.源码,除官方企业外,禁止个人转载,谢谢配合. ....太多培训机构拿我的文章源码去讲 ...

  7. 用c++ 给易语言写支持库学习记录

    废话我就不对说 直接开始 易语言官方下载的易语言安装路径下 有一个SDK文件夹 我们点进入cpp文件夹里面提供是c++的SDK elib文件夹里就是sdk 我们新建一个win32项目 这里我用的是VS ...

  8. python 多次匹配_Python学习记录14

    print("#") import re # s = "哈哈2" res = re.search("[0-9]",s) print(res) ...

  9. fake库学习记录附实例

    之前领导叫我帮忙生成一组不重复的名字,我当时用的是random函数,脚本如下(抄自某网友) import random import timedef random_name():xing = '赵钱孙 ...

  10. python qcut_Python之Pandas库学习(三):数据处理

    1. 合并 可以将其理解为SQL中的JOIN操作,使用一个或多个键把多行数据结合在一起. 1.1. 简单合并 参数on表示合并依据的列,参数how表示用什么方式操作(默认是内连接). >> ...

最新文章

  1. tl-wn821n无线网卡驱动 linux,tl-wn821n win10驱动
  2. mysql流程控制_Mysql之流程控制结构
  3. js计算字典的个数_JS数据结构与算法_集合字典
  4. 无线路由器连接电信光纤宽带光猫设置方法(转)
  5. vue项目实现记住密码功能
  6. Java神鬼莫测之MyBatis多表操作延迟加载(四)
  7. 【锐捷】DHCP配置
  8. 上海python暑假培训班
  9. 3d touch android,苹果3DTouch好用?安卓这个功能不比它差!
  10. Vue.js 使用cordova camera插件调取相机
  11. java导出excel 复杂的 合并单元格
  12. [Extensive Reading]background modeling:MOG2
  13. 上海地铁票价涨幅对比 2005-9-15执行
  14. Mysql进阶四:常见函数-日期函数
  15. JAVA 循环语句 流程图
  16. 为什么持续改进值得吗?
  17. 工业数据采集网关怎么选?5G、4G、WIFI还是以太网?
  18. oralce trunc用法
  19. wps怎么导入xml文件_《WPS表格怎么导入XML数据?》 如何将excel导入wps表格数据
  20. WIN10系统打开“FIPS兼容”影响Wifi连接速度,关掉就好了。

热门文章

  1. UE4中实现鼠标单选空间中的模型、Ctrl键多选、空间打点框选功能。
  2. 房屋租赁合同主要内容是那些
  3. 觉得为时已晚的时候,恰恰是最早的时候。
  4. 旧瓶装新酒——memcache作为DRDOS反射放大器
  5. VScode透明主题
  6. python 预测分析_如何用Python来预测分析离职率呢
  7. Setting语言与输入法列表客制化
  8. 2022最新 Emlog新版导航源码 带用户中心
  9. 测试点击屏幕次数的软件_一款让安卓手机更好用的软件——fooView
  10. walsh64码 matlab,实验7 Walsh码及单用户CDMA系统直接序列扩频仿真