通信模块
串口几乎为所有计算机的装置通讯协议标准。请别与通用串行总线 (Universal serial bus,USB) 产生混肴。大多数的计算机均配备 2 组 EIA-232 架构的串行端口。串口亦为常见的通讯协议,适用于控制多种仪器设备,并可搭配 EIA-232 通讯端口使用多款 GPIB 兼容的装置。此外,用户可透过数据撷取的串口通讯功能,进而整合远程取样装置。请注意,EIA-232 与 EIA-485/422 亦可为所谓的 RS-232 与 RS-485/422。
串口通讯的概念极为简单。串行端口将同时传送并接收 1 个位 (Bit) 的信息字节 (Byte)。虽然此传输量低于并行通讯作业,却可传输完整的字节;适用于较长距离的通讯作业。以 IEEE 488 规格的平行通讯作业为例,设备之间的接线总长度不得超过 20米(65英尺);任两组装置之间的长度不超过 2米(6.5英尺)。而串口却可达最长 1200米(4000英尺)。
一般情况下,工程师均使用串行传输 ASCII 数据。并透过三种传输线完成通讯作业 - 接地线 (Ground)、传送线 (Transmit)与接收线 (Receive)。由于串口属于异步化,因此串行端口可于其中 1 个信道传送数据,并于另 1 个信道接收数据。其他通道可视情况而进行握手(Handshaking)。重要的串口特性为波特率 (Baud rate)、数据位、停止位 (Stop bit),与奇偶同位 (Parity)。若要沟通两组通讯端口,则必须符合这些参数:
1、波特率 (Baud rate) 为通讯的速度量测作业,显示每秒所传输的位数。举例来说,300 波特率即为每秒达 300个位。工程师所称的频率周期 (Clock cycle) 即为波特率;若协议呼叫信号 (Protocol call) 为 4800 波特率,意即频率为 4800 Hz。亦表示串行端口以 4800 Hz 的速率,进行数据信道的取样。常见的电话线路波特率为 14400、28800,与 33600。波特率当然可以大于上述这些数字,但这些速率将限制设备之间的距离。因此高波特率均用于装置距离相近的通讯作业,常见的即为 GPIB 装置。
2、数据位数 (Data bit),代表传输作业中的实际数据位。当计算机传送信息框架 (Frame) 时,实际数据总数可能不满 8 位。框架的标准数值为 5、7,与 8 位。应根据所传输的信息,选择所需的设定。举例来说,标准 ASCII 可为 0 ~ 127 的数值 (7 位)。延伸的 ASCII 则使用 0 ~ 255 (8 位)。若传输中的数据为标准 ASCII,则各个框架若能传送 7 位数据,即属高效率的通讯作业。1 个框架即为单一字节 (Byte) 的传输,包含开始/停止 (Start/stop) 位、数据位,与奇偶校验 (Parity)。由于所选的通讯协议将影响实际位数,因此可使用“框架 (Frame)”代表所有的范例。
停止位 (Stop bit) 可针对单一框架的通讯作业末端发出信号。常见数值为 1、1.5,与 2 位。由于数据将受到跨信道的频率所影响,而各组装置又具有自己的频率,因此任 2 组装置可能会稍稍落后同步化作业。因此,停止位不仅可指出传输作业末端,并可为计算机频率速度提供发生错误的空间。停止位所占的位数越多,则不同频率的同步化越具弹性;但亦将拖慢传输速度。
3、奇偶校验 (Parity) 为串口通讯作业错误检查的简易形式。奇偶校验具分为 4 种类型 – Even、Odd、Marked,与 Spaced。亦可不使用奇偶校验。针对 Even 与 Odd,串行端口将设定奇偶校验位 (Parity bit,为数据位之后的最后 1 个位) 为 1 个数值,以确认该传输作业具有逻辑高位 (Logic-high) 位的 Even 或 Odd 数。举例来说,若资料为 011,针对 Even 奇偶校验的奇偶校验位则为 0,才能让逻辑高位位的数字为 Even。在奇偶校验为 Odd 的情况下,奇偶校验位「1」将导致「3」的逻辑高位位。Marked 与 Spaced 的奇偶校验将不会实际检查数据位,但会根据 Marked 奇偶校验设定高的奇偶校验位,或根据 Spaced 奇偶校验设定低的奇偶校验位。此将让接收装置了解位的状态,以进一步判定噪声是否使数据发生中断,或传送与接收装置是否尚未同步化。
EIA-232 为 IBM 兼容计算机架构的串口链接功能,可用以连接计算机与传感器/调制解调器,或用于仪器控制等许多功能。EIA-232 硬件可达最长 15 公尺的通讯距离。EIA-232 限用于计算机串行端口与装置之间的点对点连结。因此,计算机往往需要额外的 EIA-232 串行端口。标准计算机 EIA-232 串行端口与许多串行接口的制造商,将试图平衡 Win32 API 于串口通讯函数调用中的功能。Win32 API 原来是设计用于调制解调器通讯作业,且并未建置完整的 EIA-232 协议。基于此项限制,Win32 API 并无法沟通某些装置。
NI 则提供多款平台的 EIA-232 串行接口,包含 PCI、USB、PCMCIA、ExpressCard、PXI,与以太网络。根据所使用的平台,NI 串行接口卡提供 1、2、4、8,与 16 埠的版本。此外,NI EIA-232 串行接口卡更提升了某些功能,如最高 1 Mb/s 的高速波特率、透过 DMA 传输方式而降低 CPU 使用率、可选购的 2000 V 埠对埠隔离,与可设定的非标准波特率。所有的 NI 串行接口卡均包含 NI-Serial 驱动程序,可建置完整的 EIA-232 协议,并针对应用开发作业提供简单易用的高阶功能。NI-Serial 驱动程序可弥补 Win32 API 的缺点,亦即任何 EIA-232 架构的装置,均可搭配使用 NI 串口装置。
EIA-422 为苹果公司麦金塔 (Mac) 计算机的串口链接接口。与 EIA-232 所使用的非平衡式信号 (Unbalanced signal) 相较,EIA-422 使用截然不同的电子信号。EIA-422 的差动传输 (Differential transmission),就是透过 2 组线路以各自进行信号的传输与接收,因此其抗扰性与传输距离的表现均优于 EIA-232。在工业级应用中,抗扰性 (Noise immunity) 与传输距离可享有较佳的优势。
NI 则提供多款平台的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,与以太网络。根据所使用的平台,NI 串行接口卡具有 1、2、4,与 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多项功能,如最高 3 Mb/s 的高速波特率、透过 DMA 传输方式而降低 CPU 使用率、可选购的 2000 V 埠对埠隔离,与可设定的非标准波特率。所有的 NI 串行接口卡均包含 NI-Serial 驱动程序,可建置完整的 EIA-485/422 协议,并针对应用开发作业提供简单易用的高阶功能。
EIA-485 为 EIA-422 的改良版本,从原本的 10 组装置提高至 32 组装置,并定义必要的电子特性参数,于最大负载保持适当的信号电压。透过增强的多端点 (Multidrop) 功能,即可透过单一 EIA-485 串行端口进行装置的网络链接作业。EIA-485 的抗扰性与多端点功能,使其成为工业级应用的串口连结首选,适于将多款分布式装置连接至计算机或其他控制器,以进行于数据搜集、HMI,与其他作业。EIA-485 集 EIA-422 的优点于一身,因此所有的 EIA-422 装置亦可由 EIA-485 进行控制。透过 EIA-485 硬件,串口通讯作业可达最长 1200米(4000英尺)的连接线总长度。
NI 则提供多款平台的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,与以太网络。根据所使用的平台,NI 串行接口卡具有 1、2、4,与 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多项功能,如最高 3 Mb/s 的高速波特率、透过 DMA 传输方式而降低 CPU 使用率、可选购的 2000 V 埠对埠隔离,与可设定的非标准波特率。所有的 NI 串行接口卡均包含 NI-Serial 驱动程序,可建置完整的 EIA-485/422 协议,并针对应用开发作业提供简单易用的高阶功能。
DB-9 Male
DB-25 Male
10-Position Modular Jack
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
1
DCD
GND
2
TXD
RTS+ (HSO+)
1
No Connect
No Connect
2
RXD
CTS+ (HSI+)
3
RXD
CTS+ (HSI+)
2
RI
TXD-
3
TXD
RTS+ (HSO+)
4
RTS
RTS- (HSO-)
3
CTS
TXD+
4
DTR
RXD+
5
CTS
TXD+
4
RTS
RTS- (HSO-)
5
GND
RXD-
6
DSR
CTS- (HSI-)
5
DSR
CTS- (HSI-)
6
DSR
CTS- (HSI-)
7
GND
RXD-
6
GND
RXD-
7
RTS
RTS- (HSO-)
8
DCD
GND
7
DTR
RXD+
8
CTS
TXD+
20
DTR
RXD+
8
TXD
RTS+ (HSO+)
9
RI
TXD-
22
RI
TXD-
9
RXD
CTS+ (HSI+)
-
-
-
-
-
-
10
DCD
GND
此 EIA-232 通讯作业,可进行 3 种线路的简易链接作业 - Tx、Rx,与接地。然而,针对所要传输的数据,其2端均需以相同波特率进行数据的频率化 (Clocking)。虽然此方式适用于大多数的应用,此功能却受限于系统对问题的反应速度,如发生过载 (Overloaded) 的接收器。而串口握手 (Handshaking) 可协助解决相关问题。3 种最常见的 EIA-232 握手形式,即为软件握手、硬件握手,与 Xmodem。
软件握手
此方式是将数据字节作为控制字符 (Control character),近似于 GPIB 使用命令字符串 (Command string) 的方式。由于控制字符可透过传输线路,如正常数据般进行传输,因此亦可整合 Tx、Rx,与接地而成简易的 3 线式集合。透过 SetXMode 函式,即可启用或停用 2 个控制字符:XON 与 XOFF。数据接收器将传送这些字符,以于通讯期间暂停传送器。
此方式的最大缺点,也是最重要的概念:数据值将不再使用 Decimal 17 与 19。由于这些数值为无字符 (Noncharacter) 数值,因此往往不会影响 ASCII 的传输作业;然而,若以二进制法传输数据,则极可能将这些数值作为数据进行传输,导致传输作业发生错误。
硬件握手
此方式将使用实际的硬件线路。如同 Tx 与 Rx 线路一般,RTS/CTS 与 DTR/DSR 线路可搭配使用。若其中 1 个线路为输出,则另 1 个线路即为输入。
第一种线路集为 RTS (Request to Send) 与 CTS (Clear to Send)。当接收器可接收资料时,则将插入 (Assert) RTS 线路,表示接收器已可接收资料。接着将由 CTS 输入线路的传送器读取此讯息,表示已可传送数据。
第二种线路集为 DTR (Data Terminal Ready) 与 DSR (Data Set Ready)。由于此种线路可让串行端口与调制解调器之间通讯现有状态,因此主要用于调制解调器的通讯作业。举例来说,当调制解调器可为计算机传送数据时,将先中断 DTR 线路,代表目前是透过电话线进行链接作业。接着 DSR 线路将读取该讯息,计算机则开始传送数据。在一般情况下,DTR/DSR 线路是用以表示系统可进行通讯作业,而 RTS/CTS 线路则用于独立的数据框架。
在 LabWindows/CVI 中,SetCTSMode 函式将启用或停用硬件握手。若已启用 CTS 模式,则 LabWindows/CVI 将依循下列规则:
计算机传送数据时:
EIA-232 函式库必须于传送数据之前,侦测该 CTS 线路为高 (High) 状态。
计算机接收数据时:
若通讯端口为开启状态,且输入队列具有容纳数据的空间,则函式库将引发 (Raise) RTS 与 DTR。
若通讯端口输入队列已达 90%,则函式库将降低 RTS 并提升 DTR。
若通讯端口输入队列近乎空白,则函式库将引发 RTS 并保持 DTR 为高状态。
若通讯端口为关闭,则函式库将降低 RTS 与 DTR。
XModem 握手
虽然此种协议已普遍用于调制解调器通讯作业,若其他装置均可使用此种协议,仍可直接于装置之间使用 XModem 协议。在 LabWindows/CVI 中,使用者可选择是否隐藏实际的 XModem 建置。只要计算机透过 XModem 协议连接其他装置,即可使用 LabWindows/CVI 的 XModem 函式,以传送档案至其他地址 (Site)。该函式为 XModemConfig、XModemSend,与 XModemReceive。
根据下列参数使用协议:start_of_data、end_of_trans、neg_ack、ack、wait_delay、start_delay、max_tries,与 packet_size。传输数据的 2 边必须同时认可这些参数,而 XModem 则提供相关标准定义。然而,使用者可透过 LabWindows/CVI 中的 XModemConfig 函式修改这些参数,以符合任何需求。在接收器 (Receiver) 传送 neg_ack 字符之后,即可于 XModem 中使用这些参数。此字符将告诉传送器 (Sender) 已准备好接收资料。于每次传输尝试之间,接收器均将使用 start_delay 时间,直到满足 max_tries 或接收到传送器的 start_of_data。若满足 max_tries,则接收器将提醒使用者目前无法沟通传送器。若的确接收到传送器的 start_of_data,则接收器将读取后续的信息封包。此封包具有封包号码、可检查错误的封包补充码、packet_size 字节的实际数据封包,与用于更多错误检查的数据总和检查码 (Checksum)。在读取数据之后,接收器将呼叫 wait_delay,并于稍后传送认可字符 (Ack) 回传送器。若传送器未接受到 ack,则将重新传送 max_tries 数据封包,直到接收 ack 为止。若传送器一直未接收 ack,则将通知使用者传送档案失败。
由于传送器必须以 packet_size 字节的封包传送数据,因此若没有足够数据填满最后的封包,则传送器将使用 ASCII NULL (0) 字节填满数据封包。如此将使接收档案大于源文件。由于 XModem 传输作业的封包号码,极可能增加 XON/OFF 控制字符而造成通讯中断,因此 XModem 协议并不适合搭配使用 XON/XOFF。
全部0条评论
快来发表一下你的评论吧 !