UML自从1997由OMG正式发布以来,正在包括软件工业界在内的很多领域得到越来越广泛的应用,成了业界事实上的统一建模语言。对于一些复杂的SCADA系统,由于本身的复杂性及参与开发人员的专业背景跨度大,使用UML来对它建模并在此基础上开发实现尚未得到广泛使用。其实,对越是复杂的SCADA系统,在开发过程中采用UML作为分析设计的统一语言,越能体现UML的优势——适合对软件密集型的复杂系统建模,大大提高了系统研制的效率。
在开发一个铁道电气化电力SCADA的分布式实时系统过程中,通过UML和支持UML的软件过程——RUP,全面运用了面向对象的分析设计思想,并在分析设计模型基础上用面向对象的Java语言平滑地加以开发实现。 本文阐述了应用UML为一个分布式的SCADA系统的调度控制中心软件系统建立模型及该过程中的一些关键策略。
1 用例视图
当用例视图在外部用户前出现时,它捕获到系统、子系统或类的行为,它将系统功能划分成对参与者(即系统的理想用户)有用的需求,而交互功能被称为用例[1]。参与者有三大类:系统用户,与所建系统交互的其它系统,时间[2]。整个SCADA系统有两个用例包[2, 3]。用例包4y是系统进行遥控、遥信、遥测、遥调等操作的使用案例说明,用例包system Manage是对系统本身的配置管理的使用案例说明。
1.1 4y use-case
对use case 图(图1)中的关键用例做简要说明如下。

·单控:对被控站内某一开关设备进行的状态控制。系统遥控过程严格按“选择-返校-执行”的原则操作执行。
·程控:调度中心的调度员对一系列的开关设备按照一定的顺序发一个操作命令使它们依次执行控制操作。
·全召:远动系统实时召集该画面所对应的所有站的遥信与遥测,并刷新带电状态与画面遥测值。
·自动控制:在变电所等被控站中,当某个需要自动控制的条件发生时,会自动实现对某个开关的控制。
·遥调:利用遥控功能实现对有载调压变压器抽头位置的分级调节。
·自动遥调:根据用户输入的自动遥调公式来自动进行遥调。
·遥信监视:系统能采集处理牵引供电系统各种开关状态、保护动作信号及其它报警信息。
·报警:对现场发生的异常,提供了警报信息功能。
1.2 System Manage use-case
该用例包中用例间的关系较简单,用例图在此省略。包括事件重演、事故追忆、系统事务管理、系统在线监视、参数配置、系统自我监视、运行数据及画面打印、系统口令管理、实时数据转发等8个用例。
2 交互视图
交互视图描述了执行系统功能的各个角色之间相互传递消息的顺序关系。对象通过交互来实现行为,交互视图通过协作来进行建模 [1]。
2.1 遥控用例对应的序列图
序列图)表示单控(对一个设备做一次控制操作)情况,是在控制过程中没有出现异常情况:(1) 没有选择命令确认从RTU返回;(2)没有执行确认从RTU返回。如果出现这种异常,则控制中心在等待一定的时间后报告“遥控失败”。
调度中心与现场RTU之间的通信采用国际电工委员会 (International ElectrotechNIcal Commission, IEC)制定的IEC 60870-5-101协议(在本文中简称101规约)[5]。
如果发出“遥控选择”后,用户不想操作选中的开关对象或选择有误,用户可通过图形化的人机界面发“撤消遥控”。对应的序列图类似,这里省略。
2.2 定时总召
如果子站忙,子站回送忙帧;如果主站全部正确接收到数据,则改变FCB位发送其它帧进行其它过程。
定时总召序列图(图2)中描述的是子站正常工作的情况,如果主站未收到正确响应帧,按等待-环路延时超时-重发处理:主站向子站发送请求帧或发送帧,由于干扰,子站接收出现差错,子站不做任何回答。主站在发完后,经过超时时间(大于环路延时时间)即按重发次数,重发原报文,重传后,主站正确收到报文,重传过程结束。否则,直到重传次数等于规定次数仍未收到,也结束重传,发新报文。这里的1级用户数据包括变位遥信、由读命令所寻址的数据、子站初始化结束、子站状态变化。2级用户数据包括遥信、遥测、超过门限值的遥测、事件顺序记录数据。但是遥信、遥测由总召或分组召命令取得。

