基于LabWindows-CVIPC机与DSP间串口通讯设计
- 格式:doc
- 大小:23.50 KB
- 文档页数:4
《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车工业的快速发展,热车试验作为汽车研发和质量控制的重要环节,其测控系统的设计与开发显得尤为重要。
LabWindows/CVI作为一种功能强大的软件开发工具,被广泛应用于各种测控系统的设计与开发中。
本文将介绍基于LabWindows/CVI的便携式热车试验台测控系统的设计与开发,以提高热车试验的准确性和效率。
二、系统需求分析1. 性能需求:系统需要具备高精度、高稳定性的测量与控制功能,以满足热车试验的需求。
2. 便携性需求:系统应具备轻便、易携带的特点,方便现场使用。
3. 用户界面需求:系统应提供友好的用户界面,方便用户操作与使用。
4. 数据处理与存储需求:系统应具备数据处理、分析与存储功能,以便于后续的数据分析与应用。
三、系统设计1. 硬件设计:系统硬件包括传感器、执行器、控制器等部分。
传感器用于采集热车试验过程中的各种数据,执行器用于控制试验过程,控制器则负责数据的处理与传输。
2. 软件设计:软件设计采用LabWindows/CVI开发平台,实现数据的采集、处理、显示、存储与控制等功能。
软件设计应遵循模块化、结构化的设计思想,便于后续的维护与升级。
四、系统实现1. 数据采集与处理:通过传感器采集热车试验过程中的各种数据,如温度、压力、转速等。
数据经过处理后,可实时显示在用户界面上。
2. 控制算法实现:根据试验需求,实现相应的控制算法,如PID控制、模糊控制等,以实现对试验过程的精确控制。
3. 用户界面设计:设计友好的用户界面,包括数据显示、控制按钮、报警提示等功能,方便用户操作与使用。
4. 数据存储与处理:将采集的数据进行存储,并提供数据处理与分析功能,以便于后续的数据应用。
五、系统测试与优化1. 系统测试:对系统进行全面的测试,包括硬件测试、软件测试、联调测试等,以确保系统的稳定性与可靠性。
基于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个字节。
基于LabVIEW平台DSP与PC的Modbus协议串口通信
实现
吴振奎;张自雷;魏毅立;周金生;田春雨
【期刊名称】《内蒙古科技大学学报》
【年(卷),期】2014(033)001
【摘要】本文以PC作为主机、DSP作为从机,设计了DSP与PC的RS-232串行通信接口电路;基于LabVIEW开发平台编写Modbus协议通信程序,实现了DSP 与PC的通信,并成功应用于活塞式气动发动机电控配气控制系统.该系统硬件电路简单,软件编写容易,拓展性和移植性较好.
【总页数】5页(P58-62)
【作者】吴振奎;张自雷;魏毅立;周金生;田春雨
【作者单位】内蒙古科技大学信息工程学院,内蒙古包头014010;内蒙古科技大学信息工程学院,内蒙古包头014010;内蒙古科技大学信息工程学院,内蒙古包头014010;内蒙古科技大学信息工程学院,内蒙古包头014010;内蒙古科技大学信息工程学院,内蒙古包头014010
【正文语种】中文
【中图分类】TP29
【相关文献】
1.基于MODBUS协议的DSP从站串口通信模块设计 [J], 祁建安;吕震中
2.基于LabVIEW的PC与DSP串口通信研究 [J], 王智远;郝艳华
3.基于LabVIEW平台的PC和DSP数据传输的实现 [J], 马言宣;杨维翰
4.基于LabVIEW下PC机与PC机虚拟串口通信的设计与实现 [J], 潘锋
5.基于Modbus协议的PCC与触摸屏串口通信的实现 [J], 宋建;瞿金平
因版权原因,仅展示原文概要,查看原文内容请购买。
利用VC++实现DSP与PC机间的串行通讯
谢立春
【期刊名称】《《可编程控制器与工厂自动化(PLC FA)》》
【年(卷),期】2006(000)008
【摘要】利用面向对象语言的VC++6.0交互式可视化集成开发环境,实现对
DSP(Digital Signal Processing)的实时检测与控制,保证了PC机与DSP间的稳定、迅速的通讯。
详细阐述了如何实现DSP与PC机间的串行通讯。
以及利用DSP中的串行通讯接口SCI(Serial Communication Interface)模块,来实现DSP与微机
间的指令和数据传递。
【总页数】3页(P92-94)
【作者】谢立春
【作者单位】浙江工业职业技术学院机电工程系
【正文语种】中文
【中图分类】TP301
【相关文献】
1.用VC++多线程技术实现PC机全双工串行通讯 [J], 章玲
2.利用异步通信芯片16C552实现PC机与DSP的串行通讯 [J], 舒忠林;曾国宏
3.DSP同步串行口和PC机之间异步通讯的实现方法 [J], 徐彦峰;徐睿
4.VC++中实现PC机与单片机的串行通讯 [J], 曹连民;石健;黄德杰
5.DSP与PC机间的串行通讯 [J], 刘冬;陈硕
因版权原因,仅展示原文概要,查看原文内容请购买。
DSP与PC间高速串口通信的实现DSP与PC间高速串口通信的实现类别:通信网络 作者:北京理工大学电子工程系信息系统实验室王卫江陶然徐元军来源:《电子产品世界》摘要:利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。
关键词:DSPUART 串行通信 FIFODSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。
正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。
在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通信,例如DSP与DSP间数据通信,DSP与PC机间数据通信等。
如何能够快速、准确的完成通信是每个硬件工程师所关心的问题。
由于DSP的工作频率较高,如TMS320C6201时钟频率为200MHz,ADSP21060时钟频率为40MHz,故其数据读写周期很短,然而PC机串口读写速度较低,最大数据吞吐量约为115kbps,尽管DSP在与这些慢速外设进行数据交换时可以加入额外的等待周期,但是在实时性要求苛刻,算法复杂的场合,将DSP从这些冗长的等待周期中解放出来,将其时间重点放在处理关键的实时任务中去,有着重要的实际意义。
故DSP与PC机之间串口通信的速度匹配是保证快速、准确通信的关键。
PC机一般带有一个或两个内置串口,每个端口的机箱背后有一个9针或25针的公插口。
串口是以bit来传输数据的,传输速率取决于UART芯片。
该芯片将PC总线上的并行数据(单字节或多字节)分割成以比特为单位的串行数据流,从而实现在串口线缆中的数据传输。
现在几乎所有的PC机都带有16550UART用以实现并行数据和串行数据的格式转换,它的最大数据吞吐量为115kbps,这已经能够满足大多数串行设备的需要了。
1 序言:本次设计题目主要是进一步掌握同步串口McBSP的结构及工作原理,学习DSP实现RS232串口通讯的程序设计,学习MAX3111与DSP 的接口设计。
近年来,DSP在电子、通信和控制领域得到了非常广泛的应用,在DSP应用系统设计中与上位机和下位机的通信必不可少。
串口通信作为重要的通信方式之一,优点就是接口需要的引脚少,结构简单易于实现。
本文介绍了TMS320C5416多通道缓冲口,并通过具体的实例介绍说明利用串口进行DSP通信的具体实现。
2 McBSP的接口信号及工作过程McBSP由一个数据通道和一个控制通道组成,如图1所示。
不同的接受和发送引脚实现和外部器件之间的通信。
McBSP的接收操作采用三级缓冲方式,发送操作采用两级缓冲方式。
数据发送引脚(DX)负责数据的发送,数据接受引脚负责数据的接受,另外五个引脚(CLKS, CLKX, CLKR, FSX和FSR)提供了控制信号(时钟和帧同步)接口。
C5416CPU通过片内的外设总线访问串口的32位控制寄存器,从而实现与McBSP间的通信与控制。
接受的数据到达DR引脚后移位到RSR,一旦整个数据单元接受完毕,如果RBR寄存器未满,则RSR被复制到RBR中。
如果DRR中的数据已经被CPU/DMA控制器读取,则RSR被将被复制到DRR中。
发送数据首先由CPU或DMA控制器写入DXR中。
如果XSR寄存器为空,则DXR中的值被复制到XSR并准备移位输出,否则,DXR会等待XSR中旧数据的最后一位被移位输出到DX引脚后,才将数据复制到XSR中。
3 McBSP与 SPI设备的接口SPI(Series Protocol Interface)是一个利用4根信号线的串行接口协议,包括主从两种模式。
4个接口信号分别是:串行数据输入(MISO,设备输入,从设备输出)、串行数据输出(MOSI,主设备输出,从设备输出),移位时钟(SCK)、低电平有效的从设备使能信号(SS)。
《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车行业的迅猛发展,汽车发动机热车试验的准确性、稳定性和便携性成为重要关注点。
本设计主要探讨基于LabWindows/CVI(一款图形化开发平台)的便携式热车试验台测控系统的设计与开发,该系统具备智能化控制、精确的数据测量与记录以及灵活的携带特性,适用于汽车零部件制造企业以及各类实验室使用。
二、系统设计概述(一)系统需求分析设计一套针对热车试验台的测控系统,需求包含精确控制测试条件、高效收集实验数据、即时进行结果反馈及报警等功能。
系统需要支持数据的自动存储、实时监测与反馈控制。
同时,要满足设备的便携性,能够满足在各类场地及实验室中的快速安装和运行。
(二)设计原则系统设计应遵循以下原则:稳定可靠、功能完善、操作简便、可扩展性强和高度集成。
同时,应注重系统的实时性、可维护性和可移植性。
三、硬件设计(一)硬件组成硬件部分主要包括传感器模块、控制模块、执行模块和电源模块等。
传感器模块负责实时监测发动机的各项参数;控制模块是整个系统的核心,负责处理数据并控制执行模块;执行模块则负责根据控制模块的指令执行操作;电源模块为整个系统提供稳定的电力支持。
(二)硬件接口设计系统采用模块化设计,各模块之间通过标准接口进行连接,方便后期的维护和升级。
此外,为确保数据传输的稳定性和实时性,所有传感器均采用高速数据线进行连接。
四、软件设计(一)软件架构设计软件采用LabWindows/CVI作为开发平台,使用其强大的图形化界面开发功能,使操作更加直观便捷。
软件架构分为用户界面层、数据处理层和控制执行层。
用户界面层负责与用户进行交互;数据处理层负责数据的处理和存储;控制执行层则负责根据处理后的数据发送控制指令。
(二)软件开发流程软件开发流程包括需求分析、系统设计、编码实现、测试与调试等环节。
#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;}}。
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平台上实现带有握手机制的串行通信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串口通信函数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为整型变量,用来指定串行口输出队列的大小。
基于LabWindows/CVI的PC机与DSP间串口通讯设计
摘要:本文以tms320f2808为例,简要的介绍了dsp c2000串口通讯接口的设计,并基于labwindows/cvi编程实现pc机与
tms320f2808的串口通讯。
关键词:labwindows/cvi;tms320f2808;串口通讯
中图分类号:tp393.09
labwindows/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位停止位。
传输的数据格式为:帧头(0ch),数据长度帧,数据长度帧,命令帧(f0h,f1h……),数据帧,校验帧,帧尾(c0h)。
pc机接收数据正确并执行完毕后回传aah+55h;当接收数据错误回传55h+错误码。
错误码为01h,03h,……09h,不同的错误码对应不同的含义。
2 pc机通讯程序设计
labwindows/cvi编程的核心概念是对象编程,而虚拟仪器中的控件就是对象,对象是数据和代码的组合,labwindows/cvi中程序的运行便是对一系列控件的响应和函数的调用。
如响应面板关闭控件库函数,quituserinterface (0);
pc机程序设计采用labwindows/cvi的软件设计,利用labwindows/cvi提供强大的函数库,可轻松的实现pc机串口的收发功能。
利用c语言,可灵活的实现复杂的数据处理。
opencomconfig(1,”“,9600,0,8,1,512,512); //打
开串口并设置波特率
fmt(str,”%s[a]<%x[w3]”,data[i]); //数据字符串转换messagepopup (”信息”,”请打开串口”); //提醒用户打开串口
*length=getinqlen(1); //读取串口接收数据的长度
3 dsp软件设计
dsp软件设计采用ti公司提供的ccs3.3集成开发环境进行设计,利用灵活的c语言进行开发,可通过jtag口进行在线调试,提高了程序设计的效率。
dsp串口采用中断模式进行数据的接收,数据接收完毕后通过协议进行数据的有效性判断。
若接收数据无效,则放弃本次接收的数据,并等待下次接收。
若接收数据有效,则保存数据,并执行相应的程序。
程序流程图如图3所示。
dsp 通过中断函数进行数据接收和协议判断,具体实现如下:interrupt void rxaint_isr(void) // sci-a
{
piectrlregs.pieack.all = pieack_group9;//打开相应的中断级门禁
receivedachar = sciaregs.scirxbuf.all; //读取缓冲区数据receive_data[receivedcount] = receivedachar; //暂存数据sciaregs.sciffrx.bit.rxffintclr = 1; //清中断标志,等待下次中断
}
4 结束语
labwindows/cvi提供的交互式平台、丰富的功能面板和强大的函数库,为虚拟仪器的程序设计提供了强有力的支持。
灵活的c语言设计,代码易于实现,且硬件简单,不需要专用的通讯接口,性价比较高。
参考文献:
[1]王建新,杨世凤,隋美丽.labwindows/cvi测试技术及工程应用[m].北京:化学工业出版社,2006.
[2]任润柏,周荔丹,姚钢.tms320f28x源码解读[m].北京:电子工业出版社,2010.
[3]顾卫钢.手把手教你学dsp—基于tms320x281x[m].北京:北京航空航天大学出版社,2011.
作者简介:肖勇(1987-),男,四川宜宾人,助理工程师,初级,工学学士学位,研究方向:自动测试。
作者单位:中国电子科技集团公司第十研究所,成都 610036。