紫金桥软件不仅可以从外部的设备或程序采集数据到实时数据库,同时为了良好的开放性,也必须能够提供一些通用的外部接口,让其它的系统可以采集自己内部的数据。为了这一个目的,紫金桥系统提供了DDE和OPC等对外接口。但是这两种接口有一些缺点,那就是对客户端要求较高,一般来说只有复杂的软件系统才能够通过这两种接口采集紫金桥内部的数据。而很多相对简单的系统或功能比较固定的系统,却没有可以使用的数据接口。比如,一些简单程序、PLC或一些DCS等都要求能有一个相对简单的接口,来采集紫金桥内部的数据。Modbus服务器的出现,就解决了这类问题。
Modbus协议最早是莫迪康公司的PLC设备支持的一种协议,用于完成上位机与PLC设备的通讯过程。后来因为Modbus协议的通用性、可靠性,现在许多其它的仪表和各种控制系统也都使用此协议进行通讯。所以Modbus服务器出现后,紫金桥系统的开发性大大的提高了,很多仪表或控制系统都可以通过Modbus协议采集紫金桥系统的内部数据。
紫金桥的Modbus服务器从1.0开始到3.1版本,功能不断提升,但是都只能仿真一个Modbus设备的HR区域。新的紫金桥Modbus服务器为4.0版本,它无论在界面上,还是功能上都有了很大的提高。80%以上的代码都使用.NET开发工具进行了重写。现在紫金桥Modbus服务器已经可以把实时数据库中的数据映射为任意数量的Modbus设备的所有区域。
下面将介绍一下紫金桥新版Modbus服务器的一些特性。
- 紫金桥新版服务器是使用VC++.Net重新开发的,界面更加美观,使用更加方便。
- 紫金桥新版服务器可以同时支持多个地址的映射,也就是说可以把实时数据库中的数据一部分映射为地址1的Modbus设备,一部分映射为地址2的Modbus设备等等。
- 紫金桥新版服务器可以同时支持多种通讯介质的映射,比如以太网和串口。
- 紫金桥新版服务器可以同时映射Modbus设备的所有区域,包括DI、DO、HR和AR区。
- 紫金桥新版服务器可以同时映射多种数据格式,包括16位无符号数、16位有符号数、32位无符号数、32位有符号数和32位浮点数。
紫金桥新版服务器分为服务器的配置程序和运行程序,下面分别给于简单的介绍。
Modbus服务器的配置程序在紫金桥软件的安装目录中,名为ModbusSerSet.exe,运行时的界面如下图所示:
Modbus服务器运行的时候,把紫金桥的数据库点映射到Modbus中的寄存器区域中,运行时的逻辑结构如下所示:
使用Modbus服务器配置程序的工具条或菜单就可以定义通讯介质和通讯设备,如下图所示:
此工具条的前4个按钮是定义、修改或删除通道(也就是通讯介质)的,后三个按钮是进行设备相关操作的。
比如下图是定义串口通道的对话框:
下图是设备属性设置对话框:
当增加了一个设备之后,该设备就自动地拥有了4个区域,分别是DI、DO、AR、HR区域。它们和Modbus命令的对应关系如下表所示:
区域 |
对应的可以操作该区域的Modbus命令号 |
DI |
2号命令读取 |
DO |
1号命令读取,5号命令下置 |
AR |
4号命令读取 |
HR |
3号命令读取,6号命令下置一个地址,16号下置多个地址。 |
当定义完通道和设备之后就可以给设备增加寄存器了。
可以使用紫金桥Modbus服务器设置程序的右侧的、或来增加、修改或删除寄存器。
寄存器的属性对话框如下图所示:
当区域是DI或DO区域的时候,只可以选择开关量格式。当区域选择了AR或HR区域后,可以选择如下的数据格式:
数据格式 |
数据范围 |
占用地址个数 |
16位有符号数 |
-32768到32767 |
1 |
16位无符号数 |
0到65535 |
1 |
32位有符号数 |
-2147483648到2147483647 |
2 |
32位无符号数 |
0到4294967295 |
2 |
32位浮点数 |
1.4e-45 到 3.4e+38 |
2 |
在定义寄存器的过程中可能需要调整寄存器的排列,此时可以使用或来进行调整。
紫金桥Modbus服务器支持寄存器的批量导入导出功能,同老版本相比,导入导出的文件格式更加清晰易懂。
选择工具条,就可以把当前的内容导出为txt文件。
文件的格式如下面Excel表格所示:
意义如下:
第一列是通道名称,Com1表示通道是串口的,串口号为1,Net502表示通道是以太网,端口为502。
第二列是设备名称,Dev1表示设备的地址为1。
第三列是区域名称,可以为,DI、DO、AR、HR。
第四列是紫金桥数据库中的点名,注意需要包括参数名。
第五列是该寄存器的地址,从0开始。
第六列为数据格式,可以为BOOL、WORD等,对应关系见下表:
列内容 |
数据格式 |
数据范围 |
占地址个数 |
BOOL |
开关量 |
0或1 |
1 |
SHORT |
16位有符号数 |
-32768到32767 |
1 |
WORD |
16位无符号数 |
0到65535 |
1 |
INT |
32位有符号数 |
-2147483648到2147483647 |
2 |
DWORD |
32位无符号数 |
0到4294967295 |
2 |
FLOAT |
32位浮点数 |
1.4e-45 到 3.4e+38 |
2 |
通过Excel,结合紫金桥软件的点组态界面的导出到Excel编辑的功能,可以快速的生成此表格。然后使用批量导入功能,就可以迅速的创建大量的寄存器。
紫金桥的Modbus服务器运行程序在紫金桥软件的安装目录中,名称为ModbusServer.exe,运行时的界面如下图所示:
右侧是信息显示区,共有3个标签,它们的意义如下所示:
系统信息页面显示系统的总体的运行情况,包括显示的版本号,系统启动的时间,系统连接的数据库点个数,和数据库连接的情况,以及各个通道的运行状态。其中通道的运行状态中显示通道的打开情况,收发命令的字节数,各个设备处理的读写命令的个数。
寄存器浏览页面显示寄存器的详细信息,包括寄存器的当前数值。此页面中显示的寄存器是由左侧的导航树来指定的,通过在导航树上选择不同的位置,就可以更新此处显示的寄存器。
通讯信息页面,显示了当前的通道收发的具体的内容,可以根据此内容来诊断通讯的情况。它一次只能显示一个通道的通讯情况,可以通过在左侧导航树上切换选择的内容来更新此处显示的通道。
另外,缺省情况下,此处显示的通讯信息是自动向上滚动的,如果为了方便观察,可以把通讯的信息保存成文件,这可以通过选择菜单“文件”项下面的“保存通讯信息”命令来实现。
紫金桥新版的Modbus服务器的实际投用是在大庆的某水厂,当时需要从多个支持Modbus协议的PLC中采集数据。但是由于已经有系统通过GPRS同时采集这几个PLC中的数据,PLC的通讯通道已经被占用。而采集数据的系统采集的数据较少,也比较缓慢,同时很难找到系统的制作人员来对系统进行修改,所以也无法通过正在运行的系统得到数据。最后使用紫金桥新版的Modbus服务器圆满的解决了这个问题。
采取的方案是,紫金桥首先采用Modbus驱动从几个PLC中获得数据,然后通过新版的Modbus服务器完全仿真了原来系统采集的PLC的通讯环境,让原来的系统通过紫金桥新版的Modbus服务器来获得数据,由于新版Modbus服务器的灵活功能,使得原来的系统并不知道采集的已不是原来的几个PLC了,仍然可以稳定的获得数据。
使用紫金桥新版的Modbus服务器后,紫金桥系统获得了全面的实时变化的数据,同时原来的系统仍然可以稳定的获得所希望的数据,从而圆满的完成了任务。