0
cube033
25.07.19
✎
06:54
|
Самописная конфигурация. Платформа 8.3. Управляемые формы.
Много лет работает АРМ Весовщика автомобильных весов, суть которого проста: Программа получила данные весов, оператор заполнил несколько полей, нажал кнопку машина взвешана.
Реализовано это через обработчик ожидания (2 сек) и глобальную переменную, которая хранит COM объект весов. Каждая итерация состоит из опроса оборудования и логики.
Со временем это стало обрастать как логикой (контроль всего подряд, наряды итд) так и оборудованием: датчики позиционирования, идентификации, внешние табло итд
И вот я чувствую, что из-за обилии логики, работа с оборудованием задушена и идет медленнее, чем может. Хочу вынести её (работу с оборудованием) отдельно.
Первое решение, которое пришло в голову: фоновое задание и промежуточный регистр с результатами работы оборудования. Минус - негде хранить COM объекты и постоянно приходиться создавать/убивать экземпляры драйверов. Это работает, но не всегда хорошо, так как в самих драйверах работа завязана на таймерах и от момента создания до опроса - часто драйвер сам не успевает опросить оборудования - надо переписывать.
Как вариант можно запускать параллельный сеанс, который будет работать с оборудованием и в своем контексте хранить драйвера, но это дикий костыль.
Меня бы устроила просто многопоточность на клиенте, но толком не нашел примеров реализации.
Есть вроде вариант запускать с клиента (который хранит в контесте СОМ объекты) фоновые задания с передачей своих параметров, но там вроде передаются только сериализуемые объекты, если верить СП.
Может у кого-нибудь есть идеи как запареллелить работу логики и оборудования, сохраняя экземпляры драйверов между итерациями.
|
|
1
cube033
25.07.19
✎
07:55
|
Забыл еще вариант, от которого меня коробит. При старте программы запускать фоновое задание, которое создаст все необходимые экземпляры драйверов и уйдет в бесконечный цикл с входом в тело по таймеру и выходом из цикла по внешнему условию (типа проверка константы или значения записи регистра). И хранение объектов есть и параллельная работа. Еще из плюсов - частота итераций не ограничена одной секундой как в случае с регламентными заданиями. Из минусов - бесконечный цикл кажется мне безусловным злом.
|
|