LabWindowsCVI串口通信函数
基于LabWindows/CVI的虚拟函数信号发生器的设计

基于LabWindows/CVI的虚拟函数信号发生器的设计基于LabWindows/CVI的虚拟函数信号发生器的设计1 虚拟仪器和LabWindows/CVI 简介虚拟仪器是1986 年美国国家仪器公司(NI)提出的一种新型仪器概念。
他是计算机技术介入仪器领域所形成的一种新型的、富有生命力的仪器种类。
在虚拟仪器中计算机处于核心地位,计算机软件技术和测试系统更紧密地地结合成一个有机整体,仪器的结构概念和设计观点都发生了根本变化。
虚拟仪器技术的实质是利用最新的计算机技术来实现和扩展传统仪器的功能。
其基本构成包括计算机、虚拟仪器软件、硬件接口模块等。
在这里,硬件仅是为了解决信号的输入输出,软件才是整个系统的关键。
当基本硬件确定了以后,就可以通过不同的软件实现不同的功能。
虚拟仪器应用软件集成了仪器的所有采集、控制、数据分析、结果输出和用户界面等功能,使传统仪器的某些硬件甚至整个仪器都被计算机软件所代替。
因此从某种意义上说,计算机即是仪器,软件即是仪器。
虚拟仪器的软件是其最核心、最关键的部分,其主要功能是对硬件执行通信和控制,对信号进行分析和处理,以及对结果进行恰当的表达和输出等。
虚拟仪器的软件开发平台目前主要有两类:第一类是基于传统语言的TurboC,Microsoft 公司的Visual Basic 与Visual C++,Borland 公司的Delphi,Sybase 公司的PowerBuilder,这类语言具有适应面广、开发灵活的特点,但开发人员需有较多的编程经验和较强的调试能力;第二类用专业图形化编程软件进行开发。
如HP 公司的VEE,NI 公司的Lab-VIEW 和LabWindows/CVI 等。
NI 公司的LabVIEW 软件开发平台是一种专业图形化编程软件,采用图形化编程方式,结构流程清晰,但缺点是对硬件的要求较高,比较依赖NI 的专用产品,对信号控制方式不够灵活。
而Lab-Windows/CVI 以ANSI。
LabWindows_CVI开发环境下实现串口通讯的方法

软件应用
表 4 串口设置函数功能
函数名 ComB reak Com SetE scap e F lu sh InQ F lu shO u tQ SetCT SM ode SetCom T im e SetXM ode
函数功能 设置通讯终止时间 设置各种通信握手信号
清空接收队列 清空发送队列 设置硬件握手 设置通讯超时时间 允许或禁止串口通讯的软件握手
B u tton
函数为 R eceiveD a te
Q u it
QU IT
Comm and 退出应用程序, 消息
B u tton
响应函数为 qu it
413 程序部分代码 在主函数中打开串口:
O p enCom Config (1, " " , 9600, 0, 8, 1, 512, 512) ;
打 开 并 设 置 串 口, 此 调 用 语 句 打 开 串 口 1, 波 特 率 为
L abW indow s CV I 有许多标准函数库, 其中的 R S232 函数库提供了各种方式的串口通讯控制函数和 I O 函数, 一共可分为打开 关闭函数、I O 读写函数、 调制解调器控制函数、 串口设置函数、 寄存器状态函
数和回调函数 6 类。 其中部分较常用的函数如下: 这些函数返回的各种状态信息可参阅相应函数面
收稿日期: 2003 11 15
62
软件开发的角度来看, L abW indow s CV I 具有以下一 些特点:
(1) 基于标准 C 语言, 简单易学。 (2) 可视化、 交互式的开发工具。 具有人机交互 界 面编辑器, 运用可视化交互技术实现 “所见即所 得”, 使人机界面的实现直观简单。对每一个函数都提 供了一个函数面板, 用户可以通过函数面板交互地输 入函数的每一个参数及属性值。 这种交互式编程技术 大大提高了工程设计的效率和可靠性。 (3) 具有程序自动生成的能力, 可减少软件开发 过程中代码编写的工作量。 设计好的人机交互界面 (虚拟仪器面板) 存储在后缀名为 1u ir 的文件中。L ab2 W indow s CV I 自动生成原码头文件 1h, 自动声明界 面对象常量及相关的回调函数, 编程人员不必钻研这 些技术。 (4) 具有齐全的软件工具包及功能强大的函数库, 通过简单调用库函数就能驱动相应的总线的各种仪器 和硬件板卡。这些工具包和函数库具有更高的效率, 他 使得程序的编写更简洁、 直观。 (5) 完善的兼容性。借助于L abW indow s CV I, 有 经验的 C C+ + 语言开发人员可以采用熟悉的 C 语言 环境, 如V C, BC 等开发自己的虚拟仪器系统。另外, 还可将仪器库函数及子程序编译成 32 位DLL , 以用 于任何 32 位 C C+ + 环境中以及 V isua l B a sic 或 L ab2
LabWindows中TCPip函数分析与实例

LabWindows CVI TCP 程序说明1 本系统框图如下:2 TCP 函数说明2.1 Client Functions 客户端ClientTCPRead (unsigned int conversationHandle, void *dataBuffer, size_t dataSize, unsigned int timeOut);参量1:操作柄、参量2:读入数据、参量3:读入数据长度、参量4:溢出时间。
Return :读出数据的字节长度(可用来校验数据)。
ClientTCPWrite (unsigned int conversationHandle, void *dataPointer, size_t dataSize, unsigned int timeOut);参量1:操作柄、参量2:输出数据、参量3:读入数据长度、参量4:溢出时间。
Return :写入数据的字节长度(可用来校验数据)。
ConnectToTCPServer (unsigned int **conversationHandle, unsigned int portNumber, char serverHostName[], tcpFuncPtr callbackFunction, void *callbackData, unsigned int timeOut);参量1:操作柄、参量2:当前端口、参量3:服务器地址、参量4:回调函数、参量5:溢出时间Return :写入数据的字节长度(可用来校验数据)。
DisconnectFromTCPServer (unsigned int conversationHandle);参量:操作柄2.2 Sever Functions 服务器端DisconnectTCPClient (unsigned int conversationHandle);参量:操作柄RegisterTCPServer (unsigned int portNumber, tcpFuncPtr callbackFunction, void *callbackData);参量1:当前端口、参量2:回调函数、参量3:返回数据(NULL )ServerTCPRead (unsigned int conversationHandle, void *dataBuffer, size_t dataSize, unsigned int timeOut);参量1:操作柄、参量2:读入数据、参量3:读入数据长度、参量4:溢出时间。
基于Lab Windows/CVI的PC与 DSP的串行通信.

