利用Java实现对云台和镜头的远程控制
和ServerSocket类分别用于客户机和服务器中,分别创建独立的Socket,将2个Socket进行连接,实现连接后,就可以通过Socket进行通信[6]。
在本系统中,服务器端起一线程进行监听,一旦收到客户端对服务器的指定端口发出的请求,即根据客户端传来的指令来控制云台和镜头。客户端通过发送字符串与服务器端匹配控制命令。如控制云台向上,则客户端:
public vo id up () {
t ry{
Socket mysocket= new Socket ( InetA ddress. getLocal2
Ho st () , 5678);
mysocket. getO utputSt ream ( ). w rite ( " up ". getBytes
() );
mysocket. clo se ();
}catch ( IO Excep t ion e) {
e. p rintStackT race ();
}
}
服务器端:
if (command. equals ("up " ) ) {
. . . . . .
??实现向上操作
}
用户只需在界面中点击"上"、"下"、"左"、"右"等命令按钮,系统即向服务器发送命令。
2、控制冲突的解决
当有多个客户端同时登陆并控制云台,或服务器端和客户端同时控制云台,便会发生控制冲突。解决控制冲突的策略是设置控制状态。客户端对云台或镜头的控制是通过服务器端进行的。 客户端若要发送云台或镜头控制命令,必须首先向服务器端发送控制申请命令,服务器在接收到客户端控制申请命令后,就会检查控制状态。
(1)当没有控制申请的时候控制状态为空,服务器接受控制申请;当云台和镜头正在被控制,控制状态为忙,申请控制需要等待,服务器将通知正在控制的用户。
(2)正在控制的用户若在15min内无控制操作,服务器端自动解除控制,若要继续控制则要重新申请。
(3)若申请控制的是服务器端,服务器会告知正在操作的客户端将在1min内退出。
四、实现方法
根据Pelco-D协议,对云台和镜头的控制,实质是通过串口对解码器输入一个包含七位数据码的数组,解码器通过所输入的数据码对云台及镜头进行控制建立好协议的主体,就可以建立一个控制窗口界面,实现各种控制功能,使用户在客户端方便地进行监控。如要建立云台上、下、左、右的控制,则在界面中建立4个控制按钮并分别实现对应的消息。
以下是实现控制云台向左转动的程序:
public stat ic vo id main (St ring[ ] args)
{
PelcoD pelcoD= new PelcoD ();
addressin= 0x01;
speeding= 0x20;
//获得数据码流
byte [ ] messagesend= pelcoD. CameraT ilt (addressin,
PelcoD. Pan. L eft. getV alue () , speedin);
t ry{
//写入数据码流
out. w rite (messagesend, 0, 7);
}catch ( IO Excep t ion e)
{. . . . . . }
catch (N ullPo interExcep t ion e)
{. . . . . . }
//关闭串口
serialPo rt. clo se ();
}
发送数据码流的例子:
如第1 个云台, 开启摄像机: FF, 01, 88, 00, 00,
00, 89;
第2 个云台, 关闭摄像机: FF, 02, 08, 00, 00,
00, 09;
第2 个云台, 以最大速度的一半左转: FF, 02,
00, 04, 00, 20, 26;
第2 个云台, 停止: FF, 02, 00, 00, 00, 00, 02;
第10 个云台,开启摄像机,焦距拉远,左转:
FF, 0A , 88, 90, 00, 40, 62。
五、结束语
本系统利用Java串口通信,实现了对云台和镜头的控制。软件具有工作于多种操作系统的性能,用户可随时随地通过IP网控制监控现场,使监控网络的互通成为现实,为现代视频监控提供一种可行方案。
在本系统中,服务器端起一线程进行监听,一旦收到客户端对服务器的指定端口发出的请求,即根据客户端传来的指令来控制云台和镜头。客户端通过发送字符串与服务器端匹配控制命令。如控制云台向上,则客户端:
public vo id up () {
t ry{
Socket mysocket= new Socket ( InetA ddress. getLocal2
Ho st () , 5678);
mysocket. getO utputSt ream ( ). w rite ( " up ". getBytes
() );
mysocket. clo se ();
}catch ( IO Excep t ion e) {
e. p rintStackT race ();
}
}
服务器端:
if (command. equals ("up " ) ) {
. . . . . .
??实现向上操作
}
用户只需在界面中点击"上"、"下"、"左"、"右"等命令按钮,系统即向服务器发送命令。
2、控制冲突的解决
当有多个客户端同时登陆并控制云台,或服务器端和客户端同时控制云台,便会发生控制冲突。解决控制冲突的策略是设置控制状态。客户端对云台或镜头的控制是通过服务器端进行的。 客户端若要发送云台或镜头控制命令,必须首先向服务器端发送控制申请命令,服务器在接收到客户端控制申请命令后,就会检查控制状态。
(1)当没有控制申请的时候控制状态为空,服务器接受控制申请;当云台和镜头正在被控制,控制状态为忙,申请控制需要等待,服务器将通知正在控制的用户。
(2)正在控制的用户若在15min内无控制操作,服务器端自动解除控制,若要继续控制则要重新申请。
(3)若申请控制的是服务器端,服务器会告知正在操作的客户端将在1min内退出。
四、实现方法
根据Pelco-D协议,对云台和镜头的控制,实质是通过串口对解码器输入一个包含七位数据码的数组,解码器通过所输入的数据码对云台及镜头进行控制建立好协议的主体,就可以建立一个控制窗口界面,实现各种控制功能,使用户在客户端方便地进行监控。如要建立云台上、下、左、右的控制,则在界面中建立4个控制按钮并分别实现对应的消息。
以下是实现控制云台向左转动的程序:
public stat ic vo id main (St ring[ ] args)
{
PelcoD pelcoD= new PelcoD ();
addressin= 0x01;
speeding= 0x20;
//获得数据码流
byte [ ] messagesend= pelcoD. CameraT ilt (addressin,
PelcoD. Pan. L eft. getV alue () , speedin);
t ry{
//写入数据码流
out. w rite (messagesend, 0, 7);
}catch ( IO Excep t ion e)
{. . . . . . }
catch (N ullPo interExcep t ion e)
{. . . . . . }
//关闭串口
serialPo rt. clo se ();
}
发送数据码流的例子:
如第1 个云台, 开启摄像机: FF, 01, 88, 00, 00,
00, 89;
第2 个云台, 关闭摄像机: FF, 02, 08, 00, 00,
00, 09;
第2 个云台, 以最大速度的一半左转: FF, 02,
00, 04, 00, 20, 26;
第2 个云台, 停止: FF, 02, 00, 00, 00, 00, 02;
第10 个云台,开启摄像机,焦距拉远,左转:
FF, 0A , 88, 90, 00, 40, 62。
五、结束语
本系统利用Java串口通信,实现了对云台和镜头的控制。软件具有工作于多种操作系统的性能,用户可随时随地通过IP网控制监控现场,使监控网络的互通成为现实,为现代视频监控提供一种可行方案。
1
2

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码