用VB编写上位机

合集下载

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事件。

上位机制作过程单片机51vb上位机超简单

上位机制作过程单片机51vb上位机超简单
上位机制作过程单片机51vb上位机 超简单
• 1602控制
上位机用途
• 上位机是一台可以发出特定操控命令的计 算机,通过操作预先设定好的命令,将命 令传递给下位机,通过下位机来控制设备 完成各项操作(应用最多的地方如:工业、 水利、供电部门、交通等方面)。上位机 都有特定的编程,有专门的开发系统,或 以上是已经规定好任务,只能按特定的任 务进行操作。简单说上位机就是命令的下 达者,而下位机则是命令的执行者。
口。
• Private Sub Command2_Click() • 这个是点击按钮2所触发的事件代码函数入
口。
代码如下
成功和下位机通讯
谢谢观赏
比如上位机控制在工厂中的应用
首先打开vb软件
• 弹出新建工程对话框,点击标准exe
• 出现如下
设置属性窗口
• caption:标题 • font:字体大小和风格
• 新建两个按钮,改一下caption:打开串口 和发送数据如下图所示
点击左边按钮框新建一个text1,如下图所示
添加串口控件,在工程-部件中找到Microsoft comm control 6.0,如下图所示,点击打钩,并确定。
在右边控件Байду номын сангаас出现一个电话的控件,并把下图箭头所示的控 件添加到窗口中。
对代码进行编写
• 首先,双击窗口进入代码编辑框,如下图 所示:
• Private Sub Form_Load() • 这个函数是窗口运行时初始化一些控件。
• Private Sub Command1_Click() • 这个是点击按钮1所触发的事件代码函数入

基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术VB6.0是一种编程语言,可用于开发上位机与PLC之间的实时通信技术。

PLC是一种可编程逻辑控制器,用于控制和监控自动化设备。

通过实时通信,上位机可以与PLC进行数据交换和控制操作。

1. 通信协议选择:PLC与上位机之间的通信需要选择适当的通信协议。

常见的通信协议包括Modbus、OPC、Profibus等。

根据实际需求和设备的支持情况选择合适的通信协议。

2. 串口通信:VB6.0通过串口通信与PLC进行连接。

通常采用RS232、RS485等串口通信方式。

在编程中,需要设置串口的波特率、数据位、停止位、校验位等参数。

通过VB6.0的串口通信类库,可以实现数据的读取和写入。

3. 数据采集和监控:通过VB6.0实现对PLC数据的采集和监控。

可以使用定时器触发方式,周期性的读取PLC设备的数据。

通过VB6.0的数据处理和显示功能,可以实时显示PLC设备的状态和数据信息,如温度、压力、流量等。

4. 控制指令的发送:通过VB6.0向PLC发送控制指令,实现对设备的控制。

根据PLC 的控制逻辑,编写相应的控制程序,将控制指令发送给PLC设备。

通过串口通信,将控制指令发送出去,实现设备的开关、调节等操作。

5. 异常处理:在实时通信中,可能会出现通信故障、数据错误等异常情况。

需要在编程中添加异常处理的代码,对异常情况进行处理,保证通信的稳定性和可靠性。

基于VB6.0的上位机与PLC实时通信技术可以广泛应用于自动化控制、工业监控、智能家居等领域。

通过实时通信,可以实现对设备的远程监控和控制,提高设备的自动化程度和工作效率。

在编程过程中,需要注意通信协议的选择和参数的设置,以确保通信的正确和可靠。

需要添加适当的异常处理机制,提升系统的稳定性和可靠性。

自己用VB编制的上位机(MSComm控件)

自己用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实时通信技术

基于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写上位机

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.

步进电机的上位机控制 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; //推挽方式。

基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术

基于VB6.0的上位机与PLC实时通信技术一、实时通信技术在工业控制系统中的重要性实时通信技术在工业控制系统中扮演着十分重要的角色。

在现代工业控制系统中,各种设备之间需要进行及时、准确的信息交换,以保证整个系统的正常运行。

在许多工业控制系统中,PLC往往承担着实时数据采集、逻辑控制、设备状态监测等任务,而上位机则需要通过实时通信技术与PLC进行数据交换和控制命令的下发。

实时通信技术的稳定性和可靠性对整个工业控制系统的运行至关重要。

基于此,基于VB6.0的上位机与PLC实时通信技术成为了工程师们需要深入研究和掌握的技术。

二、VB6.0在上位机开发中的应用VB6.0是一种非常成熟、功能强大的软件开发工具,拥有良好的可视化设计界面和强大的编程功能。

在工业自动化领域,基于VB6.0的上位机开发具有以下几个优势:1. 易于学习和使用。

VB6.0的编程语言结构清晰、简单易懂,对于工程师来说比较容易上手。

2. 丰富的控件库。

VB6.0提供了丰富的控件库,可以方便地实现各种窗体界面的设计和功能的实现。

3. 良好的可视化设计界面。

VB6.0提供了良好的可视化设计界面,可以直观地设计界面布局和控件功能。

4. 广泛的应用领域。

VB6.0已在工业控制系统中得到了广泛的应用,积累了大量的经验和案例,为工程师们提供了丰富的技术支持和解决方案。

基于VB6.0的上位机开发在工业控制系统中得到了广泛的应用。

在后文中,我们将结合VB6.0的优势,介绍基于VB6.0的上位机与PLC实时通信的具体实现方法。

基于VB6.0的上位机与PLC实时通信的具体实现方法通常包括以下几个步骤:1. 建立通信连接。

通常情况下,PLC与上位机之间的通信连接可以通过串口、以太网等方式实现。

在VB6.0中,我们可以利用其提供的串口通信、Socket通信等控件来建立与PLC的通信连接。

2. 设计数据交换协议。

在进行实时通信时,上位机与PLC之间需要进行数据的交换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB编写上位机实例用VB编写上位机实例16:14:22 UTC+0800Sun Apr 1 2007用VB6.0编写第一个串口通信上位机程序Visual Basic6.0是一个可视化窗口环境的编程软件,目前使用Visual Basic6.0可以快速简单编写单片机中的串口通信上位机程序。

电子制作HPOO下面我们以一个完整的通信试验为例子完成如何用Visual Basic6.0编写单片机串口通信程序。

打开安装好后的Visual Basic6.0主程序界面。

选择“标准EXE”。

如图1显示,建立Visual Basic 的编程环境。

图1在菜单的[工程]选项中选择[部件],如图2。

把Visual Basic的串口通信控件Microsoft Comm control 6.0调入工作菜单。

图2在打开[部件]对话框中,选择Microsoft Comm control 6.0的选项框,点击[确定]。

图3图3可以在图示3中可以看通信控件Microsoft Comm control 6.0的文件是在C:\WINNT\system32\MSCOMM32.OCX文件。

如果大家在首次调用通信控件Microsoft Comm control 6.0控件时无法在控件对话框中找到,请直接在系统目录中搜索名为MSCOMM32.OCX文件。

然后通过浏览加入VB的工作界面中。

添加完控件回到编程界面。

如下图4。

图4通过右边的菜单把一些必要的控件放在窗体中。

然后点击窗体中的Timer控件按F4弹出属性窗口进行设置。

其具体设置如下:Timer定时器控件设置属性,(通过按F4键可弹出此窗口)Mscomm通信控件参数属性设置(通过单击控件的右键属性可弹出此窗口)本文用到的其他控件:CommandButton控件和TextBox控件按默认属性设置不变。

单片机编程器HPOO以上设置完成,回到编程窗体区中,任意双击。

会显示Visual Basic的程序窗体的Load事件程序。

在代码窗口中输入:单片机编程器HPOOPrivate Sub Form_Load()MSComm1.PortOpen = True'窗体的加载时,就打开通信端口,通信端口的参数也可以在此指定Timer1.Enabled = Timer1.Enabled'窗体的加载时,同时定时器控件事件End Sub这样设置目的是当程序在打开是,首先打开通信控件MSComm,注意这里的串口通信参数中的波特率设置是默认参数的。

即:波特率:9600bps;校验位:无;数据位:8位;停止位:1。

电子元件邮购网双击定时器控件Timer1同样在定时器窗体的事件程序中,输入相关代码:Private Sub Timer1_Timer()If MSComm1.InBufferCount > 0 Then'程序检查输入缓冲区中是否有数据,若有数据Text1.Text = Text1.Text + MSComm1.Input'则将此数据读取后,指定给文本框的Text属性End IfEnd Sub'此事件会在每一个Interval属性值的循环计数间隔内被调用一次,这样就可以一直读取串口中有无数据发送。

定时器一直按设置速度循环读取串口数据。

直到串口的程序缓冲区中有数据就把他发给Text1文本框显示出来。

杭州电子元件邮购网地址:最后双击CommandButton控件,在弹出的程序窗口事件中输入如下代码:Private Sub Command1_Click()MSComm1.PortOpen = False'关闭通信端口End'结束系统End Sub在这个窗口中MSComm1.PortOpen = False是当程序停止或者关闭软件时都应该加上关闭串口。

通过以上简单的代码就实现了VB串口接收程序。

编辑完成后,我们通过Visual Basic 菜单[文件]中的编译来生产可执行文件。

如下图:这样就产生完成程序整个步骤工作。

下面将介绍通过单片机编程实现串口发送数据到上位机程序的窗口中显示出来。

同时通过PROTEUS仿真软件的示波器来查看串口数据发送情况。

MSCOMM串口控件数据接收方式:1、在OnComm 事件中接收数据:这种方式能充分MSCOMM控件的特性。

OnComm 事件还可以检查和处理通讯错误;可以通过检查CommEvent 属性的值来查询事件和错误;对于不定长数据以及对数据进行处理比较复杂的情况,此法不是很方便。

Private Sub MSComm_OnComm ()Select Case mEvent'' 错误Case comEventBreak '' 收到Break。

Case comEventCDTO '' CD (RLSD) 超时。

Case comEventCTSTO '' CTS Timeout。

Case comEventDSRTO '' DSR Timeout。

Case comEventFrame '' Framing ErrorCase 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 SelectEnd Sub2.轮循法采集数据:A、定时器轮循法对于数据包方式收发数据以及不需即时响应情况,用轮循法更好些。

实际上轮循法最大的好处在于集中处理数据而且不太占用CPU。

轮循法要注意定时采集的时间片段大小;这里用二进制收发模式;使属性RThreshold、SThreshold为0,屏蔽ONCOMM事件。

InputMode = comInputModeBinaryRThreshold = 0SThreshold = 0Private Sub TmrComm_Timer()''采用轮循法采集数据Dim Rx_buff() As ByteDim okstring As StringDim ReceivedLen As IntegerOn Error GoTo ErrorHandlerTmrComm.Enabled = False ''关闭定时器If commport.InBufferCount > 0 ThenReceivedLen = commport.InBufferCountRx_buff = commport.Inputokstring = StrConv(tempbyte, vbUnicode)If ReceivedLen = 6 ThenIf Chr(tempbyte(0)) = ":" And tempbyte(3) = &h0a Then....End IfIf Instr(okstring ,":@END*",vbBinaryCompare) Then....End IfEnd IfTmrComm.Enabled = True ''打开定时器End SubB、直接轮循法此法用于接收少量控制命令字;'' 保存输入子串的缓冲区Dim Instring As String'' 使用COM1。

mPort = 1'' 9600 波特,无奇偶校验,8 位数据,一个停止位。

MSComm1.Settings = "9600,N,8,1"'' 当输入占用时,'' 告诉控件读入整个缓冲区。

MSComm1.InputLen = 0'' 打开端口。

MSComm1.PortOpen = True'' 将attention 命令送到调制解调器。

MSComm1.Output = "A TV1Q0" & Chr$(13) '' 确保'' 调制解调器以"OK"响应。

'' 等待数据返回到串行端口。

DoDoEventsBuffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$, "OK" & vbCRLF) '' 从串行端口读"OK" 响应。

'' 关闭串行端口。

MSComm1.PortOpen = False。

相关文档
最新文档