WinCC 报警消息触发摄像头自动定位 WinCC / V7.5 / Camera Preset positions https://support.industry.siemens.com/cs/ww/en/view/109766960 Siemens Industry Online Support
This entry is from the Siemens Industry Online Support. The general terms of use (http://www.siemens.com/terms_of_use) apply. 安全性信息 Siemens 为其产品及解决方案提供了工业信息安全功能, 以支持工厂 系统 机器和网络的安全运行 为了防止工厂 系统 机器和网络受到网络攻击, 需要实施并持续维护先进且全面的工业信息安全保护机制 Siemens 的产品和解决方案仅构成此类概念的其中一个要素 客户负责防止其工厂 系统 机器和网络受到未经授权的访问 只有在必要时并采取适当安全措施 ( 例如, 使用防火墙和网络分段 ) 的情况下, 才能将系统 机器和组件连接到企业网络或 Internet 此外, 应考虑遵循 Siemens 有关相应信息安全措施的指南 更多有关工业信息安 全的信息, 请访问 http://www.siemens.com/industrialsecurity Siemens 不断对产品和解决方案进行开发和完善以提高安全性 Siemens 强烈建议您及时更新产品并始终使用最新产品版本 如果使用的产品版本不再受支持, 或者未能应用最新的更新程序, 客户遭受网络攻击的风险会增加 要及时了解有关产品更新的信息, 请订阅 Siemens 工业信息安全 RSS 源, 网址 为 http://www.siemens.com/industrialsecurity Entry-ID: Entry ID, V 0.0, mm/yyyy 2
目录 1 < 概述 >... 4 1.1 < 功能说明 >... 4 1.2 < 测试环境 >... 4 2 < 摄像头控件介绍 >... 5... 7 3.1 < 在 WinCC 中添加控件 >... 7 3.2 < 摄像头常规操作 >... 7 3.3 < 报警自动定位摄像头到设备 >... 9 4 < 注意事项 >... 18 Entry-ID: Entry ID, V 0.0, mm/yyyy 3
1 < 概述 > 1 < 概述 > 1.1 < 功能说明 > < 在许多工业现场, 当一些重要的设备产生报警消息时, 要求摄像头能自动定位到相应的设备, 从而使操作人们能直观地看到设备的情况 当使用 WinCC 做为监控画面时, 有时还会要求 WinCC 和摄像头联动, 即当 WinCC 中指定的报警被触发时, 需要控制摄像头定位到发生报警的设备 本文档使用 WinCC V7.5 和海康威视摄像头来介绍如何实现 WinCC 和摄像头联动的功能 > 1.2 < 测试环境 > < WinCC 版本 : WinCC V7.5 Update2 操作系统 : Windows 10 摄像头型号 : 海康威视 DS-2CD3Q10FD-IW > Entry-ID: Entry ID, V 0.0, mm/yyyy 4
2 < 摄像头控件介绍 > 2 < 摄像头控件介绍 > < 海康威视提供了 NetVideoActiveX 控件用来控制摄像头 通过这个控件可以查看指 定通道的视频, 并能控制摄像头云台运动或到达预设的位置 NetVideoActiveX 控件开发包包括的内容如图 1 所示 图 1 其中 control 文件夹下是 ActiveX 控件, 如图 2 所示 双击 register.bat 注册 NetVideoActiveX23.ocx 控件 图 2 NetVideoActiveX23 文件夹下包含一个测试网页 Index.htm, 使用这个网页文件可 以测试 NetVideoActiveX 控件在本台计算机上能否正常工作 图 3 Entry-ID: Entry ID, V 0.0, mm/yyyy 5
2 < 摄像头控件介绍 > 打开 Index.htm, 输入摄像头的 IP 地址 端口号 用户名和密码后, 点击 注册 然后, 获取并选择设备名称和通道, 点击 开始预览 如果能否正常预览摄像头画面, 如图 4 所示, 则代表控件工作正常 如果 Index.htm 工作不正常, 由于本控件为摄像头厂家所提供, 因此请联系摄像头厂家解决问题, 西门子不负责这部分内容的支持 图 4 注意 : 这里的端口号是 服务端口, 如图 5 所示 : > 图 5 Entry-ID: Entry ID, V 0.0, mm/yyyy 6
3.1 < 在 WinCC 中添加控件 > < 按照图 6 所示步骤添加 NetVideoActiveX 控件到 WinCC, 并在 WinCC 画面中插入 此控件 这个控件默认名为 控件 1, 保持不变即可 > 图 6 3.2 < 摄像头常规操作 > < 摄像头常规操作包括登录 / 退出 云台控制以及预置位置操作 如图 7 所示 : (1) 登录到摄像头 图 7 Entry-ID: Entry ID, V 0.0, mm/yyyy 7
long Login ( 摄像头的 IP 地址, 端口号, 端口号, 密码 ) WinCC 登录到摄像头的脚本如图 8 所示 图 8 (2) 预览画面 BOOL StartRealPlay ( 播放通道号, 协议类型, 码流类型 ) 其中, 协议类型,0 TCP, 1 UDP 码流类型,0 表示主码流, 1 表示子码流 WinCC 预览画面的脚本如图 9 所示 图 9 (3) 停止预览 BOOL StopRealPlay () WinCC 停止预览的脚本如图 10 所示 图 10 (4) 云台控制 BOOL PTZCtrlStart ( 云台动作, 云台速度 ) 参数说明 : 云台动作 :0 -- 云台向上,1 -- 云台向下,2 -- 云台向左,3 -- 云台向右, 4 -- 焦距缩进,5 -- 焦距拉远,6 -- 焦点近,7 -- 焦点远,8 -- 光圈小,9 -- 光圈大,10 自动, 11 灯光, 12 雨刷,13 - 云台左上, 14 - 云台右上, 15 - 云台左下, 16 - 云台右下 云台速度 : 范围为 1 7 WinCC 控制摄像头云台上升的脚本如图 11 所示 Entry-ID: Entry ID, V 0.0, mm/yyyy 8
图 11 (5) 预置点 设置预置点 :BOOL PTZCtrlSetPreset ( 云台预置位号 ) WinCC 设置预置点 1 的脚本如图 12 所示 图 12 回到预置点 :BOOL PTZCtrlGotoPreset ( 云台预置位号 ) WinCC 回到预置点 1 的脚本如图 13 所示 > 图 13 3.3 < 报警自动定位摄像头到设备 > < 实现这个功能的整体思路如下 : WnCC 报警去触发 GMsgFunction 标准函数, 在函数中获取报警信息 ( 是否有新报警到来 报警类别 消息类型等 ) 后, 如果有报警到来, 则在 WinCC 主画面上弹出视频画面, 并根据消息类型 ( 根据报警所属设备定义消息类型 ) 去控制摄像头云台到达对应的预设位置 3.3.1 GMsgFunction 标准函数介绍 WinCC 项目中使能 触发动作 功能的报警被触发 ( 到来, 离开, 被确认...) 时, 将会触发 WinCC 标准函数 GMsgFunction Entry-ID: Entry ID, V 0.0, mm/yyyy 9
图 14 "GMsgFunction()" 函数可以在全局脚本编辑器中的 "Standard functions > Alarm > GMsgFunction" 中找到 函数 GMsgFunction 的传入参数提供了一系列消息数据, 包括消息状态 消息号 时间戳等 如图 15 所示 : 图 15 Entry-ID: Entry ID, V 0.0, mm/yyyy 10
3.3.2 组态步骤 第一步 : 创建变量 报警变量 AlarmTag 用来触发报警, 变量 Alarm_Type 用来获取报警消息所属的消 息类型 如图 16 所示 : 图 16 第二步 : 创建报警类别和消息类型 新建报警类别 车间一, 在下创建两个消息类型 设备一 设备二 如图 17 所示 : 图 17 第三步 : 创建报警创建两个报警消息, 由变量 AlarmTag 触发 消息类型分别属于 设备一 和 设备二 如图 18 所示 : 图 18 第四步 : 创建视频子画面创建画面, 并调整画面尺寸 ( 例如,800*450), 并在画面中插入 NetVideoActiveX 控件 如图 19 所示 : Entry-ID: Entry ID, V 0.0, mm/yyyy 11
图 19 在此画面的 打开画面 和 关闭画面 事件中分别加入登录摄像头并预览 退出登录的 脚本 如图 20 所示 : 图 20 打开画面 事件中加入登录摄像头并预览的脚本 如图 21 所示 : 图 21 关闭画面 事件中加入退出登录的脚本 如图 22 所示 : Entry-ID: Entry ID, V 0.0, mm/yyyy 12
图 22 在画面属性 -> 其它 -> 显示 -> 动态下, 添加 VBS 脚本, 实现根据消息类型定位摄像头 到相应预设位置的功能 如图 23 所示 : 图 23 脚本如图 24 所示, 并更改脚本触发器为变量触发 图 24 第五步 : 创建主画面在主画面中加入触发报警的按钮 报警视图以及用来显示视频的画面窗口, 如图 25 所示 画面窗口的属性设置如下 : ü 显示 : 否 ; ü 可关闭 : 是 ; ü 调整大小 : 是 ; ü 画面名称 :HKcamera_Win.pdl( 视频子画面的名称 ) Entry-ID: Entry ID, V 0.0, mm/yyyy 13
图 25 报警触发按钮用来设置报警变量 AlarmTag, 从而触发报警, 其中报警 1: AlarmTag =1, 报警 2:AlarmTag =2, 复位报警 :AlarmTag =0 如图 26 所示 : 第四步 : 修改 Gmsgfunction 打开全局 C 脚本, 如图 27 所示 : 图 26 Entry-ID: Entry ID, V 0.0, mm/yyyy 14
图 27 GMsgFunction 函数位于 "Standard functions > Alarm > GMsgFunction", 双击打开 修改脚本如图 28 所示, 红色方框内是添加的内容 : 图 28 Entry-ID: Entry ID, V 0.0, mm/yyyy 15
修改后的 GMsgFunction 函数可以获取报警对应的消息类型, 并把读取的值赋给 WinCC 变量 同时判断报警状态, 当报警状态为 到达 时, 触发视频画面窗口的显示 修改后的完整代码如下 : BOOL GMsgFunction( char* pszmsgdata) { MSG_RTDATA_STRUCT mrt; MSG_CSDATA_STRUCT sm; MSG_TEXT_STRUCT testacion; MSG_TEXT_STRUCT tclase; MSG_TEXT_STRUCT ttipo; CMN_ERROR perror; memset( &mrt, 0, sizeof( MSG_RTDATA_STRUCT ) ); if( pszmsgdata!= NULL ) { printf( "Meldung : %s \r\n", pszmsgdata ); sscanf( pszmsgdata, "%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, %d,%d", } &mrt.dwmsgnr, &mrt.dwmsgstate, &mrt.stmsgtime.wyear, &mrt.stmsgtime.wmonth, &mrt.stmsgtime.wday, &mrt.stmsgtime.whour, &mrt.stmsgtime.wminute, &mrt.stmsgtime.wsecond, &mrt.stmsgtime.wmilliseconds, &mrt.dwtimediff, &mrt.dwcounter, // Meldungsnummer // Status // Jahr // Monat // Tag // Stunde // Minute // Sekunde // Millisekunde // Zeitdauer der anstehenden Meldung // Interner Meldungszähler &mrt.dwflags, // Flags( Unrestricted ) &mrt.wpvalueused, &mrt.wtextvalueused ); // Prozesswerte lesen, falls gewünscht printf("nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %d\r\n", mrt.dwmsgnr, mrt.dwmsgstate, mrt.stmsgtime.wday, mrt.stmsgtime.wmonth, mrt.stmsgtime.wyear, mrt.stmsgtime.whour, mrt.stmsgtime.wminute, mrt.stmsgtime.wsecond, mrt.stmsgtime.wmilliseconds, mrt.dwtimediff, mrt.dwcounter, mrt.dwflags ) ; SetTagBit("Alarm_Coming",0); // 复位报警到达标志变量 if(mrt.dwmsgstate == MSG_STATE_COME) // 报警到达状态 { char aux; MSRTGetMsgCSData(mRT.dwMsgNr, &sm, &perror); // 根据报警编号获得报警数据 MSRTGetMsgText( 0, sm.dwtextid[1], &testacion, &perror); Entry-ID: Entry ID, V 0.0, mm/yyyy 16
MSRTGetMsgText( 0, sm.wclass, &tclase, &perror); MSRTGetMsgText( 0, sm.wtyp, &ttipo, &perror); SetTagBit("Alarm_Coming",1); // 置位报警到达标志变量 sprintf(&aux,"%d",sm.wtyp); SetTagChar("Alarm_Type",&aux); // 消息类型变量 SetPropBOOL("Main.PDL"," 画面窗口 1","Visible",1); } return( TRUE ); } // 显示视频窗口 3.3.3 运行结果 触发报警 1, 视频画面自动弹出并切换到预置位置 1 如图 29 所示 : 图 29 触发报警 2, 视频画面自动切换到预置位置 2 触发报警 2 之前可以关闭视频画面窗口, 也可以不关闭 如果关闭视频画面窗口, 则视频画面会自动弹出并切换到预置位置 2 如图 30 所示 : > 图 30 Entry-ID: Entry ID, V 0.0, mm/yyyy 17
4 < 注意事项 > 4 < 注意事项 > < 使用本文档需要注意以下事项 : 1 必须保证 Index.htm 能够正常预览摄像头画面, 否则 WinCC 和摄像头联动功能无法实现 2 如果 Index.htm 工作不正常, 由于本控件为摄像头厂家所提供, 因此请联系摄像头厂家解决问题, 西门子不负责这部分内容的支持 3 退出 WinCC 前请确保退出 ( 注销 ) 摄像头, 否则再次启动 WinCC 时将无法启动画面, 并会提示 无法激活运行系统! 检查 wincc 中心的设置 > Entry-ID: Entry ID, V 0.0, mm/yyyy 18