Изначально я делал POS-приложение с помощью Excel / VB. Все работало на отлично, особенно последовательная связь с POS-дисплеем. Вот пример кода, с помощью которого приложение взаимодействовало:
Function Send2Display(ln1$, Optional ln2$)
On Error GoTo theEnd
Dim ln1Space As Byte, ln2Space As Byte
ln1 = Left(ln1, 20): ln1Space = 20 - Len(ln1)
ln2 = Left(ln2, 20): ln2Space = 20 - Len(ln2)
Open "COM1:" For Output As #1
' Write lines and then set cursor to start
Print #1, ln1; Spc(ln1Space); ln2; Spc(ln2Space)
Print #1, Chr$(&H1B)
theEnd:
Err.Clear: Close #1
End Function
Как я уже сказал, это сработало. Однако теперь я переместил приложение POS в RoR, и мне пришлось создать Java-апплет для связи с дисплеем. Апплет работает нормально, за исключением следующей проблемы:
Я не уверен, что за причина это есть, но в определенный момент Java сообщает, что я использую «неверную || отсутствующую функцию» при отправке данных в COM-порт. Мне нужно закрыть приложение (веб-страницу), затем отключить COM1 в диспетчере устройств и снова включить его. Затем, когда я снова загружаю веб-страницу, она начинает работать. Видеть эта страница для кода Java и JNLP.
Если COM-порт не отвечает на запросы веб-приложения, я могу загрузить старый файл Excel, и он все равно будет работать. Я не понимаю, почему это не работает для Java-апплета.
Забудьте об этом, оказывается, я уже давно установил дисплейную стойку в качестве принтера, и именно это связывало порт COM1. Я удалил его и пока не сталкивался с какими-либо проблемами.