基于Lab Windows/CVI的PC与 DSP的串行通信摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。
仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。
关键词:Butte0 引言随着数字信号处理理论及微电子技术的高速发展,数字信号处理器(DSP)已广泛应用于各个控制领域。
而在控制系统中,通常会利用PC机与DSP之间的通信来对系统各个状态/参数进行监控。
这种方法既利用了DSP功耗低、价格相对便宜、功能强大、抗干扰能力强、适宜于分布现场等优点,同时又结合了PC机的软硬件资源丰富、管理功能强大、人机界面友好、操控平台稳定可靠、数据通信方便快捷等系统功能优势。
为此,本文拟通过使用比较广泛的RS-232-C接口标准来研究PC与TMS320F2812 DSP之间的异步串行通信。
1 硬件设计这里采用最简单的三线连接方法,即PC机与DSP的发送、接收端彼此交叉连接,地线对应连接的方法。
另外,由于DSP的串行通信接口SCI的两个外部引脚SCITXD和SCIRXD的信号为TTL电平,与RS-232-C标准逻辑电平不一致,因此,要进行信号电平转换后才能连接到PC机的串口接头DB9,图1所示是其硬件连接电路,其中电平转换选用MAX3232芯片和若干电容来实现,使用时只用其中的一对收/发单元。
2 软件设计2.1 通信协议本设计将通信的帧格式设置为1个起始位,8个数据位,无奇偶校验位,1个停止位。
图2所示为其数据帧格式,其传输波特率为9600 bps,采用全双工通信方法。
PC机发送数据包的格式是:包头+功能码+参数码+数据内容+校验和,本设计分别设置它们占1、2、2、4、4个字节。
labwindowscvi6第七章串行口通信和网络数据传输

ASCII码
奇偶 停止 校验 位
位
• 电气特性
▪ 负逻辑:1=-5V~-15V, 0=+5V~+15V
▪ 最高速率:20kbit/s
▪ 最远距离:15m
•2020/5/25
• 打开配置和关闭
▪ 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);
labwindowscvi6第七章 串行口通信和网络数据
传输
2020年5月25日星期一
1. 串行口通讯
• RS-232端口定义
数据装置
就绪
请求
发送
清除
发送
振铃
指示
1 6
2 7
3 8 4 9 5
载波
检测
接收
数据
发送
数据
数据终端就
绪
信号
地
•2020/5/25
• 数据传输格式
起始
• 支持函数
▪ int GetTCPHostAddr (char Buffer[], int Buffer_Size); ▪ int GetTCPHostName (char Buffer[], int Buffer_Size); ▪ int GetTCPPeerAddr (unsigned int Connection_Handle,
• 事件处理
▪ int InstallComCallback (int COM_Port, int Event_Mask, int Notify_Count, int Event_Character, ComCallbackPtr Callback_Function, void *Callback_Data);
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)函数。
LabWindowscvi之RS-232串口通信编程源代码

LabWindows/cvi之RS-232串口通信编程源代码/* LabWindows/CVI User Interface Resource (UIR) Include File *//* Copyright (c) National Instruments 2006. All Rights Reserved. *//* *//* W ARNING: Do not add to, delete from, or otherwise modify the contents *//* of this include file. *//**************************************************************************/#include <userint.h>#ifdef __cplusplusextern "C" {#endif/* Panels and Controls: */#define PANEL 1#define PANEL_OKBUTTON_2 2 /* callback function: receivefile */#define PANEL_OKBUTTON 3 /* callback function: receivefilename */#define PANEL_STRING_2 4#define PANEL_QUITBUTTON 5 /* callback function: QuitCallback */#define PANEL_STRING 6#define PANEL_DECORATION_2 7#define PANEL_COMMANDBUTTON 8 /* callback function: filesel */#define PANEL_DECORATION 9#define PANEL_TEXTMSG 10#define PANEL_TEXTMSG_2 11/* Menu Bars, Menus, and Menu Items: *//* (no menu bars in the resource file) *//* Callback Prototypes: */int CVICALLBACK filesel(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);int CVICALLBACK QuitCallback(int panel, int control, int event, void*callbackData, int eventData1, int eventData2);int CVICALLBACK receivefile(int panel, int control, int event, void *cal lbackData, int eventData1, int eventData2);int CVICALLBACK receivefilename(int panel, int control, int event, void*callbackData, int eventData1, int eventData2);#ifdef __cplusplus}#endif#include <ansi_c.h>#include <utility.h>#include <rs232.h>#include <cvirte.h>#include <userint.h>#include "232.h"static int byteswritten;static char filename[MAX_FILENAME_LEN];static char pathname[MAX_PATHNAME_LEN];static int panelHandle;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "232.uir", PANEL)) < 0)return -1;//打开并配置串口Com1OpenComConfig (1, "", 57600, 1, 8, 1, 32767, 32767);//设置通信超时时间SetComTime (1, 5.0);//禁止串口软件握手SetXMode (1, 0);//禁止硬件握手SetCTSMode (1, LWRS_HW HANDSHAKE_OFF); DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACK sendfilename (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){int comstatus;int outputqueuelen;switch (event){case EVENT_COMMIT:strcat (filename, "\r");//向Com1写入文件名字符串byteswritten = ComWrt (1, filename, strlen(filename));break;}return 0;}int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT://关闭串口Com1CloseCom (1);QuitUserInterface (0);break;}return 0;}int CVICALLBACK filesel (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int selstatus;switch (event){case EVENT_COMMIT:filename[0] = '\0';selstatus = FileSelectPopup ("", "*.*", "*.*", "打开文件", VAL_LOAD_BUTTON, 0, 0, 1, 1, pathname);if (selstatus >= 0){SetCtrlVal (panelHandle, PANEL_STRING, pathname);//获得文件名SplitPath (pathname, NULL, NULL, filename);}break;}return 0;}int CVICALLBACK sendfile (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int outputqueuelen;switch (event){case EVENT_COMMIT://设置串口Com1调制解调器参数XModemConfig (1, 10.0, 10, 5.0, 1024);//设置从串口Com1发送文件数据XModemSend (1, pathname);//获得串口Com1输出队列的字符串数目outputqueuelen = GetOutQLen (1);if (outputqueuelen == 0){MessagePopup ("文件传输", "文件传输完毕!");}break;}return 0;}接收程序#include "toolbox.h"#include <ansi_c.h>#include <rs232.h>#include <cvirte.h>#include <userint.h>#include "232.h"static int bytesread;static char filename[MAX_PATHNAME_LEN];static char pathname[MAX_PATHNAME_LEN];static int panelHandle;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "232.uir", PANEL)) < 0) return -1;//打开并配置串口Com2OpenComConfig (2, "", 57600, 1, 8, 1, 32767, 32767);//设置通信超时时间SetComTime (2, 5.0);//禁止串口软件握手SetXMode (2, 0);//禁止硬件握手SetCTSMode (2, LWRS_HW HANDSHAKE_OFF);DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACK receivefilename (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:filename[0] = '\0';SetCtrlVal (panelHandle, PANEL_STRING, "");//读取字符串直到回车符出现bytesread = ComRdTerm (2, filename, 260, 13);//当出现回车符后,在其后加上结束符filename[bytesread]= '\0';SetCtrlVal (panelHandle, PANEL_STRING, filename);break;}return 0;}int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT://关闭串口Com2CloseCom (2);QuitUserInterface (0);break;}return 0;}int CVICALLBACK filesel (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int selstatus;switch (event){case EVENT_COMMIT:selstatus = DirSelectPopup ("", "保存文件", 1, 1, pathname); if (selstatus){strcat (pathname, "\\");strcat (pathname, filename);SetCtrlVal (panelHandle, PANEL_STRING_2, pathname);}break;}return 0;}int CVICALLBACK receivefile (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){int result;int filesize;int inputqueuelen;FILE *stream;switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING_2, pathname);//判断文件是否存在result = FileExists (pathname, &filesize);if (!result){stream = fopen (pathname, "wb+");fclose (stream);}//设置串口Com2调制解调器参数XModemConfig (2, 10.0, 10, 5.0, 1024);//设置从串口Com2接收文件数据XModemReceive (2, pathname);//获得串口Com2输入队列的字符串数目inputqueuelen = GetInQLen (2);if (inputqueuelen == 0){MessagePopup ("文件保存", "文件保存完毕!"); }break;}return 0;}。
LabwindowsCVI串口程序

Labwindows/CVI串口程序最近对自己这篇文章再次查看了一下,感觉写得比较粗略,因此在此对其进行一些修改和详细讲解下。
希望对大家有用!串口的相关函数:1、打开串口函数OpenComConfig,相关定义如下:int OpenComConfig (int portNumber, char deviceName[], long baudRate, int parity, int dataBits, int stopBits, int inputQueueSize, int outputQueueSize);int portNumber 需要开启的串口号char deviceName[] 将要打开的串口号的名称,比如串口号1,名称为”COM1”long baudRate 设置串口读数的速度,波特率:110, 150, 300, 600, 1,200, 2,400, 4,800, 9,600, 14,400, 19,200, 28,800, 38,400, 56,000, 57,600, 115,200, 128,000, and 256,000,默认值为9600。
int parity 选择串口的校验模式,Default Value: 0—no parityValid Values:0 = no parity,1 = odd parity,2 = even parity,3 = mark parity,4 = space parityint dataBits 数据位数Default Value: 7 data bitsValid Values: 5,6,7 or 8 data bitsint stopBits 停止位Default Value: 1 stop bit Valid Values: 1 or 2 stop bits int inputQueueSize 串口输入的数据量,一般选择的4,096int outputQueueSize 串口输出的数据量,一般选择的4,096函数的返回值来判定串口的状态。
基于LabWindows-CVIPC机与DSP间串口通讯设计

基于LabWindows/CVI的PC机与DSP间串口通讯设计摘要:本文以tms320f2808为例,简要的介绍了dsp c2000串口通讯接口的设计,并基于labwindows/cvi编程实现pc机与tms320f2808的串口通讯。
关键词:labwindows/cvi;tms320f2808;串口通讯中图分类号:tp393.09labwindows/cvi是一个完全的ansi c开发环境,用于仪器控制、自动检测、数据处理的应用软件。
使用灵活的c语言开发平台与数据采集、分析和显示有机的结合起来,为熟悉c语言的开发人员建立自动化检测系统、数据采集系统和过程化控制等提供了一个理想的软件开发环境。
采用ti公司生产的tms320f2808作为处理芯片,它是一款专为控制应用系统而设计的32位定点运算dsp。
它具有强大的外设功能,无需额外增加其它芯片便可轻松实现ad采集、多功能gpio口、sci、spi、can、iic以及其它通信接口。
利用labwindows/cvi灵活的c语言以及dsp强大的处理能力,可以灵活的实现pc机与dsp之间串行数据的交互功能。
1 pc机与dsp间的串口通讯设计1.1 dsp串口设计dsp与pc机进行数据交换,两者之间必须采用一个电平转换芯片,本文选用max公司生产的max3232进行电平转换。
pc机与dsp串口通讯框图如图1所示,电平转换电路如图2所示。
tms320f2808的内部具有两个相同的sci模块,scia和scib。
每个sci模块都有独立的接收器和发送器,他们有各自独立的使能位和中断位,可以进行半双工和全双工的工作模式。
每个sci模块同时拥有独立的两个收发引脚scirxd和scitxd,在不使用sci模式时,这两个引脚可以作为通用i/o口使用。
tms320f2808可编程实现64000种不同的波特率,还可通过硬件逻辑来实现自动波特率的功能。
1.2 通讯协议设计dsp与pc机之间采用固定的9.6k波特率,无奇偶校验,8位数据位,1位停止位。
LabWindowsCVI串口通信函数

LabWindows/CVI串口通信函数LabWindows/CVI提供的RS-232函数库主要包括以下几类函数:串行口打开/关闭 (Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control)函数,串行口状态查询(Status)函数和串行口事件处理(Callbacks)函数。
下面分别予以介绍。
1.串行口打开/关闭函数1)OpenCom函数功能:表示以默认的参数设置方式打开一个串口。
该函数原型为:int OpenCom (int COM_Port,char Device_Name[ ] )其中,参数COM_Port为整型变量,用于指定串口号,有效范围为1~1000;Device_Name[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
2)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[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
例如,以“COM1”来代替端口1,如果输入值为NULL或一个空字符串,则以COM_Port号作为指定端口号。
Baud_Rate为长整型变量,用来设置串行口的传输速率,标准的传输速率有110、300、600、1200、2400、4800、9600、19200b/s等;默认值为9600。
Parity为整型变量,用来指定奇偶校验模式。
0表示无奇偶校验,1表示奇校验,2表示偶校验;Data_Bits为整型变量,用来指定每帧信息中数据位的个数,可选5、6、7、8;Stop_Bits为整型变量,用来指定每帧信息中停止位的个数,可选1、1.5或2;Input_Queue_Size为整型变量,用来指定串行口输入队列的大小;Output_Queue_Size为整型变量,用来指定串行口输出队列的大小。
CVI 串口通信函数库介绍

CVI 串口通信函数库介绍LabWindows/CVI 的RS232 函数库提供了各种方式的串口通信控制函数和I/O 函数,下面做一简要介绍。
(1)串口打开函数OpenCom 和OpenComConfig前者只打开串口,后者在打开串口的同时设置串口的通信参数。
OpenCom 函数的格式为:int OpenCom(int COM_Port, char Device_Name [ ]);函数的参数分别为串口标志号和打开的串口名。
OpenComConfig 函数的格式为:int OpenComConfig(int COM_Port,char Device_Name[ ] long Baud_Rate,int Parity,int Data_Bits,int Stop_Bits,int Input_Queue_Size,intOutput_Queue_Size);函数的参数依次为:串口号、打开的串口名、串口通信的波特率、校验方式、传送字符的数据位长度、停止位长度、串口输入队列的长度和串口输出队列的长度。
(2)串口关闭函数CloseCom只有一个参数COM_Port,用来表示需要进行通信的串口号。
(3)I/O 读写函数提供两类读写方式字符读写和块读写。
其中字符读写函数包含ComRdByte 和ComWrtByte,分别表示从字符串中读一个字符和向串口写一个字符;块读写函数包含ComRd、ComRdTerm 和ComWrt,前两者表示从串口读一个字符块,ComRd 函数可指定读取串口中数据的最大长度,ComRdTerm 即可指定读取数据的最大长度又可以指定截止字符,两条件满足其一就停止读入,ComWrt 函数表示向串口写字符块,可以控制写入字符块的长度。
ComWrt 函数的格式为:int ComWrt (int COMPort, char buffer[], int count);发送字符串;其中:Buffer:发送的字符串;Count:发送字符串的长度。
基于LabWindows/CVI多线程编程的串口测试实现

第2 2卷
第 7期 计 算 机 技 源自 与 发 展 COMP UTER TE CHNOL OGY AND DEVEL MENT OP
V0 2 No 7 L 2 .
21 02年 7月
J l 2 1 uy 02
基 于 L b n 0 s C I多 线 程 编 程 a Wid w / V 的 串 口测 试 实 现
Absr c :n o d rt a e u re p n i e c n i o swatn o a a t e s n r m e s ra o twh n t si g i , l t r a - ta t I r e o r v lo tt i s o sv o d t n a ii g f r d t o b e tfo t e ilp r he r i h e e t t a mu t e d n i h i g a e e tn r g a n —b s d t s g p o r mme f r s ra o ti e i n d b s d O lt e p i c p n o e a o t a d mu t h e d n t o n La W i i o e l p r s d sg e a e i h rn i i m f s r lp r n li r a i g me i i t h d i b n d ws CVl i i h ma n t r a trsa d i i a ie e u e tr a e wh l u h e d i s d t i a d r a h aa s n r m e i o / ,n wh c i e d sat h n n t l st s ri e f c i s b tr a su e wa t n e d t e d t e tfo a s r i z h n e o —
labWindows_CVI 串行口通信和网络数据传输

• 读写
▪ int ComRd (int COM_Port, char Buffer[], int Count); ▪ i = ComRd (1, buf, 128); ▪ int ComWrt (int COM_Port, char Buffer[], int Count); ▪ i = ComWrt (1, buf, 128); ▪ int ComRdByte (int COM_Port); ▪ int ComWrtByte (int COM_Port, int Byte);
▪ int RegisterTCPServer (unsigned int Port_Number, tcpFuncPtr Callback_Function, void *Callback_Data);
▪ i=RegisterTCPServer (200, ServerTCPCB, 0) ; ▪ 回调函数:int (*tcpFuncPtr) (unsigned handle, int xType,
▪ int CVICALLBACK ClientTCPCB (unsigned handle, int event, int error, void *callbackData);
• TCP_DISCONNECT • TCP_DATAREADY
2020/5/11
8/11
▪ int DisconnectFromTCPServer (unsigned int Conversation_Handle);
003.基于LabWindows/CVI多点无线温度数据采集系统设计

基于LabWindows/CVI多点无线温度数据采集系统设计测控软件开发平台Labwindows/CVI虚拟仪器在对数据采集、处理和分析方面得到了广泛的应用。
本文介绍了一种基于C8051F020的温度采集卡和LabWindows/CVI虚拟仪器的多点无线温度采集系统,阐述硬件系统和软件系统实现多点无线温度采集的过程。
硬件系统设计包括USB转串口、无线收发模块、温度采集等;软件系统设计包括用户界面、串口通信、无线发射、接收处理等。
1 整体方案设计从机通过温度传感器AD590采集环境温度产生电流信号,该电流信号经信号调理电路完成I/V转换,送入单片机进行A/D转换,单片机将转化得到的信息保存到AT24C16中,同时保存时钟电路的实时时间。
用户只需简单操作上位PC机软件界面,发出相应的控制指令,通过串口传给主机,主机发送地址和控制指令,若与某从机的地址匹配,则返回相应指令;若地址不匹配,则不做处理。
主机收到相应匹配应答指令后,向从机发送温度传输指令,从机收到后,将保存在AT24C16中的信息发给主机。
主机则将接收到的信息由串口传给上位PC机,用户只需在上位机操作界面进行操作就可以观察到相应区域的温度变化情况。
当从机地址重叠,主机接收到错误信息时,可通过上位机发送新地址,修改从机地址,以确保区域内各个子系统的稳定运行。
2 硬件电路设计2.1 硬件总体设计整个系统主要由从机采集、存储和发射系统,主机接收和处理系统和上位PC 机操作界面三部分组成。
从机部分由AT24C16数据储存电路、AD590温度采集调理电路、实时时钟电路、无线模块和C8051F020控制电路构成;主机部分由无线接收模块和串口转USB电路组成;上位PC机操作界面用于方便用户操作。
系统总体电路(包括主机系统和从机系统)设计框图如图1所示。
2.2 从机部分电路信息储存电路主要由AT24C16构成,AT24C16是具有I2C总线接口的E2PROM,其存储容量为16 KB,字节地址空间为0~2 047。
基于labwindows的串口通信

#include <ansi_c.h>#include <formatio.h>#include <utility.h>#include <rs232.h>#include <cvirte.h>#include <userint.h>#include "串口通信.h"#define text_length 2048static int config_handle;config_flag;portindex;port_open;RS232Error;comport;baudrate;parity;databits;stopbits;inputq;outputq;xmode;ctsmode;type;stringsize;bytes_sent;send_byte;send_mode;read_cnt;bytes_read;char devicename[30];char send_data[text_length];char read_data[text_length];char tbox_read_data[text_length];double timeout;static void *callbackdata;static int panelHandle, graphpanel, config;void ComCallback(int COMport, int eventMask, void *callbackdata); void SetConfigParms ();void GetConfigParms ();void EnablePanelControls (int);void SendAscii(void);void SendByte(void);void DisplayRS232Error (void);void SetConfigParms (){SetCtrlVal (config_handle, CONFIG_COMPORT, comport);SetCtrlVal (config_handle, CONFIG_BAUDRA TE, baudrate);SetCtrlVal (config_handle, CONFIG_PARITY, parity);SetCtrlVal (config_handle, CONFIG_DA TABITS, databits);SetCtrlVal (config_handle, CONFIG_STOPBITS, stopbits);SetCtrlVal (config_handle, CONFIG_INPUTQ, inputq);SetCtrlVal (config_handle, CONFIG_OUTPUTQ, outputq);SetCtrlVal (config_handle, CONFIG_CTSMODE, ctsmode);SetCtrlVal (config_handle, CONFIG_XMODE, xmode);SetCtrlIndex (config_handle, CONFIG_COMPORT, portindex);}void GetConfigParms (){GetCtrlVal (config_handle, CONFIG_COMPORT, &comport);GetCtrlVal (config_handle, CONFIG_BAUDRATE, &baudrate);GetCtrlVal (config_handle, CONFIG_PARITY, &parity);GetCtrlVal (config_handle, CONFIG_DATABITS, &databits);GetCtrlVal (config_handle, CONFIG_STOPBITS, &stopbits);GetCtrlVal (config_handle, CONFIG_INPUTQ, &inputq);GetCtrlVal (config_handle, CONFIG_OUTPUTQ, &outputq);GetCtrlVal (config_handle, CONFIG_CTSMODE, &ctsmode);GetCtrlVal (config_handle, CONFIG_XMODE, &xmode);GetCtrlVal (config_handle, CONFIG_TIMEOUT, &timeout);GetCtrlIndex (config_handle, CONFIG_COMPORT, &portindex);#ifdef _NI_unix_devicename[0]=0;#elseGetLabelFromIndex (config_handle, CONFIG_COMPORT, portindex,devicename);#endif}void EnablePanelControls (int enable){SetCtrlAttribute (panelHandle, PANEL_SENDMODE, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_SENDDATA, A TTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_SENDNUMBER, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_RECEIVENUMBER, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_RECEIVEDATA, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_STOPRECEIVE, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_CHECKDA TA, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_CHECKGRAPH, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_FLUSHINPUT, A TTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_FLUSHOUTPUT, ATTR_DIMMED, enable);SetCtrlAttribute (panelHandle, PANEL_DA TA, A TTR_DIMMED, enable);}int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "串口通信.uir", PANEL)) < 0)return -1;DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACK configcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:config_handle = LoadPanel (panelHandle, "串口通信.uir", CONFIG);InstallPopup (config_handle);if (config_flag) /* Configuration done at least once.*/SetConfigParms ();elseconfig_flag = 1;break;}return 0;}int CVICALLBACK sendmodecallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_SENDMODE, &send_mode);if(send_mode){SetCtrlAttribute (panelHandle, PANEL_SENDDA TAPLOT, A TTR_DIMMED, 0);SetCtrlAttribute (panelHandle, PANEL_DA TA, ATTR_DIMMED,1);}else{SetCtrlAttribute (panelHandle, PANEL_SENDDA TAPLOT, A TTR_DIMMED, 1);SetCtrlAttribute (panelHandle, PANEL_DA TA, ATTR_DIMMED,0);}}return 0;}int CVICALLBACK sendcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_SENDMODE, &type);if(type)SendAscii();elseSendByte();RS232Error = ReturnRS232Err ();if (RS232Error)DisplayRS232Error();SetCtrlVal (panelHandle, PANEL_SENDNUMBER, bytes_sent);break;}return 0;}void SendAscii(){GetCtrlVal (panelHandle, PANEL_SENDDATAPLOT, send_data);stringsize = StringLength (send_data);bytes_sent = ComWrt (comport, send_data, stringsize);}void SendByte(){GetCtrlVal (panelHandle, PANEL_DA TA,&send_byte);bytes_sent = ComWrtByte (comport, send_byte);}int CVICALLBACK receivecallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:InstallComCallback (comport, LWRS_RECEIVE, 2, 0, ComCallback, callbackdata);case EVENT_RIGHT_CLICK :break;}return 0;}void ComCallback(int COMport, int eventMask, void *callbackdata){int inputqueuelength;int bytesread;char buffer[512];char *matchedchar = 0;double value;int i;inputqueuelength = GetInQLen (comport);bytesread = ComRd (comport, buffer, inputqueuelength);for (i = 0; i <= bytesread; i ++){matchedchar = buffer + i ;CopyString (tbox_read_data, 0, matchedchar, 0, inputqueuelength);SetCtrlVal (panelHandle, PANEL_RECEIVEDA TAPLOT, tbox_read_data);break;}ArrayToFile ("c:\\Users\\wanglei\\Desktop\\串口数据.txt", tbox_read_data, V AL_CHAR, inputqueuelength, 1, V AL_DA TA_MULTIPLEXED, V AL_GROUPS_AS_COLUMNS, V AL_CONST_WIDTH, 2, V AL_BINARY, V AL_APPEND);}int CVICALLBACK clearcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:ResetTextBox (panelHandle, PANEL_RECEIVEDATAPLOT, "\0");break;}return 0;}int CVICALLBACK stopcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:break;}return 0;}int CVICALLBACK checkgraphcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:break;}return 0;}int CVICALLBACK checkdatacallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:break;}return 0;}int CVICALLBACK quitcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:QuitUserInterface (0);break;}return 0;}int CVICALLBACK flushoutputcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:FlushOutQ (comport);MessagePopup ("RS232 Message", "Output queue flushed.");break;}return 0;}int CVICALLBACK flushinputcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:FlushInQ (comport);MessagePopup ("RS232 Message", "Input queue flushed.");break;}return 0;}int CVICALLBACK closecallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:port_open = 0; /* initialize flag to 0 - unopened */GetConfigParms ();DisableBreakOnLibraryErrors ();RS232Error = OpenComConfig (comport, devicename, baudrate, parity,databits, stopbits, inputq, outputq);EnableBreakOnLibraryErrors ();if (RS232Error){MessagePopup ("RS232 Message", "Please Reset the RS232 Configuer Content ");};if (RS232Error == 0){port_open = 1;GetCtrlV al (config_handle, CONFIG_XMODE, &xmode);SetXMode (comport, xmode);GetCtrlV al (config_handle, CONFIG_CTSMODE, &ctsmode);SetCTSMode (comport, ctsmode);GetCtrlV al (config_handle, CONFIG_TIMEOUT, &timeout);SetComTime (comport, timeout);EnablePanelControls (0);}elseEnablePanelControls (1);DiscardPanel (config_handle);break;}return 0;}int CVICALLBACK ledcallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){if (event == EVENT_TIMER_TICK){}return 0;}void DisplayRS232Error (void){char ErrorMessage[200];switch (RS232Error){default :if (RS232Error < 0){Fmt (ErrorMessage, "%s<RS232 error number %i", RS232Error);MessagePopup ("RS232 Message", ErrorMessage);}break;case 0 :MessagePopup ("RS232 Message", "No errors.");break;case -2 :Fmt (ErrorMessage, "%s", "Invalid port number (must be in the ""range 1 to 8).");MessagePopup ("RS232 Message", ErrorMessage);break;case -3 :Fmt (ErrorMessage, "%s", "No port is open.\n""Check COM Port setting in Configure.");MessagePopup ("RS232 Message", ErrorMessage);break;case -99 :Fmt (ErrorMessage, "%s", "Timeout error.\n\n""Either increase timeout value,\n"" check COM Port setting, or\n"" check device.");MessagePopup ("RS232 Message", ErrorMessage);break;}}。
labwindowscvi6串行口通信和网络数据传输

▪ int DisconnectTCPClient (unsigned int Conversation_Handle);
• 客户机函数
▪ notifyCount = 50; // Wait for at least 50 bytes in queue eventChar = 13; // Wait for LF eventMask = LWRS_RXFLAG | LWRS_RECEIVE; InstallComCallback (comport, eventMask, notifyCount, eventChar, ComCallbackFunction, NULL);
• 控制
▪ int FlushInQ (int COM_Port); ▪ int FlushOutQ (int COM_Port);
2020/2/26
3/11
• 状态查询
▪ int GetInQLen (int COM_Port); ▪ i = GetInQLen (1); ▪ int GetOutQLen (int COM_Port); ▪ i = GetOutQLen (1);
▪ int ConnectToTCPServer (unsigned int *Conversation_Handle, unsigned int Port_Number, char Server_Host_Name[], tcpFuncPtr Callback_Function, void *Callback_Data, unsigned int Time_Out);
基于LabWindows串口通讯设计

2019年第11期信息与电脑China Computer & Communication网络与通信技术基于LabWindows串口通讯设计邹碧霄 丁 露 罗 浩(苏州长风航空电子有限公司,江苏 苏州 215151)摘 要:LabWindows/CVI是National Instruments公司(美国国家仪器公司,简称NI公司)推出的交互式C语言开发平台。
串行接口简称串口,指数据一位一位顺序传送。
其特点是通讯线路简单,只要一对传输线就能实现双向通讯,从而大大降低成本,适用于远距离通讯。
基于此,以LabWindows/CVI软件平台为基础,分析了RS232接口的串口通讯的设计过程,主要为实际工程应用提供设计思路。
关键词:LabWindows/CVI;串口;RS232接口通讯中图分类号:TP273 文献标识码:A 文章编号:1003-9767(2019)11-201-02Design of Serial Communication Based on LabWindowsZou Bixiao, Ding Lu, Luo Hao(Suzhou Changfeng Avionics Co., Ltd., Suzhou Jiangsu 215151, China)Abstract: LabWindows / CVI is an interactive C language development platform launched by National Industries(National Instruments Corporation, NIC). Serial interface is referred to as serial port and refers to data transmission one by one. It is characterized by simple communication lines, which can achieve two-way communication as long as a pair of transmission lines, thus greatly reducing costs and applying to long-distance communications. Based on this, based on the LabWindows / CVI software platform, the design process of serial communication of RS232 interface is analyzed, which mainly provides design ideas for practical engineering applications.Key words: LabWindows/CVI; serial port; RS232 interface communication1 CVI设计原理LabWindows/CVI是NI公司推出的交互式C语言开发平台。
Lab windowsCVI平台上实现带有握手机制的串行通信精品文档4页

Lab windowsCVI平台上实现带有握手机制的串行通信1 系统总体设计单片机和PC机的串行通信采用RS-232接口,系统工作时,单片机上电完成初始化设置后,等待PC机发送询问信号“?”(ASCII码是3FH),单片机接收到3FH后,就通过串口向PC机发送回答信号“.”(ASCII码是2EH),PC机收到回答信号“.”后,发送确认信号“!”(ASCII码是21H),到此就完成了软件握手,下面单片机开始发送数据,PC机接收并显示数据。
2 硬件设计系统中PC机作为上位机,单片机为下位机。
单片机的时钟振荡频率选择11.059MHz。
通过常用电平转换芯片MAX232实现PC机串口和单片机串口的连接,如图1所示。
单片机P2口接8位拨?a开关,通过拨码开关可以设置不同的波特率,如表1所示。
在单片机上电前将拨码开关打到相应位置完成单片机串口波特率的设定。
3 软件设计3.1 通信协议通信协议设定帧格式为:1位起始位,8位数据位,1位停止位,不设奇偶校验位。
有效的通信传输字节只是中间的8位数据位。
单片机的波特率设置由P2口内容设定,PC机的波特率由界面中的波特率选择控件决定,二者的波特率必须保持一致。
3.2 PC机程序设计PC机程序设计部分利用Lab windows/CVI平台进行,使用 Lab windows/CVI首先需建立一个项目文件,包含有用户界面文件(.uir)、C 源码文件(.c)、头文件(.h)、3个部分。
接下来调试好系统软件以后,使用Lab windows/CVI的Distribution Kit工具将项目文件生成应用文件(.EXE)。
3.2.1 用户界面设计创建一个新的工程文件,在工程文件中添加一个新的用户界面文件(.uir),在.uir文件中创建一个面板(panel)和若干控件。
面板和主要控件的属性设置则如表2所示。
设置好以后,还需要按照下面步骤修改设置一些控件属性:设置COMPORT控件的Label/Value属性:向控件Label中添加COM1、COM2、COM3、COM4,相应的Value值设为1、2、3、4,数据类型为int型;设置BAUDRATE 控件的Label/Value值:2400、4800、9600、19200,数据类型同样设为int型;设置CLEAR、READ、TEXTBOX、QUIT、FLUSHOUTQ、FLUSHINQ控件的Dimmed属性的初始值为TRUE[2]。
LabWindowsCVI串口通信函数

LabWindowsCVI串口通信函数LabWindows/CVI串口通信函数LabWindows/CVI提供的RS-232函数库主要包括以下几类函数:串行口打开/关闭(Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control)函数,串行口状态查询(Status)函数和串行口事件处理(Callbacks)函数。
下面分别予以介绍。
1.串行口打开/关闭函数1)OpenCom函数功能:表示以默认的参数设置方式打开一个串口。
该函数原型为:int OpenCom (int COM_Port,char Device_Name[ ] )其中,参数COM_Port为整型变量,用于指定串口号,有效范围为1~1000;Device_Name[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
2)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[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
例如,以“COM1”来代替端口1,如果输入值为NULL或一个空字符串,则以COM_Port号作为指定端口号。
Baud_Rate为长整型变量,用来设置串行口的传输速率,标准的传输速率有110、300、600、1200、2400、4800、9600、19200b/s等;默认值为9600。
Parity为整型变量,用来指定奇偶校验模式。
0表示无奇偶校验,1表示奇校验,2表示偶校验;Data_Bits为整型变量,用来指定每帧信息中数据位的个数,可选5、6、7、8;Stop_Bits为整型变量,用来指定每帧信息中停止位的个数,可选1、1.5或2;Input_Queue_Size为整型变量,用来指定串行口输入队列的大小;Output_Queue_Size为整型变量,用来指定串行口输出队列的大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabWindows/CVI串口通信函数LabWindows/CVI提供的RS-232函数库主要包括以下几类函数:串行口打开/关闭(Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control)函数,串行口状态查询(Status)函数和串行口事件处理(Callbacks)函数。
下面分别予以介绍。
1.串行口打开/关闭函数1)OpenCom函数功能:表示以默认的参数设置方式打开一个串口。
该函数原型为:int OpenCom (int COM_Port,char Device_Name[ ] )其中,参数COM_Port为整型变量,用于指定串口号,有效范围为1~1000;Device_Name[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
2)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[]为字符型数组,是用ASCⅡ码字符串表示的串口名。
例如,以“COM1”来代替端口1,如果输入值为NULL或一个空字符串,则以COM_Port号作为指定端口号。
Baud_Rate为长整型变量,用来设置串行口的传输速率,标准的传输速率有110、300、600、1200、2400、4800、9600、19200b/s等;默认值为9600。
Parity为整型变量,用来指定奇偶校验模式。
0表示无奇偶校验,1表示奇校验,2表示偶校验;Data_Bits为整型变量,用来指定每帧信息中数据位的个数,可选5、6、7、8;Stop_Bits为整型变量,用来指定每帧信息中停止位的个数,可选1、1.5或2;Input_Queue_Size为整型变量,用来指定串行口输入队列的大小;Output_Queue_Size为整型变量,用来指定串行口输出队列的大小。
3)CloseCom函数功能:用来关闭一个串行口。
该函数原型为:int CloseCom(int COM_Port)其中,参数COM_Port用于指定端口号。
2.串行口输入/输出函数1)ComRd函数功能:用来从指定端口读取字符并存放到缓冲区中。
该函数原型为:int ComRd(int COM_Port,char Buffer[ ],int Count)其中,参数COM_Port用于指定端口号;Buffer[ ]为字符型数组,用来存放读取出的字符串;Count为整型,表示要读取的字符串的长度。
2)ComRdByte函数功能:用来从指定串行口的输出队列读取一个字节的信息。
该函数原型为:int ComRdByte(int COM_Port)其中,参数COM_Port用于指定端口号。
3)ComWrt函数功能:用来向指定串行口的输出队列写入若干字节的信息。
该函数原型为:int ComWrt (int COM_Port,char Buffer[ ],int Count)其中,参数Buffer[ ]为字符型数组,用来存放要发送的字符串;Count为整型,表示要发送的字符串的长度。
4)ComWrtByte函数功能:用来向指定串行口的输出队列写一个字节的信息。
该函数原型为:int ComWrtByte(int COM_Port,int Byte)其中,参数Byte为整型,表示要发送的低位字节。
5)ComToFile函数功能:用来从串口的输入队列读取数据,并将数据写入一个文件中,返回成功写入文件的字节数。
该函数原型为:int ComToFile(int COM_Port,int File_Handle,int Count,int Termination_Byte)其中,参数File_Handle表示从Open_File得到的文件句柄;Count表示写入文件终止的条件之一,写入count个字节数;Termination_Byte表示写入文件终止的条件之一,遇到终止字节。
6)ComFromFile函数功能:读取指定文件并写入COM端口的输出队列。
该函数原型为:int ComFromFile(int COM_Port,int File_Handle,int Count,int Termination_Byte)其中,参数File_Handle表示文件句柄。
Count表示从指定端口所能读取的最大字节数;Termination_Byte表示写入文件终止的条件之一,遇到终止字节。
7)ComRdTerm函数功能:用来从串行口读取数据,直到遇到终止条件为止。
该函数原型为:int ComRdTerm (int COM_Port,char Buffer[ ],int Count,int Termination_Byte)参数说明同上。
3.串行口控制函数1)FlushInQ函数功能:用来清空指定串行口的输入队列字符。
该函数原型为:int FlushInQ(int COM_Port)2)FlushOutQ函数功能:用来清空指定串行口的输出队列。
该函数原型为:int FlushOutQ(int COMPort)3)SetComTime函数功能:用来设置串行口输入/输出操作的时间限制,超过设定时间,提示出错信息,终止当前操作。
该函数原型为:int SetComTime(int COM_Port,double Timeout_Seconds)其中,参数timeoutSeconds表示限制时间。
4)SetXMode函数功能:表示是否允许软件握手。
默认情况下为禁止软件握手。
如果串口没有打开或者输入无效参数,则会返回一个错误。
函数原型为:int SetXMode (int COM_Port,int Mode);其中,参数Mode的默认值为0,禁止软件握手;1表示允许软件握手。
5)SetCTSMode函数功能:表示是否允许硬件握手。
默认情况为禁止硬件握手。
函数原型为:int SetCTSMode(int COM_Port,int Hardware_Handshanking)其中,参数Hardware_Handshanking为硬件握手模式。
有三种模式,0为禁止硬件握手,忽略CTS信号,RTS和DTR信号高电平有效;2为允许硬件握手,CTS控制发送,RTS为握手信号,DTR为高电平。
6)ComBreak函数功能:生成中断信号。
函数原型为:int ComBreak(int COM_Port,int Break_Time_msec);其中,参数Break_Time_msec表示中断信号持续的时间。
7)ComSetEscape函数功能:设置串口扩展命令。
函数原型为:int ComSetEscape(int COM_Port,int Escape_Code);其中,参数Escape_Code表示扩展函数代码。
4.串行口状态查询函数1)GetInQLen函数:功能:用来获取指定串行口输入队列内的字符数。
该函数原型为:int GetInQLen (int COM_Port)2)GetOutQLen函数功能:用来获取指定串行口输出队列内的字符数。
该函数原型为:int GetOutQLen (int COM_Port)3)GetComStat函数功能:用来返回串行口的状态信息,如果小于0,则表明串行口工作不正常。
该函数原型为:int GetComStat (int COM_Port)4)ReturnRS232Err函数功能:返回错误代码。
该函数原型为:int ReturnRS232Err (int COM_Port)5.串行口事件处理函数InstallComCallback函数:功能:用来为指定串行口设置一个回调函数。
该函数原型为:int InstallComCallback (int COM_Port,int Event_Mask,int Notify_Count,int Event_Character , ComCallbackPtr callback_Function, void *callback_Data)其中,参数Event_Mask为整型,设置回调函数可以响应的事件,如果是0,则不触发回调函数;Notify_Count为整型,指定触发回调函数接收数据的输入缓冲区的最小字节数,可以是0到整个输入队列的大小;Event_Character为整型,指定触发LWRS_RXFLAG事件的字节值,可以是0~255;Callback_Function为ComCallbackPtr类型,定义回调函数;*callback_Data为空类型,表示回调数据。
6.调制解调文件传输函数1)XmodemReceive函数功能:表示接收端口的数据包,并将数据写入文件中。
函数原型为:int XmodemReceive(int COM_Port,char File_Name[]);2)XmodemSend函数功能:表示读取文件数据,并将数据以包的形式发送到端口缓冲区。
函数原型为:int XmodemSend (int COM_Port,char File_Name[]);函数以二进制形式发送数据文件,对于文件中回车和换行符不作特殊处理。
在数据包很大且波特率较低的情况下,应设置一个较大的超时时限start_Delay.3)GetComConnectionState函数功能:返回指定端口的连接状态。
函数原型为:int GetComConnectionState (int COM_Port)。