NI_LabwindowsCVI串口编程_RS232__教程.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NI_LabwindowsCVI 串口 编程 _RS232__ 教程
- 资源描述:
-
4.4.1 RS-232C 接口介绍 在介绍具体的RS-232 函数库之前,本节先简要介绍RS-232C 接口。美国电子工业协会(EIA)公布的 RS-232C 是用的最多的一种串行通信标准,它是从CCITT 远程通信标准中导出的,用于数据终端设备(DTE)和数据通信设备(DEC)之间的接口。该标准包括按位串行传输的电气和机械方面的规定。 一、 接口信号 RS-232C 的机械指标规定:RS-232C 接口通向外部的连接器(插针插座)是一种“D” 型25 针插头。由于25 芯中有许多是不常用的,IBM-PC 对其进行了简化,取了其中的 常用的9 芯,构成了9 芯RS-232C 串行接口,使其成为一种事实上的串行接口标准配 置。RS-232C 的“D”型9 针插头引脚定义如图4-13 所示。 RS-232C 标准接口中的主要信号是“发送数据”和“接收数据”,它们用来在两个 系统或设备之间传送串行信息。对于异步通信,传输的串行位数据信息的单位是字符。 二、 数据传送格式和电气特性 图 4-14 示出了RS-232C 以位串行方式传输数据的格式,这是微机系统中最通用的 格式。7 位ASCII 码数据的连续传送由最低有效数字位开始,而以奇偶校验位结束。应 当指出,RS-232C 标准接口并不限于ASCII 数据,事实上还可有5 到8 个数据位,后 加一奇偶校验位,并有1 或2 位停止位。 在电性能方面,这一标准使用负逻辑。逻辑1 电平是在-15V 到-5V 范围内,逻辑0 电平则在+5V 到+15V 范围内。它要求RS-232C 接收器必须能识别低至+3V 的信号作为 逻辑0,而识别高至-3V 的信号作为逻辑1,这意味着有2V 的噪声容限。RS-232C 进行 数据传输的最高速率为20KB/S,通信距离最长为15m。 4.4.2 RS-232 函数库概述 LabWindows/CVI 6.0 提供的RS-232 函数库主要包括以下几类函数:串行口打开/ 关闭(Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control) 函数,串行口状态查询(Status)函数,串行口事件处理(Callbacks)函数。列表如下: 4.4.3 RS-232 编程举例 利用LabWindows/CVI 的RS-232 函数库进行串行口应用编程时,主要包括以下几 个步骤:首先要打开一个串行口并对其进行配置,然后用户就可以利用该串行口收发数 据,程序结束之前则应当关闭该串行口。 本节结合一个实例介绍RS-232 函数库的使用方法。读者能在目录\samples\rs232\ commcallback.prj 下找到该例子。该实例利用计算机的串行口1 实现了“自发自收”和 “串行口事件检测”的功能。所谓“自发自收”指的是从计算机串行口发送出去的信息又被本计算机收到,而“串行口事件检测”的意思是当计算机的串行口检测到特定的字 符时就弹出提示对话框。 该例子虽然简单,但它非常有助于用户掌握串行口编程的基本思路和RS-232 相关 函数的使用方法。以下将分步骤介绍该该例程的实现方法。 步骤一:编写界面,生成程序框架 首先,用户应按照图4-15 所示编写软面板。为方便用户编写软面板,表4-28 列出 了软面板上各控件的基本属性设置。 图 4-15 软面板示意图 表 4-28 软面板主要控件基本属性设置 软面板编完以后,用户就可以利用LabWindows/CVI 自动生成程序框架,并进入步 骤二。 步骤二:打开串行口1 并进行配置 此部分代码添加在主函数中,如下所示: int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) /* Initialize CVI libraries */ return -1; /* out of memory */ if ((gPanelHandle = LoadPanel (0, "commcallback.uir", PANEL)) < 0) return -1; if ((gHelpPanelHandle = LoadPanel (0, "commcallback.uir", HELP_PANEL)) < 0) return -1; OpenComConfig (1, "", 9600, 0, 8, 1, 512, 512); /* 打开串行口1 并进行配置 */ SetCTSMode (1, LWRS_HWHANDSHAKE_OFF); /* 禁止硬件握手 */ FlushInQ (1); /* 清空串行口1 的输入队列 */ FlushOutQ (1); /* 清空串行口1 的输出队列 */ /* 弹出窗口提示用户输入待检测的事件字符 */ PromptPopup ("Event Charcter", "Enter the Event Character", gEventChar, 1); /* 为串行口1 设置一个回调函数,使得串行口1 收到待检测字符时就调用回 调 函数 Event_Char_Detect_Func 给出提示 */ InstallComCallback (1, LWRS_RXFLAG, 0, (int)gEventChar[0] , Event_Char_Detect_Func, 0); DisplayPanel (gPanelHandle); /* 显示主界面 */ RunUserInterface (); /* 运行用户界面 */ CloseCom (1); /* 在退出程序之前关闭串行口1*/ DiscardPanel (gPanelHandle); DiscardPanel (gHelpPanelHandle); return 0; } 上述代码中用到了函数OpenComConfig,该函数的功能是:打开一个串行口并对 该串行口进行配置。 函数原型:int OpenComConfig (int COM_Port, char Device_Name[ ], long Baud_Rate, int Parity, int Data_Bits, int Stop_Bits, int Input_Queue_Size, int Output_Queue_Size); 参数说明: COM_Port:整型变量,用于指定要打开的端口号,有效范围为1-1000。 Device_Name[ ]:字符型数组,用ASCII 字符串表示的串行口名,该参数一般默认 为空。 Baud_Rate:长整型变量,串行口的波特率,标准的波特率有:110、300、600、1200、 2400、4800、9600、19200 等。应当指出,利用串行口进行通讯时,通讯双方的波特率 必须一致。此外,包括通讯双方的奇偶校验模式、数据位位数、停止位位数等也必须一 致。 Parity:整型变量,用于指定奇偶校验模式。0 表示无奇偶校验,1 表示奇校验,2则表示偶校验,另有两种不太常用的校验模式,此处不作介绍。 Data_Bits:整型变量,用于指定每帧信息中数据位的位数,可选的位数为5、6、7 和8。 Stop_Bits:整型变量,用于指定每帧信息中停止位的位数,可选的位数为1 和2。 Input_Queue_Size:整型变量,用于指定串行口输入队列的大小。 Output_Queue_Size:整型变量,用于指定串行口输出队列的大小。 因此,OpenComConfig (1, "", 9600, 0, 8, 1, 512, 512)的作用是打开串行口1,并对串 行口1 配置如下:波特率为9600,无奇偶校验,8 位数据位,一位停止位,输入/输出 队列的大小均为512 字节。 函数 FlushInQ (1)和FlushOutQ (1)的作用分别为清空串行口1 的输入队列和输出队 列。 上述代码中还用到了一个关键性的函数InstallComCallback,该函数的功能是:为 指定的串行口设置一个回调函数,当有相应的事件(比如串行口收到了特定的字符)发 生时,就调用指定的回调函数。 函数原型:int InstallComCallback (int COM_Port, int Event_Mask, int Notify_Count, int Event_Character, ComCallbackPtr Callback_Function, void *Callback_Data); 参数说明: Event_Mask:整型变量,用于指定一个事件,当该事件发生时,就调用指定的回 调函数,如果要禁止回调函数的调用,该参数填0。不同的常量名代表不同的事件,以 下将几个常用的常量名解释如下: 常量名 串行口事件 LWRS_RXCHAR 串行口收到任意的字符 LWRS_RXFLAG 串行口收到特定的字符 LWRS_TXEMPTY 串行口的发送序列为空 LWRS_RECEIVE 串行口输入队列中的字符数已达到指定的数量 Notify_Count:整型变量,使LWRS_RECEIVE 事件能够发生的输入队列内的最小 字节数。 Event_Character:整型变量,用于指定触发LWRS_RXFLAG 事件(串行口收到特 定的字符)的字符值。 Callback_Function:用于指定被调用的回调函数名,而且回调函数必须按以下格式 定义:void CVICALLBACK CallbackFunctionName (int portNo,int eventMask, void *callbackData) Callback_Data:该参数可以是指向某个数据的指针,也可以是一个整形变量,它将 被传给上述的回调函数Callback_Function。一般该参数填为0 即可。 由以上的叙述可知,InstallComCallback (1, LWRS_RXFLAG, 0, (int)gEventChar[0] , Event_Char_Detect_Func, 0)函数的作用是:当串行口1 收到特定的字符时就调用函数 Event_Char_Detect_Func , 提示用户串行口1 收到了某个特定的字符。函数 Event_Char_Detect_Func 的代码如下: void CVICALLBACK Event_Char_Detect_Func (int portNo,int eventMask,void *callbackData) { char outMessage[256]; Fmt (outMessage, "%s<%s%s%s", "The Character \"",gEventChar,"\" was detected"); MessagePopup ("Install CommCallback", outMessage); /* 弹出一个消息框给出提示信息 */ return; } 步骤三:利用串行口收发数据 在本例中,串行口发送数据是通过该命令按钮“Send Data”对应的回调函数 SendData()实现的,代码如下: int CVICALLBACK SendData (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { char info[20]; switch (event) { case EVENT_COMMIT: /* 清空“Message Received”字符串*/ SetCtrlVal (gPanelHandle, PANEL_OUTOUT_STRING, "\0"); /* 将“Message to Send”字符串控件内的信息的存到数组info 中 */ GetCtrlVal (gPanelHandle, PANEL_INPUT_STRING, info); FlushInQ (1); /*清空串行口1 的输入队列*/ /* 将“Message to Send”字符串控件内的信息的从串行口1 输出 */ ComWrt (1, info, strlen(info)); break; } return 0; }上述代码中,用到了函数ComWrt(1, info, strlen(info)),其作用在于将数组info[ ] 中的信息送到串行口的输出队列。 函数原型:int ComWrt (int COM_Port, char Buffer[ ], int Count); 参数: Buffer[]:字符型数组,欲输出的信息存在该数组中。 Count:整型变量,用于指定要输出的字节数。 串行口收数据则是通过命令按钮“Receive Data”对应的回调函数ReceiveData() 实现的,其代码如下: int CVICALLBACK ReceiveData (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { char readBuf[20] = {0}; int strLen; switch (event) { case EVENT_COMMIT: strLen = GetInQLen (1); /* 获取串行口1 输入队列内的字符数 */ /* 将串行口1 输入队列内的所有字符读到数组readBuf 中 */ ComRd (1, readBuf, strLen); /* 将从串行口输入队列读回的字符显示在“Message Received”字符串控件上 */ SetCtrlVal (gPanelHandle, PANEL_OUTOUT_STRING, readBuf); SetActiveCtrl (gPanelHandle, PANEL_INPUT_STRING); break; } return 0; } 上述代码中,GetInQLen (1)函数用于获取串行口1 输入队列内的字符数,函数 ComRd (1, readBuf, strLen)则实现了将串行口1 输入队列内的所有字符读到数组 readBuf 中的功能。现对该函数解释如下: 函数原型:int ComRd (int COM_Port, char Buffer[ ], int Count); 参数: Buffer[ ]:字符型数组,用于存储从串行口读回的信息。 Count:整型变量,用于指定要读取的字节数。 步骤四:关闭串行口 用户使用完串行口以后,必须关闭串行口。关闭串行口只需用一个函数 CloseCom 就可实现。在本例中CloseCom (1)表示关闭串行口1。 到此为止,程序的编制工作都完成了,用户在运行程序之前需要先做好以下准备工 作:首先在计算机的串行口1 上连一根9 芯RS-232 电缆,然后再用一根导线将RS-232电缆上的2 端子(接收数据端)和3 端子(发送数据端)短接,电缆上的其它端子都为 空。做完以上准备工作后,用户就可执行该程序。程序运行后首先弹出一提示框,提示 用户输入待检测的字符,如图4-16 所示。用户输入任一字符后将进入主界面,如图4-15 所示。在图4-17 中,左上角的字符串控件用于显示串行口要发送的信息,左下角的字 符串控件则用于显示串行口所收到的信息。用户点击“Send Data”命令按钮,串行口 就将左上角控件内的字符串发送出去,由于事先已将串行口的发送和接收端子短接,因 此被发送的字符串实际上是被送到了串行口的输入队列,用户只需点击“Receive Data” 命令按钮,串行口将读取输入队列内的字符串并显示在左下角的字符串控件内。此时, 如果被发送的字符串中包含了用户先前输入的字符,程序将检测到并给出提示,如图 4-18 所示。 图 4-16 提示用户输入字符 图 4-17 主界面 图 4-18 提示串行口收到了字符“s” 由以上的介绍可知,利用 LabWindows/CVI 的RS-232 函数库可以很方便地进行串行口应用编程。编程的基本过程为:首先打开一个串行口并根据实际需要对其进行配置, 然后用户就可以利用该串行口收发数据,最后则应该关闭串行口。 此外,用户在进行串行口编程时,必须注意以下问题: (1)串行通讯双方必须使用相同的通讯协议,如双方的波特率、数据位位数、奇偶 校验模式、停止位位数等必须一致。 (2)前面曾提到端口号的有效范围为1-1000,但是计算机一般只有1-2 个串行口, 因此用户在打开串行口时,必须确保所使用的端口号是实际存在的。 (3)为了确保串行口初始化成功,用户可先使用CloseCom 函数(当串行口处于关 闭状态时,该函数不起任何作用)将要初始化的串行口关闭。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




NI_LabwindowsCVI串口编程_RS232__教程.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/7691188.html