如何让Java在Linux中使用串口?
我们使用一个通过串行端口管理密码键盘的 Java 应用程序。 这在带有 Sun Comm.jar、提供的 dll 和属性文件的 Windows 上完美运行。
现在我们尝试在 Linux 上使用这个解决方案(实际上它确实可以在现场的各种其他版本的 Linux 上运行) - 使用 Ubuntu 服务器模式。
经过多次尝试 - 血、汗和几乎泪水,我们得到了这个场景:
Java 版本 1.4.2_17 Linux-Ubuntu 通讯库 - 由 sun 提供的 Comm3,指定了默认驱动程序
外部通讯测试显示通讯端口:/dev/ttyS0 和 /dev/ttyS1 但是java应用程序说无法打开端口/dev/ttyS1
(使用RXRT文件会产生无效端口错误)
有没有人能够在linux上使用java 1.4.2进行串行端口通信并找到一个可以在我的场景中应用的解决方案?
非常感谢
菲尔
We make use of a java application that manages a pinpad via the serial port.
This works perfectly on windows with the Sun Comm.jar, the supplied dll and the properties file.
Now we are attempting to use this solution on Linux (actually it does run on various other flavours of linux out in the field) - with Ubuntu server mode.
After much attempts - blood, sweat and almost tears we have this scenario:
Java version 1.4.2_17
Linux - Ubuntu
Comm libs - Comm3 supplied by sun with the default driver specified
An external comm test shows the comm ports: /dev/ttyS0 and /dev/ttyS1
But the java application says unable to open port /dev/ttyS1
(using the RXRT files produces invalid port errors)
Has anyone been able to use java 1.4.2 on linux for serial port communication and found a solution that I could apply in my scenario?
greatly appreciated
Phill
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我知道这是一个老问题,但我创建了一个 Java 包和本机库来允许串行端口读写,目前仅处于同步模式。
它是开源的,可在 GitHub 上获取:
j232 - Java 源代码
libj232 - j232 的本机库。
wiki 页面位于此处。
请注意,这是一个仅限 Linux 的包和库。
I know this is an old question but I have created a Java package and native library to allow serial port read and write, currently in synchronous mode only.
It's open source and available on GitHub:
j232 - The Java source code
libj232 - j232's native library.
The wiki page is here.
Note this is a Linux only package and library.
确保您使用的用户有权访问串行端口。 某些发行版将串行端口放在 uucp 组中,因此请确保用户属于该组。
Make sure that you are using a user with permissions to access the serial ports. Some distributions put the serial ports in the uucp group, so make sure that the user belongs to that group.
我已经有一段时间没做这件事了。 我记得你不能只将 /dev/ttyS0 作为文件打开并对它进行 I/O。
我记得 Sun IO jar 也有同样的问题。
我记得确定的解决方案是用 C 创建一个小型命令行程序,将标准输入回显到串行端口,并将串行端口回显到标准输出。 然后,我从我的 java 进程启动了这个程序。 我没有代码,但网上有很多关于写入 Linux 串行端口的 C 程序的示例。
It's been a while since I've done this. I remember that you can't just open /dev/ttyS0 as a file and I/O to it.
I remember having the same problem with Sun IO jars also.
The solution I remember settling on was to create a small command-line program in C that echoed stdin to the serial port and serial port in to stdout. Then, I launched this program from my java process. I don't have the code but there are lots of examples on the web for c programs that write to linux serial ports.
几年来,我们一直在 Windows 和 Linux 上使用 SerialIO 库进行 Java 串行通信,并取得了很好的成果(不,我不为他们工作:-)):
http://serialio.com/products/serialport/serialport.php
不过,这些库不会自动检测 Linux 上的可用串行端口 -您必须手动配置它们。
We've been using the SerialIO libraries for Java serial communications on both Windows and Linux for several years now with great results (and no, I don't work for them :-)):
http://serialio.com/products/serialport/serialport.php
The libraries do not autodetect the available serial ports on Linux though - you have to manually configure them.
我们并没有改变太多,
使用的库中没有任何内容。
但在串行端口对象上删除 EventListener 的使用解决了问题。
这实际上允许我们的代码在 Linux(jre1.4.2、slackware 和 Suns Comm3 驱动程序)上工作,而这在 Windows 上不是问题 - 奇怪。
菲尔
We did not change much,
nothing in the libraries used.
but removing the use of an EventListener on the serial port object fixed the problem.
This actually allowed for our code to work on linux (jre1.4.2, slackware and Suns Comm3 drivers) where this was not a problem on windows - strange.
Phill