Evgenii Legotckoi
Evgenii Legotckoi12. April 2016 07:26

PTZ-Kamerasteuerung. Protokoll Pelco-P

Im vorherigen Artikel wurde die Möglichkeit in Betracht gezogen, mit dem Pelco-D-Protokoll zu arbeiten, und jetzt werden wir die Arbeit mit dem Pelco-P-Protokoll in Betracht ziehen - das ist eine modifizierte Variante des bisherigen PTZ-Kamerasteuerungsprotokolls, das ebenfalls von der gleichnamigen Firma Pelco entwickelt wird. Wird auch über die RS482/485-Schnittstelle verwendet, um mit Kameras zu kommunizieren, die mit Servoantrieben ausgestattet sind.

Das Pelco-P-Protokoll verfügt außerdem über einen Satz von Standardsteuerbefehlen sowie einen erweiterten Satz von Befehlen. Überlegen Sie, wie wir mit Standardbefehlen arbeiten können. Analysieren wir das Pelco-P-Protokoll am Beispiel einer abstrakten Befehlsquelle und eines abstrakten SDK, das eine Nachricht zur weiteren Übertragung an die RS485-Schnittstelle empfängt.

Es gibt also ein Protokoll, über das Daten übertragen werden, die Daten geparst und dann an das SDK übertragen werden, das die Nachricht bereits auf dem RS485-Übertragungsweg sendet. Unten ist ein Bild mit einem gelben Quadrat. In dieser Funktion wird die von uns benötigte Nachricht erstellt, die an das SDK übertragen werden muss.


Nachrichtenstruktur

Die Prüfsumme ist die XOR-Summe über die Bytes 1 bis 7. Wie Sie sehen können, verwendet dieses Protokoll 8 Bytes, um eine Nachricht zu übertragen, und nicht 7, wie bei Pelco-D.

Es ist zu beachten, dass im Pelco-P-Protokoll die Adressierung nicht bei 1, sondern bei 0 beginnt. Das heißt, die erste Adresse wird als #00 übertragen, aber das Interessanteste ist, dass diese Adresse als 01 in angegeben wird B. den Einstellungen der PTZ-Kamera, sollten Sie diesen Punkt bei der Entwicklung einer Schicht für die Arbeit mit diesem Protokoll berücksichtigen.

PAN- und TILT-Befehle

Beispiele für Befehle

Links abbiegen: A0 00 00 04 20 00 AF 2B
Rechts abbiegen: A0 00 00 02 20 00 AF 2D
Aufklappen: A0 00 00 08 00 20 AF 27
Nach unten neigen: A0 00 00 10 00 20 AF 3F
Alle Aktionen stoppen: A0 00 00 00 00 00 AF 0F

Beispielcode

In unserem abstrakten Code ist in einem Vakuum eine solche Situation entstanden, dass die folgenden Werte in die Funktion fallen:

  • Adresse Adresse;
  • PanSpeed - Geschwindigkeit mit Drehrichtung von -100 bis +100;
  • TiltSpeed - Geschwindigkeit mit Neigungsrichtung von -100 bis +100;
  • ZoomSpeed - Geschwindigkeit mit Zoomrichtung von -100 bis +100. Warum die Daten für Zoom auf diese Weise übermittelt wurden, ist für mich eine Frage, da Pelco keine Geschwindigkeitseinstellung hat, aber was es ist, ist es.

Aber das SDK akzeptiert den generierten Befehl bereits in Form eines Zeigers auf ein Datenarray und einer Angabe der Länge dieses Arrays. Das Ergebnis ist der folgende Code.

void ptzCmd(int addressPTZ, int panSpeed, int tiltSpeed, int zoomSpeed)
{
    unsigned char *dataPelco;
    unsigned char address, data1, data2, data3, data4, checkSum;
    address = data1 = data2 = data3 = data4 = checkSum = 0x00;

    dataPelco = (unsigned char*) malloc(8);
    memset(dataPelco,0,8);

    address = (unsigned char)addressPTZ;
    --address;
    if(pan < 0) {
        data2 |= 0x04;
        pan *= (-1);
    } else if(pan > 0) {
        data2 |= 0x02;
    }
    data3 = pan*63/100;

    if(tilt < 0) {
        data2 |= 0x10;
        tilt *= (-1);
    } else if(tilt > 0) {
        data2 |= 0x08;
    }
    data4 = tilt*63/100;

    if(zoom < 0) {
        data2 |= 0x40;
    } else if(zoom > 0) {
        data2 |= 0x20;
    }

    checkSum ^= 0xA0;
    checkSum ^= address;
    checkSum ^= data1;
    checkSum ^= data2;
    checkSum ^= data3;
    checkSum ^= data4;
    checkSum ^= 0xAF;

    dataPelco[0] = 0xA0;
    dataPelco[1] = address;
    dataPelco[2] = data1;
    dataPelco[3] = data2;
    dataPelco[4] = data3;
    dataPelco[5] = data4;
    dataPelco[6] = 0xAF;
    dataPelco[7] = checkSum;

    sdk_write_pelco_cmd(8, dataPelco); // 8 - это длина сообщения
    free(dataPelco);
}
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken