发明内容
本发明的目的是提供一种基于OPC实现两种不同协议系统通信的接口方法,该方法以OPC技术为桥梁,填补作为MODBUS TCP客户端的系统与其他协议系统进行数据交互的技术缺口,并实现标准化的软件接口通信。
为实现上述目的,本发明提供了一种基于OPC实现两种不同协议系统通信的接口方法,其中两种协议的系统分别为作为MODBUS TCP客户端的系统与其他协议的系统,包括:
(1)启动软件狗以启动并监听OMT接口软件主程序;
(2)载入配置文件;
(3)建立MODBUS TCP客户端与其他协议系统的通讯站及OPC服务器的连接;
(4)开辟第一线程建立MODBUS侦听服务,解析来自MODBUS TCP客户端的MODBUSTCP报文包以获取通信数据,并将此数据存入主程序预置的公共变量区;
(5)主程序成功连接OPC服务器后,再开辟第二线程以供OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组,并将OPCItemExtender读取组中的数据存储到主程序预设公共变量区;同时开辟第三线程以供OPC服务器异步地将所述公共变量区中的最新的实时性数据写入OPCItemExtender写入组。
与现有技术相比,本发明的方法先建立MODBUS TCP客户端与其他协议系统的通讯站及OPC服务器的连接,开辟第一线程建立MODBUS侦听服务以将客户端数据存入预置的公共变量区,主程序成功连接OPC服务器后,再开辟第二线程供OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组,并进一步地将其写入公共变量区,同时开辟第三线程供OPC服务器异步地将公共变量区中的客户端数据写入OPCItemExtender写入组中,这样,不论是作为MODBUS TCP客户端的系统还是其他协议系统的数据都可被存储于公共变量区内,作为MODBUS TCP客户端的系统可从公共变量区中获取其他协议系统的数据,其他协议系统也可从公共变量区中获取客户端数据,从而实现了两种不同协议系统的数据的交互;该数据交互过程借助了OPC技术作为桥梁(使用了OPC服务器进行数据的读取和写入),填补了作为MODBUS TCP客户端的系统与其他协议系统进行数据交互的技术缺口,利用了OPC技术的特点,实现了标准化的软件接口通信。
具体地,步骤(4)具体包括:
(41)在预先设置的IP连接的502端口上启动MODBUS侦听服务,监听客户端的MODBUS指令;
(42)根据该MODBUS指令接收来自客户端的MODBUS TCP报文包;
(43)判断是否超时接收MODBUS TCP报文包或出现丢包或错包,若超时或丢包或错包,断开与客户端的连接、释放资源,并重启第一线程;
(44)解析正确的MODBUS TCP报文包以得到功能码及所述客户端的通信数据;
(45)根据对应功能码将客户端通信数据写入公共变量区或读取所述公共变量区中对应变量的实时数据,并通过MODBUS TCP报文包回复给MODBUS TCP客户端。
具体地,步骤(45)具体包括:
当功能码为15、16时,将客户端数据写入公共变量区;
当功能码为1、3时,读取公共变量区中对应变量的实时数据。
较佳地,执行步骤(45)之后还包括:
判断是否成功写入或读取;
成功时,发送回复指令至所述OMT接口软件主程序,反之,记录错误,弹出报警窗口,10秒钟后,强制终止连接,关闭OMT主程序,并自动重新启动OMT主程序。
具体地,开辟第二线程以供OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组,并将OPCItemExtender读取组中的数据存储到主程序预设的公共变量区具体包括:
(51)根据配置文件中的通讯变量的配置创建相关的OPC服务器IO对象;
(52)判断主程序与OPC服务器连接的状态,如连接正常继续下面步骤;
(53)OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组中,并与OMT接口软件主程序通信;
(54)将OPCItemExtender读取组中的数据写入公共变量区;
(55)判断是否成功写入;
(56)若成功,则返回步骤(53),反之,则记录错误并重新连接所述OPC服务器。
具体的,同时开辟第三线程以供OPC服务器异步地将所述公共变量区中的所述最新的实时性数据写入OPCItemExtender写入组中具体包括:
(61)根据配置文件中的通讯变量的配置创建相关的OPC服务器IO对象;
(62)判断主程序与OPC服务器连接的状态,如连接正常继续下面步骤;
(63)比较当前所述公共变量区中所述客户端数据是否与所述OPCItemExtender写入组中的一致;
(64)当不一致时,将所述客户端数据写入所述OPCItemExtender写入组,反之,保持所述OPCItemExtender写入组中的数据不变;
(65)判断是否成功写入;
(66)若成功,则返回步骤(63),反之,则记录错误并重新连接所述OPC服务器。
在本发明一优选实施例中,作为MODBUS TCP客户端的系统为核电站DCS系统。
具体地,OPC服务器采用同步读取和异步写入方式。
通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明的实施例。
具体实施方式
现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。
需要说明的是,本发明基于OPC实现两种协议系统通信的接口方法,其中所涉及的两种协议的系统分别为作为MODBUS TCP客户端的系统与其他协议的系统(即除OPC和MODBUS外的第三方协议)。而在本实施例中,以核电站DCS系统作为MODBUS TCP客户端的系统为例,详细阐述本发明。
请参考图1,本发明基于OPC实现两种协议系统通信的接口方法包括:
S101,启动软件狗以启动并监听OMT接口软件主程序。需要说明的是,该接口软件为OPC ModbusTCP接口软件(简称OMT软件),其利用OPC(Object Linking and Embedding(OLE)for Process Control)标准化软件接口将广泛应用的MODBUS TCP接口与OPC服务器架起了桥梁。而在启动该接口软件前,需进行一些列的参数配置,其界面如图2所示,通过该界面可以自由设置被启用的第三方系统OPC服务器进程、名称,DCS系统和第三方系统连接的状态点、读取周期、设置IP地址、设置数据交互的变量、设置设备主从状态等信息。
S102,载入配置文件;该配置文件包括需进行通信的IP地址、通讯方式等。
S103,建立MODBUS TCP客户端与其他协议系统的通讯站及OPC服务器的连接。
S104,开辟第一线程建立MODBUS侦听服务,解析来自MODBUS TCP客户端的MODBUSTCP报文包以获取客户端的通信数据,并将此数据存入主程序预置的公共变量区。
S105,主程序成功连接OPC服务器后,开辟第二线程以供OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组中,并将OPCItemExtender读取组中的数据写入公共变量区,同时开辟第三线程以供OPC服务器异步地将公共变量区中的最新的实时性数据写入OPCItemExtender写入组中。具体地,第二线程任务:以西门子S7-400AS414-4-2H冗余中央处理单元为第三方系统设备为例,西门子软件平台提供的WINCC作为OPC服务器,以250ms周期从AS414-4-2H中同步读取OPCItemExtender(如温度)变量,并写入公共变量区。第三线程任务:同样的实例,当MODBUS TCP客户端有变化的数据(如修改焓值计算参数)时,接口软件解析MODBUS报文后会将变化的数据写入公共变量区,接口软件标记变化的OPCItemExtender,并通过OPC服务器异步方式写入S7-400AS414-4-2H冗余中央处理单元。
需要说明的是,通常非核级DCS与第三方系统通讯需要长期稳定安全的运行,既不能因为多线程占用大量资源,也不能因物理硬件连接断开数据失去实时性,还不能因软件自身故障而崩溃,无法自动修复和重新启动,因此OMT接口转换软件需要看门狗来监测软件运行状态和硬件的连接状态,自诊断故障源,并可以记录故障点、故障原因、故障时间,同时可以根据诊断结果自动修复,自动报警,在软件崩溃或连接超时时,能自动重启。
具体地,如图3所示,软件狗的工作流程如下:
S301,判断OMT软件是否启动,若是,则执行S303,反之,则执行S302。
S302,启动OMT软件。
S303,判断是否接收确定信息,若是,则执行S304,反之,则执行S301。具体地,确定信息为:接口软件和软件狗的运行状态。即软件启动完成,并成功调用DLL,OPCServer服务是否已经运行,软件狗是否运行。
S304,对OMT软件进行监控。
S305,判断OMT软件是否正常响应,若是,则执行S304,反之,则执行S306。
S306,强制终止OMT软件,并返回S301。
再请参考图4,步骤S104具体包括:
S1041,在预先设置的IP连接的502端口上启动MODBUS侦听服务,监听MODBUS TCP客户端的MODBUS指令。
S1042,判断接收数据是否超时,若超时,执行S1048,反之,则执行S1043。
S1043,根据该MODBUS指令接收MODBUS TCP报文包。且,在接收MODBUS TCP报文包过程中,还会判断是否出现丢包或错包,若出现,则主程序断开与MODBUS TCP客户端的连接、释放资源,并重启第一线程。
S1044,解析正确的MODBUS TCP报文包以得到功能码及客户端的通信数据;其中功能码包括1、3、15、16及其他。
S1045,根据功能码将MODBUS TCP客户端的通信数据写入公共变量区或读取公共变量区中对应变量的实时数据。具体地,当功能码为15、16时,将MODBUS TCP客户端数据写入公共变量区;当功能码为1、3时,读取公共变量区中对应变量的实时数据;当功能码为其他时,表明功能码不存在或modbus格式不正确,并执行S1048。
S1046,判断是否成功写入或读取,若是,则执行S1047,反之,则执行S1048。
S1047,发送回复指令至OMT接口软件主程序。
S1048,记录错误并继续监听,弹出报警窗口,10秒钟后,强制终止主程序与OPC服务器的连接,关闭OMT主程序,并自动重启OMT主程序。
再请参考图5,步骤S105的一子流程图具体包括:
S501,根据配置文件中的通讯变量的配置创建相关的OPC服务器IO对象。
S502,判断主程序与OPC服务器连接的状态,如连接正常继续下面步骤。
S503,OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组中,并与OMT接口软件主程序通信。
S504,将OPCItemExtender读取组中的数据写入公共变量区。
S505,判断是否成功写入,若成功,则返回S503,反之,则执行S506。
S506,记录错误并重新连接OPC服务器。
再请参考图6,步骤S105的另一子流程图具体包括:
S601,根据配置文件中的通讯变量的配置创建相关的OPC服务器IO对象;
S602,判断主程序与OPC服务器连接的状态,如连接正常继续下面步骤;
S603,比较当前公共变量区中客户端数据是否与OPCItemExtender写入组中的一致。需要说明的是,程序读取或写入OPC的值,是必须先放到内存中才能进行操作的,比较是在内存里操作的,操作的是公共变量区,内存处理速度远比处理OPC对象的读写快,比较全部的变量的耗时比写入一个变量到OPC快。当第二次读取或者写入数据的时候,先把内存中的值作出比较,如果是一样的就不进行写入了,只有在发现有差异才进行写入,这样也是提高效率减轻负担的一种措施。比较方式对于模拟量还有个差值设置,在软件配置页面进行设置。比如差值设置是0.1,如果实际数据差在0.1以内就判断为没有变化,但本实施例中所采用的差值设置是0(即所谓的一致),所以只要有变化就会写入。
S604,当不一致时,将MODBUS TCP客户端数据写入OPCItemExtender写入组,反之,保持OPCItemExtender写入组中的数据不变。
S605,判断是否成功写入,若是,则返回S603,反之,则执行S606。
S606,记录错误并重新连接OPC服务器。
需要说明的是,OPC接口里提供的读模式有同步读取和异步读取两种,经过测试两种读取方式的时间都非常快。而在本发明中,我们采用的是多线程(即第二线程和第三线程),与异步读取的原理大致相同,所以我们采用的是同步读取。同样地,OPC接口里提供的读模式也有同步写入和异步写入两种,由于写的过程是多次写入,而且单次写入耗时长,所以本发明中我们采用的是异步写入,在异步写入反馈完成信息后,再进行下一次写入。
与现有技术相比,本发明的方法先建立MODBUS TCP客户端与其他协议系统的通讯站及OPC服务器的连接,再开辟第一线程建立MODBUS侦听服务以将客户端数据存入预置的公共变量区,主程序成功连接OPC服务器后,再开辟第二线程供OPC服务器周期性地将其他协议系统的数据读入OPCItemExtender读取组,并进一步地将其写入公共变量区,同时开辟第三线程供OPC服务器周期性地将公共变量区中的客户端数据写入OPCItemExtender写入组中,这样,不论是作为MODBUS TCP客户端的系统还是其他协议系统的数据都可被存储于公共变量区内,作为MODBUS TCP客户端的系统可从公共变量区中获取其他协议系统的数据,其他协议系统也可从公共变量区中获取客户端数据,从而实现了两种不同协议系统的数据的交互;该数据交互过程借助了OPC技术作为桥梁(使用了OPC服务器进行数据的读取和写入),解决了作为MODBUS TCP客户端的系统与其他协议系统进行数据交互的技术缺口,利用了OPC技术的特点,实现了标准化的软件接口通信。
而现运行核电站DCS与其子系统间的信号采集和控制常见的方式是采用数字量或模拟量输入输出模块(板卡)和硬接线方式,也有采用RS232或电流环的通讯方式,这两种方式都是比较传统的通讯方式。第一种方式需要大量布线、接线,成本高、工作量大、故障点多、维修难度大;第二种方式的通讯量小、实时性差、通讯速率低、抗干扰能力差。因此,本实施例中的方法还具备以下优点:
(1)解决了大量数据交互时通讯周期长、速率慢、实时性差的问题,提高了数据交互的高效性、安全可靠性;
(2)替代了硬件模块等硬接线方式或串口通讯方式的采集与控制方案,减缓了采集系统的硬件设备,节省了体积;
(3)减少了故障点,方便了维修,节省了成本;
(4)更适合于DCS与通讯伙伴采集控制点较多较复杂的场合,是系统集成的趋势。
以上结合最佳实施例对本发明进行了描述,但本发明并不局限于以上揭示的实施例,而应当涵盖各种根据本发明的本质进行的修改、等效组合。