代码之家  ›  专栏  ›  技术社区  ›  Greg Case

如何配置和与串行端口通信?[关闭]

  •  43
  • Greg Case  · 技术社区  · 17 年前

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

    如何设置和与这样的连接通信?如何确定配置设置(例如波特率)应该是什么以及如何设置它们?

    特别是,我想在爪哇,C/C++,或主要的UNIX外壳,但我也有一些兴趣在串行编程使用Windows /超终端。

    10 回复  |  直到 10 年前
        1
  •  27
  •   ΦXocę 웃 Пepeúpa ツ    10 年前

    建造一台时间机器,然后回到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/超级终端的串行编程也有一些兴趣。

    超级终端和Minicom基本上是相同的程序。至于Windows如何让您访问串行端口,我将把这个问题留给其他人。我从95年冬天起就没有在Windows上做过。

        2
  •  10
  •   Marcel    12 年前

    如果你想用Java编写代码,我真的推荐SerialIOs。 SerialPort . 它很容易使用,而且可以节省你的工作时间。我从来没有找到过比serialio更好的开源库,真的!

    我的建议是:不要使用Sun的串行IO框架!这是从1998年开始的,到处都是虫子。你可以使用 rxtx 但是塞利亚里奥更好!

        3
  •  8
  •   smh    17 年前

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

    1. 使用.NET提供的serialport类。
    2. 使用Win32 API。有一个 extensive MSDN article 可以追溯到1995年,网上有很多免费的图书馆和例子让你开始学习。

    .NET选项将更简单。

        4
  •  4
  •   Ferruccio    17 年前

    如果需要跨平台,我建议查看Boost Asio .

        5
  •  3
  •   Patrick    17 年前

    从另一方面来说,如果你想使用C来完成它,它将在Windows和Linux上运行,其中一些 limitations (编辑:可能已过时。我没有办法测试它。创建一个 SerialPort 对象,设置其波特率、端口和任何其他奇怪的设置,对其调用open,并写出字节[]s。在所有设置之后,serialport对象的行为与任何联网流非常相似,因此应该很容易弄清楚。

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

        6
  •  3
  •   graham.reeds    17 年前

    在工作中,我们使用Teraterm和Realterm检查串行数据的格式是否正确。另外,我们还有一个带交换机的硬件拆分器,这样我们就可以通过回另一个端口的电缆来监视到我们的应用程序的流量。

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

        7
  •  3
  •   L. Cornelius Dol    17 年前

    不久前,我写了一个相当大的应用程序,将连接从调制解调器场路由到TCP/IP网络地址。

    最初我寻找一个无障碍(免费)的串行IO库。我试过Sun、IBM和RXTX。在开发应用程序和初始测试中,它们都很好,但在生产中,它们都被证明是不稳定的。

    最后我支付了塞利亚罗的赛利亚波特。转换实际上是改变进口的一个练习,而图书馆 绝对地 坚如磐石-我推荐不够。我的应用程序已经24/7地运行了几年了,多个客户都没有遇到任何问题。

    如果您开始使用serialport进行开发,他们有更好的API,我会使用它。

    如果需要跨平台支持,JavaSerialPoT是我能找到的最佳选择。

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

        8
  •  1
  •   Maciej Hehl    17 年前

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

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

        9
  •  1
  •   Marco    11 年前

    如果不强制使用特定的编译器,我建议使用qt,在新的5.3版本中,您将找到一个专用于串行端口的类:

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

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

        10
  •  0
  •   Mzzl    13 年前

    我一直在使用purejavacom: It is an implementation of javax.comm written in pure java + JNA

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

    您可能期望纯Java库在性能上落后于本地实现,如RXTX,但随着现代CPU的发展,瓶颈很可能是串行端口的比特率,而不是CPU周期。此外,调试也比混合Java/本地库或纯编译的本机代码容易得多。