与多个IP通讯功能允许经由一个串口与多个不同IP地址上的多台设备服务器通讯
问题
串口设备连网后有时需要通过一个虚拟串口与多个IP地址上的设备进行通讯, 例如:
假设在RS485网络上有多个数据采集终端(图1),RS485总线通过485<->232转接器连接在电脑端的COM口, 电脑 上装有一个应用软件可以向终端发送指令,其中包含终端的网络地址,这样就可以和终端进行通讯。 RS485网络上的终端设备都会收到指令,但是只有与网络地址相匹配的终端设备才会回应命令。 这是控制多终端设备网络通讯常用的方法。电脑作为网络 "主控器",其他终端作为网络"被控制器"。

图 1. 常见 RS485 系统
现在假设要将这些数据采集终端连上网络,比如要通过TCP/IP网络来控制这些设备,最简单的方法就是将RS485总线连接到DS100串口设备服务器,在电脑端创建一个虚拟端口,应用程序通过虚拟串口和DS100与终端设备通讯(图2)。

图 2. 使用DS100和虚拟串口连接RS485系统和网络
可以使用这种方法。 但是这种方法只适合于终端设备之间距离较短的情况。 如果终端机之间的相互距离很远时, 那么RS485的网络连接就会很长,RS485系统与网络的连接 也就没有了意义!更好的解决方法就是将每个终端设备直接连接至一个DS100(图3). 这样的话就不需要进行RS485连接, 然而需要注意的是... ,每个DS100都需要一个单独的 IP地址。但是一个虚拟串口同时只能连接一个IP地址!所以要解决问题就需要创建和终端设备 同样多的虚拟串口。

