输入寄存器的访问属性为只读

对输入寄存器的操作包括:读输入寄存器(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输入寄存器相关推荐

  1. Freemodbus 1.5

    源:http://blog.sina.com.cn/s/blog_4935209001012eax.html 网站位置:http://www.freemodbus.org/index.php?lang ...

  2. STM32F103/107 移植Freemodbus RTU

    1.简介 FreeMODBUS一个奥地利人写的Modbus协议.它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植.Modbus是一个工业制造环境中应用的一个通用协议.Modbus通 ...

  3. uip+freemodbus网络通信

    前言: TCP/IP协议通过uip协议栈来实现,应用层的modbus协议使用freemodbus来实现,另外还需要一个网卡(笔者使用的是KSZ8851网卡控制器)来实现底层的数据传输(包括物理层.数据 ...

  4. FreeModbus V1.6 主机

    FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要收费的.同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议 ...

  5. STM32 移植FreeModbus详细过程

    modbus是一个非常好的串口协议(当然也能用在网口上),它简洁.规范.强大.可以满足大部分的工业.嵌入式需求.我写的这个四个寄存器都可以用(输入寄存器.保持寄存器.线圈寄存器.离散寄存器).不像别的 ...

  6. freemodbus移植

    freemodbus下载地址:GitHub - cwalter-at/freemodbus: BSD licensed MODBUS RTU/ASCII and TCP slave freemodbu ...

  7. FreeModbus 移植笔记- 1-认识FreeModbus

    FreeModbus 移植笔记 目录 1 FreeMODBUS介绍 2 FreeMODBUS官网及源码下载地址 3 移植之前的准备 3.1 FreeModbus V1.6 ​​​​​​​3.2 Mod ...

  8. FreeModbus开源协议简介

    个人笔记,供个人查阅. 目录 FreeModbus软硬件需求 物理层接口 portserial.c porttimer.c 应用层回调 主函数 运行流程 功能码使用 Function Code:01, ...

  9. 7.RT-thread 项目实战--FreeModbus协议的移植

    在工控设备中,modbus协议是应用非常广泛的,所以我们的demo集成modbus,并通过modbus进行参数的设置及存储. 一.基于led的工程进行,modbus RTU功能的实现. 1.打开RT- ...

最新文章

  1. 数据结构实验之二叉树八:(中序后序)求二叉树的深度
  2. Java客户端操作zookeeper:创建永久节点和临时节点
  3. python的多线程threading_Python中多线程thread与threading的实现方法,pythonthreading
  4. 外媒称青客公寓计划赴美IPO 筹资1.5亿美元
  5. LIS 最长递增子序列问题
  6. SSH复用代码最终版
  7. 下载sqlserver2012 试用_大肥虫助手下载-大肥虫助手 安卓版v7.0.4
  8. XMPP tigase 8.0 与 strophe.js 测试Web聊天服务/即时通信
  9. Linux网络编程必学的TCP/IP协议——图解分层(通俗易懂)【建议新手收藏】
  10. WPS表格常用快捷键大全
  11. 基于PHP的定时交作业系统
  12. Linux内核调试方法总结
  13. 区块链游戏走出一地鸡毛,元宇宙3D国风链游或成最大受益者
  14. 360极速浏览器审查模式保存图片
  15. Ubuntu下最便捷好用微信、QQ(Wine-Tim Wine-QQ )没有之一
  16. 智能优化算法:遗传算法(GA)
  17. MySQL主从不一致的修复过程(r10笔记第96天)
  18. 研究生被导师嫌弃是种怎样的体验?写的太真实了...
  19. 2021年CS保研经历(一):北邮CS夏令营、北师大AI夏令营、天津大学CS夏令营
  20. VC++图片类型的识别(附源码)

热门文章

  1. Qt工作笔记- 解决cc1plus.exe: error: out of memory allocating
  2. mysql8.0.21.0 安装
  3. python dataframe 取每行的最大值,在python数据框中的每一行中查找最大值
  4. html css做网页总结,学习CSS制作网页总结的一些经验
  5. mysql 非自然月统计_MySQL性能优化 — 实践篇1
  6. shell中循环执行某个进程获取返回值,并循环执行直到函数出错
  7. ssh连接远程主机执行脚本的环境变量问题
  8. USACO-Section1.3 Dual Palindromes (进制转换和回文数)
  9. docker 设置国内镜像源(网易、ustc、中国科技大学、阿里云容器)
  10. 防止API被恶意调用,一般有哪些方法?