Modbus TCP客户端及其所访问的Modbus TCP服务器定义为通用的对象,而当我们在具体应用中使用时,再将其特例化为特定的客户端和服务器对象。
首先我们来考虑客户端,原则上我们规划的每一个客户端对象管理我们设备上的一个IP网段的设备。那么在一个特定客户端下,我们可以定义多达253个不同的服务器。
目的就是让协议栈支持,多客户端和多服务器,并且在不同客户端下可以访问同网段的多个服务器。接下来我们还需要考虑服务器对象。客户端对服务器的操作无非两类:读服务器信息和写服务器信息。
对于读服务器信息来说,客户端需要发送请求命令,等待服务器返回响应信息,然后客户端解析收到的信息并更新对应的参数值。因为返回的响应消息是没有对应的寄存器地址的,所以要想在解析的时候定位寄存器就必须知道发送的命令,为了便于分辨我们将命令存放在服务器对象中。
而对于写服务器操作,无论写的要求来自于哪里,对于协议栈来说肯定是其它的数据处理进程发过来的,所接到要求后我们需要记录是哪一个客户端管理的哪一个服务器的哪些参数。对于客户端我们不需要分辨,因为每个客户端都是独立的处理进程,但是对于服务器和参数我们就需要分辨。每一个客户端所管理的IP地址的最后一段为0到255,所以我们可以依据来分辨服务器端。而在每一个服务器节点中增加状态标志,用以记录请求状态,而所有服务器端组成链表。