使用D21DM模块并基于C++Builder的城市路灯无线监控软件设计
1、系统实现的功能
城市路灯监控系统是以城市地图为主显示界面,其主要功能有
1)控制功能。系统提供开/关灯控制功能,主控站自动将每天的灯控时间传送给分控点,分控点根据收到的灯控时间进行开关灯控制。主控站可手动执行群控 开/关灯,也可全天候对任一终端执行开/关灯。主控站通过GPS对时功能获得准确的时间并自动对分控点校对,保证节点有统一的时间基准。
2)数据采集功能。主控站根据数据采集周期自动采集各个分控点的数据,这些数据包括三相电压、支路电流、支路灯的开关状态、支路的报警信息(电流高高 限、电流高限、电流低限、支路短路、开关跳闸、电压缺相、电压上限和电压下限)、电度计量等。如果分站点出现报警,则分站向主控站提出报警,主控 站中断当前巡检,处理报警信息。
3)统计管理功能。系统具有完善的数据统计、分析、管理功能。分控点采集的上述数据通过数传电台发理后,以直观的图形或表格形式提供给用户。这些数据 包括亮灯率统计、线路状态显示、报警列表、各种数据自动保存到数据库中,对所需的数据自动形成各类所需格式报表,报表可以显示和打印。
4)图形显示功能。整个城市的路灯控制点以地图方式显示,在地图上表示分控点的位置和分控点的状态(开灯状态和报警状态),界面直观方便。点击各站点 标记,可以直接查看分控点当前信息。
5)参数设置功能。参数设置包括分控点参数、系统参数、分控点标志管理、用户管理和灯控时间等。
2 软件设计主要实现方法
该系统软件采用C++Builder5.0可视化开发工具编写,C++Builder具有和Delphi一样的组件库,但编译语言采用C++编译器,是快速应用程序开发工具。下面是软件主要部分实现方法。
1)无线通信。城市路灯监控系统是通过数传电台实现数据采集和控制的。数传电台与计算机连接采用的是RS232接口,因此程序需要实现串行通信。C++Builder没有提供串行通信控件,可以采用Windows-Apl编程方法控制串口或使用第三方串口控件,采用控件方法实现串行通信简单,同时也符合可视化编程思想。本系统使用SPCOmm控件,SPCOmm控件是用Delphi编写的控件,可以在C++Builder中安装使用,SPCOmm控件提供的属性、方法和事件主要有:
DtrControl:Dtr信号控制属性
SendDataEmpty:发送缓冲区空标志
StartComm:打开串口
StopComm:关闭串口
WriteCommData:向串口写数据
OnReceiveData串口有接收数据时的事件
数传电台间的点对点通信是靠电台的身份地址区分的。为实现对特定点的通信,主控机首先设置与分控点数传电台身份地址一致的主控站数传电台的目的地址,然后在向分控点发送数据和命令。数据通信程序实现的主要代码有:
向电台写控制命令
Comm1->Dtrcontrol=DtrEnable;//控制串DTR端,表明串口数据为发送给电台的命令
if(Comm1->SendDataEmpty)
Comm1->WriteCommData(SendBuffer,Length);//S-end-Buffer数据指针,Length为数据长度
发送数据或命令
Comm1->DtrControl=DtrDisable; //控制串口的DTR端,表明串口数据为通过电台发送的数据
if(Comm1->SendDataEmpty)
Comm1->WriteCommData(SendBuffer,Length);
收到的串口数据在OnReceiveData事件中处理。
2)城市地图显示。本系统的城市地图文件采用位图(BMP)格式,由于城市地图位图尺寸通常比显示设备的显示面积大,因此城市地图的显示采用漫游方式,即不用滚动条,通过键盘或者鼠标控制图象的移动,从而在较小的显示区域内可以浏览图象的任何部分。下面以鼠标控制为例说明。在窗体中放置一个TPanel控件,在Tpanel控件是放置一个Tlmage控件,设置Tlmage控件的AutoSize属性为True, Left属性为O,Top属性为O。TForm1的类定义中加两个私有变量:int Ixt,Iyo;
响应Tlmage控件的onMouseDown和onMouseMove事件.
Void__fastcall TFOrrm1::1mage1MouseDown?(Tobject Sender,TMouseButton,TshiftState?Shift int X,int Y)
{ixo=x; iYo=Y}
Void __fastcall?TFOrrm1::1mage1MouseMove (Tobject Sender,TshiftState Shift ,int X,int Y)
{int iDeltaX,iDeltaY;
if(Shift.Contains(ssLeft))
{
iDeltaX=X-ixo;
iDeltaY=Y-iyo;
if(iDeltaY﹠﹠ (!MoveFlag))
{
Maplmage->Left+=iDeltaX;
Maplmage->Top+=iDeltaY;
//控制地图漫游不出界
if(Maplmage->Left<(ClientWidth-Maplmage->Width))
Maplmage->Left=ClientWidth-Maplmage->Width
If(Maplmage->Top=(ClientHeighT-Maplmage->Height))
Maplmage->Top=ClientHeighT-Maplmage->Height;
if(Maplmage->Top>O?Maplmage->Top =O
if(Maplmage->Left>O?Maplmage->Top =O ;)}
3)数据管理。数据管理包括数据的内存管理和数据的存储,数据内存管理采用C++Builder的TList对象实现,Tlis对象用于维护各种类指针的索引,这些索引本身存有指向对象的指针,是C++Builder中用于实现动态链表的对象,能够在运行时修改。但Tlist索引对象的内存分配和释放都必须由程序员来完成。
声明TList对象:
TList﹡DataList;//声明一个TList对象
pData﹡Data;?//声明一个指向特定数据结构的指针在TList中动态增加一个数据点方法
pData=new Data;
DataList->Add(Pdatd);//将数据点指针加到TList链表未尾在TList中同删除一个数据点方法
PData=((Data﹡)DataList->ltems[i];//获得第I个TList 元素指针
DataList->Delete(i); //从Tlist中删除这个元素
delete pData;// 释放数据点所占的内存
路灯监控系统的各种数据包括站点参数、实时数据、报警数据、亮灯率数据、灯控时间和值班记录数据都保存在数据库,数据库采用 中的中的 数据库,数据库引擎采用 数据库引擎,是直接在 下的一个层次,允訢不同数据库格式无缝地使用 对数据库格式可以直接处理,因此处理速度快,使用方便。采用数据库方式进行数据存储,对数据的查询、增加、删除等操作也容易实现,便于实现系统的功能。
2 结束语
以上是城市路灯监控系统软件关键部分的实现方法,要设计完成整个软件系统,还有许多其它任务要做,这包括日出日落时间计算 、报表的显示和打印、报警的处理、用户管理、值班日志管理、时间调度和系统安全设计等。
文章版权归西部工控xbgk所有,未经许可不得转载。