APP下载

中波广播发射机自动化监控系统中的下位机子系统软件设计及“零点问题”分析与解决

2012-02-08文丨陈思平

中国传媒科技 2012年14期
关键词:下位时间表发射机

文丨陈思平

中波广播发射机自动化监控系统中的下位机子系统软件设计及“零点问题”分析与解决

文丨陈思平

发射机自动化监控系统以数据、表格和声音等形式实时监控发射机的运行情况,自动控制发射机的开关机,自动应急故障处理,故障自动告警和诊断。下位机子系统作为自动化实时监测控制系统中的一个重要组成部分,在整个系统中起着至关重要的作用。本文主要论述自动化监控系统中的下位机子系统中的软件设计及一个代表性问题的分析与解决。

自动化; 实时监控; PAC软件

中波广播发射机的固态化和数字化,给发射机的自动监控奠定了坚实的基础,发射机的各种外部接口也为机器的自动控制提供了极大的方便。随着各台站逐渐建立起自己的计算机局域网,基于局域网的自动化监控也有了质的飞越。

1 自动化实时监测控制系统构成

厦门广播电视集团发射中心201台自动化实时监测控制系统如图1所示。

系统主要由下位机子系统、局域网通讯子系统、客户端监控子系统、数据库服务器四个子系统组成,各子系统相对独立,都可以以损失部分功能为代价脱离其他系统独立运行,同时又有紧密的联系,互相有着频繁的数据交换,组合在一起,才构成完整的自动化实时监测控制系统。控制网和办公网之间用物理单向的传输通道连接,既能让办公网中的用户了解机器设备的运行状态实时信息,又能百分百防止黑客和病毒程序对控制网的入侵。

2 下位机子系统软件需求

图1 自动化监控系统整体框图

下位机即发射机的前端控制器,可以直接对发射机实现监测和控制的设备。下位机安装于发射机内部,每台发射机都有自己的下位机。下位机以并发互联方式连接到发射机,对发射机原有电路不做修改、不影响原有功能。发射机面板上手动操作与下位机自动控制相互独立,必要时可通过机器面板的遥控或本地开关来进行自动/手动切换,手动时实时监控系统只有监测功能,没有控制功能。下位机子系统脱离了其他子系统仍然能够正常运行。自动化系统中的其他子系统都需要从下位机子系统获取信息以实现具体功能,脱离下位机子系统,自动化系统就失去了对发射机的联系,监测控制也就无从谈起,下位机子系统是整个自动化系统的基石。下位机子系统作为自动化系统的一个重要组成部分,需要实现多种功能,主要有。

2.1 监测功能

下位机能够对发射机各状态量、模拟量及配套同轴开关状态进行实时监测。可以根据不同的发射机种类设置不同的监测点。监测不受开关机时间限制,可以随时得到发射机的各个相关数据。(1)控制功能:根据预先设定好的临时开关机时间或者正常发射机开关机时间及主备机设置,结合同轴开关上的天线状态,下位机能够对同轴开关进行天线倒换操作,将天线倒换到需要的发射机上,并能够对发射机进行开关机操作。临时开关机时间表中的开关机时间段结束后将自动清空,正常开关机时间表设定后永久生效,不会因发射机关机、停电等原因消失。(2)故障处置功能:发射机运行过程中发生故障,可以对故障进行智能处理,如自动降功率、自动倒机、自动倒天线等。(3)通讯功能:下位机能够实时地将得到的各状态量和模拟量转换成符合标准modbus协议的数据通过局域网发送到其他子系统,对于不同发射机的不同状态量、模拟量,可以根据需要设置是否发送到其他子系统。不仅如此,下位机编程过程中使用到的数据、变量也可以转换成modbus协议数据发送给其他需要的子系统。同时,也可以接收局域网上其他子系统发送过来的各数据、命令,实现远程控制。

3 下位机子系统软件设计

下位机子系统中实现的各功能,都由下位机中的软件来实现,可以说,软件是下位机的灵魂,运行什么样的软件,决定了下位机可以实现什么样的功能。

3.1 ISaGRAF介绍

下位机软件采用符合ISaGRAF规范的编程方式,ISaGRAF是一套完全符合IEC61131-3标准、与硬件无关并以视窗为开发环境的可编程控制语言设计开发的软件。在ISaGRAF3.3版中将流程图语言纳入成为第六种程序设计语言,使得ISaGRAF完全支持世界上自动化行业的顺序表(SFC)、功能块(FBD)、梯形图(LD)、结构文本(ST)、指令表(IL)、流程图(FC)六大程序设计语言,可以简单的与图控软件或人机界面集成在一起,可离线模拟,可在线调试控制,具备程序上传功能,是一套强大的可编程开发工具。

