基于Modbus TCP协议的堆芯仪表数据通信实现

发表时间:2020/12/7   来源:《中国电业》2020年7月20期   作者:王晓东 于金峰
[导读] 本文以某核电站内使用Modbus通信的堆芯仪表系统为例
        王晓东    于金峰
        山东核电有限公司  山东省烟台市海阳市  265100
        摘要:本文以某核电站内使用Modbus通信的堆芯仪表系统为例,通过抓包数据的分析展现了Modbus TCP协议在通信过程中的实现。
        
        核电站堆芯仪表系统对于核电站堆芯状态监测具有非常重要的意义,由于机柜位于核岛岛内,因此要求数据传输必须安全可靠。Modbus TCP协议通过将Modbus数据封装到TCP/IP协议中,可以实现数据的远程通信,再通过链路冗余和设备冗余可以实现数据的可靠传输。现对某核电站内基于Modbus TCP协议实现的冗余堆芯仪表数据通信进行抓包分析,查看并验证通信实现过程。
1.Modbus TCP协议介绍
        Modbus TCP协议是将Modbus协议封装入TCP/IP协议中,可以在以太网的基础上实现Modbus数据的传输。Modbus TCP协议数据结构如下图:
        Modbus TCP协议数据中前7个字节是报文头,其中事务处理标识符占2个字节,用于标识一对Modbus请求/响应对话;协议标识符占2个字节,Modbus协议的标识符为0;长度字段占2个字节,用于表示从此字段后面所有字节长度;单元标识符用于指出Slave从站地址。功能码和数据部分是Modbus协议中的标准数据通信规范,可以有多种功能码实现不同功能,数据字段长度也随功能码类型不同而不同。
2.堆芯仪表数据结构介绍
        堆芯仪表系统共2个机柜,每个机柜内有3排卡件,每排卡件两端是冗余配置的通信卡件,其中第一排通信卡既作为机柜内的Modbus Master,也作为向外通信的Modbus Slave。每排通信卡的中间是8或5个采集堆芯仪表参数的板卡,共21个板卡,每个板卡对应一组7个探测器,每个探测器对应一个通道。板卡负责采集堆芯仪表的电流参数,经过A/D转换后向外发送。堆芯仪表机柜内数据分为3类:周期性数据、非周期性动态数据、非周期性静态数据。网关服务器会对周期性数据在应用层进行数值和质量转换,而对于非周期性动态数据和非周期性静态数据则仅保存为文本格式进行存储和归档。
2.1 周期性数据
        周期性数据是指需要网关服务器在应用层进行数值和质量转换的数据,周期性传送的数据分为3类,第1类指典型的周期性数据,每周期循环读取机柜板卡上的信息及机柜信息,每个板卡包含有通道1-7输入电流、放大器状态、计数器数值共10个寄存器,每周期对每排8或5个板卡信息和外加信息打包后整体读取,其中第1排共82个寄存器,包含80个板卡信息寄存器、1个本侧通信链路状态信息寄存器、1个机柜温度信息寄存器;第2排共81个寄存器,包含80个板卡信息寄存器、1个本侧通信链路状态信息寄存器;第3排共51个寄存器,包含50个板卡信息寄存器、1个本侧通信链路状态信息寄存器,由于实时性要求高,因此每周期循环读取数据。第2类为每周期循环写入数据,按指令要求写入固定寄存器的对应位。第3类为非典型的周期性数据,数据源自非周期性动态数据,读取每个板卡第4通道的电压参考值,由于实时性要求不高,采集周期与非周期性动态数据一致。
2.2 非周期性动态数据
        非周期性动态数据指按照既定的周期序号分别读取每排的数据,共划分为3个周期,对应3排卡件,每周期按顺序对一排所有板卡的信息进行读取,读取内容包含日期和时间、板卡位置编号、板卡内每个通道零点电压、参考电压、温度等信息,数据读取后以文本方式保存在服务器磁盘中。
2.3 非周期性静态数据
        非周期性静态数据只在链路首次启动或者重启时才会传送一次,并以文本方式保存在服务器磁盘中,数据内容包括:日期和时间、板卡位置编号、芯片编号、固件版本、厂家序列号等硬件信息,非周期性静态数据的周期被标识为-1。


