65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中 Pelco P 和 D 协议的实现

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (22投票s)

2004年8月19日

10分钟阅读

viewsIcon

361280

downloadIcon

6147

这是一组完整的 C# 类,用于通过 RS422/485 的 'P' 和 'D' 协议控制 PELCO PTZ 摄像头、矩阵切换系统、接收器设备等。它支持所有命令,包括向上、向下、拉近、推远、向左、

引言

这是 GPL 软件。您可以随意使用,但请将任何改进反馈给我们。

这是一组完整的 C# 类,用于控制 PELCO PTZ 摄像头、矩阵切换系统,
接收器设备等,通过 RS422/485 的 'P' 和 'D' 协议。
它支持所有命令,包括向上、向下、拉近、推远、向左、向右、近焦、远焦,以及其他扩展命令。

要使用此功能,您需要在所需的串行端口输出上连接一个 RS232->RS422 适配器。

Pelco 不会返回任何有用的信息,因此您只需要支持 2 线(单向)通信即可。但是,我建议您阅读以了解命令是否已由设备接收。

本节介绍了向 Intercept Dome 发送命令时使用的协议,“P”版本协议和 Coaxitron 系列设备,以及 Pelco 的“D”版本接收器。这些协议使用无奇偶校验、一个起始位、八个数据位和一个停止位。推荐的波特率为 4800(4800, 8, N, 1, 1)。

理论

在这些协议中,消息结构不同。但是,这两个协议都使用 RS-485 端口来发送和接收消息。

以下所有值均以十六进制(基数 16)显示。

Pelco P 消息结构

字节型

函数

1

$A0

STX (开始传输)

2

$00 到 $1F

地址

3

数据字节 1

(见下文)

4

数据字节 2

(见下文)

5

数据字节 3

(见下文)

6

数据字节 4

(见下文)

7

$AF

ETX (结束传输)

8

$00-$FF

校验和

字节 1 始终为 $A0
字节 2 是接收器地址,由接收器中的 DIP 开关设置
字节 3-6,见下文
字节 7 始终为 $AF
字节 8 是字节 1-7 的 XOR 和

协议是“零索引”的,因此协议中发送的第一个接收器的十六进制地址是 $00,对应于地址 1。

Pelco D 消息结构

“D”协议包含一些额外的开销以提高传输的可靠性。消息格式为

字 1

字 2

字 3

字 4

字 5

字 6

字 7

同步字节

地址

命令 1

命令 2

数据 1

数据 2

校验和

同步字节始终为 $FF。

地址是所控制的接收器/驱动器的逻辑地址。

以下结构构建这些消息并为发送到设备做准备

public struct Message // Pelco P Message
  {
   public static byte Address;
   public static byte CheckSum;
   public static byte Data1,Data2,Data3,Data4;
 

   public static byte[] GetMessage(uint address, byte data1, byte data2, byte data3, byte data4)
   {
    if (address<0 & address>32)
     throw new Exception("Protocol Pelco P support 32 devices only");

 

    Address = Byte.Parse((address-1).ToString());
    Data1 = data1;
    Data2 = data2;
    Data3 = data3;
    Data4 = data4;

 

    CheckSum = (byte)(STX ^ Address ^ Data1 ^ Data2 ^ Data3 ^ Data4 ^ ETX);

    return new byte[]{STX,Address,Data1,Data2,Data3,Data4,ETX,CheckSum};
   }
   
  }

 

public struct Message //Pelco D Message
  {
   public static byte Address;
   public static byte CheckSum;
   public static byte Command1,Command2,Data1,Data2;

 

   public static byte[] GetMessage(uint address, byte command1, byte command2, byte data1, byte data2)
   {
    if (address<1 & address>256)
     throw new Exception("Protocol Pelco D support 256 devices only");
    
    Address = Byte.Parse((address).ToString());
    Data1 = data1;
    Data2 = data2;
    Command1 = command1;
    Command2 = command2;

 

    CheckSum = (byte)(STX ^ Address ^ Command1 ^ Command2 ^ Data1 ^ Data2);

    return new byte[]{STX,Address,Command1,Command2,Data1,Data2,CheckSum};
   }
   
  }

基本消息格式

在两种 Pelco 协议中,“数据字节”中的位被分成两组。对于 Pelco P 协议中的平移和倾斜命令,其功能确定如下:

位号

7

6

5

4

3

2

1

0

