NILABWINDOWSCVI串口编程RS232教程_第1页
NILABWINDOWSCVI串口编程RS232教程_第2页
NILABWINDOWSCVI串口编程RS232教程_第3页
NILABWINDOWSCVI串口编程RS232教程_第4页
NILABWINDOWSCVI串口编程RS232教程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4.4. 1 RS-232C 接口介绍往介绍具体的RS-232函数库之前,木节先简要介绍RS-232C接口。美国电了丁业协会 (EIA)公布的RS-232C是丿IJ的最女的一种串行通信标准,它是从CCITT远卅通信标准屮 导出的,用于数据终端设备(DTE)和数据通信设备(DEC) Z间的接口。该标准包括按位 串行传输的电气和机械方面的规定。一、接口信号RS-232C的机械指标规定:RS-232C接口通向外部的连接器(插针插朋)是一种“D” 熨25针插头。由于25芯中尙许多是不常用的,IBM-PC对比进行了简化,取了其屮的 常用的9芯,构成了9芯RS-232C串行接口,使其成为一种事实上的串行接

2、口标准配 賈。RS-232C的“D”型9针橢头引脚定义如图413所示。载波检测 接收数据 发送数据 数据终端就绪 信号地图413 “D”型9针插头引脚定义图RS-232C标准接口中的主要信号是“发送数据和接收数据”,它们用来在两个 系统或设备之间传送串行信息。对于界步通信,传输的串行位数据信息的单位是字符。 二、数据传送格式和电气特性图4-14 5出了RS-232C以位用行方式传输数据的格式,这是微机系统中最通用的 格式,7位ASCII码数据的连续传送由最低有效数字位开始,而以奇偶校验位结束。应 当指出,RS-232C标准接口并不限于ASCII数据,事实上还可有5到8个数据位,后 加一奇偶校验

