Linux系统下RS—串行通信程序设计
Linux系统下RS一485串行通信程序设计 136计算机应用研究2002芷 Linux系统下RS.485串行通信程序设计 王志颖 (1.中国工程物理研究院电子工程研究所,四J1 用研究所,四JI1绵阳621900) 马卫东 绵阳621900;2,中国I程物理研究院计算机应 摘要:介绍了在Linux操作系统下RS-485多hi户串行接1:2卡的安装,配王厦串 1:2的程序设计技术.详 细叙述了 un世系统下串行通信资源的程序设计方法,相关的系统调用,程序II剌 技巧. 关键词:数据通信;RS.485;串口;Linux;系统调用 中国法分类号:TN919.5文献标识码:A文章编号:1001,3695(20o2)02_0136_03 RS-485S erialCommunicationProgramminginLinux WANGi-y,MAWei-do (1 InaittaeofElearonic脚 w 嘶 .CASP.Mio~angmn621900, 8 ;21~.stltmeCom.pmerl.CAEP.去|3 Suchttan 621900.cm) Abstract:hlthispalm.“introducetheinstslladon.configurationmadprogramraing 缶工 RSM. 85 serialcommunicationcardinLintLx ThepI曲II I.mgdesign,teehmqueandrelationsystemegO.ofserialeommurtleationres0ufcear ensm~ted. Keywords:DataCoam~tmication;KS-485;SerialPort;Linux;SystemCall Linux秉承了 Unix操作系统数十年设计的精髓,成为 当前最流行的操作系统=它具有高效,健壮,安全及功能 齐全等特征,并且完垒自由,免费,而赢得了人们的青 睬:IJnm,:的发展凝聚了世界各地无数开发人员的大量 心血,体现了崭新的信息世界的共建共享,共荣的精神: Linux能够运行在i386,Alpha.SPARC.PowerPC等多种计算 机平台上,符合POSIX标准.源代码公开.在相同的硬件 配置平台上,其性能远比其它Pc操作系统要好=串口是 微型机上的标准RS-232设备,硬件设计简单,使用方便. 尤其是随着各种为工业测控领域扩展其功能而开发的 RS-422,RS.485标准的高速通信板卡出现后,其传输速 率高懂离远,抗干扰能力强一个接口板可同时支持多 个串口等特点,使其获得了广泛的应用. ILinux操作系统中的串行通信设备 Linux操作系统下串口等通信资源是作为串行通信 终端设备ttySxx实现的:包括标准Pc串口 (C0M1- COM4)和可扩展的多口串行通信卡,均可方便的安装,使 用.一般来说,Linux的串行通信终端设备ttySxx的驱动 程序能够支持所有使用8250,16450.16550,16550A及其 兼容的UART芯片的串口卡. 1.1串行通信设备简介 通常unux内核编译配置时已经加入串口支持,因 此当Linox启动时会自动检测到标准的串口设备.对于 扩展的多口串行通信卡,则采用在系统启动的配置脚奉 中配置/ere/serialeonf文件或调用setserial命令动态加 收稿日期:200102—28 载:Linux操作系统中的所有设备以设备文件名的方式 存储在目录/dev中.其中每一个设备由一个主设备号和 个状设备号惟一确定:对于串口设备,其用于输入的 串口终端ttySxx的主设备号为4,用于输出的串口设备 cu的主设备号为5.从Linux2.0 x开始,ttS.Sxx设备既 能用于输人也能用于输出,且在Linux2.2.x版本中,CHaX 已经废弃不用.Linux串行通信设备和windows操作系 统中的串口对应如表1所示: 表1串口设备特征表 llnu输人1王设1次世lu输出1主设径PC机上对串奸设备名称备号备号『串行 设备名稀1号I备三J应的串. III -1416 (Jm,IIl5—rIM 1 一—— L_——十一_} 一一一 !!!LJ!.i 竺 J!!!一 /de~ltyZ ,7.14J66/妇/cua25『66ICOM3 }卜 I一 d ly5311671,dev/eu~15-j6JCO IJnux通常的发行套件都应该已经正确地建立了这 些设备.如果系统中缺少某些设备可以用mknod指令 建立之.如建立ttvSO设备的操作指令如下: mknod一ol666idev/t 〜SOc464 或者在/dev目录下运行设备制作脚本程序MAKEDEV: /MAKEDEVttySO 1.2RS.485通信卡的安装与配置 Rs 一 485系列通信卡在工业测控领域应用非常广泛. 笔者使用的是研华公司的PCL-846/8474 口 RS.422/485 内置通信卡:采用了该板卡共享中断扩展模式设置其 工作方式,中断号为5,端口地址从3201-1到33FH.由于 笔者的微机上已有两个串口,故将其4个串口分别设置 为COM3至COM6:可以通过察看/proc/interrupts和/ proe/ioports文件.寻找空余IRQ中断号与端口号,以便匹 第2期王志颖等:Linux系统下RS-485串行通信程序设计137 配实际的计算机系统:通常中断号2.3,4,5或7是较 好的选择. 查看通信板卡的说明书,将多VI串行通信卡跳线, 开关按上述参数设置好.插入计算机总线插槽,硬件设 备就准备好了:笔者使用的是SlackwareVersion7.0版 本的Liftut操作系统其串口配置方式非常简便只需要 配置好/etc/serialeonf文件即可: #TheseamtheslandardCOM 1 thmu 曲 C0M2dedc~ /dev/tlySOuml 16450port0 x3F8irq4 /dev/tfySLual 6450port0 x2F8irq3 # #SdRS-485SerialCardfnTFourpo 〜ports /dev,“HyS2uanl6550Aport0 x320irq5fomport /de„/HyS31_fi [ 50Aport0 x328]rq5LL 1 .|t /d/s4u 州 L6550Apon0〜3305n /dev/tlyS5116550Aport0 x338]rq5 删 然后在/ere/re.d/rc.S中添加兀-serial的启动指令, re.serial串口初始配置脚本就会自动将4个扩展串口添 加好.可以用setserial—a/dev/ttvSxx命令验证串口是否 在系统中安装完毕.另外一种方式是直接使用set-rial 命令完成串口配置工作.可将下面指令添加到/etc/rc. d/re.local或re.serial中.便系统一旦启动,即可将串 口设备准备好 /sbin/