【E2450】Pelco-D协议解析器

2021-11-24 10:48:29      索炜达电子      913     

项目编号:E2450

文件大小:1.2M

源码说明:带中文注释

开发环境:C编译器

简要概述:

【E2450】Pelco-D协议解析器

概述

Pelco-D协议解析器库旨在帮助开发人员使用Pelco-D协议控制摄像机和云台。该库有一个简单的接口,只进行消息编码。该库包含一个类PelcoDProtocolParser。编程类的接口如下所示:

/**

 * @brief Pelco-D protocol parser class.

 */

class PelcoDProtocolParser

{

public:

    /**

     * @brief Class constructor.

     */

    PelcoDProtocolParser();

    /**

     * @brief Class destructor.

     */

    ~PelcoDProtocolParser();

    /**

     * @brief Method to encode Pelco-D command (Always 7 bytes).

     * 

     * @param packet Pointer to packet buffer. Always 7 bytes.

     * @param address Camera address (usually 1).

     * @param command_ID ID of command.

     * @param data_1 First byte of command data (according to Pelco-D specification).

     * @param data_2 Second byte of command data (according to Pelco-D specification).

     * @return true If the command has been encoded.

     * @return false In case any errors.

     */

    bool GetCommand(

        uint8_t* packet,

        uint8_t address,

        pelco::PelcoDCommands command_ID,

        uint8_t data_1 = 0,

        uint8_t data_2 = 0);

};

命令ID在PelcoDProtocolParser.h文件的PelcoDCommands结构中描述。结构的字段名与Pelco-D协议规范相对应。结构声明如下。

enum class PelcoDCommands

{

    // Main commands.

    CAMERA_ON,

    CAMERA_OFF,

    IRIS_CLOSE,

    IRIS_OPEN,

    FOCUS_NEAR,

    FOCUS_FAR,

    FOCUS_STOP,

    ZOOM_WIDE,

    ZOOM_TELE,

    ZOOM_STOP,

    DOWN,

    UP,

    LEFT,

    RIGHT,

    UP_RIGHT,

    UP_LEFT,

    DOWN_RIGHT,

    DOWN_LEFT,

    STOP,

    // Extended commands.

    SET_PRESET,

    CLEAR_PRESET,

    GO_TO_PRESET,

    FLIP_180DEG_ABOUT,

    GO_TO_ZERO_PAN,

    SET_AUXILIARY,

    CLEAR_AUXILIARY,

    REMOTE_RESET,

    SET_ZONE_START,

    SET_ZONE_END,

    WRITE_CHAR_TO_SCREEN,

    CLEAR_SCREEN,

    ALARM_ACKNOWLEDGE,

    ZONE_SCAN_ON,

    ZONE_SCAN_OFF,

    SET_PATTERN_START,

    SET_PATTERN_STOP,

    RUN_PATTERN,

    SET_ZOOM_SPEED,

    SET_FOCUS_SPEED,

    RESET_CAMERA_TO_DEFAULT,

    AUTO_FOCUS_AUTO_ON_OFF,

    AUTO_IRIS_AUTO_ON_OFF,

    AGC_AUTO_ON_OFF,

    BACKLIGHT_COMPENSATION_ON_OFF,

    AUTO_WHITE_BALANCE_ON_OFF,

    ENABLE_DEVICE_PHASE_DELAY_MODE,

    SET_SHUTTER_SPEED,

    ADJUST_LINE_LOCK_PHASE_DELAY,

    ADJUST_WHITE_BALANCE_R_B,

    ADJUST_WHITE_BALANCE_M_G,

    ADJUST_GAIN,

    ADJUST_AUTO_IRIS_LEVEL,

    ADJUST_AUTO_IRIS_PEACK_VALUE,

    QUERY

};

命令编码示例

下面是平台停止命令和放大命令的示例。

// Init variables.

uint8_t packet[7];

uint8_t camera_address = 1;

// STOP camera and PTU.

if (pelco_protocol_parser.GetCommand(packet, camera_address, pelco::PelcoDCommands::STOP))

