基于VB6_0的计算机与单片机串行通信
VB环境下实现PC机与单片机的串行通讯
VB环境下实现PC机与单片机的串行通讯随着科技的不断发展,PC机和单片机的联系日益密切,特别是在嵌入式系统领域中,单片机已经成为了必不可少的重要组成部分。
而如何实现PC机和单片机之间的通讯,是一项必须要掌握的技能。
本篇文章主要介绍如何运用VB环境下的串口编程,实现PC机与单片机的串行通讯。
一、概述通讯技术日新月异,各种新的通讯技术层出不穷。
而在普通家庭却使用最为广泛的通讯技术,还是传统的串口通讯。
使用传统的串口通讯,可以实现PC机与单片机之间的数据交互,可靠性高,兼容性强,使用便捷。
要实现PC机与单片机之间的串行通讯,需要掌握两个技能:单片机串行通讯的编程和VB环境下串口编程。
二、单片机串行通讯的编程单片机串行通讯主要是通过寄存器和中断实现的。
单片机通过一个IO口与电脑之间建立一个简单的通讯接口,PC机通过该接口向单片机发送数据,单片机接收到数据,就可以通过该接口把数据返回给PC机。
单片机串口通讯编程的内容主要包括串口数据位、停止位、校验位、波特率等信息,这些信息需要设置在单片机的寄存器中。
同时,还要设置中断信息,以免程序在不接收数据时死等。
三、VB环境下串口编程VB环境下串口编程的关键是掌握控件的使用。
实际上,VB环境下的串口编程非常简单,只需要使用微软提供的MSComm控件就可以实现。
通过MSComm控件的事件和方法,可以轻松地实现数据的读取、发送、接收等功能。
需要注意的是,MSComm控件的BaudRate属性需要与单片机编写的程序的波特率一致,不然可能会出现通讯故障。
四、如何实现串口通讯首先需要硬件上建立好通讯接口。
通常情况下,USB串口转换器和单片机板子都会配套出售,只需要把两者插在一起即可。
其次需要编写单片机的串口通讯程序。
单片机数字口与串口的通讯,就是把串口接到单片机的数字口中,通过串口向外发送数据。
因此,编写单片机的串口通讯程序,需要设置停止位、数据位、奇偶校验位、波特率等参数。
基于VB6_0的多方式串口通信实现
基于VB6.0的多方式串口通信实现侯志军1) 高媛媛2) 沙 楠1)(解放军理工大学通信工程学院研一队1) 南京 210007) (解放军理工大学通信工程学院无线通信系2) 南京 210007)摘 要:串口通信因其通信线路简单、使用灵活方便,在许多领域应用广泛。
基于串口通信和MSComm控件原理,详细介绍了利用VB6.0编程实现手动和自动发送字符/数据、文本文件等多方式串口通信的方法,并给出了具体程序和解释。
对VB6.0编程者的学习具有一定的启发和参考价值。
关键词:RS-232 Visual Basic6.0(VB6.0) MSComm 多方式 串口通信中图分类号:TN915.05Use VB6.0to Program Multimode Serial Communication ProgramHou Zhijun1) Gao Yuanyuan2) Sha Nan1)(Postgraduate Team1ICE,PLAUS T1),Nanjing 210007)(Department of Radio Communication,ICE,PLAUST2),Nanjing 210007)Abstract:Serial communication program has broad application in many fields because of its simple communication circuitry,flexible uses.Based on the principle of serial communication program and MScomm control,the article introduces using VB6.0to program the Mu-l ti mode Serial Communication program such as manual or automatic transmitting symbol/data,text file etc.,then gives a concrete program and explanation.It will be useful to the people who study VB6.0.Key words:RS-232,Visual Basic6.0,MSComm control,mul timode,serial communication programClass number:TN915.05串口通信由于具有通信线路简单、使用灵活方便、数据传输可靠等优点,在工业监控、数据采集和实时控制等场合得到了广泛的应用。
用VB6.0开发微机与多台单片机之间的串行通信程序
用VB6.0开发微机与多台单片机之间的串行通信程序
赵文敏;寿彩丽
【期刊名称】《浙江大学学报(理学版)》
【年(卷),期】2000(27)2
【摘要】本文介绍了一种由微机与多台单片机构成的主从式测控系统 ,并重点介绍了用 Visual Basic 6.0开发微机和多单片机之间的串行通信程序的设计方法 .【总页数】1页(P179)
【作者】赵文敏;寿彩丽
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP393
【相关文献】
1.基于VB6.0实现微机与单片机串行通信程序设计 [J], 于海峰
2.使用VB6.0语言开发RS-485串行通信程序 [J], 周东;杨杰
3.用VB通信控件开发微机与单片机的串行通信程序 [J], 贾惠芹;张拥军
4.用VB6.0实现微机与单片机之间的串行通信 [J], 李翀翎
5.用VB通信控件开发微机与单片机的串行通信程序 [J], 贾惠芹;张拥军
因版权原因,仅展示原文概要,查看原文内容请购买。
VB6.0环境下利用Mscomm控件实现串行通信
VB6.0环境下利用Mscomm控件实现串行通信VB6.0环境下利用Mscomm控件实现串行通信摘要: 本文简要介绍了VB6.0中Mscomm通信控件的属性和使用方法,并结合具体实例给出了基本的通信程序。
主题词:串行通信 Visual Basic Mscomm .vbx控件Abstract: This paper briefly introduces the principle and method of Mscomm object of Visual basic 6.0, and with a real example basic program codes are given.Key Words:Serial Communication; Visual Basic; Mscomm .vbx control component随着计算机技术的飞速发展及其广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,温限宽和面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制时,采用数据库访问技术能有效地解决这类问题。
Visual Basic 6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。
首先表现在VB可直接使用户自定义控件VBX或OCX文件;其次表现在VB 可通过调用动态链接库(DLL,dynamic link library)来加快应用程序关键部分的执行速度。
利用VB提供的这些功能可方便地完成程序设计,如串行编程等,本文将介绍VB6.0通信控件Mscomm .vbx及其编程方法,并结合实例给出计算机与单片机进行数据通信的基本程序。
基于VB6.0的串口通信方法
基于VB6.0的串口通信方法串口通信在数据采集中有着广泛的应用,因为串口通信通信线路简单、灵活方便、数据可靠。
作为快速开发,利用VB开发串口通信程序既可以使用MSComm控件也可以调用WindowsAPI函数实现。
这里我们使用VB6.0提供的MSComm控件,因为MSComm控件的功能和API调用一样强,甚至更好且使用起来更加简单,能很方便地实现所需的串口通信功能。
1.MSComm控件简介MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
具体的来说,它提供了两种处理通信问题的方法:一是事件驱动方法,当串口通信产生错误时,MSComm控件会触发OnComm事件,程序员可以在OnComm事件处理函数中加入自己的处理代码。
另外一种是查询法。
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。
2.MSComm控件的常用属性MSComm控件有很多重要的属性,但首先必须熟悉几个关键属性。
CommPort 设置并返回通讯端口号Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen 设置并返回通讯端口的状态。
也可以打开和关闭端口Input 从接收缓冲区返回和删除字符Output 向传输缓冲区写一个字符串3.程序代码设计利用MSComm控件编写串口通信程序是十分便利和简单的。
下面我就事件驱动方式以VB6.0为平台编写了PC间串口通信程序的实例。
代码如下:'串口初始化PrivateSubForm_Load()mPort=1 '设置通信端口号为COM1MSComm1.Settings="9600,n,8,1" '设置串口参数MSComm1.InputMode=0 '接收文本型数据MSComm1.RThreshold=1'接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件MSComm1.PortOpen=True '打开通信端口1EndSub'把字符通过串口发送出去'启动定时器PrivateSubCmdsend_Click()IfTextsend.Text=""Thenpp=MsgBox("发送的数据不能为空!",16)ExitSubEndIfMSComm1.Output=Trim(Textsend.Text)EndSub'MSComm的OnComm事件程序'由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中'只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive'因此接收的子程序便会被执行PrivateSubMSComm1_OnComm()Dimbuf$mEvent'通过取代每一个case表达式来处理每个事件与错误CasecomEvCD'CD线的状态发生变化CasecomEvCTS'CTS线的状态发生变化CasecomEvDSR'DSR线的状态发生变化CasecomEvReceivebuf=Trim(MSComm1.Input)'将缓冲区内的数据读入buf变量中CasecomEvSendEndSelectTextReceive.Text=TextReceive.Text&bufEndSub'停止程序运行PrivateSubCmdquit_Click()UnloadMeEndSub'关闭通信端口,PrivateSubForm_Unload(CancelAsInteger)MSComm1.PortOpen=FalseEndSub4结束语本文通过具体实例介绍了如何利用VB6.0中的MSComm控件来实现串口通信。
用VB6_0实现西门子PLC与PC机的串行通讯
收稿日期:2003-01-15作者简介:敬 伟(1977—),女,重庆人,西安工业学院硕士研究生,研究方向为自动化控制、智能仪表。
用VB6.0实现西门子PLC 与PC 机的串行通讯敬 伟1,樊文侠1,涂 劲2(1.西安工业学院电子信息科学与工程系,陕西西安710032;2.重庆大学,重庆400044)摘 要:对西门子系列PLC 的通讯协议进行了详细的介绍,并以VB6.0开发系统在WINDOWS 环境下实现了PC 机与西门子系列PLC 之间的串行通讯。
文章给出了PLC 和VB6.0相关的主要程序,通过该通讯程序实现了PC 机对西门子系列PLC 的监控和控制。
同时本程序对PC 机与其他型号PLC 之间的通讯也有一定的借鉴意义。
关键词:可编程控制器;串行通讯;协议中图分类号:TP393104 文献标识码:A 文章编号:1005-3751(2003)0025-02Achieve Serial Communication betw een PC and SIEMENS Series PLC by VB6.0J IN G Wei 1,FAN Wen 2xia 1,TU Jin 2(1.Xi ’an Inst.of Tech.,Xi ’an 710032,China ;2.Chongqing University ,Chongqing 400044,China )Abstract :The communication protocol of SIEMENS series PLC is introduced and serial communication between PC and SIEMENS series PLC is achieved by VB6.0development system in windows environment.The mostly program about PLC and VB6.0is introduced and can monitor SIEMENS series PLC through PC.What ’s more ,the method of disposal can be applied with other type of PLC or sin 2glechip.K ey w ords :programmable controller (PLC );serial communication ;protocol PLC 以卓越的可靠性和方便的可编程性广泛应用于工业控制领域。
用VB6标准模块实现微机与单片机间的通信源程序
用VB6标准模块实现微机与单片机间的通信源程序1、模块的使用方法:' (1) 在窗体中放置一个 MSComm 控件' (2) 设置好 MSComm 控件下面属性:' CommPort = 端口号 '端口号如为1,即COM1' Handshaking = 0 '无握手协议' InputMode = 1 '二进制收发模式' Settings = "9600,n,8,1" '波特率/奇偶校验/数据位/停止位' (3) 在程序入口放置下列命令:' Set CommControl = 窗体名.MSComm控件名' 如: Set CommControl = Form1.MSComm1'==============================================================' InitPort 函数说明打开指定端口并进行端口初始化' PortNum 指定端口号' ClosePort 函数说明关闭当前打开的端口' SendData 函数说明发送数据子程序' Addr 下位机地址号' Cmd 命令' Datas 数据(可选参数,调用时如不指定则发送一无数据的命令串)' Timeout 超时时间,单位:秒(s)' (每发送一帧数据后需接收一个回应数据,等于 0 - 成功不等于 0 - 失败)' GetData 函数说明接收数据子程序' lData 要接收数据长度(纯数据长度,不包含其它固定格式数据)' Buffer 接收数据缓冲区' Addr 要接收数据下位机地址(不指定时自动采用最后一次发送地址)' Timeout 超时时间,单位:秒(s)' 各个函数返回值' 0 vbSuccess '通信成功' 1 vbBusy '端口忙' 2 vbOpenPortFailed '端口打开失败,端口可能已被其它应用程序所占用' 3 vbTimeout '通信超时' 4 vbInvalidData '接收的数据有误' 5 vbPortNotOpened '端口还未初始化'==============================================================2、模块的程序设计:Option Explicit'======== 通信结果枚举定义 ========'Public Enum CommResultvbSuccess = 0vbBusy = 1vbOpenPortFailed = 2vbTimeout = 3vbInvalidData = 4vbPortNotOpened = 5End Enum'======== 通信常数定义 ========'Public Const SOI = &HAA '定义开始位Public Const EOI = &HBB '定义停止位Public Const VER = &H10 '定义版本号'========模块内部变量定义========'Public CommControl As MSComm '定义模块内部控件名Public DefAddr As Byte '定义默认下位机地址'------------------------------------------------------------------------------------------------Public Function ClosePort() As CommResult'打开通讯端口If Not CommControl.PortOpen ThenClosePort = vbPortNotOpened '端口还未初始化Exit FunctionEnd IfClosePort = vbSuccessCommControl.PortOpen = False '关闭端口End Function'------------------------------------------------------------------------------------------------Public Function InitPort(ByVal PortNum As Byte) As CommResult'打开通讯端口If CommControl.PortOpen Then '如果端口已打开,返回 vbBusyInitPort = vbBusyExit FunctionElse '否则尝试打开端口On Error Resume NextmPort = PortNumCommControl.PortOpen = TrueIf Err.Number <> 0 Then '如果打开失败,返回 vbOpenPortFailedInitPort = vbOpenPortFailedExit FunctionEnd IfEnd If '成功,继续End Function'------------------------------------------------------------------------------------------------Public Function GetData(ByVal lData As Byte, Buffer As String, Optional ByVal Addr As Byte = 0, _ Optional ByVal Timeout As Long = 1) As CommResultCheckComm '检测 CommControl 对象If Not CommControl.PortOpen Then '如果端口还未打开,返回GetData = vbPortNotOpenedExit FunctionEnd If'定义变量Dim CheckSum As Long, CheckSum2 As Long, i As ByteDim tmpBuffer As String, OldTimer As SingleIf Addr = 0 Then Addr = DefAddr '如果不指定地址,则以发送地址为接收地址lData = lData + 8CommControl.InputLen = lDataOldTimer = TimerDo '判断通信是否超时,是则中断通信并提示If CommControl.InBufferCount >= lData Then tmpBuffer = CommControl.Input: Exit DoIf Timer - OldTimer >= Timeout Then GetData = vbTimeout: Exit FunctionDoEventsLoop While TrueIf AscB(MidB(tmpBuffer, 1, 1)) <> SOI Or AscB(MidB(tmpBuffer, 2, 1)) <> VER Or _AscB(MidB(tmpBuffer, 3, 1)) <> Addr Or AscB(MidB(tmpBuffer, lData, 1)) <> EOI ThenGetData = vbInvalidDataExit FunctionEnd If'======== 算出收到数据的 CheckSum ===========CheckSum = 0lData = AscB(MidB(tmpBuffer, 5, 1))For i = 2 To lData + 5CheckSum = CheckSum + AscB(MidB(tmpBuffer, i, 1))NextCheckSum = CheckSum And &HFFFF&CheckSum2 = AscB(MidB(tmpBuffer, 7 + lData, 1)) * 256 + AscB(MidB(tmpBuffer, 6 + lData, 1)) '判断 CheckSum 是否正确If CheckSum2 <> CheckSum Then GetData = vbInvalidData: Exit Function'所有检测通过则返回正确数据Buffer = tmpBufferGetData = vbSuccessEnd Function'------------------------------------------------------------------------------------------------Public Function SendData(Addr As Byte, Cmd As Byte, Optional Datas As String = "", Optional ByVal Timeout As Long = 1) As CommResultCheckComm '检测 CommControl 对象If Not CommControl.PortOpen Then '如果端口还未打开,返回SendData = vbPortNotOpenedExit FunctionEnd If'定义变量Dim BinData() As Byte, i As Long, lData As LongDim CheckSum As LonglData = LenB(Datas)ReDim BinData(1 To 8 + lData) '将数据转储到<字节数组>BinData(1) = SOIBinData(2) = VERBinData(3) = AddrDefAddr = AddrBinData(4) = CmdBinData(5) = lDataCheckSum = BinData(2) + BinData(3) + BinData(4) + BinData(5) '算出收到数据的 CheckSum For i = 6 To lData + 5BinData(i) = AscB(MidB(Datas, i - 5, 1))CheckSum = CheckSum + BinData(i)NextBinData(i) = CheckSum And &HFFBinData(i + 1) = (CheckSum \ &H100) And &HFFBinData(i + 2) = EOICommControl.Output = BinData '发送数据Dim Response As String '定义回应数据缓冲区SendData = GetData(1, Response, , Timeout) '接收回应数据If SendData = vbSuccess Then '接收回应:等于 0 - 成功不等于 0 - 失败SendData = IIf(AscB(MidB(Response, 6, 1)) = 0, vbSuccess, vbInvalidData) 'End IfEnd Function'------------------------------------------------------------------------------------------------Private Sub CheckComm()'检测 CommControl 对象If CommControl Is Nothing ThenErr.Raise -1, , "请先设置 CommControl 对象的引用,格式为" & vbCrLf & vbCrLf & _" Set CommControl = 窗体名.MSComm控件名" & vbCrLf & vbCrLf & _"如 Set CommControl = Form1.MSComm1"End IfEnd Sub'------------------------------------------------------------------------------------------------Public Function ErrMsg(nErr) As StringErrMsg = Choose(nErr + 1, "成功", "端口忙", "端口打开失败", "通信超时", "数据有误", "端口还未打开")End Function'------------------------------------------------------------------------------------------------;=========================================================================================== ======;单片机与微机间串行通信AT89C52单片机部分程序 (单片机晶振振荡频率 11.0592MHZ)RT_CONTROL BIT P3.2 ;RS-485串口通信控制(接收低电平,发送高电平);----------------------------------------------------------------------------;变量定义RD_ADDRESS EQU 5FH ;接收PC数据地址指针PCBUF EQU 60H ;PC读写数据缓冲区:60H-DFH,128BYTESTD_ADDRESS EQU 60H ;PC发送数据首址SOI_PC EQU 60H ;开始位 [地址]VER_PC EQU 61H ;版本号 [地址]ADR_PC EQU 62H ;地址位 [地址]CMD_PC EQU 63H ;命令位 [地址]LEN_PC EQU 64H ;数据长度[地址]DATBUF_PC EQU 65H ;数据首 [地址];----------------------------------------------------------------------------;数据赋值SP_ADDRESS EQU 0E0H ;堆栈指针值SOI_DATA EQU 0AAH ;开始位VER_DATA EQU 10H ;硬件版本:1.0ADR_DATA EQU 01H ;从机地址:1EOI_DATA EQU 0BBH ;结束位;----------------------------------------------------------------------------;设定程序入口地址ORG 0000HLJMP MAIN_INITORG 0023HLJMP UARTI;============================================================================;主程序MAIN_INIT: ;主程序初始化MOV SP,#SP_ADDRESS ;设定栈基址MOV TMOD,#20H ;TIMER1工作在MODE2MOV TH1,#0FDH ;波特率9600MOV TL1,#0FDH ;SETB TR1 ;启动TIMER1计时MOV SCON,#50H ;UART工作在MOWE1,SM1=1,REN=1;-------------------------------------------------------MOV IE,#10010000B ;UART中断激活;-------------------------------------------------------CLR RT_CONTROL ;允许RS-485接收; .;============================================================================; 中断服务子程序UARTI: CLR EA ;关中断PUSH A ;保护现场PUSH PSWMOV PSW,#00010000B ;使用三区寄存器MOV A,#05H ;接收数据数量 SOI-VER-ADR-CMD-LEN =[5 BYTE] MOV RD_ADDRESS,#PCBUF ;设置接收PC数据地址指针LCALL R_DATA ;调用接收数据子程序MOV A,SOI_PCCJNE A,#SOI_DATA,UARTI_B_E ;SOI不正确,则转移MOV A,VER_PCCJNE A,#VER_DATA,UARTI_B_E ;VER不正确,则转移MOV A,ADR_PCCJNE A,#ADR_DATA,UARTI_B_E ;ADR不正确,则转移MOV A,LEN_PC ;判断LEN,再接收 nDATA-CHK-EOIADD A,#03H ;接收数据数量MOV RD_ADDRESS,#DATBUF_PC ;设置接收PC数据地址指针LCALL R_DATA ;调用接收数据子程序LCALL CHECKSUM ;调用CHECKSUM子程序JNZ UARTI_B_E ;CHECKSUM不正确,则转移MOV DATBUF_PC,#00H ;接收数据正确,则返回#00HLCALL T_PC_BACK ;调用回应子程序LCALL CHK_R_DATA ;调用接收数据处理子程序AJMP UARTI_OUTUARTI_B_E:MOV DATBUF_PC,#0FFH ;接收数据不正确,则返回#0FFHLCALL T_PC_BACK ;调用回应子程序UARTI_OUT:POP PSW ;恢复现场POP ACLR RT_CONTROL ;允许RS-485接收SETB EA ;开中断RETI;;============================================================================; 接收数据子程序R_DATA: CLR RT_CONTROL ;允许RS-485接收MOV R0,A ;接收数据数量装入R0MOV R1,RD_ADDRESS ;接收数据首址装入R1MOV R2,#00HMOV R3,#00HR_WAI: JBC RI,R_JMP ;检测SCON的RI是否为1?是则表示接收到8位数据DJNZ R3,$DJNZ R2,R_WAILJMP R_OUT ;R_JMP: MOV A,SBUF ;SBUF装入AMOV @R1,AINC R1 ;地址加一CLR RI ;清除RIDJNZ R0,R_WAIR_OUT: RET ;;-------------------------------------------------------; 发送数据子程序T_DATA: SETB RT_CONTROL ;允许RS-485发送MOV R0,A ;发送数据数量装入R0MOV R1,#TD_ADDRESS ;发送数据首址装入R1T_LOOP: MOV A,@R1 ;MOV SBUF,A ;数据装入SBUFMOV R2,#00HMOV R3,#00HT_WAI: JBC TI,T_JMP ;检测SCON的TI是否为0?是则表示已发送8位数据DJNZ R3,$DJNZ R2,T_WAILJMP T_OUTT_JMP: INC R1 ;地址加一DJNZ R0,T_LOOP ;T_OUT: CLR RT_CONTROL ;允许RS-485接收RET ;;=========================================================================================== ======。
利用VB6.0实现PIC单片机与PC串行通信
蓑 VB6.0交 握 协议 援定
RA1为 TXD 串行通 信 硬件 连 接 如 图 1所 示 。
一
一 ———————露嚣霭鳕
图中 R=10K Q,C=10 F,Vcc=5V
Buffer字符串变量中。
(5).Output:将 一 个 字符 或字 符 串 写入 传输 缓 冲 区 。
如 :MSComm1.Ou ̄ut= “ABCD 。此 即将 ABCD 5个 字
符通 过 串行 端 El传 送 出去 。 f6、.Invut1_.en .}旨常由由行 口谴 人的主篇由
(3).PortOpen:设定 并返 回通 信 端 口的 状态 。使用
MSComm 控 件 的调 出
串行 端 口之 前 必须 先 打开 该端 口(PortOen=True),而 在
VB 6.0的 MSComm控 件 并 不会 主 动 出现 在 工具 箱 使 用 完毕 后 必须 关 闭该 端 口(PonOpen=False)。
(2).Settings:设 定 通信 端 口初 始化 参 数 。其 格式 为
接 方式 是 相 同的 ,PIC单 片机 的 程序 设 计也 是相 同的 。本 “Baud,P,D,S”,其 中 Baud为波 特率 ,可 设为 1200、2400、
文 以 VB 6.0为例 ,说 明 PIC单 片机 与 PC机 串行通 信 的硬 9600、 14400、 19200 28800等 几种 I P为校 验 位 (E表 示 、
VB 6.0的 版 本 分 为 普 及 版 、专 业 版 及 企 业 版 , 值 为 4、5、6、7、8(默 认 值 );S表 示停 止位 数 ,可选 值
MSComm控 件 包含 在 专业 版 及企 业版 中 ,如 果是 普 及版 , 为 I、 I.5、2。
基于VisualC_6_0的PC机和AT89C51的串行通讯
网络通讯与安全电脑知识与技术电脑知识与技术1引言我们开发的超声—电火花—磨削多功能符合加工机床是利用PC机、PMAC运动控制卡、电火花脉冲电源和超声波发生器组成的多CPU控制系统。
为了实现通过人机交互界面对电火花脉冲电源和超声波发生器进行参数设置,对它们的工作状态进行监视并根据它们的工作状态实现利用PMAC控制卡对运动的控制,使它们之间进行信息的交换。
考虑到串行通讯简单易行和可靠性,我们采用串行通讯进行信息的交换和控制命令的发送。
为了使它们之间的通讯相互协调,我们定义了相互间的通讯协议,包括波特率、数据位数、停止位的个数以及奇偶校验方法和数据格式等。
2相关的API串行通讯的函数和概念2.1打开关闭串口在Windows操作系统中,不允许用户直接对硬件操作,而是把串口和其他通信设备是作为文件进行处理,串口的打开、关闭、读取和写入所用的函数和操作文件的函数完全一致。
2.1.1打开串口CreateFile()函数为读访问或写访问打开串口,打开成功后返回该串口句柄,供读写串口时使用。
HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDe-siredAccess,DWORDfdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDfdwCreation,DWORDfdwAttrsAnd-Flags,HANDLEhTemplateFile);参数lpFileName是要打开文件的逻辑名,串口使用如COM1或COM2;参数dwDesiredAccess指定访问类型,串口通信是双向的,一般设置为:GENERICREAD|GENERICWRITE;参数fdwShare-Mode指定文件共享属性,设为0,不共享;参数lpSecurityAttributes引用安全性属性结构,设为缺省值NULL;参数fdwCreation指定如果CreateFile正被已有的文件调用时应采取的动作,此参数就必须被设置为OPENEXISTING;参数fdwAttrsAndFlags描述了该端口的各种属性,对串口而言设置为FILE_FLAG_OVERLAPPED,该标志表明串口采用异步通信模式,可进行重叠操作,端口I/O可以在后台进行,若值为NULL,则为同步通信方式,在同步方式下,应用程序将始终控制程序流,直到程序结束;参数hTemplateFile是指向模板文件的句柄,当打开串口时,该参数为NULL。
基于VB6.0的上位机与PLC实时通信技术
基于VB6.0的上位机与PLC实时通信技术一、通信原理上位机与PLC之间的通信是通过通信协议来实现的。
通信协议是一种规定了通信双方之间通信方式和通信内容的标准化协议。
常见的通信协议有MODBUS、OPC、PROFIBUS等。
在实际应用中,根据不同的PLC型号和通信需求,选择适合的通信协议进行通信。
二、通信协议MODBUS协议是一种基于主从结构的通信协议,包括MODBUS RTU和MODBUS TCP两种通信方式。
MODBUS RTU是基于串行通信的通信方式,通信速度较快,适合于工业现场环境。
MODBUS TCP是基于以太网通信的通信方式,通信速度更快,可实现远程通信。
基于VB6.0的上位机与PLC通信通常采用MODBUS RTU协议。
在VB6.0中,可以通过串口通信控件MSComm控件实现MODBUS RTU通信。
通过设置通信端口、波特率、数据位、停止位等参数,编写相应的通信程序,实现与PLC的通信。
三、软件设计基于VB6.0的上位机软件设计需要考虑可视化界面和通信功能的实现。
在软件设计中,需要设计用户界面,包括监控界面、控制界面、报警界面等。
需要设计通信功能,包括与PLC的连接、数据读写、通信异常处理等。
在VB6.0中,可以通过控件的方式实现软件的界面设计。
通过使用标签、文本框、按钮等控件,设计出符合用户需求的可视化界面。
在通信功能的实现中,可以通过MSComm控件实现与PLC的连接和数据读写功能。
通过编写相应的通信程序,实现与PLC之间的实时通信。
四、实现方法基于VB6.0的上位机与PLC通信的实现方法主要包括以下几个步骤:1. 确定通信协议:根据PLC型号和通信需求,选择适合的通信协议,如MODBUS协议。
2. 设计界面:设计符合用户需求的可视化界面,包括监控界面、控制界面、报警界面等。
3. 编写通信程序:通过VB6.0编写通信程序,实现与PLC的连接、数据读写等功能。
在编写通信程序时,需要考虑通信协议的格式要求,保证通信数据的准确传输。
利用VB6.0实现网络远程PC与单片机通信
在各种单片机应用系统的设计中,常常遇到单片机与PC的通信问题,在速度要求不高、传送距离不远的场合一般采用RS 232标准串行接口实现,在传送距离较远的场合,也有学者研究通过网络实现PC间的通信。
但是,要同时满足高速度和远距离PC与单片机通信这是一个迫切需要解决的问题。
随着信息技术的发展,计算机和网络越来越普及,对单片机的远程控制与测量的要求也越来越多。
本文在结合现有研究的基础上,对相关的设计进行一定的改进和创新,设计一个远程通信系统,他由3部分构成:远端PC、本地端PC和单片机系统。
通过VB 可视化编程,远端PC利用局域网向本地端PC发出命令,本地端PC接到命令后,自动与单片机通过打印机接口以EPP1.9协议进行通信(串行接口作为备用通信口),并将接到的单片机数据实时传送给远端PC,以实现高速远程情况下PC与单片机通信的要求。
1 系统结构与设计系统构成如图1所示,远端PC通过局域网和本地PC通信,在通信中使用Winsock控件和TCP/1P协议;本地端PC通过并行通信接口或串行通信接口与单片机通信,在并口通信中使用WINIO并口通信驱动程序、EPP协议和LPT打印机接口,在串口通信中使用MsComm控件、RS 232C协议和COM口。
在此结构中,本地PC端起到中继的作用,当本地端PC接收到从远端PC传送过来的命令,在选择通信方式后,与单片机通信,使单片机向远端PC传送数据。
2 远端PC与本地端PC通信设计TCP/IP是目前在网络通信中广泛采用的一组完整的网络协议,该协议的核心是TCP,IP和UDP协议。
TCP/IP网络环境下应用程序通过网络系统编程界面套接字(Socket)实现与内核的交互。
利用Socket通信编程接口编写程序,其目的是在TCP/IP所组建网络的不同机器之间利用客户/服务器模式建立通信连接,开发人员只要提供一些基本的连接信息,其余由操作系统内核完成。
WinSock(Windows Socket)是Windows操作系统下的通用的TCP/IP应用程序的网络编程接口,通过调用WinSock的接口函数来调用TCP/IP的各种功能。
基于VB6.0的MSComm通信方法设计
基于VB6.0的MSComm通信方法设计摘要:本文介绍了基于vb6.0的msm串行通信设计方法,并给出了计算机与智能采集模块进行通信的程序设计的框架。
关键词:串行通信,vb6.0,msm 1 前言在工业控制领域,我们经常需要进行计算机与其他设备之间的通信,而串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。
在开发串行通信程序的过程中,利用微软的msm通信控件则相对较简单,该控件具有丰富的与串行通信密切相关的属性及事件,提供了对串口的各种操作。
msm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的api函数,而且在vb中容易使用。
2 用visual basic 6.0进行串行通信程序设计的方法(1)用visual basic 6.0进行串行通信程序的设计有两种方式,一是直接调用windows api,另一种方式是使用通信组件,但后一种方式实际上是通过通信组件间接的调用了windows api函数,其过程要比直接调用api要复杂,但是在程序的实现上要比前一种方式简单的多。
在操作系统方面,windows使用通信驱动程序m.drv,以便于应用程序能够使用标准的windows api函数来传递和接收数据。
串行外围设备的制造商则提供硬件驱动程序,以便让其硬件能与windows 连接。
使用msm控件时,实际上就是使用了api函数,api函数将被m.drv解释并传送给外围设备驱动程序,使用msm 的用户只需要关心如何使用msm所提供的属性或事件,以驱动api函数的接口完成工作。
串行通信程序的执行过程(2)msm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。
①事件驱动法在使用事件驱动法设计程序时,每当有新字符到达或端口状态改变,或发生错误时,msm控件将触发onm事件,而应用程序在捕获该事件后,通过检查msm控件的mevent属性可以获知所发生的事件或错误,从而采取相应的操作。
这种方法的优点是程序响应及时,可靠性高。
基于VB6_0与单片机串行通信的数据采集系统设计 (1)
单片机的 !+3 9
& 3& 3(
3,
3’
3.
3-
3E
3?
(
止 位
图$
串行通信的数据格式
自动化与仪表
!""#$%&
!"
计算机应用
!
!"#
数据采集系统的程序设计
下位机的软件设计 下位机采用查询方式发送数据主要程序如下:
发送数据段的初始 地址
[JJ : ?STTMJ 5GJ N : ; !G 9 JM_MNZMAKJ : [JJ\N]
L 转换为二进制数并送入相应数组
!M‘K;I!M‘K : !M‘K;I!M‘K a JM_MNZMJAKJ a QIQ 1M‘K N .OY #MXM_K .OY #S?
L 在接收文本
框中显示
!"# $ %&’ ()!" * +(,!,-,((".## ; %&’ %&’ "/* #345* +(,!,-0.12 "/2
发送长度寄存器初始化 发送长度 串口初始化
%&’ #6&1 * +/782 %&’ )6&1* +9782 %&’ !%&( * +<782 %&’ %&’ 0;$ !8;* !0;* +75(82 +75(82
[ 晋明武, 王平 I%6#b/; 单片机原理及实用技术[ ; ] 张振荣, %] I 北 更新数据单元 循环直到结束; 京: 人民邮电出版社 *<777I [ 齐燕杰, 宋文超 I’NAS[X 3[AN_ 串口通信工程开发实例导 < ] 仵浩, 航[ 人民邮电出版社 *<77cI %] I 北京: [ c ] 伊崇信 * 赵颖 I 利用 ’NAS[X 3[AN_ 实现串行通信技术[ C] I 齐齐哈 尔大学学报, <77< , ;9 \c]$V9b/;I 等待发送
用VB6.0实现计算机间串口通信
用VB6.0实现计算机间串口通信作者:李永胜来源:《电脑知识与技术·学术交流》2008年第08期摘要:本文主要介绍利用VB6.0串行通信编程的方法,利用MSComm控件实现计算机与计算机间的串口通信。
关键词:串口通信;VB6.0;MSCOMM控件中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)08-10ppp-0c随着互联网的不断发展,计算机间的相互通信已非常普遍,只要通过计算机的串行口就可以实现。
而对于串口通信的编程软件,微软公司的Visual Basic 6.0(简称VB6.0)以其友好的开发界面、简单易用、实用性强等优点已在国内外得到广泛应用。
VB6.0提供了许多供用户选择的控件,这些控件以.OCX为文件后缀名,其中MSComm.OCX即是用于串行通信的控件。
如果需要使用该控件,可将控件添加到工具箱内,这样就可以利用该控件进行串行通信程序的设计。
下面这个例子,说明如何进行串行通信程序设计,该程序在Windows98环境下已调试通过。
在调试程序时,很难做到一个人同时占有两台计算机。
为此,可通过直接短接串口的2、3两个脚,即将串行口的2、3脚连接在一起,从而使发送的信息直接被本机接收。
这样,就可以在一台计算机上调试程序。
1 MSComm控件常用属性Commport 设置并返回通信端口号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen设置并返回通信端口的状态,也可以打开和关闭端口。
InBufferSize 设置并返回接收缓冲区的字符数。
Input 从接收缓冲区返回和删除字符。
InputLen设置并返回Input属性从缓冲区读取的字符数。
OutBufferSize以字符形式设置并返回传输缓冲区的大小。
Output向传输缓冲区写数据。
2 用户界面设计首先新建一个“标准EXE”工程,然后选择“工程/部件”菜单项,在“部件”对话框中选择Microsoft Comm Control6。
基于VB实现PC机与单片机的串行通讯
基于VB实现PC机与单片机的串行通讯摘要:本文介绍使用VB6.0开发工具实现PC机与单片机的串行通讯的基本原理和方法。
并结合具体实例给出使用RS-232接口进行串行通信的基本程序。
关键词:VB,单片机,串行通讯引言随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。
PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC 机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。
因此如何实现PC机与单片机之间的通讯具有非常重要的现实意义。
本文将论述在VB环境下PC机与单片机之间实现串行通讯的软硬件方案。
PC机的通讯程序使用Visual Basic编写,VB是Microsoft公司推出的Windows应用程序开发工具,因其具有界面友好,编程简便等优点而受到广泛的使用,而且Visual Basic 6.0 版本带有专门实现串行通讯的MSCOMM控件。
1、硬件原理目前的PC机都有至少一个串行通讯端口RS-232,RS-232端口可用于两台计算机之间进行通讯,RS-232的逻辑电平用正负电压表示,且信号使用负逻辑,逻辑0的电压范围是+5V~+15V,而逻辑1的电压范围是-5V~ -15V,RS-232端口是计算机与其他设备沟通的最常用的接口,不但实作简单,而且价格便宜。
在8051单片机的内部有一个全双工的异步串行I/O 口,它的输入和输出使用5V逻辑而不是RS-232电压,如何进行两种信号的转换,是连接时需要解决的问题,事实上,解决的方法很简单,只需使用一个诸如 MAX232这样的专用芯片即可。
电路结构见下图。
MAX232包含两个将TTL输入转换成RS-232输出的驱动器,还包含两个将RS-232输入翻译成CMOS输出的接收器,这些驱动器和接收器具有反向的功能。
4个外置的电容大小为1uF,如果使用极化电容,注意极性,引脚6的电压为负,因此它的电容的正极连接到地,电容等级至少为15V。
基于VB的串行通信
基于VB的串行通信【摘要】针对串行通信中一帧数据接收的完整性,提出时间片的设计思路,基于VB6.0中的MSComm控件,实现了PC机与单片机之间串行通信数据帧的完整接收。
该方法可提高串行数据的处理效率和准确率,并且可对串行通信协议不确定的数据帧进行完整接收。
【关键词】串行通信;一帧数据;时间片1.引言在计算机网络以及工业控制系统中,串口通信具有硬件简单、操作方便、成本低和容易实现等优点而得到广泛应用。
但实际应用中,串口软件易出现数据阻塞、丢失等问题[1]。
为此,诸多学者提出了具体的解决方案,如采用基于消息方式的多线程编程思想,有效地解决了大量数据的连续存储和实时显示占用大量系统资源的问题,提高了数据的吞吐量和应用程序的实时性和可靠性[2];采用一种基于事件驱动和双缓冲区的串行通信设计方案,解决了低速串行通信与系统高实时性要求之间的矛盾,并在此基础上实现了一个实时多任务委托代理等[3]。
在考虑系统的资源利用率和实时性的同时,保证串行数据完整接收是串行通信设计中非常关键的一个环节,不完整的数据会影响数据的处理和存储,浪费系统资源和降低系统的实时性。
本文通过改进串行通信数据链路层数据帧的接收方法,保证一帧串行数据的完整接收。
2.一帧串行数据不完整接收的原因分析物理层的硬件不稳定会造成串口一帧串行数据接收的不完整,数据链路层的软件设计不合理同样会导致一帧串行数据接收的不完整[4]。
目前,在数据链路层的软件设计中,对串行数据的接收处理主要有两种方法:(1)只要有接收中断,就将接收到的数据存到接收缓冲区;(2)采用特殊字符作为接收结束的标志。
第(1)种方法无法判断缓冲区中的数据是一帧数据还是多帧数据的累加,给后续的数据解析带来不便;对于第(2)种方法,由于串行数据中可能存在与特殊字符一样的数据,从而可能导致一帧数据接收不完整而丢失部分数据。
为了实现一帧串行数据的完整接收,本文提出“时间片”的设计思路,无需采用特殊字符,即可保证一帧串行数据的完整接收,方便后续的数据解析。
VB6.0在PC机与单片机串行通信中的应用
VB6.0在PC机与单片机串行通信中的应用[摘要] 在开发微机控制及数据采集系统中,要实现pc机与单片机中的串行通信,经常用到的是rs232接口。
我们普通pc机后面的com端口即rs232接口。
vb6.0提供了mscomm通信控件,只需编写少量的程序代码,即可在windows环境下轻松实现串口的数据交换。
本文以笔者曾研制的压力测定系统为例简单介绍通过vb实现计算机串口通信的方法。
[关键词] 串口通信 rs232 vb6.0随着计算机技术的迅速发展及其在各领域的广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
一、vb6.0实现串行通信方法vb提供的通信控件mscomm32.ocx,使用前只需从project菜单下的components中选择microsoft comm control 6.0把mscomm32.ocx控件调入工具框中即可使用。
利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以通过触发oncomm事件来追踪、处理通信和错误事件的发生。
由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
硬件连接:(1)当单片机以rs232接口为端子连接时,单片机与计算机的连接如下图:(2)当仪表以rs485接口(其它接口如422等类同)为端子连接时,单片机与计算机的连接如下图:2.mscomm控件简介为支持串行通信的实现,vb6.0中mscomm控件提供了众多的串行通信属性,但首先必须要熟悉的几个属性主要包括:commport:设置并返回通讯端口号。
利用VB6.0实现网络远程PC与单片机通信
在各种单片机应用系统的设计中,常常遇到单片机与PC的通信问题,在速度要求不高、传送距离不远的场合一般采用RS 232标准串行接口实现,在传送距离较远的场合,也有学者研究通过网络实现PC间的通信。
但是,要同时满足高速度和远距离PC与单片机通信这是一个迫切需要解决的问题。
随着信息技术的发展,计算机和网络越来越普及,对单片机的远程控制与测量的要求也越来越多。
本文在结合现有研究的基础上,对相关的设计进行一定的改进和创新,设计一个远程通信系统,他由3部分构成:远端PC、本地端PC和单片机系统。
通过VB 可视化编程,远端PC利用局域网向本地端PC发出命令,本地端PC接到命令后,自动与单片机通过打印机接口以EPP1.9协议进行通信(串行接口作为备用通信口),并将接到的单片机数据实时传送给远端PC,以实现高速远程情况下PC与单片机通信的要求。
1 系统结构与设计系统构成如图1所示,远端PC通过局域网和本地PC通信,在通信中使用Winsock控件和TCP/1P协议;本地端PC通过并行通信接口或串行通信接口与单片机通信,在并口通信中使用WINIO并口通信驱动程序、EPP协议和LPT打印机接口,在串口通信中使用MsComm控件、RS 232C协议和COM口。
在此结构中,本地PC端起到中继的作用,当本地端PC接收到从远端PC传送过来的命令,在选择通信方式后,与单片机通信,使单片机向远端PC传送数据。
2 远端PC与本地端PC通信设计TCP/IP是目前在网络通信中广泛采用的一组完整的网络协议,该协议的核心是TCP,IP和UDP协议。
TCP/IP网络环境下应用程序通过网络系统编程界面套接字(Socket)实现与内核的交互。
利用Socket通信编程接口编写程序,其目的是在TCP/IP所组建网络的不同机器之间利用客户/服务器模式建立通信连接,开发人员只要提供一些基本的连接信息,其余由操作系统内核完成。
WinSock(Windows Socket)是Windows操作系统下的通用的TCP/IP应用程序的网络编程接口,通过调用WinSock的接口函数来调用TCP/IP的各种功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四期
张修太 胡雪惠:基于 VB6.0 的计算机与单片机串行通信
65
其中 receive()为 byte 型数组。 9)Outbuffersize。以字节的形式设置并返回传
输缓冲区的大小,缺省值为 512 字节。 10)Inbuffersize。设置并返回接收缓冲区的字
节数,即整个接收缓冲区的大小。接收缓冲越大则 应用程序的内存越小。 1.2 用 VB6 实现的数据接收和发送
2)应用程序接口。Windows API。采用串行通信 控件 MSComm 实现。 1.1.2 用 VB 实现串行通信的方式
1) 事件驱动方式。利用 MSComm 控件检查 CommEvent 事件属性值 (包括通信错误和通信事 件),当 MSComm 控件属性值与 CommEvent 事件属 性值相同时产生 Oncomm 事件,然后执行相应程 序,按照事件程序区中的程序实现数据的接收和 发送或者数据的保存等处理;本文利用 MSComm 的属性设置引发 Oncomm 事件实现数据接收。数 据发送是通过 Click 事件进行的。
安阳工学院学报
64
ቤተ መጻሕፍቲ ባይዱ
Journal of Anyang Institute of Technology
2007 年
基于 VB6.0 的计算机与单片机串行通信
张修太 1 胡雪惠 2
(1.安阳工学院,河南 安阳 455000;2.信阳师范学院,河南 信阳 464000)
摘要:介绍计算机与单片机串行通信的实现方案,其中计算机接收和发送数据是用 VB6 中的 MSCOMM 控件来实现
串行通信在自动控制、数据采集、网络通信等 方面有着广泛的应用,下面就以具体的实例介绍 计算机与单片机之间的串行通信的实现方案。 1 基于 VB6 的串行通信[1,2] 1.1 VB6 串行通信的基础知识 1.1.1 用 VB 实现串行通信的方法
1)串行通信控件。Microsoft comm. Control 6.0 (MSComm);
用 VB6 实现串行通信主要是 利 用 MSComm 控件的 Input 和 Output 属性进行数据的接收和发 送的。在进行数据传输时数据接收和发送的格式 应特别注意,一般情况下,计算机与单片机的串行 通信是采用二进制的形式, 即以字节为数据单位。 数据接收和发送的格式由 InputMode 的属性决定, InputMode 应设为 comInputModeBinary,接收数据 时,将数据流赋给字节型数组,发送数据时,把字节 型数组中的数据发送到输出缓冲区。 1.3 用 VB6 实现文件操作与数据保存
6)Inputlen。设置并返回 Input 属性接收缓冲 区读取的字符数。
7)Input。返回并删除接收缓冲区中的数据流。 Input 属性可以传输文本数据或二进制数据。用 Input 属性传输文本数据,必须定义一个包含一个 字符串的变量,发送二进制数据时,Input 属性通过 一个变量返回一个二进制数据的字节型数组。如 Object.Output=send( ),其中 send( )为 byte 型 数组。
图 1 运行界面
1.4.2 程序设计 Option Explicit '= = = = = = = = = = = = = = = ' 窗体装载程序 Private Sub Form_Load() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If MSComm1.OutBufferCount = 0 MSComm1.InBufferCount = 0 End Sub '= = = = = = = = = = = = = = = = ' 数据接收和文件操作的 OnComm 事件程序 Private Sub MSComm1_OnComm() Dim fs As New FileSystemObject Dim ts As TextStream Dim minsec() As Byte
文件的操作在数据采集和数据处理上具有重 要的意义。文件操作包括文件的建立、打开、数据 读出、数据写入和文件的关闭。
VB6 中提供了一套工具- 文件系统对象(File System Object),可以方便地实现文件、文件夹的移 动、添加、改变、创建和删除等操作。文件系统对象 模 型 中 包 含 Drive、Folder、Files、FileSystemtObject 和 Textstream 等对象,其中 FileSystemtObject 为主 要对象,它提供了一整套用于创建、删除、收集相关 信息、操作驱动器、文件和文件夹的方法; Textstream 对象允许读、写文本文件。
Object.settings = 9600,N,8,1 3)InputMode。设置和返回 Input 属性取回的
数据类型。InputMode 设为 comInputModeText 时, 取回数据的格式为字符串,设为 comInputModeBinary 时,取回数据的格式为一个二 进制数据的数组。
本例可以实现从单片机接收数据显示在窗体 中并保存在数据文件中,通过串行通信实现单片机 的时间设定。本实例设计主要包括用户界面即窗 体设计和程序设计。 1.4.1 窗体设计
窗体如图 1 所示,由图知该窗体中包含 4 个
标签,其中一个用来显示从单片机接收到的时间数 据,另外三个分别用来标出三个文本框的名称即 HOUR、MINUITE 和 SECOND;三个文本框用来输 入所设置的时间数据;三个命令按钮,清除按钮用 来清除文本框中的内容,发送按钮用来把文本框中 的内容发送给单片机,退出按钮用来退出应用程 序;一个串行通信控件 MSComm,该控件在程序设 计时可见,运行时不可见,主要用来进行串行通信 控件属性和参数的设置,本例中串行通信参数设置 如下:Commport=1;Inputlen=3;SThreshold=0;Input- Mode=1 - co mInputModeBinary;RThreshold=3 ;sett- ings=9600, n, 8,1; 其 他 参 数 可 为 默 认 值 。 添 加 MSComm 控件时,先在 Projects/components/controls 中选中 Microsoft Comm Control 6.0 选项,使控件 MSComm 出现在工具箱中,然后把该控件放在窗体 中,设置控件参数即可。
2)程序查询方式。程序通过查询 CommEvent 的某一属性的值(包括通信错误值和通信事件值) 来确定是否进行数据接收和发送。 1.1.3 MSComm 控件属性
1)Commport。设置并返回通信端口号。有效端 口号为 1 到 16 的任何整数,必须在打开端口前设 置 Commport 属性。设置方法:Object. Commport=1
8)Output。向传输缓冲区写数据流。Output 属 性可以传输文本数据或二进制数据,用 Output 属 性传输文本数据,必须定义一个包含一个字符串 的变量,发送二进制数据时,必须传递一个包含字 节数组的变量到 Output。如 receive=Object.Output,
收稿日期:2007- 04- 12 作者简介:张修太(1971- ),男,濮阳市人,安阳工学院电子信息与电气工程系工程师,主要从事电子信息方面的教学与研究。
2 单片机串行通信[3,4] 2.1 单片机串行通信的基础知识
51 系列单片机内部有一个全双工的串行通信 端口,两个 SBUF 寄存器分别负责数据的接收和发 送,虽然两个 SBUF 寄存器占用同一地址,但通过 读取和写入 SBUF 寄存器的动作可以区分对哪个 SBUF 寄存器进行操作,因此串行通信可以同时进 行数据的接收和发送。
安阳工学院学报
66
Journal of Anyang Institute of Technology
2007 年
Dim aa, bb, cc Label1.Caption = "" minsec() = MSComm1.Input aa = minsec(0) bb = minsec(1) cc = minsec(2) Label1.Caption = aa & ":" & bb & ":" & cc If Not fs.FileExists("c:\tempreture.txt") Then Set ts = fs.CreateTextFile("c:\tempreture.txt") Else End If Set ts = fs.OpenTextFile ("c:\tempreture.txt", ForAppending, True) ts.WriteLine Label1.Caption ts.Close End Sub '= = = = = = = = = = = = = = = ' 清除命令程序 Private Sub Command1_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub '= = = = = = = = = = = = = = = ' 发送命令程序 Private Sub Command2_Click() Dim send(1 To 3) As Byte If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If send(1) = Text1.Text send(2) = Text2.Text send(3) = Text3.Text MSComm1.Output = send End Sub '= = = = = = = = = = = = = = = ' 退出命令程序 Private Sub Command3_Click() Unload Me If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If End Sub '= = = = = = = = = = = = = = =