Формирование пакета байт в системе 1с предприятие и обмен данными с оборудованием через WinSocket
Кирилл К.
20.07.2017
56 понравилось
380 просмотров

Формирование пакета байт в системе 1с предприятие и обмен данными с оборудованием через WinSocket

Задача: есть служба, которая взаимодействует с оборудованием и может отправлять ему пакеты байт установленного  формата. Служба запускается на определенной машине и прослушивает определенный порт. Необходимо реализовать интерфейс  взаимодействия с этой службой на УФ.

Для решения поставленной задачи создадим внешнюю обработку. Добавим реквизиты адрес сервера и порт, а так же остальные вспомогательные данные, которые мы используем в дальнейшем.

Определение WinSocket

Подключение winsocket будет храниться в переменной модуля формы на клиенте:

При открытии формы, на клиенте определяем переменную WinSocket и добавляем важные для реализации задачи обработчики:

Обработчики WinSocket

Далее распишем процедуры каждого из обработчиков по подробнее:

  • Событие DataArrival возникает в момент получения данных от службы. В этом обработчике выводятся данные полученного пакета на экран, а так же значение массива, в котором хранится последний отправленный пакет (гМассивПакета).

  • Событие Error возникает в момент возникновения ошибки при работе с WinSocket. В данной ситуации происходит вывод сообщения пользователю.
  • В обработчике события SendProgress происходит вывод состояния отправки сообщения пользователю.
  • В обработчике SendComplete осуществляется вывод сообщения о выполнении отправки данных.

Подключение к серверу

В данном примере инициализация подключения происходит путем нажатия кнопки обработки «Подключить». Далее происходит проверка на статус winsocket и дальнейшее подключение по заданному адресу сервера и порту.


Формирование пакета данных

Следующим не маловажным этапом станет – формирование пакета по заранее определенному формату.

В общем виде процедура формирования и отправки пакета выглядит следующим образом:


Если разбить этот процесс на шаги, то получим следующее:

У вас есть вопрос, нужна помощь консультанта?

Оставьте номер телефона и мы перезвоним!

  • Создание массива 1с и заполнение данными по заранее определенному образцу;
  • Создание универсального массива COMSafeArray для побайтовой отправки данных на порт службы и заполнение его данными массива 1с;
  • Отправка массива байт COMSafeArray использую метод WinSocket .SendData() .

На первом пункте остановимся по подробнее:

Изложенный далее алгоритм имеет индивидуальный характер и предназначен для решения конкретной задачи формирования пакета, но в процессе его реализации было освоено множество механизмов, которые подойдут для решения различных задач.

Для получения конечного пакета данных и отправки его на порт службы необходимо осуществить следующие шаги:

  • «ПолучитьГУИДВМассиве» – функция формирует массив произвольных байт на основании созданного уникального идентификатора;
  • Далее формируется массив сообщения. Функция «ПолучитьМассивСообщения» возвращает служебные данные для формирования сообщения по заданному образцу.
  • Вычисление контрольной суммы, для проверки корректности отправленного сообщения. Этот этап разберем по подробнее. Ниже представлен алгоритм расчета контрольной суммы CRC16 со всеми вспомогательными функциями:

Расчет CRC16

Функция преобразует число из dec в число любой системы счисления

Преобразует число из любой системы счисления в dec. Только заглавные буквы для 16 сс.

Дополняет число до 16 знаков в двоичной системе счисления.

Выполняет операцию "исключающего или" над двумя аргументами в двоичном строковом представлении. Аргументы и результат - строки длиной 8 символов из "0" и "1"(XOR).

Правый побитовый сдвиг(shr).

Побитовый И

  • Функция «ПолучитьМассивПакетаСбайтомЗавершения» добавляет в массив условный байт, который означает конец пакета.

Таким образом происходит формирование и отправка пакета байт с использование объекта WinSocket.

Эта статья помогла вам?

Теги:

Комментарии ( 0 )

Оставить комментарий