首页 VB开发上位机软件入门教程

VB开发上位机软件入门教程

举报
开通vip

VB开发上位机软件入门教程 内容:西安科技大学科技创新实验班 VB 开发上位机软件入门教程 作者:苗瑞 日期:2009-12-13 网站:www.kjcxlab.com/bbs 在我们平时做东西时,经常要将系统采集的数据交给计算机来处理,这样可 以更方便的分对数据进行分析和管理,比如将数据绘制成各种图表和曲线可直观 显示现场的情况,还可以将它存储起来,方便以后的查询。VB 是 Windows 下简 单、易学、高效的应用软件开发工具,它里面有一个串口控件 MSComm,可以 很方便的与我们的微处理器的串口进行连接通信。这个技能...

VB开发上位机软件入门教程
内容:西安科技大学科技创新实验班 VB 开发上位机软件入门教程 作者:苗瑞 日期:2009-12-13 网站:www.kjcxlab.com/bbs 在我们平时做东西时,经常要将系统采集的数据交给计算机来处理,这样可 以更方便的分对数据进行分析和管理,比如将数据绘制成各种图 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 和曲线可直观 显示现场的情况,还可以将它存储起来,方便以后的查询。VB 是 Windows 下简 单、易学、高效的应用软件开发工具,它里面有一个串口控件 MSComm,可以 很方便的与我们的微处理器的串口进行连接通信。这个技能也应该是创新班的同 学必须学会的,下面我就先教大家如何先把单片机串口发送上来的数据接收到, 下一步再考虑分析数据的问题。 在这里首先要介绍一下 MSComm 控件的主要属性和事件。 ●Commport:设置或返回串口号。 ●Settings:以字符串的形式设置或返回串口通信参数,比如波特率等。 ●Portopen:设置或返回串口状态,True 为打开。 ●InputMode:设置或返回接收数据的类型,0 表示文本,1 表示二进制。 ●Inputlen:设置或返回一次从接收缓冲区中读取字节数,0 表示所有。 ●InBufferSize:设置或返回接收缓冲区的大小,缺省值为 1024 字节。 ●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。 ●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运 行时只读。 ●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为 512 字节。 ●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。 ●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。 ● DSRHolding:传回 DSR 脚位状态。高为 True,低为 False。 ● CTSHolding:传回通信端口的 CTS 脚位状态 ● CDHolding:传回通信端口的 DCD 脚位状态。 ●Rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时, MSComm 控件设置 Commevent 属性为 ComEvReceive,并产生 OnComm 事件。 用户可在 OnComm 事件处理程序中进行相应处理。若 Rthreshold 属性设置为 0, 则不产生 OnComm 事件。例如用户希望接收缓冲区中达到一个字符就接收一个 字符,可将 Rthreshold 设置为 1。这样接收缓冲区中接收到一个字符,就产生一 次 OnComm 事件。 ●Sthreshold:该属性亦为一阀值。当发送缓冲区中字符数小于该值时, MSComm 控件设置 Commevent 属性为 ComEvSend,并产生 OnComm 事件。若 Sthreshold 属性设置为 0,则不产生 OnComm 事件。要特别注意的是仅当发送缓 冲区中字符数小于该值的瞬间才产生 OnComm 事件,其后就不再产生 OnComm 事件。例如Sthreshold设置为 3,仅当发送缓冲区中字符数从 3降为 2时,MSComm 控件设置 Commevent 属性为 ComEvSend,同时产生 OnComm 事件,如发送缓 冲区中字符始终为 2,则不会再产生 OnComm 事件。这就避免了发送缓冲区中 数据未发送完就反复发生 OnComm 事件。 ●CommEvent:这是一个非常重要的属性。该属性设计时无效,运行时只读。 一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm 控件为 CommEvent 属性赋不同的代码,同时产生 OnComm 事件。用户程序就可在 OnComm 事件处理程序中针对不同的代码,进行相应的处理。 ● DTREnable:判断在通信时是否启用 Data Terminal Ready(DTR)线路。DTR 是由计算机传送到调制解调器的信号,指示计算机在等待接收传输。当设为 Tru 时,DTR 线会在连接端口打开时置高电位。在端口关闭时置低电位。使用者可以 置低电位来挂断电话。 ● RTSEnable:决定是否使 Request To Send 线有效。一般情况下,由计算 机传送 RTS 信号到调制解调器,以请示准许传送数据。True 为高电位。 ● HandShaking :指定通信两方的握手协议。握手协议要做的就是数据传输 速度的控制,也称为”流量控制(Flow Control)”。简单说,如果一方送出的数 据的速度超过另一方所能处理的速度,接收方便会要求传送方暂停送出数据。 RTS/CTS 握手协议是硬件握手协议,它用 RTS 脚位及 CTS 脚位的功能。XON/XOFF 即软件握手协议。它使用 XON 表示暂停数据的传送;而使用 XOFF 表示恢复传送。 其中由于 XON 使用 chr(19)作为控制信号,若所传送的数据中含有 chr(19)字符, 将使得传送暂停,而发生错误。 ● OnComm 事件:除了公共事件外,MSComm 只有一个 OnComm 事件,当 CommEvent 属性值变化时将发生 OnComm 事件,指示发生一个通信事件或错误。 在 VB 中串口接收数据有两种方式 1、 在 OnComm 事件中接收数据: 这种方式能充分 MSCOMM 控件的特性。OnComm 事件还可以检查和处理通 讯错误;可以通过检查 CommEvent 属性的值来查询事件和错误;对于不定长 数据以及对数据进行处理比较复杂的情况,此法不是很方便。 Private Sub MSComm_OnComm () Select Case MSComm1.CommEvent ' 错误 Case comEventBreak ' 收到 Break。 Case comEventCDTO ' CD (RLSD) 超时。 Case comEventCTSTO ' CTS Timeout。 Case comEventDSRTO ' DSR Timeout。 Case comEventFrame ' Framing Error Case comEventOverrun '数据丢失。 Case comEventRxOver'接收缓冲区溢出。 Case comEventRxParity' Parity 错误。 Case comEventTxFull '传输缓冲区已满。 Case comEventDCB '获取 DCB] 时意外错误 ' 事件 Case comEvCD ' CD 线状态变化。 Case comEvCTS ' CTS 线状态变化。 Case comEvDSR ' DSR 线状态变化。 Case comEvRing ' Ring Indicator 变化。 Case comEvReceive ' 收到 RThreshold # of chars. Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 ' Case comEvEof ' 输入数据流中发现 EOF 字符 End Select End Sub 2.轮循法采集数据: A、定时器轮循法 对于数据包方式收发数据以及不需即时响应情况,用轮循法更好些。实际上 轮循法最大的好处在于集中处理数据而且不太占用 CPU。轮循法要注意定时采集 的时间片段大小;这里用二进制收发模式;使属性 RThreshold、SThreshold 为 0,屏蔽 ONCOMM 事件。 InputMode = comInputModeBinary RThreshold = 0 SThreshold = 0 Private Sub TmrComm_Timer() '采用轮循法采集数据 Dim Rx_buff() As Byte Dim okstring As String Dim ReceivedLen As Integer On Error GoTo ErrorHandler TmrComm.Enabled = False '关闭定时器 If commport.InBufferCount > 0 Then ReceivedLen = commport.InBufferCount Rx_buff = commport.Input okstring = StrConv(tempbyte, vbUnicode) If ReceivedLen = 6 Then If Chr(tempbyte(0)) = ":" And tempbyte(3) = &h0a Then .... End If If Instr(okstring ," END*",vbBinaryCompare) Then .... End If End If TmrComm.Enabled = True '打开定时器 End Sub B、直接轮循法 此法用于接收少量控制命令字; ' 保存输入子串的缓冲区 Dim Instring As String ' 使用 COM1。 MSComm1.CommPort = 1 ' 9600 波特,无奇偶校验,8 位数据,一个停止位。 MSComm1.Settings = "9600,N,8,1" ' 当输入占用时, ' 告诉控件读入整个缓冲区。 MSComm1.InputLen = 0 ' 打开端口。 MSComm1.PortOpen = True ' 将 attention 命令送到调制解调器。 MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保 ' 调制解调器以"OK"响应。 ' 等待数据返回到串行端口。 Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$, "OK" & vbCRLF) ' 从串行端口读 "OK" 响应。 ' 关闭串行端口。 MSComm1.PortOpen = False 下面开始教大家步骤 1、新建一个工程:标准 EXE 文件。 2、在新的工程里添加控件,如下图所示: 注意:在这里用了 3 个 Frame,分别是接收区(Frame1)、端口设置(Frame2)、 技术支持(Frame3),2 个 OptionButton,分别是字符显示(OptionButton1)、十 六进制显示(OptionButton2), 2 个 CommandButton,分别是清空接收区 (CommandButton1)、打开串口(CommandButton2),1 个 Shape,是那个粉色 的(Shape1),5 个 Combo1 Combox 和 7 个 Label(从上向下排就是序号),最后 还有一个 MSComm(图中那个像电话的)。 技巧:在 Frame 上画 Label 的方法,把 Label 放到 frame 的外面,然后点剪切, 最后到 frame 里面再点粘贴。 shape 控件填充时 FillStyle 选择 0 –Solid。 把 From1.BorderStyle 设为 1 然后在设计状态调整大小就可以达到固定 窗体大小,禁止更改尺寸的效果。 选中 Mscomm1 改:RThreshold 0--->1 LThreshold 0----->1 Mscomm1 在工程-->部件里找到选中,再添加。 3、添加代码,我已经写好,请看下面。 ' 内容: 西安科技大学科技创新实验班 上位机串口接收程序 ' 作者: 苗瑞 ' 日期: 2009 年 12 月 25 日 Private Sub Combo1_Click() If MSComm1.PortOpen = True Then '如果串口打开先关闭后再进行其他操作 MSComm1.PortOpen = False End If MSComm1.CommPort = Combo1.ListIndex + 1 End Sub Private Sub Command1_Click() '清空接收缓冲区内容 Text1.Text = "" End Sub Private Sub Command2_Click() On Error GoTo uerror '发现错误跳转到错误处理 If Command2.Caption = "关闭串口" Then MSComm1.PortOpen = False Command2.Caption = "打开串口" '按钮文字改变 Shape1.FillColor = &HFFFFC0 '灯颜色改变 Else MSComm1.PortOpen = True Command2.Caption = "关闭串口" Shape1.FillColor = &HFF End If Exit Sub uerror: msg$ = "无效端口号" '错误显示 Title$ = "串口调试助手" x = MsgBox(msg$, 48, Title$) '48 标示显示警告图标 End Sub Private Sub Form_Load() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False Else End If Combo1.AddItem "COM1" Combo1.AddItem "COM2" Combo1.AddItem "COM3" Combo1.AddItem "COM4" Combo1.AddItem "COM5" Combo1.AddItem "COM6" Combo1.AddItem "COM7" Combo1.AddItem "COM8" Combo1.ListIndex = 0 MSComm1.CommPort = 3 MSComm1.Settings = "19200,n,8,1" Command2.Caption = "打开串口" Shape1.FillColor = &HFFFFC0 Option2.Value = True Combo2.AddItem "256000" Combo2.AddItem "128000" Combo2.AddItem "115200" Combo2.AddItem "57600" Combo2.AddItem "38400" Combo2.AddItem "28800" Combo2.AddItem "19200" Combo2.AddItem "9600" Combo2.AddItem "4800" Combo2.AddItem "2400" Combo2.AddItem "1200" Combo3.AddItem "无 None" Combo3.AddItem "奇 Odd" Combo3.AddItem "偶 Even" Combo4.AddItem "4" Combo4.AddItem "5" Combo4.AddItem "6" Combo4.AddItem "7" Combo4.AddItem "8" Combo5.AddItem "1" Combo5.AddItem "2" MSComm1.InBufferSize=1024 '接收缓冲区大小设置 MSComm1.OutBufferSize=512 '发送缓冲区大小设置 End Sub Private Sub MSComm1_OnComm() Dim BytReceived() As Byte Dim strBuff As String Dim i As Integer Select Case MSComm1 .CommEvent '事件发生 Case comEventRxOver '接收缓冲区溢出 Text1.Text = "" Exit Sub Case comEvReceive '接收缓冲区有数据 MSComm1.InputLen=0 '读入缓冲区全部内容 strBuff=MSComm1.Input '读入到缓冲区 If MSComm1.InputMode = comInputModeBinary Then BytReceived()=strBuff For i = 0 To UBound(BytReceived) If Len(Hex(BytReceived(i))) = 1 Then strData = strData & "0" & Hex(BytReceived(i)) & " " Else strData = strData & Hex(BytReceived(i)) & " " End If Next Text1 = Text1 & strData strData = "" Else Text1 = Text1 & strBuff End If End Select Administrator 铅笔 Administrator 铅笔 Administrator 铅笔 Administrator 铅笔 End Sub Private Sub Option1_Click() MSComm1.InputMode = comInputModeText End Sub Private Sub Option2_Click() MSComm1.InputMode = comInputModeBinary End Sub 4、为了大家调试方便再给发一个下位机程序,用 C8051F040 的串口写的,隔一 段时间向上面发 20 个 A /* 内容:西安科技大学科技创新实验班 下位机串口发送程序 作者:苗瑞 日期:2009 年 12 月 15 日 */ #include"C8051F040.h" typedef unsigned char uchar; typedef unsigned int uint; sfr16 RCAP2=0xca; sfr16 RCAP3=0xca; sfr16 RCAP4=0xca; sfr16 TMR4=0xcc; sfr16 TMR3=0xcc; sfr16 TMR2=0xcc; sfr16 PCA0CP0=0xfb; sfr16 PCA0CP1=0xfd; sfr16 PCA0CP2=0xe9; sfr16 PCA0CP3=0xeb; sfr16 PCA0CP4=0xed; sfr16 PCA0CP5=0xe1; uchar k=0; uchar t; uchar counter=0; void uart0_ini(); void t1_ini(); void t1_baud(uchar t1h); void t2_ini(); void t2_baud(uint t2reload); void config (void) { WDTCN = 0x07; //看门狗禁止 WDTCN = 0xDE; WDTCN = 0xAD; SFRPAGE = 0x0F; XBR0 = 0x04; // 将 UART0 TX0 配置到 P0.0 口,RX0 配置到 P0.1 口 XBR1 = 0x00; // XBR2 = 0x40; // Crossbar 交叉开关配置使能 XBR3 = 0x00; // SFRPAGE = 0x0F; P0MDOUT = 0x00; // TX0 和 RX0 为开漏模式,故宜加上拉电阻 P2MDOUT = 0xff; // TX0 和 RX0 为开漏模式,故宜加上拉电阻 P1MDIN = 0xFF; // Input configuration for P1 SFRPAGE = 0x0F; CLKSEL = 0x00; OSCXCN = 0x00; OSCICN = 0x83; //采用内部晶振,为 24.5MHZ8 分频 } void t0_ini() { SFRPAGE =0x00; CKCON = CKCON|0X02; // T1 采用系统时钟 48 分频 TMOD = TMOD | 0x01 ; // T0 工作在方式 1(16 位计数器) TH0 = 0x00; TL0 = 0x00; EA = 1; ET0 = 1; TR0 = 1; SFRPAGE=CONFIG_PAGE; } void delay1ms(unsigned int i) { unsigned int j=0; for(;i>0;i--) for(;j<300;j++) {;} } void send_start(void) { k=0; SFRPAGE=0x00; TR2=1; SBUF0=0;//启动发送 } void uart0_ini() { SFRPAGE = 0x00; SADEN0 = 0x00; SADDR0 = 0x00; SSTA0 = 0x01; SCON0 = 0x50; SCON0 &=0xFC; IE|=0x10; t1_ini(); t2_ini(); t1_baud(40); t2_baud(80); EA=1; } void t1_ini() { SFRPAGE = 0x00; CKCON = 0x10; // T1 采用系统时钟,不分频 TMOD = 0x20; // T1 为 8bit 自动重载模式 TCON = 0x40; // TR1 置 1,启动定时器 } void t1_baud(uchar val) { SFRPAGE = 0x00; //T1 溢出率设置,溢出率为(T1 时钟频率)/(val) TH1 = ~val+1; TL1 = TH1; } void t2_ini() { SFRPAGE = 0x00; //T2 为系统时钟不分频,计数方向为增值计数 TMR2CF = 0x08; // TMR2CN = 0x04; // TR2 置 1,启动定时器 } void t2_baud(uint t2reload) { //T2 溢出率设置,溢出率为(T2 时钟频率)/(t2reload) SFRPAGE = 0x00; RCAP2=~t2reload+1; TMR2=RCAP2; } void main() { unsigned int cnt=0; config(); uart0_ini(); t0_ini(); send_start(); while(1) {;} } void Time0_IT(void) interrupt 1 // 0.1ms 定时中断 { //T0 中断服务程序 SFRPAGE = 0x00; EA=0; TH0=0X00; TL0=0X00; counter++; if(counter>=20) { counter=0; send_start(); } EA=1; SFRPAGE = CONFIG_PAGE; } void uart0_ISR() interrupt 4 {//全双工发送接收 SFRPAGE=0x00; if(SCON0&0x01) { SCON0&=0xfe; } if(SCON0&0x02) { k++; SBUF0=0x0a; if(k>=20) { SFRPAGE=0x00; TR2=0;//停止定 T2 时器,从而停止发送 } SCON0&=0xfd; } SFRPAGE = CONFIG_PAGE; } 5、最后运行结果,见下图。
本文档为【VB开发上位机软件入门教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_335407
暂无简介~
格式:pdf
大小:370KB
软件:PDF阅读器
页数:15
分类:互联网
上传时间:2012-03-02
浏览量:89