Yadav Suni Ответов: 2

Как считывать данные с конкретного USB-порта в C#


Привет,

Я хотел бы считывать данные с определенного USB-порта в свой проект C#(WinForms).

В моем проекте числовые данные должны быть считаны в CustomTextBox.
Данные могут быть введены в CustomTextBox двумя способами.
1. USB-клавиатура.
2. Микрометрическое устройство(измеряет размеры любого небольшого объекта), которое также может отправлять данные через USB-порт.
Таким образом, USB-клавиатура и Микрометрическое устройство подключены к одному и тому же процессору.

Требование состоит в том, что я должен ограничить(или)отключить данные, которые могут быть введены через USB-клавиатуру в этот конкретный CustomTextBox, и данные только через Микрометрическое устройство должны достигать CustomTextBox(UI).

пожалуйста, поделитесь своими мыслями и кодом. Спасибо.

Что я уже пробовал:

Я попытался, основываясь на временной логике.
Для ввода данных через клавиатуру требуется на несколько МС(миллисекунд) больше, чем для ввода данных в пользовательский интерфейс через Микрометрическое устройство. Однако это не совсем точно и в большинстве случаев не соответствует требованиям.

Dave Kreskowiak

USB-порт-это не порт. USB-это шина, а не набор портов, как последовательный порт.

Вы не можете читать с определенного порта. Вы читаете с любого интерфейса, который устройство предоставляет на шине. Если устройство выставлено как "последовательный порт", вы должны использовать класс SerialPort, как и для реального последовательного порта. Если она выставлена как клавиатура, что ж, у вас есть проблемы, так как элемент управления не может отличить настоящую клавиатуру от устройства, выставляющего себя как клавиатуру.

Yadav Suni

Спасибо за ваше предложение и поправку.

2 Ответов

Рейтинг:
0

OriginalGriff

Если микрометр предоставляет данные с помощью эмулятора клавиатуры, то вы не можете делать то, что хотите: вам нужно будет поговорить с производителями либо об отключении этого, либо о предоставлении кодов "ввод" и "вывод", чтобы вы могли определить, когда он отправляет данные, а не клавиатура. Windows не предоставляет никакого способа обнаружить "источник" нажатий клавиш, все они просто попадают прямо в тот же буфер, что и появляются.

Если вы можете переключить его в режим без клавиатуры, то просто используйте Последовательный порт.Событие DataRecieved [^] чтобы уведомить вас, когда символ доступен, и буферизировать его в "полное сообщение" перед обработкой.

Но начните с производителей - только они могут сказать вам, на что способна эта конкретная марка и модель.


Yadav Suni

Спасибо, что ответили на мой вопрос.

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

Вышеуказанный вопрос является одним из требований нашего клиента.
Вместо нашего клиента оператор(оператор станка) должен измерить высоту обжима проволоки и ввести данные в определенный CustomTextBox.
Оператор имеет право вводить данные с помощью клавиатуры или микрометра.
Микрометр измеряет высоту и имеет кнопку отправки для отправки данных в пользовательский интерфейс через USB(подключенный к ПК). немногие операторы до сих пор практикуют ввод данных вручную с клавиатуры.
Операторы измеряют высоту с помощью микрометра и намеренно вводят данные вручную через клавиатуру и нажимают клавишу enter. при этом точность данных теряется.
таким образом, каким-то образом нам нужно ограничить или отключить ввод с клавиатуры для этого конкретного CustomTextBox, и микрометр должен быть единственным рычагом для этого CustomTextBox.

OriginalGriff

И если вы не понимаете, что вы делаете достаточно, чтобы сделать это, как вы ожидаете, что мы исправим это для вас, не зная вашего оборудования?

Yadav Suni

Устройство или машина не имеют никакого отношения к проблеме. Проблема связана с чтением данных в пользовательский интерфейс.
Хорошо, позвольте мне сказать это так.
CustomTextBox в пользовательском интерфейсе может считывать данные с двух USB-клавиатур(Keyboard-A, keyboard-B). есть ли какая-то логика, чтобы различать данные между клавиатурой-а и клавиатурой-Б.?

OriginalGriff

Позвольте мне процитировать себя: "Windows не предоставляет никакого способа обнаружить "источник" нажатий клавиш, все они просто идут прямо в тот же буфер, что и появляются."
Единственный способ отличить "ваши данные" от "типизированных данных" - это если ваш набор обеспечивает ввод и вывод последовательностей. Программное обеспечение Windows обнаруживает входящий свинец, буферизует его до тех пор, пока не выйдет хвост, и сбрасывает его в нужное место.

OriginalGriff

Большинство комплектов, эмулирующих клавиатуру, предоставляют их (обычно настраиваемые) в качестве опции - когда-нибудь взгляните на сканер штрих-кода.

Рейтинг:
0

Garth J Lancaster

Хотя то, что сказал OriginalGriff, также верно, это может помочь Использование необработанного ввода из C# для работы с несколькими клавиатурами[^] если производитель не предоставляет ничего полезного - по моему опыту работы с такими устройствами (считывателями магнитных карт), они обычно обеспечивают "какой-то способ" переключения между виртуальной клавиатурой и USB в качестве последовательного устройства


Yadav Suni

Спасибо, что ответили на мой вопрос. Я попробую ваше предложение.