Fig. 3. 直接连接终端设备至和TCP/IP网络
这种方法也比较麻烦,而且也不一定有效,因为大多数的软件包都不支持 通过多个串口同时进行通讯。所以就需要通过同一个虚拟串口与多个终端设备进行通讯。
解决办法
设备服务器工具包 Release 2.3版本推出的与多个IP通讯功能 可以帮您解决这一问题。与多个IP通讯功能允许经由一个虚拟串口和多个目的IP 通讯,可以根据应用软件发送的数据内容在多个Ip地址间进行切换。每个终端都会有一个 单独的IP地址, 然而在通讯时所有的终端就如仍然连接在RS485网络上一样。让我们以上面的一个终端网络为例来说明问题。
假设网络上有三台终端机,号码分别为1, 2, 3 (号码并不一定要连续)。 假设这几台终端机的协议使用以下命令结构(图4):
| STX |
Addr1 |
Addr2 |
Command contents |
CR |
图. 4. 在RS485主-从网络模式下的常用命令格式
在所有的通讯协议中,所有的命令都以STX (ASCII code 02Hex)开始,以CR (ASCII code 0DHex)结束。 并且 "压缩"字符(这该例子中就是STX 和 CR)不包含在命令体中,所以他们能 可靠的辨别每个命令的开始和结束。在STX后的头两个ASCII字符中包含终端机的网络地址 ,为ASCII格式(例如 "01" 即为选择终端机 #1, "02" 即为选择 终端机 #2 等等)。
启动与多个IP通讯的功能,虚拟串口可以过滤与网络地址相关的内容(在该例子中是STX+Addr1+Addr2 sub-string),并且自动切换目的Ip地址。sub-string 包含两个部分:一个固定 Prefix和一个可变Switcher. Prefix决定数据包的开始字符, 以便虚拟串口进行识别。在该例子中是STX字符。Switcher是跟在Prefix后的可变部分, 决定要进行通讯的终端设备。在这里Switcher 包含两个ASCII字符("00", "01",等)。
Prefix是固定部分,所以只能为虚拟串口定义一个string。Switcher是可变部分, 所以可以为一个虚拟串口定义许多个Switcher。每个Switcher都会有一个相应的目的Ip地址。IP地址 之间的转换关系储存在转换表中。每当虚拟串口侦测到应用程序发送的Prefix以及其后的Switcher, 虚拟串口就会开始向相应的Ip地址(根据转换表)发送数据。
例如图3的转换表应该包含三个Ip地址 (图 5)
| Switcher |
Destination IP-address |
|
"01" |
192.168.100.40 |
|
"02" |
192.168.100.41 |
|
"03" |
192.190.0.15 |
图. 5. 图 3中的三个终端设备的转换表
逐步设定多个Ip地址
现在为例子中的系统设定虚拟串口:
图. 6. 增加虚拟串口属性对话框
-
为新创建的虚拟端口选择端口号(例如, COM3), 如有必要,可启动 Send On-the-fly serial setting changes to Device Server ,选择与多个IP通讯模式
-
点击 Edit Multi-IP table- 目的IP-地址表窗口就会打开(图 7)
图. 7. 目的IP-地址表对话框
-
在该对话框的顶端可输入Prefix。由于Prefix包含"普通ASCII" 以及不可打印的ASCII, 所以有两个输入框。上边的一 个输入ASCII,下面的一个十六进制的ASCII码。要输入STX字符,您可以 将鼠标指向ASCII输入框, 按 (该组合键输入十六进制的ASCII code 02Hex, 即STX); 或将鼠标指向十六进制输入框,输入"02"。不管您在哪个框输入数据,另一个框中的数据都会发生相应的变化。
-
下表用于输入"switchover" 数据。我们有三个终端设备,所以表中有三个输入栏。 按添加按钮, 编辑IP Switch对话框就会打开(图8)
Fig. 8. Edit IP-switch dialog
-
对话框顶部有两个(now familiar)输入框,可输入ASCII 或HEX格式的Switcher string, 这里我们要输入的是数据就是"01"
-
接下来的两个输入栏用于输入可代替第一个的string。有时可能需要使用其他数据代替Switcher 数据。但是现在还不在我们的考虑之列,所以不需要填写Subst ID。
-
最后,您需要输入与终端设备#1相连的DS100的IP地址和数据端口号。 您可以将数据输入目的Ip地址输入栏中,或者点击选择目的DS,从列表中选择串口设备服务器。
-
点击OK,关闭对话框,添加另外两个线路到列表中(终端 #2和 #3)。最后的结果可能如图9所示。
图. 9. 进行相关安装,与例子中的三个终端通讯
具体操作
按照以上指示进行虚拟串口的安装,应用程序发送的数据会自动找到三个不同的Ip地址。图10为一个路径示例。最左边的一栏为应用程序使用虚拟串口发送的数据,第2,3,4栏为分别与串口设备(#1,#2,和#3)相连的DS100输出的数据 很重要的一点是Prefix + Switcher是怎样运行的。当Prefix sub-string的第一个字符被侦测时,虚拟串口停止数据发送,直到接收 到完整的Prefix + Switcher。因为Prefix是以下Switcher的一部分。在收到switcher和明确目的IP地址以前,Prefix不能被发送!
|
App. |
T #1 |
T #2 |
T #3 |
|
|
STX |
|
|
|
Start of prefix detected, start holding data |
|
"0" |
|
|
|
|
|
"1" |
STX "01" |
|
|
Switched to 192.168.100.40 (Terminal #1) |
|
"T" |
"T" |
|
|
|
|
"E" |
"E" |
|
|
|
|
"S" |
"S" |
|
|
|
|
"T" |
"T" |
|
|
|
|
CR |
CR |
|
|
|
|
STX |
|
|
|
Start of prefix detected, start holding data |
|
"0" |
|
|
|
|
|
"2" |
|
STX "02" |
|
Switched to 192.168.100.41 (Terminal #2) |
|
"A" |
|
"A" |
|
|
|
STX |
|
|
|
Start of prefix detected, start holding data |
|
"0" |
|
|
|
|
|
"3" |
|
|
STX "03" |
Switched to 192.190.0.15 (Terminal #3) |
|
"B" |
|
|
"B" |
|
|
"C" |
|
|
"C" |
|
图 10. 图3中三个终端机,多个IP通讯路径示例
还应注意的几点:
距离不是问题
与多个IP的功能允许通过一个虚拟端口建立一个虚拟网络。在物理上 DS100 (以及与其连接的串口设备)之间的距离没有限制。 然而应用程序仍然可以与串口设备通讯,与物理网络连接一样。