图6 下位机软件

图5 下位机软件流程图

3.2 软件流程图

下位机子系统的软件流程图如图5所示。

3.3 软件设计

不同的发射机上的下位机软件稍有不同,总体思想是一样的。下面以一台发射机上的下位机为例说明。

下位机软件开发界面如图6。

下位机软件共包含8个主程序,其中开始5个,结束3个。主程序Autorun还包含7个子程序。详细说明如下:(1)Start 程序初始化,对某些变量做初始化赋值,打开E2PROM的写保护,并输出一个闪烁信号控制发光二极管表示程序正在运行。(2)GetInput通过ISaGRAF提供的“直接表示变量”功能,直接访问下位机的各个输入输出寄存器,获取发射机各模拟量和状态量,并对获取到的各个模拟量进行软件滤波。(3)SYSTIME 系统时间读取及校时功能的实现。在下位机子系统中,时间是一个很重要的参数,时间的准确与否直接影响下位机功能能否正常实现。系统由客户端检测下位机时间,发现时间异常时,由客户端发送校时命令及标准时间信息,接收到客户端发送的校时命令时,将接收到的标准时间做简单校验后写入下位机。(4)Autorun自动机开关机是下位机需要实现的最主要的功能。程序需要能接受来自客户端设置的开关机时间表,并按临时开关机时间表和正常开关机时间表自动开关机。临时开关机时间表最多可以设置5段,每段可以设置起止时间,在该段时间表执行完毕后将自动清空。正常开关机时间表以星期为单位,每星期的每一天最多可设置5个常规开机时间段。还可以根据需要设置强制开关机——开关机锁定。这三种开关机设置有严格的等级控制,优先级最高的是开关机锁定,其次为临时开关机时间表,最后为自动开关机时间表。(5)TimeDate计算系统日期和时间。将系统时间换算为程序运行需要的格式。(6)ReedEEP 读取参数。从E2PROM中读取已经存储的主备机设置、开关机时间表和临时开关机时间表。(7)Primary判断今天本机是否为主机,并从E2PROM中读取主备机提前滞后开关机的时间。按星期为单位给发射机定义主机和备机标志,主机将比备机提前一定时间开机,并对发射机开机的时间进行修正,使发射机开机能自动比设定的自动开关机时间提前一定时间开机,提前的时间可以通过客户端设置。并且,不论原先设置好的主备机标志如何,当天播音的发射机将被设置为主机,未播音的发射机为备机。处于开关机时间段时,主备机标志不被修改,除非需要倒机。(8)OnceOpen 临时开关机时间表开关机程序。将读取到的控制器日期和时间和临时开关机时间表中的日期时间进行比较,如果在临时开关机时间表内则开机。临时开关机时间结束后将本段临时开关机时间表清空。(9)Normal正常的自动开关机程序。将计算好的系统日期时间和开关机时间表内的时间进行比较。若在开关机时间段内则开机。(10)SaveOnce当接收到客户端发送更改临时开关机时间表的命令时调用。将修改的临时开关机表写到E2PROM。(11)SaveNorm当接收到客户端发送更改开关机时间表的命令时调用。比较新开关机时间表和原有开关机时间表的不同,将不同的写入E2PROM。(12)TONGZHOU 倒天线及倒机功能的实现。接收到倒天线命令时,判断是否满足倒天线条件,满足则倒天线,不满足则不动作。如若倒天线失败或天线状态异常,则发出报警信号。倒天线动作正常完成后,开启当不在天线上的发射机开机时,开启假负载。(13)AI_LIMIT简单故障处理功能的实现。当发射机的反射功率超过设定值时,控制发射机改低功率播出。反射功率恢复时,控制发射机恢复高功率播出;发射机发生电流过荷控制发射机发出过荷复位命令,过荷复位命令发出后过荷状态依旧,控制发射机改为低功率播出,过荷状态消失后恢复高功率播出。(14)TMSCtrl 控制发射机开关机:该程序接收上面几个程序运行的结果,控制发射机的开关机。单独将对发射机的开关列为一个程序,一方面使程序可读性增加,令一方面也更为稳定可靠,而且也方便程序的调试,保证调试的过程不会造成对发射机的误操作。(15)r_normal 调试用。(16)End 程序结束。为程序一个循环的结束进行一些相关的处理工作。另外还包含对发射机故障的自动复位功能。

