用Acti veX 控件实现对云台和镜头的远程控制


收稿日期!Z003- 03- 04 9修返日期!Z003- 06- 10 用 Acti veX 控件实现对云台和镜头的远程控制 丰洪才 邓华来 刘年波 (武汉工业学院 计算机与信息工程系9湖北 武汉 4300Z3 ) 摘 要!介绍了数码监控系统中的解码器和云台以及它们与计算机串口的硬件连接9以 Pelco 解码器为例9介 绍了在 Visual C ++ 编程中9运用面向对象的程序设计思想9利用 Acti ve X 控件和 TCP/I P 协议9实现对云台和 镜头远程控制的方法O 关键词!串行通信9解码器9Acti ve X 控件9TCP/I P 协议 中图法分类号!TPZ73 文献标识码!A 文章编号!1001- 3695 (Z004 )06- 0Z34- 03 I mple ment Re mote Control t o Pan/Tilt and Ca meral Usi ng Acti ve X Control FENG ~ong- cai DENG ~ua- lai LI U Nian- bo CDe Pt .Of CO mPuter 8 I nfOr matiOn Engineering Wuhan POl $technic Unizersit $ Wuhan ~ubei 4300Z3 China > Abstract :This paper has i ntroduced decode pan/tilt and t he hard Ware li nk of t he m Wit h t he port of co mputer serial co mmunication i n a syste m of di gital surveillance . Usi ng an exa mple of Pelco decode i ntroduced a met hod Which i mple- ment t he re mote control pan/tilt and ca meral When progra mmi ng Wit h VC ++ tools usi ng met hod of OOP utilizi ng Ac- tive X control and TCP/I P protocol . Key words :Serial Co mmunication ;Decode ;Active Control ;TCP/I P Protocol 1 引言 随着银行~交通~宾馆~大型场所和小区管理的发展 安全 成为至关重要的问题O在此情形下 高性能数码监控系统的需 求自然成为各应 用 部 门 所 关 心 的 热 点 社 会 各 界 需 要 一 个 经 济~安全可靠~智能的安防系统 数码监控系统即为其中的一个 重要组成部分O对于数码监控系统来说 它的主要功能是将监 控现场的场景转换成视频信号传递给计算机进行处理O为了 增加监控的范围~提高监控的效率 一方面可以增加数码监控 系统连接的摄像机数目 同时也可以在监控系统中配置具有云 台和镜头调节功能的高性能摄像机 以便在视频信号的采集过 程中 操作者可以通过服务器端或客户端对摄像机的摄像角度 和镜头实施控制O笔者在研究开发 NELL DVSZ000 数码视讯 系统的过程中 采用 Visual C ++ 编程工具 运用面向对象的程 序设计思想 利 用 Acti ve X 控 件 通 过 串 行 通 信 和 TCP/I P 协 议 实现了对云台和镜头的远程控制O 2 云台和解码器 2. 1 云台"解码器与服务器的连接 云台由摄像头支架和驱动器组成 驱动器的作用是通过步 进电机来驱动摄像头支架的转动 从而带动摄像头的转动O一 个高性能摄像机云台可以使支架向多个方向C上~下~左~右~左 上~右上~左下~右下等>转动 并可以调节摄像头的焦距~光圈~ 景深等O 如图1 所示 云台一般通过解码器作为中间设备与服务器端 计算机的 RS Z3Z/RS 485 串口相连接 解码器通过串口与服务器 端计算机进行通信O解码器的主要作用是:通过串口接收服务器 端计算机的控制码 并对此控制码进行地址解析和命令解析 将解 析的命令转换成相应的能够驱动云台转动的控制电压 再传递给 云台以控制云台的转动~摄像机镜头的调节及停止操作O 图1 计算机与云台和摄像机的连接 客户端计算机与服务器端计算机通过Inter net 相连接 对 云台和镜头的控制命令进行编码 通过 TCP/I P 协议发送到服 务器端计算机 服务器端计算机对客户端计算机发来的控制 命令进行解码 再转换成对云台和镜头的控制信号 从而实现 对云台和镜头的远程控制O 2. 2 服务器端计算机对云台和镜头的控制 如图1 所示 服务器对云台和镜头的控制实际上是通过解 码器来实现的 每个解码器对应一个云台 一个解码器只能为 一个云台 提 供 控 制 服 务O每 个 解 码 器 都 可 以 通 过 其 内 部 的 DI P 开关来设置其对应云台的二进制地址 并且在一个监控系 统中每个解码器设置的二进制地址应该互不相同 否则控制就 会出现混淆O每个解码器内部也设有一个地址解析器 负责将 串口发出来的数据进行地址解析O计算机通过串口实现对云 台和镜头的控制 对云台和镜头的控制信号是计算机通过串口 输出到解码器的单向控制信号O为了使用一个串口来控制多 个云台和镜头 每当解码器收到控制信号时 首先就要经过解 码器对控制信号进行地址解析 当发现解析的地址与解码器内 部设置的地址一致时 则接收相应的控制信号 并对该控制命 令进行解析 将命令转换成相应的能够驱动云台和镜头的控制 .43Z. 计算机应用研究 Z004 年 电压9再将控制电压传递给云台和镜头以控制云台的转动\ 镜 头的调解或停止等操作; 否则9若发现解析的地址与解码器内 部设置的地址不一致时9则该控制命令就不是本解码器所对应 云台或镜头的控制信号9解码器不对控制命令进行转换O 串行端口的本质功能是作为 CPU 和串行设备间的编码转 换器9在 Wi ndo Ws 环境下9串口是系统资源的一部分O 当数据 从 CPU 经过串 行 端 口 发 送 出 去 时9字 节 数 据 转 换 为 串 行 的 位O 在接收数据时9串行的位被转换为字节数据O 应用程序要 使用串口进行通信9必须设置通信的串口地址\ 波特率\ 奇偶校 验\ 数据位和停止位9在使用之前向操作系统提出资源申请要 求( 打开串口) 9通信完成后必须释放资源( 关闭串口) O 2. 3 解码器的控制协议 解码器的种类很多9各种解码器所使用的控制协议各不相 同9要控制云台和镜头9需要了解解码器的协议9解码器的协议 由控制码和内部物理地址两部分组成9控制码分启动码和停止 码O 以美国生产的 Pelco 解码器为例9其控制协议由8 个字节 组成9约定如下I (1 ) 启动码 启动左转码I 0xFF 通道号+0x01 00 04 3F 00 通道号+0x44 启动右转码I 0xFF 通道号+0x01 00 0Z 3F 00 通道号+0x4Z 启动上转码I 0xFF 通道号+0x01 00 08 00 Z0 通道号+0xZ9 启动下转码I 0xFF 通道号+0x01 10 00 00 Z0 通道号+0x31 启动左上转码I 0xFF 通道号+0x01 00 0c Z F Z0 通道号+0x5 C 启动左下转码I 0xFF 通道号+0x01 00 4 Z F Z0 通道号+0x64 启动右上转码I 0xFF 通道号+0x01 00 0A ZF Z0 通道号+0x5 A 启动右下转码I 0xFF 通道号+0x01 00 1Z Z F Z0 通道号+0x6Z 启动焦距增加I 0xFF 通道号+0x01 01 00 00 00 通道号+0x0Z 启动焦距减少I 0xFF 通道号+0x01 00 80 00 00 通道号+0x81 启动光圈增加I 0xFF 通道号+0x01 04 00 00 00 通道号+0x05 启动光圈减少I 0xFF 通道号+0x01 0Z 00 00 00 通道号+0x03 启动景深增加I 0xFF 通道号+0x01 00 Z0 00 00 通道号+0xZ1 启动景深减小I 0xFF 通道号+0x01 00 40 00 00 通道号+0x41 (Z ) 停止码 0xFF 通道号+0x01 00 00 00 00 通道号+0x01 其中9通道号+0x01 即为地址 码9是 可 变 部 分9可 以 通 过 改变通道号部分来控制其他同类型但不同地址的解码器O 3 MSCO mm 和Wi n SOck 控件 3. 1 Wi ndOws 环境下的串口编程 Wi ndo Ws 环境下 串 口 通 信 不 提 倡 应 用 程 序 直 接 控 制 硬 件9而是通过操作系统的设备驱动程序进行数据传递以控制串 口O 设计串口通信应用程序9可以使用 Wi ndo Ws 系统提供 的 应用程序接口(API ) 来完成9但使用直接调用 API 的方法进行 串口编程时9需要不断读取并修改串口属性来对串口进行读写 操作9并需要不断地检查读写操作通用信息及处理异常情况9 其控制结构比较复杂9继承性差9维护困难O 可使用 Microsoft 公 司 提 供 的 MSCo mm 控 件 进 行 串 口 通 信 程 序 设 计O MSCo mm 控件内部实际上也是调用 Wi ndo Ws API 来实 现 串 口通信的9只不过它对 Wi ndo Ws API 调用进行了封装9屏蔽了 一些 底 层 控 制 细 节 并 自 动 处 理 了 异 常 情 况9 所 以 使 用 MSCo mm 控件将大大提高程序的可读性\ 健壮性及可维护性O 3. 2 MSCOmm 控件 每个 MSCo mm 控件对象与一个串行端口对应9如果应用 程序需要访问多个串行端口9就必须使用多个 MSCo mm 控件 对象O 在 VC ++ 中要使用串行通信控件 MSCo mm9 首先要在 当前工程中插入该控件9在工程中添加了 CMSCo mm 类9接下 来就只需要了解控件提供的对 Wi ndo Ws 通信驱动程序的 API 函数的接口9即只需要设置和监视 MSCo mm 控件的属性和事 件O 这里只介绍其中几个相关的属性和方法I (1 )Co mmPort 设置并返回通信端口号9缺省为 COM1 O (Z )Setti ngs 以字符串的 形 式 设 置 并 返 回 波 特 率\ 奇 偶 校 验\ 数据位\ 停止位O (3 )Port Open 设置并返回通信端口的状态9也可以打开和 关闭端口O (4 )Input 从接收缓冲区返回和删除字符O (5 )Out put 向发送缓冲区写一个字符串O (6 )Input Len 设置每次Input 读入的字符个数9缺省值 为 0 9表明读取接收缓冲区中的全部内容O (7 )InBuff er Count 返回接收缓冲区中已接收到的字符数9 将其置0 可以清除接收缓冲区O (8 )Input Mode 定义Input 属性获取数据的方式(0 为文本 方式;1 为二进制方式) O RThreshol d 和 SThreshol d 属 性9表 示 在 OnCo mm 事 件 发生之前9接收缓冲区或发送缓冲区中可以接收的字符数O 3. 3 Wi n SOck 控件 Wi nSock 控 件 对 用 户 来 说 是 不 可 见 的9 它 提 供 了 访 问 TCP 和 UDP 网络服务的方便途径O 使用 Wi nSock 控件编写 客户或服务器应用程序9不必了解 TCP 的细节或调用低级的 Wi nSock APIs O 只需要设置控件的属性并调用其方法就可轻 易连接到一台远程机器上去9并且可以实现两台机器的双向数 据交换O 这里只介绍 Wi nSock 控件的其中几个重要的属性和 方法I (1 ) Protocol 返 回 或 设 置 Wi nSock 控 件 所 使 用 的 协 议 TCP 或 UDP 9默认为 TCP O (Z )LocalI P 只读属性9 以字符串(xxx .xxx .xxx .xxx ) 的 形式返回本机的I P O (3 )Local Port 返 回 或 者 设 置 所 用 到 的 本 地 端 口O 在 设 计时是可读 写的9而且是可用的O 如果设置为 0 则将选择一 个随机的端口O (4 )Re mote ~ost 返回或设置远程计算机地址9控件 向 它 发 送 数 据 或 从 它 那 里 接 收 数据O 该 地 址 既 可 以 是 主 机 名9 如 FTP I Ft p . microsoft .co m 9 也 可 以 是 I P 地 址 字 符 串9 如 100 .0 .1 .1 O (5 )Re motePort 返 回 或 设 置 要 连 接 的 远 程 计 算 机 端 口 号O (6 )Listen 服务 器 端 在 设 置 好 端 口 后9应 用 该 方 法 来 侦 听远程客户端的连接请求O 该方法仅适用于 TCP 连接O (7 )Connect 客户端向服务器端发送连接请求O (8 )Accept 当服务器端收到 Connecti onReCuest 事件时9 应用该方法接收远程客户的连接请求O (9 )Close 对客户机和服务器应用程序关闭 TCP 连接O (10 )SendData 将数据发送给远程计算机O (11 )Get Data 获取当前的数据块并将其存储在变体类型 (VARI ANT 类型) 的变量中O 53Z 第6 期 丰洪才等I 用 Acti ve X 控件实现对云台和镜头的远程控制 4 实现方法 4. 1 控制命令的编码与解码 客户端与服务器端通过网络连接9使用 Wi nSock 控件通 信O 客户端计算机要实现对云台和镜头的远程控制9必须向服 务器端计算机发送经过编码的控制命令9由服务器对此控制命 令进行解码9并向串口发送相应的云台和镜头控制码O 控制命 令由命令名~ 控制内容和通道号组成9编码和解码用三个字节 进行约定9定义如下: struct ure < char co mmand ; 命令名 char message ; 控制内容 char channel ; 通道号 } ; 第一字节是命令名9分别用不同的字符表示启动和停止云 台或镜头的运动O 第二字节是控制内容9如果命令名是启动云台或镜头运动 的控制命令9则第二字节为云台转动方向或镜头调节控制符9 分别表示云台上~ 下~ 左~ 右~ 左上~ 右上~ 左下~ 右下运动9镜头 焦距增~ 焦距减~ 光圈增~ 光圈减~ 景深增~ 景深减运动O 第三字节是需要控制的云台或镜头的通道号; 如果命令名 是停止云台或镜头运动的控制命令9则第二字节缺省9第三字 节为需要控制的云台或镜头的通道号O 4. 2 冲突的处理策略 对云台和镜头实施远程控制时9在下列两种情况下就会发 生控制冲突: 1 > 有两个或两个以上客户端同时对同一通道的云台或镜 头发出控制命令; Z > 有一个客户端和服务器端同时对同一通道的云台或镜 头发出控制命令O 解决冲突的策略是加锁和解锁O 为每个云台和镜头通道 设置一个锁9当某个通道对应的锁为解锁状态时9可以对该通 道发出控制命令; 否则9表示有一个客户端或服务器正在对该 通道发送控制命令9发送控制命令的用户必须等待9直到该通 道解锁为止O 服务器端在向某通道发送云台或镜头的控制命令时9先要 查询该通道的锁状态9若处于解锁状态9则首先对通道的控制 加锁9再发送控制命令9发送控制命令结束后9将该通道的控制 解锁; 若该通道的控制处于加锁状态9则等待O 客户端对云台或镜头控制是通过服务器端进行的O 客户端 若要向某通道发送云台或镜头控制命令9客户端必须首先向服 务器端发送控制申请命令9服务器在接收到客户端控制申请命 令后9就对该通道的锁状态进行查询9若处于解锁状态9则向客 户端发送申请控制成功信号9否则9向客户端发送申请控制失败 信号; 客户端根据接收到的服务器端应答信号作下一步的处理O 若申请成功9则发送对云台或镜头的控制命令9否则提示申请控 制失败O 服务器端在接收到控制命令后9就对该控制命令进行 解码9再按照服务器处理冲突的规则9向通道发送控制码O 控制申请命令由两个字节组成9第一个字节是该命令的命 令名9第二个字节是需要申请控制的通道号O 4. 3 编程实现 采用面向对象的方法9在工程中新建一个对云台和镜头控 制的基类 CCControl Base 9对云台和镜头的全部控制进行封装9 其中除控制云台转动和镜头调节操作的虚拟成员函数外9还要 加入 MSCo mm 控件并创建控件O 对于每种解码器9根据该解 码器的控制协议从该基类派生具体的解码器类9对于不同协议 的解码器封装成不同的类9对于 Pelco 解码器9根据 Pelco 解码 器的控制协议派生具体的 CPelcoProtocol 类如下: class CPelcoProt ocol :public CCControl Base < pri vate : CMSCo mm e m p MSCo mm ; e 串口控件的包裹类对象指针9用来指向一个已被初始化好了 的串口控件的包裹类对象e 本类将通过此指针来向串口发送数据 public : CPelcoProt ocol > ; 构造函数 ~CPelcProt ocol > ; 析构函数 voi d Set Send Tool CMSCo mm e p MSCo mm> < m p MSCo mm p MSCo mm ; } 设置数据传输工具 串口控件的包裹类对象指针> 以下为重载基类的控制云台和镜头各种操作的成员函数定义: voi d Left Turn i nt nCh > ; 使云台向左转9nCh 为需要控制的云台的编号 地址> . . . } ; 该类的成员函数实现如下: CPelcoProt ocol : :CPelcoProt ocol > < m p MSCo mm NULL ; } CPelcoProt ocol : : ~CPelcoProt ocol > < m p MSCo mm NULL ; } voi d CPelco : :Left Turn i nt nCh > < if !Start Send Data > > ret urn ; CByte Array Send Data ; Send Data .Set Size 7 > ; Send Data [0 ] 0xff ; Send Data [1 ] nCh +0x01 ; Send Data [Z ] 0x00 ; Send Data [3 ] 0x04 ; Send Data [4 ] 0x3f ; Send Data [5 ] 0x00 ; Send Data [6 ] nCh +0x44 ; m pCo mm- >Set Out put COle Variant Send Data > > ; 发送数据 EndSend Data > ; } 其他控制函数的实现与 Left Tur n i nt nCh > 的实现相似9 只是其中的控制码不同而已O 5 后记 笔者研究开发的 NELL DVSZ000 数码视讯系统曾通过湖 北省科技厅鉴定9产品通过公安部安全与警用电子产品质量检 测中心的检验O 在 NELL DVSZ000 数码视讯系统的研究开发 过程中9我们利用面向对象的程序设计方法9在 Visual C ++ 编 程语言中利 用 Acti ve X 控 件9实 现 了 对 云 台 和 镜 头 的 远 程 控 制9取得了很好的效果O 作者简介! 丰洪才(1963- )9男9湖北汉川人9系副主任兼网络中心副主任9副教授9 博士研究生9主要 研 究 方 向 为 多 媒 体 技 术 与 网 络\模 式 识 别;邓 华 来 (1980- )9男9湖北汉川人9本科9主要研究 方 向 为 多 媒 体 技 术;刘 年 波 (1981- )9男9湖北京山人9本科9主要研究方向为多媒体技术0 -63Z- 计算机应用研究 Z004 年 用ActiveX控件实现对云台和镜头的远程控制 作者: 丰洪才, 邓华来, 刘年波 作者单位: 武汉工业学院,计算机与信息工程系,湖北,武汉,430023 刊名: 计算机应用研究 英文刊名: APPLICATION RESEARCH OF COMPUTERS 年,卷(期): 2004,21(6) 被引用次数: 9次 本文读者也读过(5条) 1. 胡娴 支持多种协议的云台控制系统[会议论文]-2006 2. 曾爱民 一种基于IP分布式网络的云台镜头控制协议及其实现[学位论文]2007 3. 谭克俊.孟宪尧.房丽萍 基于8 9C5 1单片机的云台镜头解码器设计[期刊论文]-大连海事大学学报2001,27(3) 4. 董蕴华.魏辉 云台镜头控制系统终端解码器的设计与实现[期刊论文]-河南机电高等专科学校学报2005,13(2) 5. 冯娟.黄宏光.金晶.Feng Juan.Huang Hongguang.Jin Jing 基于RS485协议的解码器及转换器[期刊论文]-电子测量 技术2006,29(3) 引证文献(9条) 1.梁华才.吴先球.王珍宁.胡颖舒.陈俊芳 用Labview实现对云台和镜头的远程控制[期刊论文]-计算机时代 2007(1) 2.徐安排.徐声远 基于SPCE061A单片机的云台镜头控制系统设计[期刊论文]-电脑知识与技术(学术交流) 2007(5) 3.陆颖瑜.张永林 利用Java实现对云台和镜头的远程控制[期刊论文]-工程设计学报 2007(4) 4.陆颖瑜.张永林 利用Java实现对云台和镜头的远程控制[期刊论文]-安防科技 2007(9) 5.张秋林.夏靖波.邱婧.胡图 视频监控系统中云台控制模块的设计与实现[期刊论文]-电子技术应用 2011(9) 6.唐勇 多校区监考系统整合及实现[期刊论文]-农业网络信息 2009(2) 7.赵永胜.王飞.安国平.杨文通 高速路监视器云台设计及其动力学仿真[期刊论文]-机械设计与制造 2009(11) 8.王德义.陈娟.孙德辉 基于ATMEGA128的电动云台控制器设计[期刊论文]-电力自动化设备 2010(6) 9.姜远利 无线远程视频监控终端软件优化设计与实现研究[学位论文]硕士 2005 引用本文格式:丰洪才.邓华来.刘年波 用ActiveX控件实现对云台和镜头的远程控制[期刊论文]-计算机应用研究 2004(6)
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

沐风星星

贡献于2015-11-18

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf