Modbus 创建客户端

Modbus 创建客户端,第1张

1创建一个 modbus_t 类型的 context
2建立连接
3设置超时时间:(这一步不一定需要)
4读写寄存器的值
5释放并关闭modbus
1创建一个modbus_t类型的context,用来打开串口:
2建立连接
3设置超时时间:
5读写寄存器的值
同 TCP/IP
示例1 TCP/IP
示例2 RTU
[reference]
[1] stuyou 使用libmodbus读传感器流程
[2] CUC_Tony Modbus RTU程序开发解读

1 下载qextserialport源码(自己可以百度搜索下载)。
2 如果是linux下的工程,将该压缩包中的posix_qextserialport,qextserialbase的cpp以及h文件加入到工程中,然后在工程中定义一个posix_qextserialport变量(假设变量名为RS232),即可对串口进行 *** 作。
3 若是在windows下,则将win_qextserialport,qextserialbase的cpp以及h文件加入到工程中。
4 找一个modbus标准协议,将 Modbus CRC的两个表格放在数组中供查询,该表格用于计算CRC校验值。一般 modbus协议规范中会附CRC的计算方法。
5 在通讯数据组织好后,计算其CRC校验值,放在组织好的通讯数据(假设通讯数据存放在TxData中)的最后,然后RS232->writeData(TxData,Count)。其中writeData是qextserialport定义的函数,Count是要写入的数据量。

响应时间一般为几百毫秒
当使用ModbusTCP通信时,可以根据结点的多少设置一下超时时间,默认可能为:3000ms(3秒)有点长。但modbustcp响应时间一般为几百毫秒。

modbus网关产品很多,使用方法也不一样。一般来讲,MODBUS网关,是用于将前端的非标准协议 转换为MODBUS协议,网关既可以做客户端,也可以做服务器端,通过参数设置进行设定。如果网关是服务器模式,需要对其设置一个IP和端口,中心组态或其他前端,通过客户端方式,与网关服务器的IP和端口建立连接,就能实现通讯。如果网关是客户端方式,需要设置服务器端的IP和端口指向,网关就会自动按照特定的IP和端口主动与服务器端建立连接,从而实现通讯。

Modbus 是由 Modicon(现为施耐德电气公司的一个品牌)在 1979
年发明的一种工业控制总线协议,是全球第一个真正用于工业现场的总线协议。Modbus
以其简单、健壮、开放而且不需要特许授权的特点,成为通用通信协议。为了适应以太网环境,Modbus 被封装在 TCP 包中,并且在默认情况下通过 TCP 协议的
502 端口进行传输。
基于 Modbus
协议的系统由带智能终端的可编程逻辑控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件,又包括软件。可应用于各种数据采集和过程监控。
Modbus 协议采用主 - 从结构,为客户机和服务器之间提供通信连接。
Modbus 协议定义了一个与基础通信无关的协议数据单元(Protocol Description Unit,PDU),描述协议的基本功能。PDU
属于应用数据单元(Application Data Unit,ADU)的一部分,除此之外,ADU
还包括附加地址域和差错校验域及实际传输的数据,这个数据可能是业务数据,也可能是指令、响应信息或报警信息等。
Modbus 协议包括 ASCII、RTU、TCP 三种报文类型,可以使用串口传输数据和指令。

自从 1979 年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信。Modbus 是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。Modbus应用层协议和服务规范主要包含两类:一类是串行链路上的Modbus(Modbus 串行链路取决于TIA/EIA 标准:232-F 和 485-A),另一类是TCP/IP 上的Modbus(Modbus TCP/IP 取决于IETF 标准:RFC793 和 RFC791 有关)。Modbus通信栈示意图如下所示:

Modbus协议允许在各种网络体系结构内进行简单通信,每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 Modbus协议来启动远程 *** 作。在基于串行链路和以太 TCP/IP 网络的 Modbus上可以进行相同通信,一些网关允许在几种使用 Modbus协议的总线或网络之间进行通信。Modbus网络体系结构的实例如下所示:

Modbus协议本质上和我们平时自定义的协议一致,就是一种数据传输格式,也是由起始帧、数据帧、校验帧等组成,只不过Modbus协议更为规范。

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上 的 Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域,通用Modbus帧协议如下图所示:

具体解析如下: 

地址域:子节点的地址信息;

功能码:指明服务器要执行的动作,有效的码字范围是十进制 1-255(128-255 为异常响应保留),当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种 *** 作(功能码内容较多,建议查阅Modbus协议说明手册,上面介绍的很清晰)。

数据:传输的数据内容,在某种请求中,数据可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息,功

能码仅说明 *** 作。

差错校验:验证收、发的数据是否正确。

如果在一个正确接收的 ModbusADU 中,不出现与请求Modbus功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 Modbus功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的 *** 作。Modbus事务处理的状态图如下所示:

一旦服务器处理请求,使用合适的 Modbus服务器事务建立 Modbus响应,根据处理结果,可以建立两种类型响应:

一个正确Modbus响应:响应功能码 = 请求功能码 ;

一个 Modbus异常响应:用来为客户机提供处理过程中与被发现的差错相关的信息,提供一个异常码来指示差错原因。响应功能码 = 请求功能码 + 0x80。

将上述图示分解理解,例如,客户机与服务器执行Modbus 通信协议,当服务器对客户机响应时,它使用功能码来指示正常(无差错)响应或者出现某种差错(称为异常响应)。

对于一个正常响应来说,服务器仅对原始功能码响应,Modbus事务处理(无差错)如下图所示:

对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑 1,Modbus事务处理(异常响应)如下图所示:
Modbus使用一个Big-Endian 表示地址和数据项。这意味着当发射多个字节时,首先发送最高有效位。例如:

寄存器    数据

0x4001  0x1234

发送的第一字节为 0x12,第一字节为0x34。

Modbus以一系列具有不同特征表格上的数据模型为基础,四个基本表格如下表所示:

对于基本表格中任何一项,协议都允许单个地选择 65536 个数据项,而且设计那些项的读写 *** 作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。

数据模型这个概念有限抽象,让我们通过以下两个示例加深理解。

示例1 :有 4 个独立块的设备

示例描述:一个设备中的数据结构,含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互独立。使用Modbus数据模型,按不同 Modbus功能码访问每个块,实现原理如下所示:

示例2:仅有 1 个块的设备

示例描述:一个设备仅有 1 个数据块,使用Modbus数据模型,通过几个Modbus功能码可能得到一个相同数据,或者通过 16 比特访问或 1 个访问比特,实现原理如下所示:

modbus tcp 没有主站、从站之分,但是有服务器(Server)与客户端(Client)之分:发出数据请求的一方为客户端(Client),做出数据应答的的一方为服务器(Server)。服务器(Server)与客户端(Client)分别类似于modbus rtu从站、主站的作用,但它们之间没有任何关系。

ModBus TCP 是一种通信协议:

一端是 服务器端,连接的另一端 就是 客户端,

主端 应该是 客户端,被动的从端 应该是服务器端。

扩展资料:

Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

大多数Modbus设备通信通过串口EIA-485物理层进行。

对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通信(serial communication)方式。

RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。

参考资料来源:百度百科-Modbus通讯协议


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13493899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-18
下一篇 2023-08-18

发表评论

登录后才能评论

评论列表(0条)

保存