3.网络拓扑介绍
        堆芯仪表系统与上层网关服务器之间通过冗余链路和冗余设备相结合的方式进行通信,网络拓扑图如下:


        网关服务器SVA与SVB为冗余配置,正常情况下备用服务器仅保持链路连接,并不进行数据传输。交换机SW1与SW2同样为冗余配置,但正常情况下两个堆芯仪表机柜CBA和CBB数据分别通过不同交换机与主网关服务器SVA或SVB通信,当任意一台交换机故障时,所连接堆芯仪表机柜自动通过备用链路切换至另一台交换机进行数据通信。两个堆芯仪表机柜CBA和CBB各有主备两个链路通过交换机与主网关服务器SVA或SVB通信,主备两个链路为热备状态,正常情况下均有数据传输,最终由主网关服务器决定选择两个链路中健康的数据用作应用层数据源
4.通信主要参数及抓包数据分析
        通过对堆芯仪表机柜CBA的冗余链路进行切换,并分别抓包,可以获得冗余链路的实际通信数据,再对数据进行统计分析,可以展现底层Modbus TCP在通信过程中的具体实现。
4.1 单链路通信过程抓包数据举例:
        由于Modbus数据传输方式为一问一答式,为更清晰展示单链路Modbus通信过程,我们仅对主链路抓包数据的指令方向进行单向流跟踪,在随机截取部分内容并进行整理后如下表所示:


        在表中可以看到,网关服务器对堆芯仪表柜的读取和写入过程用到了两种Modbus功能码:RHR(0x06)和WMR(0x10),由于RHR和WMR格式不同,对应内容和字节数也明显不同,详见具体解释。通过观察,可以确认网关服务器与堆芯仪表机柜的Modbus TCP通信过程以多次问询的方式进行,每次读取或写入一组数据,每组数据格式固定,这些数据都在堆芯仪表机柜内有固定寄存器地址。通过Modbus TCP通信,网关服务器和堆芯仪表机柜可以实现所设计的数据交换功能,而且通过数据解读,对检修和故障诊断工作也具有参考意义。
4.2 通信过程周期性验证
        通过对表1的观察,可以发现部分数据具有明显周期性,在对每行指令进行解读,再按周期性进行整理后如下表所示:


        从表中可以看到,抓包数据每8个指令为一个周期,每个周期内容并不完全相同,3个周期可以涵盖所有的内容。这些指令对应两类数据:周期性数据和非周期性动态数据,由于非周期性静态数据仅在链路首次启动或者重启时才会传送一次,因此正常情况下是不显示在抓包数据中的,这些都与设计相一致。在堆芯仪表数据采集中,对于较重要的数据采取周期性密集刷新,而对于相对普通的数据则分周期执行采集,这样设计有利于保证探测器电流等重要数据的实时性,同时对堆芯仪表数据建模计算也具有重要意义。
4.3 冗余链路数据抓包举例:
        通过对冗余链路的数据在线路切换前后分别进行数据抓包,并与寄存器地址总表进行对比后整理如下表所示:


        从表中可以看到,主链路与备用链路实时保持热备,周期性数据在RHR读取时冗余链路完全一致,但在WMR写入时只有主链路具有写入功能,同时非周期性动态数据只由主链路进行读取。主备链路保持热备的原因在于能够预防堆芯仪表机柜内部通信卡件失效,由于机柜内部每排卡件两侧均是冗余的通信卡件,两侧的通信卡件分别对应主链路和备用链路,而且每排通信卡件均有状态标志,当网关服务器接收到主链路与备用链路的数据后,会检查每排通信卡件的状态标志,并选择状态正常卡件的数据进行读取,如果两侧通信卡件标志均正常则读取主链路数据。实时保持热备的冗余方式可以确保采集的数据总处于健康状态,线路冗余与设备冗余方式的结合更增加了数据通信的可靠性。
5.总结
        本文通过以抓包方式对堆芯仪表系统Modbus TCP通信过程进行解读和分析,展现了堆芯仪表系统与网关服务器之间具体传输细节,并针对字节进行了解读和还原;同时通过数据整理,展现了堆芯仪表系统数据的周期性,以及通过周期来保证重要数据实时性的具体方法;最后通过冗余线路切换前后的数据整理,展现了冗余热备的可靠性。在实际生产中该方案能够保证数据的可靠传输,成功得到了验证。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: