Как обычно, вы не озвучиваете всю нужную информацию, но попробую дать комментарий по той, что есть.
1. Самый простой вариант решения вашей задачи вы уже сами упомянули - использовать ПЛК или СПК ОВЕН, для которого мы заботливо разработали библиотеку с поддержкой USB HID-сканеров штрихкодов.
2. Если вы используете Raspberry Pi или его аналоги с CODESYS - то можете найти (или разработать сами) для него подобную библиотеку на C/Python/чем угодно и интегрировать ее с CODESYS.
3. Если вы используете другой панельный контроллер с CODESYS (назовем его условно "UnrealLab"), который не позволяет работать с внешними библиотеками или делает это слишком трудоемким - то есть несколько вариантов.
3.1. В таргет-визуализации включить Ввод текста по умолчанию - Клавиатура. Тогда в плане работы со сканером проблем нет.
Остается вопрос с оператором, которому, например, надо вводить уставки. Но как вы упомянули - "настройку ПЛК выполняют редко".
Поэтому можно сделать вариант операторского интерфейса, в котором ввод значений реализован "аналоговым" способом - с помощью слайдеров и кнопок типа +1/-1 (+5/-5 и т.д.).
3.2. Использовать библиотеку OwenVisuDialogs с кастомными диалогами ввода - в них поддерживаются "горячие клавиши".
В этом случае для оператора все удобно - нажал на элемент, появилась экранная клавиатура.
При работе со сканером - когда вы сымитируете нажатие на элемент из кода, то откроется окно Numpad'a или Keypad'a с активным курсором.
При этом так как горячие клавиши поддерживаются - то при получении штрихкода он будет "набран" в поле ввода диалога.
Но здесь начинаются нюансы - поддержка горячих клавиш может потребовать правок таргет-файла и конфига CODESYS (в частности, для поддержки спецсимволов).
Кроме того, возникает вопрос с раскладками - если штрих-код может содержать спецсимволы (типа #, @ и т.д.), то это обработать будет проблематично.
Можно попробовать сделать свою клавиатуру, на которой будут все нужные клавиши, но мне кажется, что на этом этапе возникнет много нюансов.
Но самый главный вопрос, который касается и п. 3.1, и п. 3.2 - как будет осуществляться подтверждение ввода?
Если сканер вам после штрих-кода присылает код нажатия на Enter - то вопросов нет.
Если он его не присылает - то каких-то очевидных решений я не вижу.
Да, можно сымитировать нажатие на элемент из кода - но в какой момент? Можно сказать - в тот момент, когда изменилось значение переменной, привязанной к элементу.
Но ведь пока в элементе ввода не произошло нажатие на Enter - строка еще не попала в переменную.
В общем, на мой взгляд, самый простой и идеологически правильный путь - вариант 1.
Вариант 2 тоже без сомнений реализуем, но потребует существенно больше времени.


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