数据 1

0

摄像头开启

自动扫描开启

摄像头开关

光圈关闭

光圈打开

近焦

远焦

数据 2

0

广角变焦

长焦变焦

向下倾斜

向上倾斜

向左平移

向右平移

0(用于平移/倾斜)

数据 3

平移速度 $00 到 $3F, $40 表示 Turbo

数据 4

倾斜速度 $00 到 $3F

为了在 C# 中实现这一点,我们应该使用如下的二进制计算:

public enum PresetAction {Set,Clear,Goto}

public enum PatternAction {Start,Stop,Run}

public enum Action {Start,Stop}

public enum LensSpeed {Low=0x00,Medium=0x01,High=0x02,Turbo=0x03}

public enum Pan {Left = PanLeft,Right = PanRight}

public enum Tilt {Up = TiltUp,Down = TiltDown}

public enum Iris {Open = IrisOpen,Close = IrisClose}

public enum Zoom {Wide = ZoomWide,Tele = ZoomTele}

public enum Switch {On,Off}

public enum Focus {Near = FocusNear,Far = FocusFar}

并像这样实现:

public byte[] CameraSwitch(uint deviceAddress,Switch action)

{

byte m_action = CameraOnOff;

if(action == Switch.On)

m_action += CameraOnOff; //Maybe wrong !!!

return Message.GetMessage(deviceAddress,m_action,0x00,0x00,0x00);



}

但在 Pelco D 协议中,它们完全不同。

位 7

位 6

位 5

位 4

位 3

位 2

位 1

位 0

命令 1

模式

保留

保留

自动/手动扫描

摄像头开启/关闭

光圈关闭

光圈打开

近焦

命令 2

远焦

广角变焦

长焦变焦

向下

向上

左侧

右侧

始终为 0

模式位(命令 1 第 7 位)指示位 4 和 3 的含义。如果模式位为 ON 且位 4 和 3 也为 ON,则命令将启用自动扫描并开启摄像头。如果模式位为 OFF 且位 4 和 3 为 ON,则命令将启用手动扫描并关闭摄像头。当然,如果位 4 或位 3 中的任何一个为 OFF,则这些功能将不执行任何操作。

保留位(6 和 5)应设置为 0。

字 5 包含平移速度。平移速度范围为 $00(停止)到 $3F(高速),$FF 表示“turbo”速度。Turbo 速度是设备能达到的最高速度,它被单独考虑,因为它通常不是从高速到 turbo 的平滑过渡。也就是说,从一种速度到下一种速度通常看起来很平滑,并且会提供平滑的运动,除了进入和退出 turbo 速度。

字 6 包含倾斜速度。倾斜速度范围为 $00(停止)到 $3F(最高速度)。

字 7 是校验和。校验和是字节(不包括同步字节)的和模 256。

扩展命令集

除了上面显示的“PTZ”命令外,还有一些控制命令允许您访问某些设备的高级功能。

对于 Pelco P 协议,扩展命令集将设置数据字节 2 的位 0,并遵循下表中所示的格式。

命令

数据字节 1

数据字节 2

数据字节 3

数据字节 4

设置预设 XX

00

03

00

01 到 FF

清除预设 XX

00

05

00

01 到 FF

转到预设 XX

00

07

00

01 到 FF

翻转(旋转 180º)

00

07

00

21

归零平移位置

00

07

00

22

自动扫描

00

09

00

00

停止自动扫描

00

0B

00

00

远程复位

00

0F

00

00

区域开始

00

11

00

01 到 08

区域结束

00

13

00

01 到 08

写入字符到屏幕

00

15

0 到 28

0 到 7F

清除屏幕

00

17

00

00

报警确认

00

19

00

01 到 08

区域扫描开启

00

1B

00

00

区域扫描关闭

00

一维

00

00

模式开始

00

1F

00

00

模式停止

00

21

00

00

运行模式

00

23

00

00

变焦镜头速度

00

25

00

00 到 03

对焦镜头速度

00

27

00

00 到 03

在 Pelco D 实现中,它们如下所示:

 

命令

字 3

字 4

字 5

字 6

设置预设

00

03

00

01 到 20

清除预设

00

05

00

01 到 20

转到预设

00

07

00

01 到 20

翻转(180°)

00

07

00

21

转到零平移

00

07

00

22

设置辅助

00

09

00

01 到 08

清除辅助

00

0B

00