3.4 软件滤波

为了避免系统受到的干扰对运行结果产生影响,需要在硬件连接时做好充分的硬件抗干扰处理外,在软件上,也需要对采集到的模拟输入量进行软件滤波。常用的软件滤波有限幅滤波和中位值滤波、平均滤波、低通滤波三大类,在本系统的设计采用了平均滤波的方法,对多次测量的参数进行平均值处理来消除一般随机干扰的影响。平均滤波又分为算术平均滤波、去极值平均滤波、递推平均滤波三种。算术平均滤波适合对一般具有随机干扰的信号进行滤波,去极值平均滤波适用于对脉冲干扰和随机干扰的抑制,他是结合了算术平均滤波和中值滤波的优点。移动平均滤波?的优点是速度较快。去极值平均滤波的算法是:对连续的n个数据进行排序,通常n=2k+2,k为整数。去掉其中最大和最小的2个数据,将剩余数据取平均值。在本系统的设计中,为了加快运行速度,n的取值为10。

3.6 “零点问题”

所谓“零点问题”,是指下位机子系统在0:00:00时刻会偶尔的出现误动作现象。即在这个时间点附近,本来不应该开启发射机的,下位机PAC发出了开机命令,本来不应该关闭发射机的,却把它给关了。这种开关机动作都是瞬间的,误动作后程序会自动恢复,反映到发射机上,就是发射机开了一下立刻又关上了,或者是关了立刻又重新开启。该故障出现的频率不定,有时间隔几天出现一次,有时隔了几个月才出现一次。在开关机时间设计这一部分,我们对一周七天分别设置开关机时间,每天可以设置五段开关机时间,每段时间段有一个开机时间和一个关机时间,一共是70个时间点数据。如若有时间段会跨至第二天,比如周一5:00开机至周二1:00,设计中没有将其分开为周一5:00至24:00和周二0:00至1:00,而是合并为一段5:00至1:00,以开机时间为界归入周一的开机时间段内。这么设计主要是考虑增加对实际使用人员的友好度。在发射机自动化监控系统的实际运行过程中,实际使用人员为机房的当班值班人员。在值班员值班过程中,内部文件、规定及平时大家的交流都是直接采用的5:00至1:00,对于实际的使用者来说更容易接受。而我们接触到的其他产品,例如音频传输监控系统,都是分成2段设置,比较不友好。问题出现之初,我们觉得不像是程序编写问题,因为程序编写一般不会出现类似的软故障,大多是故障出现就一直出现,于是我们首先考虑的是硬件部分。反复检查多次硬件连接电路,但是并无发现任何问题。该问题在初期的程序编写后并没有出现,后主要是出现与上海PDM 3KW机型上,在其他机型上相当长一段时间内没有出现,直至去年才在HARRIS DX-10机型上出现了一次,同时,由于零点正值许多频率的播音结束时间,这个时间点空中的电磁场变化比较剧烈,这又让我们产生了误判断,认为问题是出在发射机上,认为是发射机的外部接口不够稳定导致。于是针对外部接口做了一些抗干扰措施,但是故障依旧。下位机子系统的电源模块工作稳定度不够也曾经出现过问题,我们于是转移目标到该发射机配套的下位机子系统的电源模块,使用一个稳压直流电源从外部供电,故障依旧。接下来考虑的,就是下位机PAC本身。其他外部硬件已经都做了处理却没有效果。更换PAC,故障依旧。

