基于Visual Basic快速开发现场电视监控系统
摘要: 本文介绍了一种用Visual Basic快速开发现场电视实时监控系统的方法,该方法简单方便、成本低廉,具有一定的实用价值。实时监控系统投入使用可有效地提高电视台或交通部门的工作效率。
关键词:VB电视监控系统ActiveX
随着电视监视器材、计算机技术的日益发展,图形监视系统在电视系统或监控场所得到了广泛地应用。用图形来实时显示被控对象(摄像机、终端设备等)在操作过程中的状态,具有清晰明了、形象直观且可以及时处理反馈信息。它比数字仪表包含的信息量大得多,因此使现场监控人员的工作方式得到了改进,效率也由此得到了很大的提高。
现场电视监控系统由实时控制系统、监视系统及管理信息系统组成。实时控制系统完成实时数据采集处理、存储、反馈的功能;监视系统完成对各个监控点的全天候的监视,能在多操作控制点上自动或手动切换多路图像,能遥控前端设备,能使摄像镜头自动对焦等;管理信息系统完成各类所需信息的采集、接收、传输、加工、处理,是整个系统的控制核心。
目前的图形实时监控软件通常用VC或VC++开发,它对软件开发人员要求很高,而且开发周期较长,开发难度也偏大。如果利用Visual Basic(VB)来开发有关的监控系统,就能较好地解决上述问题。
1设计思路与技术路线
由于Visual Basic在界面制作上的优越性,我们采用Visual Basic来进行系统的快速开发。本系统必须对硬件进行实时监视控制,从而实现监控功能。要利用VB来开发就必须先解决VB不能直接访问低层硬件的问题,也就是要提出用VB访问低层硬件的解决方案。我们为本系统确定了下列设计方案:让VB去调用DLL文件,再让DLL去调用VxD文件,通过VxD文件实现对低层硬件的实时控制,再通过写并行端口实现硬件电路的切换。这样,即克服了VB不能直接访问低层硬件缺点,又发挥了VB在界面和开发速度上的优点。本系统主控模块如图1所示。主控模块是监视中心的主界面,它分为手动模块、自动模块、退出模块三个子模块。手动子模块又分为键盘控制和鼠标控制,主要为了监控中心人员灵活的手动控制各个监控点;自动子模块又分为打开通道、增加一项、设置时间、更改名称、删除一项、关闭通道,主要为了监控中心人员方便的自动控制各个监控点,遥控远端设备。
图1系统结构图
2功能简介
(1)监控硬件是通过写计算机的并行端口来实现,VB通过调用DLL向并行端口写入8bit的定位信息,本系统采用四个通道并行监控控制点,各通道互不影响。由后端硬件电路根据这8bit的定位信息判断哪个端口的哪个摄像机(监控点)被选中,现场电视监控系统服务器接通被选中的摄像机所对应的门电路。同时在监控中心实时的反映出来。
(2)系统提供了手动控制和自动控制二种方式。
①自动控制:实现对各个摄像机(监控点)的循环监控。对正在监控摄像机(监控点)进行计时,达到此摄像机(监控点)预定时间时,去调用自动切换子程序完成切换功能,从而使系统按照监控中心人员预先设定的监控顺序自动循环切换。监控中心人员可选择监控的摄像机序列,在自动监控状态下加载后,可以动态的增加、删除摄像机,改变播出时间和顺序。
②手动控制:实现对各个摄像机(监控点)的手动监控。由于工作需要,有时需要固定在某个摄像机(监控点)长时间不间断地监控,本系统提供了手动控制很好的满足了这个需要。当系统处于手动状态时,监控中心人员可以通过主窗口的手动按钮,或使用键盘数字键选择哪个通道监控哪一台摄像机。选中后,该通道就固定监控此摄像机(监控点),直到手动选择另一个摄像机(监控点)时,才调用手动切换子程序完成切换功能。
(3)系统界面采用VB6.0中的Listview控件,此控件具有SmallIcon、LargeIcon、List、Report四种显示方式,从而达到用户界面友好的效果。图2是在Report显示方式下的监控中心主界面。
图2 现场电视监控系统
3.系统的实现
3.1VB访问低层硬件的实现
支持低层硬件访问的DLL文件和ActiveX控 件,通过它们可读写存储器单元、端口,甚至控制硬件中断。本系统利用DLL实现访问低层,详见图3所示。
图4低层硬件访问示意图
3.2系统中对播放序列存储的实现
由于本系统涉及的摄像机为16台,数量不算太多,可不采用数据库存储,而巧妙地选用随机文件(*.dat)的方式进行存储,可大大提高响应的速度。
表1随机文件格式表
3.3写并行端口的程序实现
ID域为16×4个摄像机各自唯一的编号,按编号控制门电路的接通与断开。
表2 8bit定位信息取值与通道对照表
表2中通道列中的A、B、C、D分别对应A、B、C、D四个通道,高位(HEX)列只要用二进制的低六位即可完成控制功能。编写函数WriteToPort向并口中写入8位的二进制数,部分关键源程序如下:
Public Sub WriteToPort(Addr As String, ValPort As String) ' CW As CheckBox)
Dim Nomw As Integer, DatW As Integer
' If CW.Value = Checked Then