基于udp的监视系统示例

103 篇文章 0 订阅
62 篇文章 0 订阅

前言

想法来源:http://nashruddin.com/Web_Based_Surveillance_System_with_OpenCV_PHP_and_Javascript

这篇文章是基于opencv,php,javascript做了一个基于网络的监视系统。

偶虽然熟悉opencv,稍微懂点javascript,但是不懂php,所以只能另辟新径:

服务器:通过opencv捕获每一帧图片,然后基于udp发送出去。

客户端:使用activex控件嵌入网页,activex中接受服务器发送的实时视频文件。

系统设计

整个系统的思路比较清晰,我直接引用上面那篇博文的系统结构图:

服务器端设计

初始化套接字库,接下来是一系列代办的UDP初始化设置。OpenCV初始化,开启摄像头,由于要网络传输视频,所以把图片缩小1/4。需要说明一点:opencv捕获到的视频帧数据不能直接发送(可能是我愚钝,不知道怎么直接发送),所以捕获每一帧数据以后我先写成jpeg文件,然后再一遍读取文件一边发送。套接字缓存最大8K到9K,所以只能分段发送。。。

服务器端需要安装opencv,我的版本是2.0。

最终代码如下:

 

客户端设计

1,首先新建一个activex的工程。activex工程中ctrl类相当于单视图中的view类。在新建的工程ctrl类下有这么一段代码:

 

运行一下可以看到一个椭圆。。。这里就是绘图的主函数。就在这个函数中显示自定义的对话框

2,在资源中新建对话框,因为将来要嵌入网页,修改对话框的属性:

Style = child

System Menu = false

Title Bar = false

将确定,取消按钮重命名为:连接服务器,断开连接。在对话框中增加一个Static Text控件显示视频,该控件为IDC_IMAGE

插入新类:ClientDialog。对话框的ID = IDD_CLIENT,需要一个成员控件:IDC_IMAGE。

然后再ClientDialog类中增加udp相关的操作。

最终ClientDialog代码如下:

 

到现在,只是定义了ClientDialog类,并没有定义该类的实例,也就是说当运行控件以后看到的仍然是一个偌大的椭圆。所以需要修改ctrl类:

在ctr类中定义成员指针ClientDialog* m_app; ctrl的构造函数中初始化列表中置m_app为NULL,类视图下右击ctrl类,属性,重载OnCreate函数。在OnCreate函数创建对话框,OnDraw中显示,析构函数中释放:

ctrl类的关键代码:

 

调试activex设置

工程属性 / 调试 / 命令:C:/Program Files/Internet Explorer/iexplore.exe

工程属性 / 调试 / 命令参数 : E:/RYF resource/UDPChat/a.html

该html内容为:

注意html中需要一个CLSID,该ID为activex工程下,系统自动生成的idl文件中的:

 

这里的这个ID。。。参见我之前一篇blog:http://blog.csdn.net/dizuo/archive/2011/04/18/6331279.aspx

配置好以后,用IE调试就可以看到对话框出现。。。

 

说明一点:基于UDP连接,所以客户端点击“连接服务器”按钮以后,客户端先发送一个消息给服务器,跟服务器建立链接,然后服务器取得客户端IP地址,开始发送视频数据。代码中服务器是每隔300ms发送一次。。。一秒3帧左右。。。

最终效果:

gif在线制作:http://gif.55.la/

 

代码可以到我资源下载: http://download.csdn.net/source/3393178

 

### 回答1: CODESYS是一种开源的PLC编程软件,它可以用于编写控制器程序、数据保存和通信功能等。它支持不同的通信协议,其中包括UDP协议。 UDP是用户数据报协议(User Datagram Protocol)的缩写,它是一种无连接的协议,它不需要建立像TCP那样的连接。UDP通信在工业自动化应用中常用于高速数据通信和实时控制。 在CODESYS中使用UDP通信,需要使用串行通信库(Serial Communication Library)和网络库(Network Library)。使用串行通信库可以实现串口通信,而网络库则可以用于与其他设备进行以太网通信。 使用CODESYS进行UDP通信,需要首先设置控制器的IP地址和端口号。然后,使用CODESYS提供的函数库编写通信程序。例如,使用UDP_Send函数可以向指定的IP地址和端口发送数据,而使用UDP_Receive函数可以接收来自指定IP地址和端口的数据。 在实际应用中,需要根据具体情况选择不同的通信方式和实现方法。CODESYS提供了丰富的函数库和示例程序,可以帮助开发人员快速实现UDP通信功能,并提高控制器系统效率和可靠性。 ### 回答2: CODESYS是一款基于IEC 61131-3标准的编程环境,广泛应用于工业控制领域。在工业控制系统中,需要通过网络通信实现设备之间的数据交互。UDP是一种传输层协议,采用无连接的方式传输数据,具有传输速度快、效率高等优点。因此,在CODESYS中使用UDP通信非常常见。 CODESYS支持UDP通信,可以通过编写PLC程序实现UDP数据报文的发送和接收。首先,需要在PLC程序中定义UDP通信所需的参数,如IP地址、端口号等。然后,使用UDP通信功能块在程序中实现数据的发送和接收。使用UDP通信功能块时,需要指定发送或接收的数据大小、目标IP地址和端口号等参数。在数据发送过程中,可以使用循环语句实现多次发送;在数据接收过程中,可以使用计时器实现超时控制,确保数据接收顺利完成。 CODESYS的UDP通信可用于实现设备之间的实时数据交换,如传感器数据采集、设备状态监测等。同时,也可以通过UDP实现设备之间的远程控制和命令下发。UDP的高速传输可以满足对数据传输速度有高要求的应用场景,如生产自动化、机器人控制等。 总之,CODESYS的UDP通信功能为工业控制系统提供了强大的数据通信能力,方便且高效,具有广泛的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值