01 到 08

远程复位

00

0F

00

00

设置区域开始

00

11

00

01 到 08

设置区域结束

00

13

00

01 到 08

将字符写入屏幕

00

15

X 位置 00 到 28

ASCII 值

清除屏幕

00

17

00

00

报警确认

00

19

00

报警号

区域扫描开启

00

1B

00

00

区域扫描关闭

00

一维

00

00

设置模式开始

00

1F

00

00

设置模式停止

00

21

00

00

运行模式

00

23

00

00

设置变焦速度

00

25

00

00 到 03

设置对焦速度

00

27

00

00 到 03

请注意,在 Pelco P 实现中,校验和是通过字节 1-7 的 XOR 二进制和计算的,而在 D 中,它是通过字节 1-6 的模 256 和计算的。

0A        00001010

88        10001000

小计  10010010  92

90        10010000

小计  00100010  22   (模 256 允许高位溢出)

00        00000000

小计  00100010  22

40        01000000

01100010  62  

最终校验和值


设备响应不是很重要,但要知道的是,在 Pelco P 中,响应将是 ACK 命令,而在 Pelco D 中,对其中一个命令的响应为四字节。第一个字节是同步字符(FF),第二个字节是接收器地址,第三个字节包含报警信息,第四个字节是校验和。

祝你好运

 

反馈

 我将非常感谢您对该软件的有用性、对整体架构和/或基类效率的改进建议、任何错误报告等方面的反馈。

要联系我,请将所有意见发送至:tamir@khason.biz。您也可以访问我的网站 http://www.dotnet.us/ 了解更多关于我的信息。

开源许可协议

本软件程序(“程序”)根据本公共许可协议(“协议”)的条款提供。任何对程序的任何使用、复制或分发,即构成您接受本协议的条款。

Tamir Khason 特此授予您免费使用、复制、修改和分发本程序及其文档(如有)的许可,但前提是:(i) 您不得对本程序收取任何费用,并且您不得将本程序包含在任何预期或已收到报酬的软件或代码中;(ii) 下列版权声明出现在所有副本中;(iii) 版权声明和本协议均出现在所有支持性文档中;以及 (iv) 未经 Tamir Khason 特殊书面事先许可,不得在与分发本程序有关的广告或宣传中使用 Tamir Khason 的名称。

本程序按“原样”提供,不附带任何明示或暗示的保证或条件,包括但不限于任何所有权、不侵权、适销性或特定用途适用性的保证或条件。

您全权负责确定使用和分发本程序的适当性,并承担行使本协议项下权利的所有风险,包括但不限于程序错误、遵守适用法律、数据、程序或设备损坏或丢失,以及运营不可用或中断的风险和成本。

除本协议明确规定外,Tamir Khason 对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于利润损失)不承担任何责任,无论其如何引起以及基于何种责任理论,无论是合同、严格责任还是侵权行为(包括疏忽或其他)引起的,无论如何源于使用或分发本程序或行使本协议项下授予的任何权利,即使已被告知此类损害的可能性。

如果本协议的任何条款在适用法律下无效或不可执行,这不影响本协议其余条款的有效性或可执行性,且未经双方进一步行动,此类条款应以最小必要的程度进行修改,以使该条款有效且可执行。您有责任遵守您所在司法管辖区的任何出口法律,包括但不限于以色列。本协议受以色列国法律和以色列知识产权法律管辖。本协议的任何一方不得在本协议项下提起法律诉讼,除非自诉因发生之日起一年内。

如果您对本程序有任何意见、建议、改进、修改、变更、衍生作品或其他更改(统称为“贡献”),并希望提供给 Tamir Khason,请将此类贡献发送至:tamir@khason.biz。通过向 Tamir Khason 发送贡献,您承认并同意授予 Tamir Khason 一项非排他性的、全球性的、已全额付款的、免版税的许可,以复制、准备衍生作品、公开展示、公开表演、分发和再许可这些贡献,其源代码和/或目标代码形式,并且您在不享有任何会计权的情况下提供此许可。

本程序的版权声明如下:版权 © 2003 Tamir Khason。保留所有权利。由 Tadiran Security Systems ltd. 赞助。

这些协议的内容(非源代码或实现)被视为 Pelco 的财产。使用本协议的用户同意仅为 Pelco 的利益使用本协议。禁止出于对 Pelco 不利的目的使用本协议。

© . All rights reserved.