Modbus库开发笔记之六:Modbus RTU Master开发

摘要:
我们将RTU主站的功能封装为功能,以便在开发特定应用程序时调用它们。对于RTU主站,我们主要实现两个功能:一个是生成访问RTU从站的命令,共支持8个功能代码。二是分析RTU从站点返回的信息,并根据结果执行各种操作。它还支持8个功能的操作。因此,对于RTU主站,必须首先生成访问服务器的命令。不同之处在于,不需要基于分析结果生成响应信息。

这一节我们来封装最后一种应用(Modbus RTU Master应用),RTU主站的开发与TCP客户端的开发是一致的。同样的我们也不是做具体的应用,而是实现RTU主站的基本功能。我们将RTU主站的功能封装为函数,以便在开发具体应用时调用。

对于RTU主站我们主要实现的功能有两个:其一是生成访问RTU从站的命令,总共支持8中功能码。其二是对RTU从站端返回的信息进行解析并根据结果进行各种操作,同样也是支持8中功能吗的操作。具体软件访问结构如下:

Modbus库开发笔记之六:Modbus RTU Master开发第1张

1、访问命令的生成

客户端作为主动交互端,需要向服务器发各种操作请求命令。所以对于RTU主站来说,首先要生成访问服务器的命令。生成命令只需要按标准的协议格式来生成即可,目前我们只支持前面提到的8个功能码。

/*生成访问从站的命令*/

uint16_t CreateAccessSlaveCommand(ObjAccessInfo objInfo,void *dataList,uint8_t *commandBytes)

这样在开发具体的客户端应用时只需要调用这个函数来生成访问服务器的命令就可以了。

2、响应信息的解析

如前一节所述,服务器收到命令后,根据命令进行处理并生成响应信息返回给客户端。客户端接到命令后首先要对响应信息进行解析,解析的过程其实与服务器端是一致的。所不同的是,不需要再根据解析结果生成响应信息了。

/*解析收到的从站相应信息*/

void ParsingSlaveRespondMessage(uint8_t *recievedMessage)

这样在开发客户端应用时,我们调用这一函数来解析响应信息就可以了。

3、响应处理

对于解析出来的信息,我们需要根据情况实现操作,比如修改变量的值等,应为主要支持的操作码是8个,理论上对应的每种功能码都会有不同的操作,但事实上,由于写操作命令已经不需要做任何操作了,所以对应的操作实际上只有读操作的4种功能码。

/*处理读从站状态量返回信息,读线圈状态位0x01功能码*/

static void HandleReadCoilStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*处理读从站状态量返回信息,读输入状态位0x02功能码*/

static void HandleReadInputStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*处理读从站寄存器值的返回信息,读保持寄存器0x03功能码)*/

static void HandleReadHoldingRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*处理读从站寄存器值的返回信息,读输入寄存器0x04功能码*/

static void HandleReadInputRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

同样的,我们也定义一个函数指针数组来实现这些函数的调用:

void (*HandleServerRespond[])(uint8_t *,uint16_t,uint16_t)={HandleReadCoilStatusRespond, HandleReadInputStatusRespond, HandleReadHoldingRegisterRespond, HandleReadInputRegisterRespond};

到这里,RTU主站的封装就完成了,当然具体的数据处理部分需要在开发具体应用是才能确定。

免责声明:文章转载自《Modbus库开发笔记之六:Modbus RTU Master开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇uniapp 跨域 报错提示 Access to XMLHttpRequest at使用John the Ripper破解sha512加密的shadow文件密码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Modbus库开发笔记之一:实现功能的基本设计

Modbus作为开放式的工业通讯协议,在各种工业设备中应用极其广泛。本人也使用Modbus通讯很多年了,或者用现成的,或者针对具体应用开发,一直以来都想要开发一个比较通用的协议栈能在后续的项目中复用,而不必每次都写一遍。现在利用项目研发的机会,开发一个自己的Modbus协议栈。 Modbus有国际标准,也有国家标准,内容是完全一样的。在标准钟支持2种物理链...

Modbus协议栈综合实例设计

  自我们开源了我们的Modbus协议栈之后,就一直有朋友来信说希望提供示例。这次我们整理了几个例子以供参考。 1、应用实例规划   在这次的实例中,我们使用的目标板拥有一个以太网接口、一个RS232串行接口和一个RS485串行接口,所以我们规划实现: 一个Modbus TCP Server实例 一个Modbus RTU Slave实例 一个Mo...

Modbus协议服务端(Netty)

pom.xml <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.0.21.Final...

RTU、DTU、工业网关三者有何区别

随着计算机与传感器技术的发展,能实现检测的数据在电脑上显示,再后来,以太网出现了,延伸了物理传输距离,伴随着 5G/4G/3G 网络、Wi-Fi、蓝牙、zigbee、lora等无线网络传输技术的出现,这么多技术?怎么办,网关能解决,网关能够适配更多协议标准,网关是一个翻译器,对收到的信息要重新打包,实现数据的转换。 举个更简单比喻来说明网关,你想从一个房间...

Modbus,看这个就行了

Modbus基础知识概念 Modbus通信协议由Modicon公司(现在的施耐德电气Schneider Electric)于1979年为可编程逻辑控制(即PLC)通信而发表。目前,Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议,与其他通信协议相比,有以下特点: Mo...

RS485通信和Modbus协议(转)

转自:http://www.51hei.com/bbs/dpj-23230-1.html     在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外,RS232接口只能实现点对点通信,不具备联网功能,...