我已经开发了一个通过Multi Drop Bus通信的嵌入式解决方案,现在我想开发一个基于PC的应用程序,用于监控公交车上的交通。
MDB supports true 9 data bits (plus start/stop/parity - and *no fudging* by using the parity bit as a 9th data bit),而标准的Windows和Linux库最多提供8个数据位。
我有一个支持9位数据的StarTech PCI2S950 PC串行端口卡,但不确定如何编写我的监控应用程序&我在谷歌上搜索了很多,但都没有很大的用处。
我更喜欢用C(或Delphi,或C++)编写代码。我稍微偏爱Cygwn,但我愿意使用简单的Windows或Linux。
只需通过PC串行端口卡读取/写入9个数据位。
有人能帮上忙吗?
发布于 2013-01-17 11:15:50
http://www.semiconductorstore.com/pdf/newsite/oxford/ox16c950b.pdf上的文档描述了各种UART之间的差异。虽然您的StarTech主板包括支持RS-485 (和9位)的16C950,但它在RS-232兼容(550)模式下使用它,类似于IBM-PC days的16550/8250,并支持最多8位数据。
您需要一个具有相同芯片(16C950)的电路板,但它暴露了RS-485兼容的950模式,该模式根据规范支持9位数据。任何声称支持Windows的主板都必须带有Windows的自定义驱动程序,因为微软的驱动程序只有8位。
还有其他几个芯片可以做9位RS-485提到的here,但同样,寻找视窗驱动程序的支持将是棘手的。当然,许多主板使用16C950,但仅在8位和/或RS-232模式下使用,并且没有适当的驱动程序。
在回答你的相关question on Superuser时,sawdust推荐了Sealevel 7205e,这看起来是一个很好的选择,支持Windows驱动程序。它很贵,但他们特别提到了9位、RS-485支持和Windows驱动程序。这很可能是你最好的选择。
发布于 2013-01-14 04:42:01
您选择的卡不适合此应用程序。它只有普通的RS-232端口,不适合多点总线。你需要在其他地方购买EIA-485风格的总线接口,你只能在工业电子供应商那里找到。到目前为止,最好的方法是通过拥有MDB规范的行业组织全国自动商品协会。
9位数据格式只是一个技巧,在MDB协议中用来在地址字节和数据字节之间进行模式切换。总线上的所有端口监听地址字节,只有被寻址的端口监听数据字节。
第9位仅仅是任何UART都可以生成的奇偶校验位。基本数据大小仍然是8位。UART根据其初始化方式自动生成奇偶校验位,您可以在标记、空格、奇偶校验之间进行选择。
现在,这很容易在具有UART的微控制器中完成,就像这样的总线上使用的处理器。您只需对UART进行动态重新编程,告诉它在发送地址字节时生成标记奇偶校验。并在发送数据字节时将其重新编程为空间奇偶校验。等待fifo清空通常是必要的,但这取决于实际的UART芯片。
这在普通的Windows或Linux机器上是很难做到的,在用户模式程序和之间有一个驱动程序。驱动程序会生成一个“传输缓冲区为空”的状态位,就像Windows上的EV_TXEMPTY的WaitCommmEvent()一样,但这并不包括先进先出为空的状态,它只表示缓冲区为空。一种解决方法是等待buffer empty状态,然后等待足够长的睡眠()以确保fifo被清空。fifo通常为16字节深,因此休眠时间是位时间的16倍。您将需要您选择的卡上的UART数据表,以确保了解这些详细信息。
发布于 2013-01-08 18:32:48
Win32下的串行端口只是一些文件,因此您可以使用CreateFile为其创建一个句柄,然后使用DCB结构来设置配置选项(成员记录为here,并包含ByteSize形式的数据位数)。
这里有一个很好的步行路线:http://www.codeproject.com/Articles/3061/Creating-a-Serial-communication-on-Win32
https://stackoverflow.com/questions/14212660
复制相似问题