从零开始理解IEC104协议之二——基础知识
104协议是101协议的网络版,101协议每次只能发送一个链路帧,而104协议可以连续发送多个链路帧,其传输效率明显高于101协议,而且具有TCP/IP的冲突检测和错误重传机制(这里重传是指断开重连重传),具有比101协议更高的可靠性和稳定性,另外对通信延时的限制更宽松。
IEC104协议适用于厂站与调度主站间的以太网通讯(全双工高速),位于OSI体系中的应用层,其基本定义为端口号2404,调度站为客户端,厂站端为服务器,平衡式传输,协议类型是滑动窗口协议。
说明:
1、平衡传输意为双方都可以发起信息传输。104协议下,一旦链路建立成功,变化信息除了响应召唤应答还可以主动发送而无需等待查询。
2、对于基于TCP的应用程序来说存在两种工作模式,即服务器模式和客户机模式。它们之间的区别是:在建立TCP连接时,服务器从不发起连接请求,他一直处于侦听状态,当侦听到来自客户机的连接请求时,则接受此请求,由此建立一个TCP连接,服务器和客户机就可以通过这个虚拟的通讯链路进行数据收发。
3、协议类型有三种,问答式协议模式为一问一答,超时重传,其特点是安全稳定,效率低下。简单窗口协议模式为N问一答,超时重传N个报文,其特点是效率相对提高,但浪费了A的发送。滑动窗口协议模式为A发送报文的同时,B发送确认帧进行确认;A记录自己已经被确认的报文,向前滑动最大可发送窗口,B记录有多少报文尚未确认,达到最大窗口或超时则发确认帧。A未确认窗口通常为B未确认窗口的1.5倍。其特点是效率高。
⑴、小端模式
104规约一般小端模式,即是指在内存的低地址中保存数据的低字节。大小端模式,并不由规约本身决定,而取决于CPU及操作系统。常见x86处理器(无论何种操作系统)都是小端模式,而PPC处理器则都是大端模式。
而TCP/IP协议中所定义的网络字节顺序采用大端模式排序,而一般的读写顺序为——数据按地址由低到高的写入,由高到低写出。这样就造就了我们所看到的报文是低位字节在前,高位字节在后。
举个例子在x86系统下,通过TCP/IP协议,我们将0x1234从以0x0000开始的内存写出。其过程如下:
在x86系统中0x0000存储数据为0x34,0x0001存储数据为0x12,即0x1234;经过写出后,在网络上传输的字节顺序为0x0000存储数据为0x12,0x0001存储数据为0x34,即0x3412。
说明:
1、既然数据分高字节、低字节,说明只有数据格式是2字节以上的,才有大小端模式,比如word、dword等;而byte类型数据是不分大小端模式的。
⑵、重要参数
Ⅰ、K值和W值
104规约规定了两个参数K和W,其取值为1到32767,其中K表示发送方在有K个I格式报文未得到对方的确认时,将停止数据发送;W表示接收方最迟在接收W个I格式报文后应发出认可。104规约规定K和W的默认值分别为12个APDU和8个APDU,推荐关系式为w<k*2/3。
在实际中,K和W的具体取值可以根据TCP连接双方的数据通信量加以确定。对于从站RTU来说,每收到一个调度端的I格式报文都应立即响应,其W的取值实际上为1,由于RTU端可以循环向主站发送遥信、遥测等信息,因此K的取值与其循环发送的定时周期有关,通常12到20个APDU就足够了;对于主站端,由于不停接收RTU数据,因此应及时地给以确认,通常W取小于8个APDU的值。
当未确认I格式APDU达到K个时,发送方停止发送。如果t1超时仍未收到确认,则重启链路。
Ⅱ、超时定义
为了能对TCP连接进行检查和维护,104规定了几个超时时间:t0、t1、t2、t3。它们的取值范围为1~255s,准确度为1s。
t0规定了主站和从站建立一次TCP连接的最大允许时间,即主站端一直发出连接请求,在t0时间内得不到连接建立成功的状态下,要向应用层提示,说明无法建立连接,一般可设置进行多次连接,当每次连接都超过t0无法建立成功时都应给出提示。默认值30s。
t1规定发送一个I格式报文或U格式报文后,必须在t1的时间内得到接收方的认可,否则发送方认为TCP连接出现问题并应重新建立连接。这个过程是双向的,即对于厂站端和主站端当这个过程任一方发生时,两方的连接都需关闭,重新建立连接。默认值15s。
t2规定接收方在接收到I格式报文后,若经过t2时间未再发送新的I格式报文,则必须向发送方发送S格式帧对已经收到的I格式报文进行认可,显然t2必须小于t1。默认值10s。
t3规定主站或从站每接收一个I,S,U报文将重新触发计时器t3,若再t3内未能接收到任何报文,将向对方发送测试链路报文(U帧)。发送测试帧后,若在t1时间内没有收到测试确认,则连接关闭,若达到t3时间,则再次发送测试链路报文(U帧)。默认值20s。
⑶、冗余机制
Ⅰ、通道冗余
方式一——链路冗余,应用共享
链路冗余:所有链路互为主备,备用通道仅仅测试链路维持连接,通道的主备用是动态可切换的。
手动切换模式:在当前激活的逻辑连接上人工发送STOPDT-ACT停止应用传输转为测试维护,然后再新的逻辑上人工发送STARTDT-ACT予以激活,作为主连接。
自动切换由主站判断进行。连接初始化时,主站按某种逻辑关系选择确定主、备通道,例如先建立链路的为主通道或者误码率低的为主通道或者响应快的为主通道或按自然顺序选择主通道。运行中的自动切换可以由主站根据目前主、备连接的通信情况而定。
应用共享:多个链路共用同一数据库,并且数据缓存的入栈出栈只针对当前主连接有效。
方式二——链路冗余,应用冗余
链路冗余:与上文描述基本一致。
应用冗余:即不同的链路不再共享数据库,各链路完全独立运行。这种方式的关键点是数据同步机制,用来实现数据的完整性和一致性。
一般是将当前主连接中已经被主站确认的数据点号和数量,告知其他所有备用连接,并对备用连接中的应用数据进行实时整理,从而实现各链路数据库的内容动态一致。
综上,方式二的模式实现了链路和应用真正的独立冗余,但内存消耗较多,程序较为复杂,同步机制的实施也会一定程度上影响数据的完整性。方式一,虽然各链路未能真正的独立运行,但在数据完整性的方面有着高可靠性。且编程复杂性较低,问题较少。本司正线采用方式一。
Ⅱ、双机冗余
1、冷备用
即当主机工作时,备机处于待命状态,当主机故障或数据链路断开时,切换至备机。
此方式的问题为:当主机与某个子系统数据链路断开无法连接时,将会使备机激活,接管主机全部的数据链路进行重新连接,初次连接建立时会产生大量网络传输。同时,在主机进行冗余切换而备机与子系统连接未完全建立时,数据交互将会暂停,无法取得子系统中最新的数据进行交互。
2、热备用
两台通信前置机fep同时处于工作状态,与所有子系统进行连接。两台通信前置机fep通过串口连接,把各条链路的重传次数、重要报文延迟时间等信息定义未每条链路的通信服务质量权重,然后进行质量仲裁选择数据存入实时库,当其中一台通信前置机fep故障或数据链路断开时,则只取未故障通信前置机fep中的数据进行交互。
同时也可以根据通信服务质量权重进行主备机的自动切换,这个过程从站(这时主备机通过串口传输通信服务质量权重)与主站均可发起。
此方式的问题为:两台通信前置机fep同时与所有子系统进行连接,数据量比较庞大时,将产生大量的网络带宽浪费(两台通信前置机fep均正常工作时,只取其中一台的数据),双通道进行数据交互时还有可能造成子系统压力较大从而造成数据接口不稳定。并且部分子系统由于其接口特殊性,如串口通信,同时仅能一方与其进行数据交互,两台通信前置机fep无法同时与此类子系统接口进行数据交互。
综上,可以看出冷备与热备各有优缺点,但上述内容只是基础知识,现在厂家针对这些问题在软件方面都做了大量优化,实际的技术细节以厂家资料为准。
本司主变电所采用双机冗余(热备用)+通道冗余(方式二)。