2.3 轮询
轮询过程(图3),对应用例“遥信状态监视”和“遥测监视”。使用101规约的“快速-校验-过程”事件收集协议,经过若干次快速-校验-过程后,插入一次主站向子站按询问表收集某站某组数据,之后再转入快速-校验-过程。

2.4 主站定时召唤电能脉冲计数
主站定时发送“召唤电能脉冲”命令给现场的RTU,序列图与定时总召的情况类似,在此省略。
3 静态视图
静态视图说明了对象的结构,其中的关键元素是类元及它们之间的关系。类元包括类、接口和数据类型。类元之间的关系有关联、泛化及各种不同的依赖关系,包括实现和使用关系[1]。
3.1 类图
下面对其中主要的类作简要说明,其它类的属性及方法限于篇幅未列出。

3.1.1 实时数据库类
下面是RealTimeDB类的public方法(Java语言):
public boolean setStatusValue(int stationID,int objAddr, intvalue); //给通信程序远程调用的接口,参数stationID:站所编号,objAddr:遥//信量地址,value:遥信量值
public boolean setAnalogValue(int stationID,int objAddr, intvalue) ;/ /给通信程序远程调用的接口
public boolean setPulseValue(int stationID,int objAddr, intvalue); //给通信程序远程调用的接口
public int getStatus(String id); //给图形系统状态关系量部分的接口
public double getAnalog(String id); //给图形系统模拟量部分的接口
public double getPulse(String id); //给图形系统脉冲量部分的接口
3.1.2 监控图形画面类
下面是这个类的public方法(Java语言):
public boolean refreshStatus(int stationID, int objAddr,int status )
//刷新状态量
public boolean refreshAnalog(int stationID,int objAddr,double
analog) //刷新模拟量
public boolean refreshPulse(int stationID,int objAddr,double pulse)
//刷新脉冲量
public int showGraph(int stationID,int objAddr)
//显示第stationID号站所第objAddr个对象所在的画面
public boolean receiveSelectConfirm(int stationID,int objAddr);
//接收到遥控选择确认报文,在画面上显示该信息
public boolean receiveExecuteConfirm(int staitonID,int objAddr)
//接收到第stationID个站所的第objAddr个开关的遥控执行确认报文
public boolean receiveYKCancel(int stationID,int objAddr)
//接收到遥控撤消响应报文
3.1.3 通信类
把完成通信任务的程序分布于两个类:(1)IntraComm,负责提供接收通信前置机传来的现场响应报文和数据的接口,对数据做解包处理后传送给实时数据库服务器提供的应用层接口。(2)位于通信前置计算机上的ToFieldComm,负责把接收现场响应报文和数据,按照前面第2节交互视图序列图中描述的协议进行处理,还有一个任务是把收到的来自调度机的调度操作命令下发给RTU。
·IntraComm类的方法有:
public boolean ReceiveUserData(String dataStream, chardataLevel)
·ToFieldComm类的主要方法有
public boolean YKSelect(int StationID,int objAddr) ;
public boolean YKExecute(int StationID,int objAddr, intoperateType) ;
public boolean YKCancel(int StationID,int objAddr);
public boolean LinkRequire(int RTUAddr);
public boolean ResetSend(int RTUAddr);
public boolean AllFetch(int RTUAddr);
public boolean RequireAccess();
public boolean Fetch2UserData(int RTUAddr);
public boolean FetchPulse(int group);
3. 2 持久对象的设计
需要永久保存的对象的类<




