我需要通过串行连接(RS-232和RS-422)发送和接收数据。

如何设置和连接此类连接? 如何确定配置设置(例如波特率)应该是什么以及如何设置它们?

特别是我希望用Java,C / C ++或其中一个主要的Unix shell来做这个,但我也对使用Windows / Hyperterminal进行串行编程感兴趣。

===============>>#1 票数:27 已采纳

建立一个时间机器,回到1987年? 何浩

好的,没有更多的讽刺评论。

如何确定配置设置(例如波特率)应该是什么...

阅读数据表? 好的好的。 说真的,最后一个。 如果您不知道要尝试与之通信的设备的波特率,则有两种选择。 开始猜测,或者可能破坏o范围。 如果您需要一个好的起点,请让我建议9600-8-N-1。 我怀疑你可以用相对较快的蛮力到达那里。 还有第三种方法可以让一个老派的忍者只能通过一些标准波特率来判断乱码中的字符是什么实际的波特率。 令人印象深刻的派对技巧。

希望你能访问这些信息。 在unix / linux中,您可以直接使用串口来获取minicom。 这应该可以让它很快得到配置。

一个主要的Unix shell

在Unix中,串行端口被文件映射到/ dev / subdir。 例如,ttyS0。 如果您使用minicom设置了正确的波特率和诸如此类的东西,您甚至可以将该东西写入该文件以发送内容。

在问题的基础上,您可以通过POSIX标头以编程方式访问它。 termios.h是最重要的。

请参阅: http//www.easysw.com/~mike/serial/serial.html#3_1 (无法提供任何更多信息)

但我也对使用Windows / Hyperterminal进行串行编程感兴趣。

Hyperterminal和minicom基本上是相同的程序。 至于Windows如何让你访问串口,我会把这个问题留给别人。 自Win95以来,我在Windows中没有这样做过。

===============>>#2 票数:11

如果你想用Java编写代码我真的推荐使用SerialIOs SerialPort 它非常易于使用,可以节省您的工作时间。 我从来没有找到像SerialIO一样好的开源库,真的!

我的建议:不要使用Sun的串行IO框架! 它是从1998年开始充满虫子的。 你可以使用rxtx但是serialio更好!

===============>>#3 票数:9

对于Windows上的C / C ++,您有(至少)两种选择:

  1. 使用.NET提供的SerialPort类。
  2. 使用Win32 API。 一篇可追溯到1995年的MSDN文章 ,网上有许多免费的图书馆和例子可以帮助您入门。

.NET选项将更容易。

===============>>#4 票数:5

如果它需要跨越平台,我建议看看Boost Asio

===============>>#5 票数:3

在工作中,我们使用teraterm和realterm来检查串行数据是否格式正确。 此外,我们还有一个带开关的硬件分配器,因此我们可以通过电缆将应用程序的流量监控到另一个端口。

Windows允许您通过CreateFile访问串行端口。 这为您提供了一个句柄,您可以从那里配置访问权限。

===============>>#6 票数:3

一段时间后,我写了一个体面的应用程序来路由从调制解调器的连接到TCP / IP网络地址的连接。

最初我寻找一个无阻碍(免费)的串行IO库。 我试过Sun,IBM和RxTx。 它们适用于开发应用程序,并且在初始测试中,但在生产中它们都证明是不稳定的。

最后我支付了SerialIO的SerialPort。 转换实际上是改变进口的一种练习,图书馆绝对坚如磐石 - 我不能推荐它。 我的应用程序已经在现场24/7运行了几年,没有多个客户遇到的问题。

如果你使用SerialPort开始开发,他们有一个更好的API,我会使用它。

如果您需要跨平台支持,带有Seri​​alPort的Java是我能找到的最佳选择。

最后,只要您没有为您的客户预装设备上的软件,他们的许可就非常合理。

===============>>#7 票数:2

从另一方面来说,如果你想使用C#运行它,这将在Windows和Linux上运行 - 有一些限制 (编辑:可能已经过时。我无法测试它。)。 只需创建一个SerialPort对象,设置其波特率,端口和任何其他奇数设置,在其上调用open,并写出你的byte [] s。 完成所有设置后,SerialPort对象的行为与任何网络流非常相似,因此应该很容易弄清楚。

正如ibrandy所说,在你开始尝试与任何串行设备通信之前,你需要知道所有这些设置,比如波特率。

===============>>#8 票数:1

根据您尝试与之通信的设备,可能会有比波特率,数据位数,奇偶校验类型和停止位数要多的参数。 如果我没记错的话,调制解调器使用9行RS-232C接口。 某些设备,例如收银机,可以在RTS / CTS线路或DTR / STR线路上使用硬件握手。

一般来说,了解界面的工作原理会很好。 如果波特率不匹配,则无法通信,但其他参数的错误设置可能有效。 例如,您可以轻松地将数据发送到设备,期望设置2个停止位的1个停止位。 在这种情况下尝试接收数据时问题就开始了。 您也可以使用适当设置的奇偶校验位作为停止位之一等。

===============>>#9 票数:1

如果您没有被迫使用特定的编译器,我建议使用Qt,在新的5.3版本中,您将找到专用于串行端口的类:

http://qt-project.org/doc/qt-5/qserialport.html

您将编写的代码将在所有受支持的Qt平台上运行,至少是那些具有串行端口的平台。

===============>>#10 票数:0

我一直在使用purejavacomm它是用纯java + JNA编写的javax.comm的一个实现

与rxtx不同,您不需要安装dll。 它是用纯Java + JNA编写的,它解决了Windows和Linux之间的可移植性问题。 它应该很容易移植到JNA支持的其他操作系统,例如Solaris和FreeBSD,但我还没有尝试过。

您可能希望纯Java库在性能方面落后于本机实现,例如rxtx,但是对于现代CPU,瓶颈很可能是串行端口的比特率,而不是CPU周期。 此外,它比混合Java / Native库或纯编译的本机代码更容易调试。

  ask by Greg Case translate from so

未解决问题?本站智能推荐: