VB编写的简单的上位机
VB编写的简单的上位机

一个简单的用VB编写的上位机程序自己想做一个简单上位机,却发现相关的资料很少,于是在做出来之后把自己的这样一个简单程序上传,给新入门的朋友一个借鉴学习的资料。
窗口布局用到的MSComm控件的基本属性(必用)CommPort:设置或返回串口通信的串口号(COM口)设置格式是:mPort[=value],其中object为控件名,如MSComm1;value的合法值是整形的数据,例如1,2……比如mPort=1(默认值),表示我们将用COM1口进行通信COM口可以通过鼠标右击“我的电脑(计算机)”图标,在弹出的快捷菜单中选择“管理”,弹出如下图左边的对话框左键点击“设备管理器”可以看到上图右边对话框左键点击设备管理器可以看到如上图右边视图其中的就是当前连接到计算机的可用串口了Settings:以字符串的形式设置或返回串口通信参数。
设置格式:mPort[=value]其中object为控件名,如MSComm1;Value需为一字符串,由四个设置值组成其格式为:“波特率,奇偶校验,数据位,停止位”Portopen:设置或返回串口状态,若其已经打开,则返回TRUE,否则返回FALSE 设置格式:object.Portopen[=value]其中object为控件名,如MSComm1;value为一逻辑值,若为TRUE,则打开,否则关闭注意:如果串口不是打开(关闭),而对它进行关闭(打开)将会出错RThreshold:该属性为一阀值。
当接收缓冲区中字符数达到该值时,MSComm 控件设置Commevent属性为ComEvReceive,并产生OnComm事件。
用户可在OnComm事件处理程序中进行相应处理。
若Rthreshold属性设置为0,则不产生OnComm事件。
例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。
这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。
VB实现的上位机数字电压表

《综合设计性实验》论文基于PC 的智能数字电压表设计 信息与通信学院 电子信息工程0901130443 农 聪 王守华 2012-10-31 题 目: 院 系:专 业: 学 号:姓 名:指导教师:设计日期:摘要在实际的数据采集系统中,常常采用PC机作为系统的上位机,控制整个采集过程,完成命令的发送接收和数据的存储处理,而下位机是以单片机为核心的现场数据采集装置,完成现场数据的采集和上传。
上下位机之间通过RS232总线连接,实现数据和命令的传送与接收。
上位机中,采用在Windows环境下,通过VB中的MSComm控件实现软件编程;下位机则采用了可以直接控制硬件整个系统将单片机小巧、灵活、可靠的优点结合,应用了二者的长处,从而实现了微机与单片机的通信。
以下主要介绍PC机通信程序设计部分,即上位机的操作显示界面采用VB 进行可视化编程。
一、具体步骤过程1、建立项目:打开VB,创建窗体,在默认窗体Form1上添加控件,以构建用户界面。
2、在项目中插入MSComm控件:在窗体上添加界面的控件,在Form1窗体上添加以下控件:标签Label11:用于显示文字“测量电压”;标签Labe14:用于显示文字“基于PC的数字电压表设计”;标签Labe16:用于显示文字“制作人:······”;标签Labe17:用于显示文字“量程:······”;标签Labe18:用于显示文字“精度:······”;标签Labe19:用于显示文字“误差:······”;文本框Text1:用于显示计算结果(平方数)。
命令按钮Command1:用于计算输入数的平方,并把结果显示在文本框Text1中;命令按钮Command2:用于结束应用程序的运行;Frame1:用于串口设定显示;Combo1:用于选择串口;Combo3:用于波特率选择。
自己用VB编制的上位机(MSComm控件)

自己用VB编制的上位机(MSComm控件)本人初学者,许多地方显得粗糙笨拙,但总算是成功了,不过自我感受VB真的很简单,我大致学了两三个星期就可以了。
本文只同向我一样的初学者分享一下经验,毕竟咱不是专业的。
下面开始。
上位机可方便地实现与单片机之间进行信息传递交互,能够更加容易对机械手臂进行控制,实现操作可视化,更加直观,保存重要数据等功能。
我们利用Visual Basic 6.0(以下简称VB)来编制上位机,VB 是一种功能强大、简单易学的程序设计语言。
它不但保留了原先Basic 语言的全部功能,而且还增加了面向对象程序设计功能。
它不仅可以方便快捷地编制适用于数据处理、多媒体等方面的程序,而且利用ActiveX控件MSComm还能十分方便地开发出使用计算机串口的计算机通信程序。
本实验涉及控制六路舵机,所以需要编制上位机实现一次向下位机传输含有六个数据的数组,同时接受来自下位机的数组,并显示。
整个过程可分为如下几个过程:一:VB是面向对象的语言,首先需要绘制程序界面该上位机大致分为左边的功能部分与右边的可视化调节部分。
功能部分有端口选择,用以选择合适的端口进行串口通信,波特率选择,打开与关闭端口,动作设置等。
为了便于布局,应用frame控件建立区域,再将控件拖到frame 区域中,对于功能相同的控件来说,建立控件组的方式会使编程避免重复繁琐,例如HScrollbar控件,先向frame区域内拖入一个HScrollbar控件,再复制,粘贴到frame区域内部,则提示是否建立控件组,点击确定即可。
这样便为后续编程带来很大的方便。
调节部分运用Hscrollbar控件来粗略调节度数,设定按钮与文本框配合来精确调节输出度数。
用右列文本框实时读取舵机当前角度。
用optionbutton控件来选择hscrollbar的步进精度,这里分为0.1度与1度两个不同的选项。
由于一组optionbutton中在程序运行中只能有一个处于选中状态,根据本程序要求,每一横列的两个optionbutton为一组,这样就需要frame控件,在同一个frame区域里的optionbutton默认为一组。
基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术一、引言随着自动化技术的不断发展,PLC(可编程逻辑控制器)已经成为自动化领域中不可或缺的设备。
PLC通常用于控制工业生产线上的设备和机器,而上位机则是用来监控和管理PLC系统的设备。
众所周知,实时通信是保证PLC系统正常运行的重要因素之一。
在这篇文章中,我们将重点介绍基于VB6.0的上位机与PLC实时通信技术。
二、VB6.0简介VB6.0是微软公司于1998年发布的一款集成开发环境(IDE),它是一种编程语言,被广泛用于开发Windows平台下的应用程序。
VB6.0具有简单易学、功能丰富、开发效率高等特点,因此在工业领域得到了广泛应用。
考虑到VB6.0的这些优势,我们可以利用它来开发上位机程序,并实现与PLC的实时通信。
三、PLC实时通信技术1. 串口通信PLC通常通过串口与上位机进行通信。
在VB6.0中,我们可以利用MSCOMM控件来实现串口通信。
通过在VB6.0的界面中添加MSCOMM控件,并设置相应的串口参数(如波特率、数据位、校验位、停止位等),就可以实现与PLC的串口通信。
2. Modbus通信Modbus是一种通信协议,被广泛用于工业控制领域。
通过Modbus协议,我们可以实现上位机与PLC之间的实时通信。
在VB6.0中,我们可以使用第三方的Modbus通信库来实现Modbus通信,例如Modbus ActiveX控件等。
通过这些控件,我们可以轻松地实现Modbus通信,从而实现上位机与PLC的实时数据交换。
3. Socket通信1. 配置MSCOMM控件接下来,我们需要编写VB6.0代码,实现与PLC的串口通信。
您可以编写相应的串口通信代码,例如打开串口、发送数据、接收数据等。
示例代码如下:Private Sub Form_Load()mPort = 1 ' 串口号MSComm1.Settings = "9600,n,8,1" ' 波特率、校验位、数据位、停止位MSComm1.PortOpen = True ' 打开串口End SubPrivate Sub Command1_Click()MSComm1.Output = "010*********FF01" ' 发送数据End Sub3. 运行程序并测试您可以运行程序,并测试与PLC的串口通信是否正常。
自制VB上位机串口监控简单程序

将该控件拖到Form1里,然后按照界面的要求把要到得控件都添加到Form1里去,然后按照自己的想法去改每个控件的属性。(不一定非按我这个,你自己怎么想的就怎么定义即可,这个名字什么的其实是很灵活的)(NAME属性是在界面上看不到的,在写程序的时候会用到)
四.
写程序,双击每一个控件都会出来对应的程序。编好之后生成.EXE文件即可。就能和你的单片机进行简单的通讯啦!(注:你在上位机里设置的波特率是要和你的单片机里的下位机程序中的波特率是匹配的要不也是没有办法通讯的。)
如果没有我这给你提供下载。
下载完之后就是注册(我也不明白为什么,谁看了MSDN上的文档谁知道,我没看)
注册步骤:
一、开始------>运行----->输入 Regsvr32 MSComm32.ocx(注:我这里写的并不是我看的原始的文件上的注册表达式 原始式是 Regsvr32 C:\winnt\system32\MSComm32.ocx我试过之后不行才改到现在的表达式)这一步完了之后你已经有MSComm控件选项了,但是你还不能用还需要再次注册下(为什么?我也不知道)
自制VB上位机串口监控简单程序(内详)
前两天说要做一个VB的上位机程序,今天算是做出来最基础的部分了,趁有时间,先拿出来和大家分享下。自我感觉很有用,并且附件里的.exe和程序都可以直接用是本人调试过的,没有任何问题。
此上位机程序要实现的功能就是和51单片机进行简单的串口接收发送。
步骤:
1、装上VB的软件(废话)我用的是VB6.0的软件
2、装完之后看看有没有要的MSComm控件。如果没有还要下哦!
3、就是编写相应的上位机下位机程序啦。(我用VB编的感觉做这个还是很方便的前后用了两天半左右吧中间还又返回去重新看了串口编程的部分)
VB写上位机

一.打开Visual Basic6.0并设置上位机大小打开Visual Basic6.0,在出现的界面中用鼠标单击,然后点击打开,出现图1-1,图 1-1单击最大化后,在“属性窗口”中找到“Height”、“ScaleHeight”、“ScaleWidth”、“top”、“Width”,并分别填入“9690”“8910”“9390”“360”“9480”。
二.代码编辑器的基本代码输入在界面内找到“视图”,单击,在下拉选项中选择“代码窗口”,单击后出现图1-2,此图就是代码编辑器,在这里填写上位机的代码。
接下来在图1-2中填入如下代码:Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByV al hwnd As Long, ByV al lpOperation As String, ByV al lpFile As String, ByV al lpParameters As String, ByV al lpDirectory As String, ByV al nShowCmd As Long) As LongPublic data As SinglePublic temp As SinglePublic flag As BytePrivate Sub Form_Load()Form.WindowState = 0If MSComm1.PortOpen = True Then MSComm1.PortOpen = FalseCombo1.AddItem "COM1"Combo1.AddItem "COM2"Combo1.AddItem "COM3"Combo1.AddItem "COM4"MSComm1.InBufferSize = 8MSComm1.OutBufferSize = 2MSComm1.RThreshold = 4MSComm1.SThreshold = 1MSComm1.InputLen = 0MSComm1.InputMode = comInputModeTextMSComm1.InBufferCount = 0End Sub图1-2三.建立菜单项在“工具”菜单中选择“菜单编辑器”选项,出现图1-3.1.在图1-3中的“标题框”和“名称框”分别填入“文件”、“File”,然后单击“下一个”。
步进电机的上位机控制 VB.

附录1 PC机控制界面设计程序Public zhuanxiang As StringPrivate Sub Combo1_Change()Combo1.ListIndex = 0End SubPrivate Sub Command1_Click()If Command1.Caption = "启动" ThenMSComm1.Settings = "2400,n,8,1"mPort = Combo1.ListIndex + 1MSComm1.PortOpen = TrueCommand1.Caption = "停止"MSComm1.Output = "F" '停机MSComm1.InputMode = comInputModeBinaryMSComm1.InputLen = 0ElseCommand1.Caption = "启动"MSComm1.Output = "E" '开机MSComm1.PortOpen = FalseEnd IfEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub DOWN_Click()MSComm1.Output = "D" '减速End SubPrivate Sub LEFT_Click()MSComm1.Output = "B" '左转,leftzhuanxiang = "正转"Text3.Text = zhuanxiangEnd SubPrivate Sub RIGHT_Click()MSComm1.Output = "A" '右转,rightzhuanxiang = "反转"Text3.Text = zhuanxiangEnd SubPrivate Sub Timer1_Timer()Dim speed As VariantDim indate As ByteIf MSComm1.InBufferCount > 0 Then speed = MSComm1.Inputindate = AscB(speed)Text1.Text = indateEnd IfEnd SubPrivate Sub UP_Click()MSComm1.Output = "C" '加速End Sub附录2 下位机控制程序#ifndef __INIT2_H__#define __INIT2_H__#include <c8051f340.h>#include "design4.h"void delayms(uchar k);void delayus(uchar k);void DateIN595(uchar date);void init_btlv();#endif#include <c8051f340.h>#include "design4.h"#include "init.h"extern uint HZ;//延时程序约为0.5msvoid delayms(uchar k){uchar i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}//延时程序约为4usvoid delayus(uchar k){while (k--){NOP;NOP;NOP;}}//配置c8051寄存器,p1.2.4.5为推挽输出//p2.4. 6 7为推挽出//初始化波特率发生器:定时器1,工作在//模式2,波特率为9600void init_btlv(){//初始化系统时钟//内部高频振荡器使能,系统时钟为内部高频振荡器输出(不分频)REG0CN=0X00;OSCICN |= 0x83; //不分频,实用内部12M晶振,系统时钟为12M OSCICL=0X00; //内部晶振工作在最高频OSCXCN=0X00; //禁止内部L-F振荡OSCXCN=0X00; //关闭外部振荡器SCON0=0X50;//配置UART0控制寄存器,8位数据,允许接收TMOD=0X21; //定时器1工作在方式2TH1= 256-(12000000/2400/24); //定时器1为12MHZ,12分频,TI0=0;// CKCON=0X00; //定时器1用系统时钟12分频作为它的时基// REN=1;TH0=(65536-HZ)/256; //定时1000um产生一次中断TL0=(65536-HZ)%256;// TR0 =1;ET0=1;TR1=1;EA=1;ES0=1;//初始化交叉开关,配置I/O口P0MDOUT=0X10;//将P0.4(TX0)为推挽,P0.5(RX0)为开漏XBR0=0X01;//将TX0,RX0连接到端口引脚XBR1=0X40;//开交叉开关PCA0MD&=0XBF; //关看门狗P1MDOUT=0X34; //推挽方式。
上位机(vb)单片机与PC通讯程序(自己编的)

Option Explicit Dim count1 As String 'Dim count11 As String Dim flag As Integer 'Dim flag_1 As Integer Dim jinji_flag As Integer Dim jinji_flag1 As Integer Dim dxbian As Integer Dim nbbian As Integer Dim count_sheding As Integer Dim count_shedingnb As Integer Dim strData As String '串口变量 'Dim flag As Integer Dim sj(0 To 4 As Integer Dim sj1(0 To 4 As Integer Dim sj2(0 To 4 As Integer Dim sj3(0 To 4 As Integer Private Sub Command2_Click( MSComm1.PortOpen = False Unload Me End Sub Private Sub Form_Load( count1 = count_sheding count_sheding = 60 dxbian =count_sheding count_shedingnb = 60 nbbian = count_shedingnb Text1.Text = ""Text5.Text = "" ' flag = 0 ' jinji_flag = 1 Text9 = "" '串口初始化 mPort = 1 MSComm1.InputMode = comInputModeBinary '数据通过 Input 属性以文本形式取回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个简单的用VB编写的上位机程序自己想做一个简单上位机,却发现相关的资料很少,于是在做出来之后把自己的这样一个简单程序上传,给新入门的朋友一个借鉴学习的资料。
窗口布局用到的MSComm控件的基本属性(必用)CommPort:设置或返回串口通信的串口号(COM口)设置格式是:mPort[=value],其中object为控件名,如MSComm1;value的合法值是整形的数据,例如1,2……比如mPort=1(默认值),表示我们将用COM1口进行通信COM口可以通过鼠标右击“我的电脑(计算机)”图标,在弹出的快捷菜单中选择“管理”,弹出如下图左边的对话框左键点击“设备管理器”可以看到上图右边对话框左键点击设备管理器可以看到如上图右边视图其中的就是当前连接到计算机的可用串口了Settings:以字符串的形式设置或返回串口通信参数。
设置格式:mPort[=value]其中object为控件名,如MSComm1;Value需为一字符串,由四个设置值组成其格式为:“波特率,奇偶校验,数据位,停止位”Portopen:设置或返回串口状态,若其已经打开,则返回TRUE,否则返回FALSE 设置格式:object.Portopen[=value]其中object为控件名,如MSComm1;value为一逻辑值,若为TRUE,则打开,否则关闭注意:如果串口不是打开(关闭),而对它进行关闭(打开)将会出错RThreshold:该属性为一阀值。
当接收缓冲区中字符数达到该值时,MSComm 控件设置Commevent属性为ComEvReceive,并产生OnComm事件。
用户可在OnComm事件处理程序中进行相应处理。
若Rthreshold属性设置为0,则不产生OnComm事件。
例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。
这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。
InputMode:设置或返回接收数据的类型。
设置格式:object.InputMode[=value],其中value的值有两个;comInputModeBinary表示以二进制方式接收数据,Input属性返回值为一字符串comInputModeText表示以字符方式接收数据,Input属性返回值为一字数组InputLen:设置或返回一次从接收缓冲区中读取字节数。
设置格式:object.InputLen[=value],value为一个整形数据;当其设置为0时,表示一次读取接收缓冲区中的全部内容。
这个属性在定字节读取中非常有用Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。
使用格式:str=object.Input,str为一字符串型变量或对象Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。
使用格式:object.Output=value,value为一字符串型变量或任意类型的数组CommEvent:这是一个非常重要的属性。
该属性设计时无效,运行时只读。
一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。
用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。
ComEvReceive接受到Rthreshold个字符。
该事件将持续产生,直到用Input属性从接受缓冲区中读取并删除字符。
其它的属性,需要时可以在网上查找相关资料(下面附几个网址)/view/84fb2949336c1eb91a375d91.html这个里面讲的很详细的程序代码Private Sub Combo2_Click()MSComm1.Settings=Combo2.Text+",n,8,1"End SubPrivate Sub Command6_Click()On Error GoTo uerror:If Command6.Caption="打开串口"ThenMSComm1.PortOpen=TrueCommand6.Caption="关闭串口"Shape1.FillColor=RGB(0,255,0)ElseMSComm1.PortOpen=FalseCommand6.Caption="打开串口"Shape1.FillColor=RGB(128,128,128)End IfExit Subuerror:msg$="无效端口号"Title$="串口调试"X=MsgBox(msg$,48,Title$)End SubPrivate Sub Form_Load()Text1=""Text3=""Combo2.ListIndex=0Combo1.ListIndex=0Timer1.Interval=Val(Text2)mPort=Combo1.ListIndex+1MSComm1.RThreshold=1MSComm1.InputLen=0If Option3Then MSComm1.InputMode=comInputModeBinary End SubPrivate Sub Form_Unload(Cancel As Integer)If MSComm1.PortOpen Then MSComm1.PortOpen=False End SubPrivate Sub MSComm1_OnComm()Dim BytReceived()As ByteDim strBuff As StringSelect Case mEventCase comEvReceiveIf Option4ThenText3=Text3&MSComm1.InputElsestrBuff=MSComm1.InputBytReceived()=strBuffstrBuff=""Dim i As IntegerFor i=0To UBound(BytReceived)If Len(Hex(BytReceived(i)))=1ThenstrBuff=strBuff&"0"&Hex(BytReceived(i))&""ElsestrBuff=strBuff&Hex(BytReceived(i))&""End IfNextText3=Text3&strBuffEnd IfEnd SelectEnd SubPrivate Sub Option3_Click()MSComm1.InputMode=comInputModeBinaryEnd SubPrivate Sub Option4_Click()MSComm1.InputMode=comInputModeTextEnd SubPrivate Sub Timer1_Timer()Dim SendBuff()As ByteDim Bytflag As StringDim strBuff As StringDim i As IntegerDim flag As BooleanIf Option2ThenMSComm1.Output=Text1.TextElseFor i=1To Len(LTrim(Text1))Bytflag=Mid(Text1,i,1)If Bytflag>="0"And Bytflag<="9"Or Bytflag>="a"And Bytflag<="f"OrBytflag>="A"And Bytflag<="F"Thenflag=TrueElseflag=FalseExit ForEnd IfNextIf flag ThenIf Len(LTrim(Text1))Mod2<>0ThenstrBuff="0"<rim(Text1)ElsestrBuff=Text1End IfReDim SendBuff(Len(strBuff)/2-1)For i=0To UBound(SendBuff)SendBuff(i)=Val("&h"&Mid(strBuff,2*i+1,2)) NextMSComm1.Output=SendBuffElsemsg$="请输入HEX格式数据:a-f、A-F、0-9"Title$="串口调试助手"X=MsgBox(msg$,48,Title$)Timer1.Enabled=FalseCommand3.Caption="自动发送"End IfEnd IfEnd SubPrivate Sub Combo1_Click()mPort=Combo1.ListIndex+1End SubPrivate Sub Command1_Click()Text1=""End SubPrivate Sub Command2_Click()Dim SendBuff()As ByteDim Bytflag As StringDim strBuff As StringDim i As IntegerDim flag As BooleanTimer1.Enabled=FalseIf MSComm1.PortOpen ThenIf Option2ThenMSComm1.Output=Text1.TextElseFor i=1To Len(LTrim(Text1))Bytflag=Mid(Text1,i,1)If Bytflag>="0"And Bytflag<="9"Or Bytflag>="a"And Bytflag<="f" Or Bytflag>="A"And Bytflag<="F"Thenflag=TrueElseflag=FalseExit ForEnd IfNextIf flag ThenIf Len(LTrim(Text1))Mod2<>0ThenstrBuff="0"<rim(Text1)ElsestrBuff=Text1End IfReDim SendBuff(Len(strBuff)/2-1)For i=0To UBound(SendBuff)SendBuff(i)=Val("&h"&Mid(strBuff,2*i+1,2))NextMSComm1.Output=SendBuffElsemsg$="请输入HEX格式数据:a-f、A-F、0-9"Title$="串口调试助手"X=MsgBox(msg$,48,Title$)End IfEnd IfElsemsg$="请打开串口"Title$="串口调试助手"X=MsgBox(msg$,48,Title$)End IfEnd SubPrivate Sub Command3_Click()If MSComm1.PortOpen ThenIf Command3.Caption="自动发送"ThenTimer1.Enabled=TrueTimer1.Interval=Val(Text2)Command3.Caption="关闭自动"ElseTimer1.Enabled=FalseCommand3.Caption="自动发送"End IfElsemsg$="请打开串口"Title$="串口调试助手"X=MsgBox(msg$,48,Title$)End IfEnd SubPrivate Sub Command4_Click()Text3=""End SubPrivate Sub Command5_Click()Unload MeEnd Sub。