离散量输入的访问属性为只读

对离散量输入的操作包括:读离散量输入(0x02)

在一个远程设备中,使用该功能码读取离散量输入的1 至2000 连续状态。请求PDU 详细说明了起始地址,即指定的第一个输入地址和输入编号。从零开始寻址输入。因此寻址输入1-16 为0-15。根据数据域的每个比特将响应报文中的离散量输入分成为一个输入。指示状态为1= ON 和0=OFF。第一个数据字节的LSB(最低有效位)包括在询问中寻址的输入。其它输入依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。

如果返回的输入数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。字节数量域说明了数据的完整字节数。

读离散量输入状态图

/* 读离散量 */
eMBException eMBFuncReadDiscreteInputs(UCHAR *pucFrame, USHORT *usLen)
{USHORT usRegAddress;USHORT usDiscreteCnt;UCHAR ucNBytes;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++;/* 离散量数量 */usDiscreteCnt = (USHORT)(pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF] << 8);usDiscreteCnt |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF + 1]);/* 检查离散量数量是否合理 */if((usDiscreteCnt >= 1) &&(usDiscreteCnt < MB_PDU_FUNC_READ_DISCCNT_MAX)){/* 构建响应 *//* PDU指针 */pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF];/* PDU长度初始化为0 */*usLen = MB_PDU_FUNC_OFF;/* 功能码 */*pucFrameCur++ = MB_FUNC_READ_DISCRETE_INPUTS;*usLen += 1;/* 字节数 */if((usDiscreteCnt & 0x0007) != 0){ucNBytes = (UCHAR)(usDiscreteCnt / 8 + 1);}else{ucNBytes = (UCHAR)(usDiscreteCnt / 8);}*pucFrameCur++ = ucNBytes;*usLen += 1;/* 读取离散量值 */eRegStatus = eMBRegDiscreteCB(pucFrameCur, usRegAddress, usDiscreteCnt);/* 产生异常 */if(eRegStatus != MB_ENOERR){/* 错误转化为异常码 */eStatus = prveMBError2Exception(eRegStatus);}/* 未产生异常 */else{/* 数据长度 */*usLen += ucNBytes;;}}/* 离散量数量不合理 */else{/* 非法数据值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}}/* PDU长度不对 */else{/* 非法数据值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}return eStatus;
}

FreeModbus离散量输入相关推荐

  1. auot lisp 选择集处理_离散量的计算机处理64_1Cvs

    计算机语言运用--数值计算6-离散量的计算机处理64_1Cvs 计算机:电子线路组成的计算机器.人与计算机则是通过计算机语言-符号系统说给计算机听而交流. 计算机语言有低级语言-机器语言.汇编.高级语 ...

  2. auot lisp 选择集处理_离散量的计算机处理63_1Cv6

    计算机语言运用--数值计算6-离散量的计算机处理63_1Cv6 计算机:电子线路组成的计算机器.人与计算机则是通过计算机语言-符号系统说给计算机听而交流. 计算机语言有低级语言-机器语言.汇编.高级语 ...

  3. OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量

    关于 数学 的分支 - 线性变化量.离散量.随机量 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...

  4. TIA博途中如何设计报警功能块FB,来简化编写离散量报警程序的时间?

    TIA博途中如何设计报警功能块FB,来简化编写离散量报警程序的时间? 如何设计一个报警FB,来简化离散量报警的组态时间,这里介绍一种方法,即通过GetSymbolName指令来获取变量的名称,从而输出 ...

  5. plc开关量输入输出模块的选择

    ①开关输入模块的选择. 开关输入模块用于接收现场输入设备的开关信号,将信号转换为plc可接受的低压信号,实现PLC内外信号的电气隔离.选择时应考虑以下几个方面. ●输入信号的类型和电压等级开关输入模块 ...

  6. 8路开关量输入转RS-485/232,数据采集远程DI模块 WJ62

    产品特点: ● 八路开关量采集,隔离转换 RS-485/232输出 ● 输入每通道都采用了光电隔离 ● 通过RS-485/232接口可以读取每通道电平状态 ● 信号输入 / 输出之间隔离耐压3000V ...

  7. 松下服务器分频器输出信号与,松下A5伺服驱动器的开关量输入、输出端子定义...

    A5伺服驱动器的开关量输入.输出端子定义 松下A5伺服驱动器的开关量输入SI1~10.输出SO1~6有各自不同的参数需要定义,定义后的端子才能起作用. 1.开关量输入端子的参数设置.端子名称端子号对应 ...

  8. 无线数传采集 开关量输入输出模块 无线控制终端

    开关量无线测控终端 --关键词:无线开关量,无线控制,无线测控,开关量传输 产品简介: WPLC-S系列产品,即可用于点对点无线开关量状态采集,也可用于一 点对多点开关量采集,该产品采用标准MODBU ...

  9. HITECH海泰克触摸屏如何使用串口进行程序的下载和上传(拨码设置)以及离散量报警相关设定?

    HITECH海泰克触摸屏如何使用串口进行程序的下载和上传(拨码设置)以及离散量报警相关设定? 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 首先, ...

最新文章

  1. Linux 永久挂载(mount)
  2. .NET之全平台一体化的体验
  3. 云炬随笔20180607
  4. boost::log模块记录多个线程的示例
  5. C语言实现基数排序Radix sort算法之二(附完整源码)
  6. LiveVideoStackCon深圳 - 洞察多媒体技术生态趋势与机会
  7. Java技术回顾之JNDI--实例
  8. 矢量绘图设计工具:Sketch 79 for mac
  9. 嵌入式linux学习笔记(2)
  10. centos7安装tree命令
  11. java面试职业规划怎么回答,深入分析
  12. Python爬虫进行Web数据挖掘总结和分析
  13. 新学期个人作息时间安排
  14. Python数据存取详解
  15. 网站建设方案书怎么写,有规范有固定结构吗?
  16. 深度学习视频压缩3——M-LVC: Multiple Frames Prediction for Learned Video Compression
  17. matlab画红色爱心(心形图)
  18. from . import *
  19. select2如何清除选择项
  20. 省地市联动组件,java返回树状结构数据解决方案

热门文章

  1. 顺利通过2018年下工信部的软件设计师考试,在此感悟一下
  2. VS加快程序编译速度——以VS2013为例
  3. Qt|C++-最简单的OpenGL(变颜色的三角形)
  4. Cookiecutter
  5. linux中网络怎么检查,如何在Linux中检查以太网?
  6. java jdk最新版本是多少_Linux下一键安装java-jdk任意版本
  7. comparator 字符串比较大小_java – 如何使用Comparator比较空值?
  8. 怎么样简单快速的将pdf保存为图片--三部曲
  9. thrift中TNonblockingServer的简单用法
  10. centos 最简单的服务程序