故障排查陷入了僵局,始终找不到线索。直至2011年年底,在一次同上位机软件调试配合的过程中,偶然发现了一个怪现象,才终于抓到了这个问题的本质。这个现象就是从PAC控制器本身获取时间时,在0点会产生跳变的情况。例如,2012年1月1日的23:59:59,下一秒本应是2012年1月2日0:0:0,但实际上偶尔会出现2012年1月1日0:0:0,整整相差24小时。当两天的开关机时间段并非完全一致时,就会出现误动作。现象找到了,分析其原因,实际PAC提供的时间获取函数分为三个,分别为DAY_TIME()、SYSDAT_R()和SYSTIM_R(),DAY_TIME()函数的输出为字符串型,不符合需要,并没有采用。实际采用的是SYSDAT_R()和SYSTIM_R()两个函数。这两者都是属于ISaGRAF中的功能块(Function Block,F模块),SYSDAT_R()函数用来获取系统日期,返回值是四个整型数据,分别对应系统当前日期中的年、月、日和星期,SYSTIM_R()函数用来获取系统时间,返回值是三个整型数据,分别对应系统当前时间中的小时、分钟和秒钟。这两个函数获取的七个整型数据结合在一起,就构成了软件中需要用到的系统时间。两个函数本身的运行并没有问题,获取数据过程正常,数据的获取也是正确的。问题出现在将两个函数获取到的数据结合在一起时。由于ISaGRAF采用的是顺序执行模式,一个功能块执行完毕后才执行下一个功能块,在模块本身的执行以及这两个模块执行之间,都是有时间的,虽然这个时间很短,但却不可忽略。于是问题就出现在:于2012年1月1日23:59:59获取时间,先执行SYSDAT_R(),获取系统日期,得到四个整型值,分别是2012(年)、1(月)、1(日)、7(星期),再执行SYSTIM_R(),获取系统时间,由于两个函数执行之间有一个间隔时间,SYSTIM_R()函数本身的执行也需要时间,经过这么一个很短的时间后,系统时间有可能刚好已经过了0点,此时的系统时间是2011年1月2日0:0:0,通过SYSTIM_R()函数获取到的三个整型值是0(小时)、0(分钟)、0(秒),和前面的SYSDAT_R()函数获得的数据结合在一起,时间就是2011年1月1日0:0:0,这就得到一个错误的数据,与实际时间相差了整整24个小时,如果系统中设定两天的开关机时间并不一致,就会由此产生错误的动作。这个错误的时间数据是一次性的,下一个循环读取到的系统日期和时间就恢复为正确数据,因此系统又将发出正确的命令,反映到发射机上,就是发射机开启然后立刻又关闭,或是关闭后又立刻开启。抓到了故障现象,分析出了故障原因,故障排除就很容易了,最终排除故障的是以下代码。

(*以下为解决0点问题*)if hour1=23 and minute1>=1 and minute1<=58 and weektemp <> week1 then weektemp := week1; end_if; if hour1=0 and minute1=0 and second1=0 then if weektemp=week1 then return; end_if; end_if; if hour1=23 and minute1=59 and second1=59 then if weektemp <>week1 then return; end_if; end_if;hour1、minute1、second1、week1和weektemp为几个中间变量,分别对应时、分、秒、星期和星期。hour1、minute1、second1、week1为实时获取到的可能有错误的值,weektemp用来进行校验。在23:01至23:58期间对weektemp进行赋值并保证其正确,0:0:0时检查weektemp和week1,发现week1仍无变化即认为此次获取的数据有误,将此次数据舍弃。同样,在23:59:59时也可能存在错误,同样用类似的方法解决。

本系统中所使用的下位机控制器是泓格PAC,其系统日期和时间用不同的函数分别读取的方式,是出现“零点问题”的根源,属于系统漏洞。如上所述这种系统漏洞对编程时序形成威胁,容易造成动作时序的错乱。如果改成系统日期和时间合并读取,由系统内部解决好日期和时间的同步问题,那么对使用系统的编程者会更友好。“零点问题”的存在已经告知相关厂家,并引起了高度重视。

4 结束语

下位机子系统作为自动化实时监测控制系统的一个重要组成部分,为实现国家广电总局“高质量,不间断,既经济,又安全”十二字总方针提供了可靠的条件,使发射台对发射机的集中控制成为现实。该系统在厦门广播电视集团发射中心201台运行以来,性能稳定,可靠,操作方便,易于维护,很好地完成各项设计的功能。解决“零点问题”以后,从未发生过因自动化系统的误动作,影响播出或危及播出的情况。

[1]张丕灶. 数字式调幅中波发射机,2002(9).

[2]浙江省淳安无线电厂. GZ-1/3KW全固态中波广播发射机技术说明书,2003(1).

[3]泓格科技股份有限公司.ISaGRAF槑进阶简体中文使用手册手册,2003 (4).

(厦门广播电视集团,福建厦门361004)

猜你喜欢

下位时间表发射机
中韩海上轮渡航运时间表
中韩海上轮渡航运时间表
浅析DAM中波发射机日常维护
提高火力发电厂自动电压控制系统投入率的措施
发射机房监控系统之下位机
3DX系列发射机与DX系列发射机的比较——以3DX-50和DX-100为例
3DX-50发射机与PC之间通信的实现
浅谈2kW短波发射机开关电源的维护
围观党“下位”,吐槽帝“登基”
CAN总线并发通信时下位机应用软件设计