FreeModbus输入寄存器
输入寄存器的访问属性为只读
对输入寄存器的操作包括:读输入寄存器(0x04)
在一个远程设备中,使用该功能码读取1 至大约125 的连续输入寄存器。请求PDU 说明了起始地址和寄存器数量。从零开始寻址寄存器。因此,寻址输入寄存器1-16 为0-15。
将响应报文中的寄存器数据分成每个寄存器为两字节,在每个字节中直接地调整二进制内容。对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。
读输入寄存器状态图
/* 读输入寄存器 */
eMBException eMBFuncReadInputRegister(UCHAR *pucFrame, USHORT *usLen)
{USHORT usRegAddress;USHORT usRegCount;UCHAR *pucFrameCur;eMBException eStatus = MB_EX_NONE;eMBErrorCode eRegStatus;/* 校验PDU长度是否合理 */if(*usLen == (MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN)){/* 寄存器地址 */usRegAddress = (USHORT)(pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8);usRegAddress |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1]);/* 第1个寄存器寻址为0,所以地址加一 */usRegAddress++;/* 寄存器数量 */usRegCount = (USHORT)(pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8);usRegCount |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1]);/* 检查寄存器数量是否合理 */if((usRegCount >= 1) && (usRegCount < MB_PDU_FUNC_READ_REGCNT_MAX)){/* 构建响应 *//* PDU指针 */pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF];/* PDU长度初始化为0 */*usLen = MB_PDU_FUNC_OFF;/* 功能码 */*pucFrameCur++ = MB_FUNC_READ_INPUT_REGISTER;*usLen += 1;/* 字节数 */*pucFrameCur++ = (UCHAR)(usRegCount * 2);*usLen += 1;/* 读取输入寄存器数据 */eRegStatus = eMBRegInputCB(pucFrameCur, usRegAddress, usRegCount);/* 产生异常 */if(eRegStatus != MB_ENOERR){/* 错误转化为异常码 */eStatus = prveMBError2Exception(eRegStatus);}/* 未产生异常 */else{/* 数据长度 */*usLen += usRegCount * 2;}}/* 寄存器数量不合理 */else{/* 非法数据值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}}/* PDU长度不对 */else{/* 非法数据值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}return eStatus;
}
FreeModbus输入寄存器相关推荐
- Freemodbus 1.5
源:http://blog.sina.com.cn/s/blog_4935209001012eax.html 网站位置:http://www.freemodbus.org/index.php?lang ...
- STM32F103/107 移植Freemodbus RTU
1.简介 FreeMODBUS一个奥地利人写的Modbus协议.它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植.Modbus是一个工业制造环境中应用的一个通用协议.Modbus通 ...
- uip+freemodbus网络通信
前言: TCP/IP协议通过uip协议栈来实现,应用层的modbus协议使用freemodbus来实现,另外还需要一个网卡(笔者使用的是KSZ8851网卡控制器)来实现底层的数据传输(包括物理层.数据 ...
- FreeModbus V1.6 主机
FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要收费的.同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议 ...
- STM32 移植FreeModbus详细过程
modbus是一个非常好的串口协议(当然也能用在网口上),它简洁.规范.强大.可以满足大部分的工业.嵌入式需求.我写的这个四个寄存器都可以用(输入寄存器.保持寄存器.线圈寄存器.离散寄存器).不像别的 ...
- freemodbus移植
freemodbus下载地址:GitHub - cwalter-at/freemodbus: BSD licensed MODBUS RTU/ASCII and TCP slave freemodbu ...
- FreeModbus 移植笔记- 1-认识FreeModbus
FreeModbus 移植笔记 目录 1 FreeMODBUS介绍 2 FreeMODBUS官网及源码下载地址 3 移植之前的准备 3.1 FreeModbus V1.6 3.2 Mod ...
- FreeModbus开源协议简介
个人笔记,供个人查阅. 目录 FreeModbus软硬件需求 物理层接口 portserial.c porttimer.c 应用层回调 主函数 运行流程 功能码使用 Function Code:01, ...
- 7.RT-thread 项目实战--FreeModbus协议的移植
在工控设备中,modbus协议是应用非常广泛的,所以我们的demo集成modbus,并通过modbus进行参数的设置及存储. 一.基于led的工程进行,modbus RTU功能的实现. 1.打开RT- ...
最新文章
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- Java客户端操作zookeeper:创建永久节点和临时节点
- python的多线程threading_Python中多线程thread与threading的实现方法,pythonthreading
- 外媒称青客公寓计划赴美IPO 筹资1.5亿美元
- LIS 最长递增子序列问题
- SSH复用代码最终版
- 下载sqlserver2012 试用_大肥虫助手下载-大肥虫助手 安卓版v7.0.4
- XMPP tigase 8.0 与 strophe.js 测试Web聊天服务/即时通信
- Linux网络编程必学的TCP/IP协议——图解分层(通俗易懂)【建议新手收藏】
- WPS表格常用快捷键大全
- 基于PHP的定时交作业系统
- Linux内核调试方法总结
- 区块链游戏走出一地鸡毛,元宇宙3D国风链游或成最大受益者
- 360极速浏览器审查模式保存图片
- Ubuntu下最便捷好用微信、QQ(Wine-Tim Wine-QQ )没有之一
- 智能优化算法:遗传算法(GA)
- MySQL主从不一致的修复过程(r10笔记第96天)
- 研究生被导师嫌弃是种怎样的体验?写的太真实了...
- 2021年CS保研经历(一):北邮CS夏令营、北师大AI夏令营、天津大学CS夏令营
- VC++图片类型的识别(附源码)
热门文章
- Qt工作笔记- 解决cc1plus.exe: error: out of memory allocating
- mysql8.0.21.0 安装
- python dataframe 取每行的最大值,在python数据框中的每一行中查找最大值
- html css做网页总结,学习CSS制作网页总结的一些经验
- mysql 非自然月统计_MySQL性能优化 — 实践篇1
- shell中循环执行某个进程获取返回值,并循环执行直到函数出错
- ssh连接远程主机执行脚本的环境变量问题
- USACO-Section1.3 Dual Palindromes (进制转换和回文数)
- docker 设置国内镜像源(网易、ustc、中国科技大学、阿里云容器)
- 防止API被恶意调用,一般有哪些方法?