3、位,并有1或2位停止位。在电性能方面,这一标准使用负逻辑。逻辑1电平是在15V到5V范围内,逻辑0 电平则在+5V到+15V范围内。它要求RS-232C接收器必须能识别低至+3V的信号作为 逻辑0,而识别高至3V的信号作为逻緝1,这意味着有2V的噪声容限。RS-232C进行 数据传输的报高速率为20KB/S,通信距离最长为15m。H起始位校验位图414串行数据传输格式4. 4. 2 RS-232函数库概述LabWindows/CVI 6.0 S供的RS-232函数库上要包括以下几类函数:串行口打开/ 关闭(Open/Close)函数,宋行口输入/输出(I叩uOu(piH)函数吊彳J:口控制(C

4、ontrol) 函数,串行口状态査询(Status)函数,串行口事件处理(Callbacks)函数。列表如下:表423串行口打开/关闭函数函数名功能OpeuComCoiifig打开一个串行并进行相关的参数设置CloseCom关闭一个串行口衣4J4皿行口输入/输出怔数函数名功能ConiRd从指定巾行口的输入队列读取若干字节的信息ConiRdBvte从折定串行U的输入队列读収一个字节的信息ComWrt向指定串行口的输出队列写若干字节的信息ComWrtBvte向指定串行口的输出队列得一个字节的信息表4公串行口控制函数函数名功能FIusliInQ消空指定串行口的输入队列FlushOutQ消空指定串行口

5、的输出队列衣426 m行口状态仕询函数函数名功能GethiQLen获取指定巾行口输入队列内的字符数GetOutQLen获取指定串行口输出队列内的字符数4-27串行口事件处理函数函数名功能IustallComCallback为指定串行口设直一个回调函数4. 4. 3 RS-232编程举例利用UbWindows/CVI的RS-232函数库进彳j串行口应用编程时,上要包括以下儿 个步骤:首先要打开一个串行口并对其进行配置,然际用门就可以利用该串行口收发数 据,程序结束之前则应当关闭该串行口。木节结合一个实例介绍RS-232函数库的使用方法。读者能衣目录samplesrs232 commcallbac

6、k.prj下找到该例了。该实例利用讣算机的串行111实现了 “白发自收”和串行口事件检测”的功能。所谓“自发自收”指的是从计算机串行口发送出去的信息又被 木计算机收到,而“串行口事件检测”的意思是当计算机的串行口检测到特定的字 符时就弹出提示对话框。该例了虽然简单,但它菲常令助于用户学握出彳J:l I编程的基木思路和RS-232相关函数的使用方法。以下将分步骤介绍该该例程的实现方法。步骤一:编写界面,生成程序框架首先,用户应按照图415所示编写软面板。为方便用户编写软血板,表428列出了软面板上备控件的基本属性设置。图4-15软面板示意图农4-28软面板上要控件丛木属性设宙控牛类型Consta

7、nt Nan 属性设置面板 PanelPANELCallback FunctionPanelCB命令按钮CommandBuuonSEND_DATACallback FunctionSendDataLabelSend DataRECV_DATACallback FiuictionReceiveDataLabel.Receive DataHELPCallback FunctionHelpLabelHelpQUITBUTTONCallback FunctionQuitLabelQuitk符串StringINPUT_STRINGLabelMessage to SendOUTOUT_STRINGLabe

8、lMessage Received软面板编完以后,用户就对以利丿IjLabWindows/CVI自动生成用序框架.并进入步 骤二。步骤二:打开串行口 1并进行配置此部分代码添加在L:函数中,如下所示:int main (int argc, char *argv)if(InilCVIRTE (0, argv. 0) = 0) /* Initialize CVI libraries */return - I;/* out of memory /if (gPanelHandle = LoadPanel (0, Hcommcallback.uir, PANEL) 0)return -1:if (gHe

9、lpPanelHandle = LoadPanel (0. coninicallback.uir1*, HELP_PANEL) 0)return 1;OpenComConfigd, “, 9600, 0. 8, 1,512,512); /* 打开串行口 1 并进行配置*/SetCTSMode (I, LWRS_HWHANDSHAKE_OFF); /* 禁止硕件握手 */HushlnQ(l);/*清空串行口 1的输入队列*/FlushOutQ (1); /清空串行口 I的输出队列*/*弹岀窗口提示用户输入待检测的事件字符*/PrompiPopup (MEvent Charcter ,rEnter

10、 the Event Character11, gEventChan 1);/*为串行口 1设置一个冋调函数,使得串行口 1收到待检测字符时就调用国调函数 EvencChar_Detect.Func 给出提示 */I nstal IComCal I hack (1, LWRS_RXFLAG(), (int)gEventChar(O,Evenl_Char_Detect_Func, 0);Displaypanel (gPanelHandle); /* 显示上界血 */RunUserlnterface (); /* 运行用户界面 */CloseCom (1); /*在退出程序之前关闭申行+/Disc

11、ardPanel (gPanelHandle);DiscardPanel (gl lelpPanell landle);return 0;上述代码屮用到了函数OpenComConfig,该函数的功能是:打开一个串行口并对 该串行口进行配置。函数原型:int OpenComConfig (int COM_Port, char Device_Name,long Baud_Rate, int Parity, int Data_Bits,int S(op_Bi(s, int InpucQueue_Size,int Output_Queue_Size);参数说明:COM_Port:整型变昴,用于抬定要打

12、开的端I I乃,右效范用为1-1000.Device_Name| |: 符型数组,用ASCII字符审表示的串行I I名,该参数-般默认 为空。Baud.Rate:长整型变址,申彳I的波特冷,标准的波特率育:11()、300、600、1200、 2400、4800、9600、19200等。应当指出,禾9用吊行口进行通讯时,通讯双方的波特率 必须一致。此外,包括通讯双方的奇偶枝验模式、数据位吃数、停上位位数等也必须一 致。Parity:型变堆,用于指定奇偶校验模式。0表示无奇偶校验,1表示奇校验,2则表示偶校验,另有两种不太常用的校验模式,此处不作介绍。Data.Bits:粮型变最,用于指定每帧信

13、息中数据位的位数.可选的位数为5、6、7 和8。Stop_Bits:整型变量,用于指定每帧信息中停止位的位数,可选的位数为】和2。 Inpul_Queue_Size:整型变最,用于指定串行I I输入队列的人小。Output_Queue_Size:整型变量,用F指定串行II输出队列的人小。因此,OpenComConfig (1, HM, 9600,0,8, 1,512,512)的作用是打开串行口1,并对串 行11配遏如下:波特率为9600,无奇偶校验,位数据位,位停止位,输入/输出队列的人小均为512字节。函数FlushlnQ和FlushOulQ(l)的作用分别为淸空串行LI1的输入队列和输出队

14、 列。上述代码小还用到了一个关键性的函数InstallComCallback,该函数的功能是:为 指定的串行口设置一个回调函数,当有相应的事件(比如串行口收到了特定的字符)发 生时,就调用指定的冋调函数。函数原型:int InstallComCallback (int COM_Port, int Event_Mask,int No(ify_Count, in( Event_Character,ComCallbackPtr Callback_Function,void *Callback_Data);参数说明:Event_Mask:輟型变量,用于指定一个事件,当该事件发生时,就调用指定的回 调函

15、数,如果要禁止回调函数的调用,该参数填0。不同的常量名代表不同的事件,以 下将几个常用的常帚名解释如下:常帚名串行口事件LWRS_RXC1IAR出彳j:l I收到任意的字符 LWRS_RXFLAG巾彳j: I I收到特定的字符LWRS_TXEMPTY串行口的发送序列为空LWRS.RECEIVE串行口输入队列中的字符数已达到扌旨定旳数乗Notify_Count:整型变帚,使LWRS.RECEIVE事件能够发工的输入队列内的呆小 字节数。Event.Character:幣型变乗,川于指定触发I.WRS_RXFLAG事件(串彳了口收到特 定的字符)的字符值。Callback-Function :用于

16、指定被调用的何调函数名,而且回调函数必须按以下格式定义:void CVICALLBACK CallbackFunctionName (ini portNo,inl eveniMask, void *callbackData)Callback_Data:该参数可以是指向某个数据的指针,也可以是个整形变毘,它将 被传给上述的冋调函数Callback_Functiono 一般该参数填为0即可。由以上的叙述可知,InstallComCallback (1, LWRS_RXFLAG 0, (int)gEventChar|01, Event_Char_Detect_Func, 0)函数的作用是:肖串行口

17、1收到特定的字符时就调用函数 Event_Char_Detect_Func ,提示用户出行I II收到了某个特定的字符。函数 Event_Char_Detect_Func 的代码如下:void CVICALLBACK Event_Char_Detect_Func (int portNo,int eventMask,void *callbackData)char outMessage256;Fmt (outMessage, H%s%s%s%sn,The Character VugEventChar/V was detected11);MessagePopup (HInstall CommCall

18、back*, outMessage);/*弹岀一个消息框给出提示信息return;)步骤三:利用串行I收发数据在木例屮,串行口发送数据是通过该命令按钮“Send DaM对应的冋调函数SendData ()实现的,代码如下:int CVICALLBACK SendData (int panel, int control, int event, void *callbackData,int eventDatal, int cventData2)char info20;switch (event)case EVENT_COMMIT:/* 清空 “MessageReceived” 字符吊*/SetCt

19、rlVal (gPanelHandle, PANEL_OUTOUT_STRING AO);/*将“Message 9 Send”字符串控件内的信息的存到数纽info中/GetClriVal (gPanelHandle, PANEL_INPUT_STRING info);FlushlnQ(l); /*清空串行口 1的输入队列*/*将“Messages Send”字符串控件内的信息的从串行口 1输出*/ComWrt (I, info, strien(info);break;return 0;上述代码中,用到了函数ComVVrt(l, info, strlen(info),其作用在于将数组info

20、中的信息送到串行口的输出队列。函数原型:int ComWrt (int COMPort, char Butfer , int Count);参数:Buffer!: 符型数组,欲输岀的信息存在该数组中。Count:整型变量,用于指定要输岀的字节数。串行口收数据则是通过命令按钮ReceiveData对应的帆调函数ReceiveData () 实现的,其代码如下:int CVICALLBACK ReceiveData (int panel, int control, int event, void *callbackData, ini eventDatal, ini eventData2)char

21、readBuf20 = 0);int strLen;switch (event)case EVENT COMMIT: strLen = GetInQLen(l);/*获取串行口 1输入队列内的字符数*/*将串行口 1输入队列内的所有字符读到数MreadBuf*/ComRd (1, readBuf, strLen);/*将从串行口输入队列读冋的字符昭示在“Message Received”字符串控件上*/SetCtrlVal (gPanelHandle, PANEL_OUTOUT_STRING readBuf);SetAcdveCtrl (gPanelHandle, PANEL_INPUT_ST

22、RING);break;return 0;I上述代码屮,GetlnQLen(l)函数用于获取串行口 1输入队列内的字符数,函数 ComRd (1, readBuf, strLen)则实现将吊行I I1输入队列内的所有字符读到数组 readBuf 4的功能。现对该函数解释如下:函数原型:ini ComRd (int COM_Port, char Buffer! L int Count);参数:Bufterl :字符型数组,用于存储从串行口读I叫的信息。Count: 型变地,用于指定要读取的字节数。步骤四:关闭串行口用户使用完串行口以后,必须关闭串行口。关闭串行口只需用一个函数CloseCom就可实现,在木例中CloseCom (1)表示关闭串行口 1。到此为止,榨序的编制丁作部完成了,用户在运行用序之前需要先做好以下准备T 作:首先在计算机的串行口 1上连一根9芯RS-232电缆,然后再用根导线将RS-232电缆 上的2端了(接收数据端)和3端了(发送数据端)短接,电缆上的比它端子都为 空。做完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论