MODBUS-寄存器与功能码学习
来源:互联网 发布:php通过ip获取经纬度 编辑:程序博客网 时间:2024/05/21 19:00
MODBUS-寄存器与功能码学习
分类
简称
起始地址
结束地址
能够使用的功能码
输出逻辑线圈/(可读写位)/(DI/O)(如继电器开关控制)
0x
00000
09999
0x01读一组逻辑线圈
0x05写单个线圈
0x0f写多个线圈
触点/开关量输入/只读位(DI)如按键是否按下
1x
10000
19999
0x02读一组开关输入
输入寄存器(AI)实时数据如AD采集数据。
3x
30000
39999
0x04读一个或多个输入寄存器
保持寄存器(AI/O)
如设置的各种参数
4x
40000
49999
0x03读一个或多个保持寄存器的值
0X06写单个保持寄存器
0X10写多个保持寄存器
0x01: 读一组逻辑线圈,如读8个继电器输出状态。
0x0F: 写一组逻辑线圈。如同时控制8个继电器
0x05: 写单个逻辑线圈,如设定单个继电器
0x02: 读一组开关量的输入,如读显示板是否有按键按下、水流开关的状态。
0x03: 读一个或多个保持寄存器,如读一个或多个设置参数
0x010: 写一个或多个保持寄存器,如写设置参数
0x06: 写单个保持寄存器,如写单个设置参数
0x04: 读一个或多个输入寄存器,如读具体的按键值,AD采集的信息等
modbus协议功能码和常见问题
Pasted from <http://blog.csdn.net/educast/article/details/8159510
1单片机开发与PLC开发的异同:
MODBUS协议是专门针对485总线设备(例PLC)开发,寄存器的定义要严格按照其地址范围;功能码的功能定义及定义的寄存器地址与功能码的使用要要严格符合。如上图。
而当单片机开发用串口点对点,可能不会完全遵守MODBUS协议具体体现在2方面:
首先是定义的寄存器地址范围,应结合不同单片机RAM的大小和项目得实际需求定义起始范围和大小。方法如在RAM区的不同区域定义不同功能的数组:
IOX[N]:输出线圈,用来进行继电器的操作
IX[M]:开关输入 ,用于识别按键是否按下的查询。
其它:功能码的使用也不会严格限定在指定的PLC地址范围。
2modbus寄存器的地址说明:
有两套规则,一套称为PLC地址,为5位十进制数,例如40001,PLC地址40001意味着该参数类型为保持寄存器。另一套是协议地址,协议地址为0x0000,这里面有对应关系,去掉PLC地址的最高位,然后剩下的减1即可。这会存在一个问题,PLC地址30002和PLC地址40002的协议地址同为0x0001,此时访问时是不是会冲突呢。亲们,当然不会了,30001为输入寄存器,需要使用04指令访问,而40001为保持寄存器,可以使用03、06和16指令访问。注意定义的寄存器地址像数组一样都是从0开始的,即通讯中的地址比实际地址小“1”
http://blog.sina.com.cn/s/blog_6ab9638f0100vqol.html
3线圈寄存器:就是可以单独进行位控制的BITS寄存器,类似C51的位带结构体
Typedef struct
{
Bit:0
Bit:1
..
Bit:14
Bit:15
}COIL_REG
http://blog.sina.com.cn/s/blog_598b27cd0101rphm.html
4modbus帧结构:
ADU:应用数据单元
PUD:协议数据单元
freemodbus中如何判断帧结束
modbus协议中没有明显的开始符和结束符,而是通过帧与帧之间的间隔时间T3.5来判断的。超过T3.5就认为收到了新的帧。接下来就可
以处理数据了,首当其冲的就是判断帧的合法性。Modbus通过时间来判断帧是否接受完成,自然需要单片机中的定时器配合。
使用串口发送完成中断:避免丢失最后一个字节内容
- MODBUS-寄存器与功能码学习
- Modbus功能码与数据类型
- Modbus功能码与数据类型
- Modbus名词解释(功能码、输入保持寄存器、数据地址、错误代码)
- 寄存器PLC地址与寄存器modbus协议地址
- ModBus常用功能码
- modbus功能码简述
- modbus 功能码
- Modbus功能码
- Modbus 功能码解析
- ModBus常用功能码
- Modbus功能码一览
- Modbus支持的功能码
- Modbus支持的功能码
- modbus功能码及格式
- Modbus协议寄存器操作
- modbus协议功能码和常见问题
- Modbus通讯 功能码及实例
- 30岁程序员困境:转行or跳槽?如何做才不会被替代?
- 经典游戏——贪吃蛇
- 复杂json转list
- ThinkPHP数据分页带入查询条件
- 从零开始学_JavaScript_系列(64)——class的继承(1)基本概念、继承构造函数和class
- MODBUS-寄存器与功能码学习
- 黄海高程和海拔高程之间的转换
- Java中常用数据结构
- android常见二维码,普通二维码,带Logo的二维码
- Android框架之路——Banner实现轮播图(RecyclerView添加Header)
- Transitions-Everywhere
- Dom4j解析XML文件子节点
- TP5分页使用方法,在使用paginate(10)后无法foreach得到的数据集合
- 关于性能优化之空间时间可靠性的辩证关系思考