文档章节

python Modbus基础

刘大神
 刘大神
发布于 2015/10/21 14:49
字数 1065
阅读 917
收藏 2

modbus 协议 数据格式

00 00 00 00 00 06 01 03 00 00 00 02     ascii码

第一位:事务处理标识符 由服务器复制,通常为0
第二位:事务处理标识符 由服务器复制,通常为0
第三位:协议标识符=0
第四位:协议标识符=0
第五位:长度字段 (上半部分字节) = 0 (所有的消息长度小于 256)
第六位:长度字段 (下半部分字节) = 后面字节的数量  这里的06表示  后面只有6个字节的数据
第七位:单元标识符 (原“从站地址”)
第八位:modbus的功能代码
第九位:寄存器的起始位置
第十位:寄存器的起始位置
第十一位:寄存器的个数
第十二位:寄存器的个数

modbus功能代码:
功能码 名称 作用 
  01 读取线圈状态 取得一组逻辑线圈的当前状态( ON/OFF)    
  02 读取输入状态 取得一组开关输入的当前状态( ON/OFF)    
  03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值    
  04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值    
  05 强置单线圈 强置一个逻辑线圈的通断状态    
  06 预置单寄存器 把具体二进值装入一个保持寄存器    
  07 读取异常状态 取得 8 个内部线圈的通断状态,这 8 个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态    
  08 回送诊断校验 把诊断校验报文送从机,以对通信处理进行评鉴    
  09 编程(只用于 484 ) 
   使主机模拟编程器作用,修改 PC 从机逻辑    
  10 控询(只用于 484 ) 
   可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码 9 的报文发送后,本功能码才发送    
  11 读取事件计数 
   可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时    
  12 读取通信事件记录 
   可是主机检索每台从机的 ModBus 事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误    
  13 编程( 184/384 484 584 ) 可使主机模拟编程器功能修改 PC 从机逻辑    
  14 探询( 184/384 484 584 ) 可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能 13 的报文发送后,本功能码才得发送    
  15 强置多线圈 强置一串连续逻辑线圈的通断    
  16 预置多寄存器 把具体的二进制值装入一串连续的保持寄存器    
  17 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态    
  18 ( 884 和 MICRO 84 ) 可使主机模拟编程功能,修改 PC 状态逻辑    
  19 重置通信链路 发生非可修改错误后,是从机复位于已知状态,可重置顺序字节    
  20 读取通用参数( 584L ) 显示扩展存储器文件中的数据信息    
  21 写入通用参数( 584L ) 把通用参数写入扩展存储文件,或修改之    
  22 ~ 64 保留作扩展功能备用       
  65 ~ 72 保留以备用户功能所用    留作用户功能的扩展编码    
  73 ~ 119 非法功能       
  120 ~ 127 保留 留作内部作用    
  128 ~ 255 保留 用于异常应答

实例程序(读取报文,解析报文):

 

import socket,struct
import binascii

Modbus="000000000006010300010002"
Modbus_16=b''

while Modbus:
    Modbus_16+=struct.pack("b",int(Modbus[0:2],16))
    Modbus=Modbus[2:]
print("16:")
print(Modbus_16)
s=socket.socket()
s.connect(("127.0.0.1",502))
try:
    s.send(Modbus_16)

    reply_16=s.recv(100)
    print(reply_16)        
except:
    reply_16=""
    s.close()
    s=socket.socket()    
reply_temp=""
reply=str(reply_16)
reply_temp=reply[4:]
mb=""
while reply_temp:
    mb+=reply_temp[0:2]
    reply_temp=reply_temp[4:]

print(mb);
strFont=mb[9:10]
print("bytes 5:"+strFont)
strLast=mb[11:12]
print("bytes 6:"+strLast)

s.close()

© 著作权归作者所有

刘大神
粉丝 8
博文 20
码字总数 16873
作品 0
朝阳
高级程序员
私信 提问
modbus_tk与Modubs Slave结合使用

下载两个软件: Modbus Slave/Poll Modbus Slave(用来模拟客户端(从))和Modbus Poll(用来模拟服务端(主)) Modbus Poll是非常流行的Modbus Master模拟器,用于测试和调试从设备。支持...

白话
2018/07/25
0
0
python socket 轻量级服务器

由于Python天生的优点,特别适用于快速实现功能。 #!/usr/bin/python2.7import sysimport timeimport socket import modbus import threadingimport selectclass thread(threading.Thread):d......

quanwei9958
2015/04/25
360
0
python 下的crc16计算模块 XCRC16

又一次突然遇到用python处理modbus通信而需要crc16校验的问题,当时在百度上没找到,在google上找到了一个外国人开发的python包,结果安装好了之后发现校验的不正确(可能是使用的模式串不一...

quanwei9958
2014/08/15
2.5K
0
ursim 3.10.0 URSim on Linux

ursim 3.10.0 URSim on Linux Installing the Universal Robots simulator software on Linux. The information on this page applies to software versions 3.3 and newer. The simulator h......

itfanr
06/24
199
0
5月28日云栖精选夜读丨阿里安全猎户座实验室:最新恶意软件VPNFilter的技术解析与防护建议

研究结果表明,VPNFilter是一个可扩展性强、有较好健壮性、高水平及非常危险的安全威胁,高度模块化的框架允许快速更改操作目标设备,同时为情报收集和寻找攻击平台提供支撑。VPNFilter破坏性...

yq传送门
2018/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
50分钟前
5
0
05.深入浅出索引(下)

在下面这个表T中,如果我们执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? mysql> create table T ( id int primary key, k int not null default...

scgaopan
昨天
6
0
设计模式-中介者模式

设计模式-中介者模式 定义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互 UML 组成部分主要包含 Mediat...

木本本
昨天
5
0
Python 周刊第 418 期

新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-2020.html2020年 Python 美国开发者大会,tips: 中国也有,可以赞助国内的...

iCodeBugs
昨天
5
0
ThreadLocal源码阅读

首先,从set方法入手, // ThreadLocalpublic void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t);//这里可以看出,从Threa......

小海bug
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部