{

    // Send command.

    tcp_port.SendData(packet, 7);

    serial_port.SendData(packet, 7);

}

// Zoom tele.

if (pelco_protocol_parser.GetCommand(packet, camera_address, pelco::PelcoDCommands::ZOOM_TELE))

{

    // Send command.

    tcp_port.SendData(packet, 7);

    serial_port.SendData(packet, 7);

}

演示应用程序

文件夹Pelco_D_ProtocolParser->PelcoDProtocolParserTests包含演示应用程序文件(PelcoDDemoApplication)。应用程序在启动后读取PelcoDemoApplication.json参数文件,该文件包含视频源参数和摄像头或云台的连接参数。应用程序可以通过串行端口或TCP连接控制摄像头或云台。配置文件的内容如下所示。

{

    "Video_Source_Params":

    {

        "video_source_init_string":"0"

    },


    "Communication_Params":

    {

        "camera_IP":"127.0.0.1",

        "TCP_port":5600,

        "serial_port_name":"/dev/tty0",

        "serial_port_baudrate":115200,

        "camera_address":1,

        "max_PTU_speed":63

    }

}

应用程序可以从视频文件捕获视频(例如:video\u source\u init\u string:“test.mp4”),也可以捕获RTP视频流(例如:video\u source\u init\u string:)rtp://xxx.xxx.xxx.xxx:1234)或可以从网络摄像机捕获视频(例如:视频\源\初始\字符串:“0”)。“通信参数”部分包含与摄像头或云台连接的参数。如果要通过TCP连接进行控制,必须在配置文件中设置正确的TCP端口(TCP_端口字段)和设备IP地址(摄像头_IP字段)。如果不需要TCP连接,则将字段TCP_端口值设置为-1。要通过串行端口进行控制,需要设置串行端口名称(串行端口名称字段)和波特率(串行端口波特率字段)。摄像头地址字段定义通过Pelco-D协议控制的摄像头或平台的名称。max_PTU_speed(最大速度)字段定义了最大云台速度(根据Pelco-D协议,最大速度不得超过63)。启动演示应用程序并初始化参数后,软件将在单独的窗口中显示视频。该应用程序使用OpenCV库捕获和显示视频。要编译演示应用程序,必须在操作系统中指定OpenCV库的路径。演示应用程序的用户界面如下所示。

【E2450】Pelco-D协议解析器

用户界面由一个视频显示窗口组成,其中包含叠加信息:从视频中心到鼠标指针位置的一条线,以及对程序控制按钮的提示。用户可以使用鼠标控制相机旋转。要执行此操作,请在视频窗口中的任意位置单击鼠标左键。根据鼠标指针的位置,将生成具有所需速度的旋转命令(根据配置文件中的max_PTU_speed字段,在视频边缘速度将为最大,在中心速度将为最小)。用户还可以使用键盘按钮控制相机:1-相机打开2-相机关闭3-近焦4-远焦5-变焦宽6-变焦D-右移(定速)A-左移(定速)W-上移(定速)X-下移(定速)Q-上移左移(定速)E-上移右移(定速)Z-下移左移(定速)C-右下移动(定速)

目录│文件列表:

 └ Pelco_D_ProtocolParser

    │ CMakeLists.txt

    ├ PelcoDProtocolParser

    │  │ CMakeLists.txt

    │  └ src

    │     │ CMakeLists.txt

    │     │ PelcoDProtocolParser.cpp

    │     └ PelcoDProtocolParser.h

    ├ PelcoDProtocolParserTests

    │  │ CMakeLists.txt

    │  └ PelcoDDemoApplication

    │     │ CMakeLists.txt

    │     │ json.hpp

    │     │ main.cpp

    │     │ PelcoDDemoApplication.json

    │     │ SerialPort.cpp

    │     │ SerialPort.h

    │     │ TCPPort.cpp

    │     └ TCPPort.h

    └ _static

       │ pelco-d_logo_with_borders.png

       └ user_interface.png

TAGPelco-D
  • 4 次
  • 15 分