用C++Builder6实现CDT循环规约的方法

2023-01-11

作为电网调度自动化系统, 数据采集与监视控制 (SCADA) 是其最基本的功能。SCADA系统实时采集各厂站RTU遥测、遥信、电度、数字量等数据, 同时向各厂站RTU发送各种数据信息及控制命令[1]。这些数据的传输必须共同遵守通讯规约的约定。循环式远动规约 (CDT) 就是最常用的一种远动通信规约。

本文介绍了CDT规约的一种程序实现方法。该程序在W i n d o w s环境下, 利用C++Builder6开发, 运用了MSComm、ADO等一系列控件实现了CDT规约的串口通讯及数据存储。

1 规约简介

CDT规定了电网数据采集与监控系统中循环式远动规约的功能、帧结构、信息字结构和传输规则等。适用于点对点的远动通道结构及以循环字节同步方式传送的远动设备与系统[2]。

1.1 帧结构

帧结构如图1所示。每帧都以同步字开头, 并有控制字, 除少数帧外均应有信息字。信息字的数量依实际需要设定, 帧长度可变[2]。

同步字由3组EB90组成, 共6个字节。

控制字也由6个字节构成:控制字节、帧类别、信息字数、源站址、目的站址及CRC校验码。其中帧类别共有15种, 例如61H表示重要遥测 (A帧) 、F4H表示遥信状态 (D1帧) 。信息字数表示该帧中所含信息字数量。源站址和目的站址分别表示数据发送站和数据接收站的编号。

每个信息字同样由6个字节构成:功能码1个字节、信息数据码4个字节、校验码1个字节。其中功能码有256个 (00H-FFH) , 分别代表不同信息用途。每种信息的信息数据码格式也不相同。

以遥测信息字为例, 信息字格式如图2所示。

遥测功能码为 (00H~7FH) 。

每个遥测信息字传送两路遥测量, b11-b0传送一路模拟量, 以二进制码表示。b11=0时为正数。b11=1时为负数, 以2的补码表示负数。b14=1表示溢出, b15=1时表示数无效[2]。

检验码为C R C检验。

1.2 帧发送规则

重要遥测安排在A帧传送, 循环时间不大于3s;次要遥测安排在B帧传送, 循环时间一般不大于6s;一般遥测安排在C帧传送, 循环时间一般不大于20s;遥信状态信息, 包含子站工作状态信息, 安排在D1帧定时传送;电能脉冲计数值安排在D2帧定时传送;事件顺序记录安排在E帧以帧插入方式传送。变位遥信、子站工作状态变化信息插入传送, 要求在1s内送到主站;对时的子站时钟返回信息、遥控、升降命令的返送校核信息插入传送[2]。

2 软件设计思想

本软件将C D T规约的帧结构分析、组织、帧发送规则的交互以及串口通讯和CRC校验等功能分为不同的模块, 通过子程序方式分别加以实现。下面分别介绍各个子程序模块的实现流程。

2.1 串口通讯模块

在C++Builder 6开发环境中, 点对点串口通讯可以通过MSComm控件, SPComm控件, Windows API等不同方式来实现。其中M S C o m m控件操作最简单, 并且能满足大多数情况下串口编程的需要, 所以本文亦采用MSComm控件实现串口的底层通讯。

M S C o m m控件的常用属性如下:

*CommPort设置并返回通讯端口号。

*Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

*PortOpen设置并返回通讯端口的状态。也可以打开和关闭端口。

*Input从接收缓冲区返回和删除字符。

*Output向传输缓冲区写一个字符串。

设置好这些属性, 即可通过给Input、Output属性赋值实现数据的发送和接收。

对于复杂通讯中的交互过程, 以及接收到或要发送的数据的处理过程, 可以在编程过程中, 利用M S C o m m控件的OnComm事件捕获通讯事件, 并在OnComm事件处理函数中加入自己的处理代码。MSComm控件的CommEvent属性为1说明捕获了发送事件, 为2说明捕获了接收事件。

完整帧接收子程序在OnComm事件中的处理代码流程图如图3所示。

CDT规约循环发送数据帧, 所以完整帧接收子程序利用判断帧的同步字, 即3组EB90, 判断一个帧的开始, 同时给帧个数FrameN加1。前FrameN-1帧为完整帧, 第FrameN帧在帧处理子程序中加以判断。

2.2 CRC校验模块

实现CRC校验的基础是查表法, 即当已知n字节信息的CRC值, 求取n+1字节信息的C R C值时, 首先增加的字节异或原CRC的高8位, 形成一个新的字节, 求取该字节的C R C值, 再与原C R C的低8位相异或, 便可求得信息的CRC值。

每个信息字的接收和发送均要调用一次CRC校验子程序, 用以验证信息字在传送过程中是否受到外界干扰而发生错误。

3.3 信息帧处理模块

针对不同类别的帧, 分别编写相应的帧处理子程序, 将遥测、遥信、电能脉冲量及事件顺序记录分别提取出来, 放入Access数据库中。与A c c e s s数据库的连接采用ADOConnect组件和ADODataSet组件, 其中ADOConnect组件用于建立一个能被其他A D O组件共享的连接, ADODataSet组件可以从一个单一数据表中使用数据表的名字获取数据[3]。这两个组件的配合使用可以实现读写数据表。而数据表的界面显示则采用DataSource组件和DBGrid组件的组合。信息帧处理子程序的流程图如图4所示。

4 结语

文中的程序均在Windows XP、Borland C++Builder 6环境下编译通过, 并且经过多次通信实验证明, 该软件运行性能稳定, 实时性好, 很好的完成了CDT规约规定的基本功能, 具有一定的实用价值。

摘要:介绍了Windows环境下, 利用C++Builder 6的串口控件及数据库控件, 实现部颁CDT循环规约的通讯及数据存储的方法。

关键词:CDT,通信规约,C++Builder 6,Access

参考文献

[1] 王士政.电网调度自动化与配网自动化技术 (第二版) [M].北京:中国水利水电出版社, 2006.

[2] 部颁CDT规约 (DL451-91) 通信规约[S].

[3] Borland/Inprise公司著.C++Builder 5开发人员指南[M].机械工业出版社, 2001.

上一篇:培养学生创新能力之管见下一篇:总承包模式的资金管理