精华内容
下载资源
问答
  • VB上位机编程200例.zip

    2019-05-15 15:00:12
    VB上位机编程200例,喜欢的学习的不要错过
  • VB上位机编程200例

    2018-02-24 11:49:13
    VB可以作为一个上位机,与各类控制器通讯。VB的优势就是免费,绿色,开源
  • VB上位机编程200例.rar

    2020-07-30 20:39:32
    VB语言的所有实战项目列程,有很大学习参考价值,分享给大家一起免费学习
  • VB上位机编程200例.

    热门讨论 2011-12-30 16:42:38
    VB上位机编程200例..
  • VB精彩编程200例,随书源码合集下载,一本不错的VB专业入门书籍,里面的诸多例子都相当实用,且基础级,容易理解,对入门者学习VB挺友好,源码的内容包括VB窗体、界面与控件相关实例、多媒体与图形源码实例、数据库...
  • vb.net上位机实战例程

    千次阅读 2017-03-13 14:18:52
    编写一个简单的vb.net上位机小弟只是嵌入式菜鸟一枚,第一次写blog,真不知道怎么下手,写得不好,求不黑,之前一直都在做底层单片机的程序,关于上位机编程其实刚涉足,我看了下网上这方面的免费案例材料好像并不多...

    编写一个简单的vb.net上位机

    • 编程语言:vb.net
    • 开发环境:visual studio
    • 技术类别:可视化Windows窗体应用
    • 主要内容:串口通信

    小弟嵌入式菜鸟一枚,从事嵌入式一年了,第一次写blog,不知道怎么下手,写得不好,求不黑,之前一直都在做底层单片机的程序,关于上位机编程其实刚涉足,我看了下网上这方面的免费案例材料好像并不多,有的只是很老vb6.0以前的资料,所以决定给论坛做点贡献,把我了解到的有价值的一些知识点都记录下来,同时和大家分享,共同进步。

    上位机是嵌入式人机交互的重要一个环节,编程者可以使用各种不同的方式达到对底层设备的信号控制和数据采集,vb.net提供的一些简单的控件可以帮助我们快速上手一个上位机项目,实现基本功能。下面首先了解一下基本的控件。相应的控件使用方法可以参照visual studiu MSDN官方给出的说明。比如我们做一个简单的测试小工具如该图所示。

    简单的VB.NET上位机测试小工具


    前期准备

    VB.NET是一门开发语言,我们需要在visual studio编译环境中运行和开发项目,下图所示为visual studio软件截图及下载链接。(具体安装在这里就不详细描述了,自行按照引导“下一步下一步”就行了)。
    这里写图片描述
    visual studio下载地址

    安装完整后,打开软件,文件-新建-项目
    新建项目

    弹出的对话框中,找到,已安装-模板-visual basic-windows窗体应用,给自己的项目取个名字。点击确定完成项目创建。
    这里写图片描述

    创建一个空白窗体后的界面如图所示,在工具栏中找到你要的控件,点击放置到窗体相应的位置,常用的控件都有。其中和串口通信有关的关键控件是serialport。
    空白窗体

    我们添加完控件,给每个空间设置好相应的属性,效果如图所示。
    添加控件

    双击窗体及每个控件,对其进行相应的事件程序编写。(需要有一定的vb.NET编程基础)
    代码

    编写程序

    创建一个窗体文件和一个模块文件,窗体文件用来放置控件和编写窗体运行的相关事件过程代码,模块文件用来存放公共变量

    附上工程代码

    'Create By Fgl
    '添加串口相关引用和文件读写相关引用
    Imports System.IO.Ports
    Imports Microsoft.VisualBasic.FileIO
    ''' <窗体类代码>
    ''' 包含整个窗体的运行过程和事件
    ''' </窗体类代码>
    Public Class Form_Main
        ''' <窗体变量的定义>
        ''' 
        ''' </窗体变量的定义>
        Dim Ports As String() '定义端口数组
        Dim PortNum As Integer '定义端口数量
        Dim HsArray() As HScrollBar = New HScrollBar() {HScrollBar_P0, HScrollBar_V0, HScrollBar_P1, HScrollBar_V1,
           HScrollBar_P2, HScrollBar_V2, HScrollBar_P3, HScrollBar_V3, HScrollBar_P4, HScrollBar_V4}
        Dim SentToDeviceFlag As Boolean = False
        Const HsDataNum = 10 '定义横向框的数量
    
        ''' <无阻塞延时函数>
        ''' 单位1ms
        ''' </无阻塞延时函数>
        ''' <param name="Interval"></param>
        Public Shared Sub Sleep(ByVal Interval)
            Dim __time As DateTime = DateTime.Now
            Dim __Span As Int64 = Interval * 10000   '因为时间是以100纳秒为单位。   
            While (DateTime.Now.Ticks - __time.Ticks < __Span)
                Application.DoEvents()
            End While
        End Sub
    
        ''' <消息框输出>
        ''' 自动加上时间和回车换行
        ''' </消息框输出>
        ''' <param name="Msg"></param>
        Private Sub GiveMsg(Msg As String)
            Dim s As String = String.Format("{0} {1} {2}", Now, Msg, vbCrLf)
            TextBox_Msg.AppendText(s)
        End Sub
    
        ''' <错误信息输出>
        ''' 自动加上错误信息及时间和回车换行
        ''' </错误信息输出>
        ''' <param name="Msg"></param>
        Private Sub GiveErrMsg(Msg As String)
            TextBox_Msg.AppendText("Err: ")
            GiveMsg(Msg)
        End Sub
    
        ''' <刷新设置参数>
        ''' 
        ''' </刷新设置参数>
        ''' <param name="SData"></param>
        Private Sub ReFreshSettingData(ByVal SData() As Byte)
            For j = 0 To HsDataNum - 1
                CType(Panel1.Controls.Item(j), HScrollBar).Value = SData(j)
            Next
        End Sub
    
    
        ''' <发送当前参数到设备>
        ''' 
        ''' </发送当前参数到设备>
        Private Sub SentCurrentDataToDevice()
            Try
                SerialPort1.Write(ActionCmd_Current, 0, ActionCmd_Current.Length)
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
    
        End Sub
    
        ''' <设置进度条最大值>
        ''' 
        ''' </设置进度条最大值>
        ''' <param name="parent"></param>
        Public Sub SetProgressBarMaximum(ByVal parent As Control)
            For Each c As Control In parent.Controls
                If TypeOf (c) Is ProgressBar Then
                    CType(c, ProgressBar).Maximum = 255
                End If
                'MessageBox.Show(c.ToString())
                If c.HasChildren Then
                    '利用递归实现容器子控件的访问
                    SetProgressBarMaximum(c)
                End If
            Next
        End Sub
    
        ''' <设置横向框值域>
        '''
        ''' </设置横向框值域>
        ''' <param name="parent"></param>
        Public Sub SetHScrollBarMaximum(ByVal parent As Control)
            For Each c As Control In parent.Controls
                If TypeOf (c) Is HScrollBar Then
                    CType(c, HScrollBar).Maximum = 255
                End If
    
                'MessageBox.Show(c.ToString())
                If c.HasChildren Then
                    '利用递归实现容器子控件的访问
                    SetHScrollBarMaximum(c)
                End If
            Next
        End Sub
    
        ''' <窗体事件>
        ''' 
        ''' </窗体事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Form_Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            GiveMsg("Start App")
            Dim FirstOpenFlag As Integer
            FileOpen(1, Application.StartupPath & "\FileCmdData.txt", OpenMode.Random)
            Try
                FileGet(1, FirstOpenFlag, 1)
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
    
            If Not FirstOpenFlag = 123456 Then '如果是第一次打开
                FilePut(1, 123456, 1)
                For i = 0 To ActionCmd_Table.GetLength(0) - 1
                    FilePut(1, ActionCmd_Table(i), i + 2)
                Next
            End If
            For i = 0 To ActionCmd_Table.GetLength(0) - 1
                FileGet(1, ActionCmd_Table(i), i + 2)
            Next
            FileClose({1})
    
            SetProgressBarMaximum(GroupBox_Return) '初始化进度条参数
            SetHScrollBarMaximum(GroupBox_Setting) '初始化横向框
    
            Ports = SerialPort.GetPortNames '获取当前存在的端口名
            PortNum = Ports.GetLength(0) '获取当前存在的端口数量
            For Each Portx As String In Ports
                ComboBox_PortNum.Items.Add(Portx) '向复选框里添加可用端口
            Next
            If PortNum > 0 Then
                ComboBox_PortNum.Text = ComboBox_PortNum.Items(1)
            End If
            For Each str As String In Modual_ActionTable.ActionTable
                ComboBox_BasicAction.Items.Add(str) '初始化训练动作组合框内容
            Next
            ComboBox_BasicAction.Text = ComboBox_BasicAction.Items(0)
            For i = 0 To 100
                ComboBox_BasicTrainTimes.Items.Add(i) '初始化训练次数组合框内容
            Next
            ComboBox_BasicTrainTimes.Text = 1
            CheckBox_SA.Checked = True
            'TextBox_Msg.AppendText(ComboBox_BasicAction.SelectedIndex)
    
    
            GiveMsg("Init Ok")
        End Sub
    
        ''' <复位按键的点击事件>
        ''' 
        ''' </复位按键的点击事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_Reset_Click(sender As Object, e As EventArgs) Handles Button_Reset.Click
            Try
                For i = 0 To 11
                    ActionCmd_Current(i) = ActionCmd_Table(0)(i) '刷新当前电机参数
                Next
                ReFreshSettingData(ActionCmd_Current) '刷新横向框参数
                SentToDeviceFlag = True '发送数据到电机
                GiveMsg("复位")
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
        End Sub
    
        ''' <打开串口过程>
        ''' 
        ''' </打开串口过程>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_OpenUart_Click(sender As Object, e As EventArgs) Handles Button_OpenUart.Click
            Try
                If SerialPort1.IsOpen = True Then
                    SerialPort1.Close()
                    Button_OpenUart.Text = "打开串口"
                Else
                    SerialPort1.Open()
                    Button_OpenUart.Text = "关闭串口"
                End If
                ComboBox_PortNum.Enabled = Not SerialPort1.IsOpen
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
        End Sub
    
        ''' <训练按钮单击事件>
        ''' 
        ''' </训练按钮单击事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_Train_Click(sender As Object, e As EventArgs) Handles Button_Train.Click
            'Try
            Dim i As Integer = ComboBox_BasicAction.SelectedIndex
            If i < ActionCmd_Table.GetLength(0) Then
                For j = 0 To ActionCmd_Current.Length - 1
                    ActionCmd_Current(j) = ActionCmd_Table(i)(j) '刷新当前电机参数
                Next
                ReFreshSettingData(ActionCmd_Current) '刷新横向框参数
                SentToDeviceFlag = True '发送当前参数到电机
                Dim s As String = String.Format("进行{0}训练", ComboBox_BasicAction.Text)
                GiveMsg(s)
            End If
            'Catch ex As Exception
            '    GiveErrMsg(ex.Message)
            'End Try
        End Sub
    
        ''' <组合框选择事件>
        ''' 
        ''' </组合框选择事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub ComboBox_PortNum_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_PortNum.SelectedIndexChanged
            Try
                SerialPort1.PortName = ComboBox_PortNum.Text
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
    
        End Sub
    
        ''' <清空按钮单机事件>
        ''' 
        ''' </清空按钮单机事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_Clear_Click(sender As Object, e As EventArgs) Handles Button_Clear.Click
            TextBox_Msg.Clear()
        End Sub
    
        ''' <横向框滚动事件>
        ''' 
        ''' </横向框滚动事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub HScrollBar_PX_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar_P0.Scroll,
            HScrollBar_P1.Scroll, HScrollBar_P2.Scroll, HScrollBar_P3.Scroll, HScrollBar_P4.Scroll, HScrollBar_PA.Scroll
            Try
                For i = 0 To HsDataNum - 1
                    ActionCmd_Current(i) = CType(Panel1.Controls.Item(i), HScrollBar).Value
                Next
                SentToDeviceFlag = True
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
        End Sub
        ''' <定时器扫描过程>
        ''' 在定时器中扫描发送标志位并对待发送的内容进行发送
        ''' </定时器扫描过程>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            If SentToDeviceFlag = True Then
                SentToDeviceFlag = False
                SentCurrentDataToDevice()
            End If
        End Sub
    
        ''' <总体滚动条滚动事件>
        ''' 
        ''' </总体滚动条滚动事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub HScrollBar_PA_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar_PA.Scroll
            Try
                For i = 0 To 4
                    If CType(Panel2.Controls.Item(i), CheckBox).Checked = True Then
                        CType(Panel1.Controls.Item(i * 2 + 1), HScrollBar).Value = HScrollBar_PA.Value
                    End If
                Next
            Catch ex As Exception
                GiveErrMsg(ex.Message)
            End Try
        End Sub
    
        ''' <全选复选框改变事件>
        ''' 
        ''' </全选复选框改变事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub CheckBox_SA_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_SA.CheckedChanged
            If CheckBox_SA.CheckState = CheckState.Checked Then
                For Each c As CheckBox In Panel2.Controls
                    c.Checked = True
                Next
    
            End If
            If CheckBox_SA.CheckState = CheckState.Unchecked Then
                For Each c As CheckBox In Panel2.Controls
                    c.Checked = False
                Next
            End If
    
        End Sub
        ''' <复选框改变事件>
        ''' 
        ''' </复选框改变事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub CheckBox_S0_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_S0.CheckedChanged _
            , CheckBox_S1.CheckedChanged, CheckBox_S2.CheckedChanged, CheckBox_S3.CheckedChanged, CheckBox_S4.CheckedChanged
            If CheckBox_S0.Checked = True And CheckBox_S1.Checked = True And CheckBox_S2.Checked = True And
                CheckBox_S3.Checked = True And CheckBox_S4.Checked = True Then
                CheckBox_SA.CheckState = CheckState.Checked
            ElseIf CheckBox_S0.Checked = False And CheckBox_S1.Checked = False And CheckBox_S2.Checked = False And
                CheckBox_S3.Checked = False And CheckBox_S4.Checked = False Then
                CheckBox_SA.Checked = CheckState.Unchecked
            Else
                CheckBox_SA.CheckState = CheckState.Indeterminate
            End If
        End Sub
    
        ''' <标定按钮单击事件>
        ''' 
        ''' </标定按钮单击事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_Sign_Click(sender As Object, e As EventArgs) Handles Button_Sign.Click
            For i = 0 To 11
                ActionCmd_Table(ComboBox_BasicAction.SelectedIndex)(i) = ActionCmd_Current(i)
            Next
            FileOpen(1, Application.StartupPath & "\FileCmdData.txt", OpenMode.Random)
            For i = 0 To ActionCmd_Table.GetLength(0) - 1
                FilePut(1, ActionCmd_Table(i), i + 2)
            Next
            FileClose({1})
            Dim s As String = String.Format("{0}手势位置标定成功", ComboBox_BasicAction.Text)
            GiveMsg(s)
        End Sub
    
        ''' <保存历史按钮单击事件>
        ''' 
        ''' </保存历史按钮单击事件>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub Button_SaveHistory_Click(sender As Object, e As EventArgs) Handles Button_SaveHistory.Click
    
            SaveFileDialog1.Filter = "txt files (*.txt)|*.txt"
            Dim s As String = String.Format("History")
            SaveFileDialog1.FileName = s
            If SaveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                '如果确定保存
                My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, TextBox_Msg.Text, True)
                My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, ActionCmd_Table.ToString, True)
            End If
        End Sub
    
    End Class
    
    
    Module Modual_ActionTable
        Public ActionTable() As String = {"张开", "握拳", "食指对指", "中指对指", "无名指对指", "小拇指对指",
            "数字1", "数字2", "数字3", "数字4", "数字5", "数字6", "数字7", "数字8", "数字9"}
    
        Public ActionCmd_Reset() As Byte = {&HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00}
        Public ActionCmd_Fist() As Byte = {&HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF, &HFF}
        Public ActionCmd_IndexToThumb() As Byte = {&HFF, &HFF, &HFF, &HFF, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00}
        Public ActionCmd_MiddleToThumb() As Byte = {&HFF, &HFF, &HFF, &H00, &HFF, &HFF, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00}
        Public ActionCmd_RingToThumb() As Byte = {&HFF, &HFF, &HFF, &H00, &HFF, &H00, &HFF, &HFF, &HFF, &H00, &HFF, &H00, &HFF, &H00}
        Public ActionCmd_LittleToThumb() As Byte = {&HFF, &HFF, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &HFF, &HFF, &H00, &HFF, &H00}
    
        Public ActionCmd_Current() As Byte = {&HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00, &HFF, &H00}
    
    
        Public ActionCmd_Table()() As Byte = {ActionCmd_Reset, ActionCmd_Fist, ActionCmd_IndexToThumb, ActionCmd_MiddleToThumb,
            ActionCmd_RingToThumb, ActionCmd_LittleToThumb}
    End Module

    OK,运行一下,完成。
    这里写图片描述

    哦,对了,如果要移植copy此模板,记得控件的名字要和代码中一致。

    看似复杂的上位机工程,其实代码也就短短几百行。关于指令解析部分,下一篇再写吧。

    第一次写blog可能难免会有犯些基本错误,若有什么问题好的建议随时和我交流。

    展开全文
  • VB精彩编程200例.rar

    2008-04-15 22:10:22
    VB精彩编程200例,有代码!
  • VB编写的上位机软件,可以控制C51单片机的数码管,学习单片机与上位机通信。
  • VB上位机程序编写.rar

    2019-09-14 05:47:54
    VB上位机程序编写rar,VB上位机程序编写:多功能电子桌牌需要和上位机通信,才能实现桌牌的下载更新和广播信息的接收显示等功能,上位机软件由高级编程语言Visual Basic(VB)编写。
  • VB上位机控制LCD显示概述: 液晶显示器(LCD)以低电压、微功耗、超薄轻巧、接口简单、显示内容丰富诸多优点,在袖珍式电子产品的显示系统中得到广泛应用。为此,本文介绍一种由微机与单片机之间通讯直接控制液晶显示...
  • VB上位机控制数码管LED电路源代码,单片机上位机数码管控制系统。可自动发送0-F字型码,图片的字符表示十六进制数转化为相应的整数。 下位机程序由C完成,首先 烧写程序到单片机 晶振 11.0592MHZ 连接好串口线,...
  • VB上位机源程序代码

    2016-12-29 22:52:25
    十分钟入门VB上位机编程,轻松学上位机。供大家学习参考。
  • 原创PLC软件,使用VB语言编写。通过串口将程序下载,监控,上载,调试等功能,编译PLC程序。
  • vb给张力控制器写上位机程序,通讯协议是MODBUS RTU,接口是RJ45,要关注哪些问题?
  • 很好用的CAN调试工具,可以基于此开发各种上位机软件,希望对大家有帮助,源码
  • QPLC 上位机编程

    2018-06-15 07:22:33
    介绍三菱Q 上位机编程实际程序,亲自试验过,可以直接使用。
  • 摘要:VB源码,系统相关,数码管控制,51单片机 VB上位机控制数码管LED电路源代码,单片机上位机数码管控制系统。可自动发送0-F字型码,图片的字符表示十六进制数转化为相应的整数。  下位机程序由C完成,首先 烧写...
  • VB上位机程序以及串口通信的相关资料!
  • [已排版,电脑浏览最佳]在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:USB转串...

    [已排版,电脑浏览最佳]

    在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:

    • USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互;
    • 串口转WIFI(ESP8266) —— 上位机和下位机基于TCP/IP协议通过WIFI传输数据;
    • 串口转蓝牙(HC-06)—— 不多用,暂不介绍;

    上位机软软件开发主要包括以下两种:

    1、Windows上位机(EXE可执行程序)

    在Windows上,最早用VB语言开发,后来由于C++的发展,采用MFC开发,近几年,微软发布了基于.NET框架的面向对象语言C#,更加稳定安全,再配合微软强大的VS进行开发,效率奇高;

    另外,如果想要在Linux上跨平台运行,可以选用Qt;如果想要更加丰富好看的数据显示界面,可以选用Labview开发;

    2、Android上位机(APP)

    在Android操作系统上,主要采用Java语言,使用WIFI或者蓝牙基于TCP/IP协议传输数据,利用Android Studio开发;

    在此,我们主要介绍如何通过VS + C#开发电脑上位机,其它上位机的开发暂且不论。

    注:VS下载与安装参考这篇较详细的博客

    https://blog.csdn.net/qq_36556893/article/details/79430133

    我们来自己动手写一个串口助手:

    1、构思功能

    串口助手在单片机开发中经常被用来调试,最基本的功能就是接收功能和发送功能,其次,串口在打开前需要进行一些设置:串口列表选择、波特率、数据位、校验位、停止位,这样就有了一个基本的雏形;然后我们在下一篇中在此功能上添加:ASCII/HEX显示,发送,发送新行功能,重复自动发送功能,显示接收数据时间这几项扩展功能;

    2、设计布局

    根据以上功能,将整个界面分为两块:设置界面(不可缩放)+ 接收区和发送区(可缩放),下面就来依次拖放控件实现:

    1)容器控件(Panel)

    Panel是容器控件,是一些小控件的容器池,用来给控件进行大致分组,要注意容器是一个虚拟的,只会在设计的时候出现,不会显示在设计完成的界面上,这里我们将整个界面分为6个容器池,如图:

    763e2e50-5a10-eb11-8da9-e4434bdf6706.png

    2)文本标签控件(Lable)

    用于显示一些文本,但是不可被编辑;改变其显示内容有两种方法:一是直接在属性面板修改“Text”的值,二是通过代码修改其属性,见如下代码;另外,可以修改Font属性修改其显示字体及大小,这里我们选择微软雅黑,12号字体;

    label1.Text = "串口"; //设置label的Text属性值

    3)下拉组合框控件(ComboBox)

    用来显示下拉列表;通常有两种模式,一种是DropDown模式,既可以选择下拉项,也可以选择直接编辑;另一种是DropDownList模式,只能从下拉列表中选择,两种模式通过设置DropDownStyle属性选择,这里我们选择第二种模式;

    那么,如何加入下拉选项呢?对于比较少的下拉项,可以通过在属性面板中Items属性中加入,比如停止位设置,如图,如果想要出现默认值,改变Text属性就可以,但要注意必须和下拉项一致:

    783e2e50-5a10-eb11-8da9-e4434bdf6706.png

    下拉组合框控件

    另外一种是直接在页面加载函数代码中加入,比如波特率的选择,代码如下:

    private void Form1_Load(object sender, EventArgs e) { int i; //单个添加for (i = 300; i <= 38400; i = i*2) { comboBox2.Items.Add(i.ToString()); //添加波特率列表 } //批量添加波特率列表 string[] baud = { "43000
    展开全文
  • 基于VB编程上位机与三菱PLC 进行通信,可以实现更好的监控PLC状态,此为很简单的入门,仅供参考。
  • VB上位机程序编写_百度文库 VB上位机程序编写 - VB Mscomm 控件基本介绍 VB Mscomm 控件 一、MSComm 控件的主要属性、事件 1、MSComm 的属性 ...VC++ 串口上位机编程实例.doc 14页 浏览:21120次 更多文库相关文档>>
  • 上位机软件编程

    热门讨论 2011-10-20 19:47:27
    上位机软件编程实例,帮助你快速编写上位机软件。
  • 描述上位机的工作原理通讯过程两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使用特有协议通讯,里面会举大量例子,...

    描述

    上位机的工作原理

    通讯过程

    两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使用特有协议通讯,里面会举大量例子,一般对编程人员而言一看也就那么回事,使用一些新的API(API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节罢了,多语言支持功能模块,一般同时支持数种高级语言为上位机编程。

    通讯协议

    通常上位机和下位机通讯可以采用不同的通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。当用计算机和PLC通讯的时候,不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯。采用封装好的程序开发工具就可以实现PLC和上位机的通讯,当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。

    上下位机

    通常工控机,工作站,触摸屏作为上位机,通信控制PLC,单片机等作为下位机,从而控制相关设备元件和驱动装置。

    上位机编程用什么软件

    既然是上位机编程,当然应该是与控制有关,还有下位机,所专以这个编程用到属的软件主要应该有:

    1、C语言,这是基本的上位机语言,特别在以前的DOS时代,用的十分普遍

    2、C++,这是目前用的很多的编程语言,VC,MFC等都属于这个范畴

    3、VB,这个语言现在应用也很广泛,由于可视化编程,入门较容易,很多人在使用

    Windows 编程:VB 、VC、 Delphi 等等

    组态软件:组态王、 WinCC、 iFix、 InTuch等等。

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • vb上位机

    2014-05-08 15:52:02
    在zigbee无线温度采集系统设计中用vb编程语言设计的上位机软件的设计图。
  • 这是一个vb编写的上位机数据采集软件,对于学习串口通信的朋友是个不错的学习案例。
  • vb上位机舵机控制程序
  • 导读:现在的开发人员都趋向于使用新的编程语言,那么旧的编程语言呢?它们的前途一般是这样两种:仍然可以使用,但逐渐不受大家欢迎;直接完全死去。和之前的十佳最受欢迎的编程语言相反,我们预测以下这几种编程...

    aa976fcb1ef458c8cec96fe076d7d600.gif

    导读:现在的开发人员都趋向于使用新的编程语言,那么旧的编程语言呢?它们的前途一般是这样两种:仍然可以使用,但逐渐不受大家欢迎;直接完全死去。和之前的十佳最受欢迎的编程语言相反,我们预测以下这几种编程语言面临着死亡威胁。

    来源:CSDN 程序人生

    原文:

    https://blog.csdn.net/csdnsevenn/article/details/78139481

    2f42123fd78fab38301760e3757da5df.png

    01 Perl

    曾几何时,几乎每个人都在使用Perl语言编程。但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲。至少我知道有这么个叫做“piecemeal”的编程语言,它的创造者似乎就只是将这个功能堆在另一个功能上面而已,并没有好好考虑将它们结合在一起。

    事实上,甚至是它的创造者也不得不承认这种编程语言是有问题的。经过完整地改造之后,现在的开发工作开始倾向于使用Perl6,这个大概是在2000年的时候。至于Perl?俨然已经销声匿迹了!所以完全没有必要去学习它了。顺便说一句,下面这个“Goodbye World”就是用Perl写的:

    #!/usr/bin/perl

    上面这个例子会出来一个网页。现在的Perl,由于可以作为CGI脚本语言,所以使用的最广泛的是在生成web页面上。但是为了适应时代的变化,我们最好还是将Perl语言“弃之如敝履”。

    02 Ruby

    关于Ruby,可以这么唱“十年之后,我不认识你你不属于我……”因为就在10年前,Ruby语言可谓是风靡一时。它出生于1995年,5年左右达到它的鼎盛时期。如果你经常使用的话,绝对会义无反顾地爱上它。

    但是,像我们这些学着C语言风格长大的孩子在学习Ruby时往往会觉得有点囧。

    下面是用Ruby写的“Goodbye World”:

    'Bye bye, Miss American Ruby! Drove my Chevy to the Levie…'

    下面是一个用于计算阶乘的例子:

    def fact(n)

    我测试了这个例子,来计算1000的阶乘。下面是结果(由于篇幅限制,中间略过了2569个数字):

    1000

    从各方面来看,Ruby都很好,几乎是一片赞誉声……除了Twitter。在2011年4月,Twitter宣称他们已经将几乎大部分的代码都改写过了,以便不必使用Ruby和它的web框架——Ruby on Rails,据他们所说这个平台非常之低效。

    不过,我想说的是,也正是那一天起,Ruby开始走下坡路,使用的人数也是越来越少。

    f9d3f75804276a8761c3a541ba50ebce.png

    03 Visual Basic.NET

    十年前,我应聘到一个需要重写大量代码的公司,名字我已经忘记了,主要工作就是将VB6转换为Visual basic.NET。大概就只干了一两个月吧,我就跳槽了:真心太痛苦了。

    微软钟爱于BASIC编程语言的扩展可以一路追溯到1991年,那时他们刚刚采购了来自Alan Cooper的一个非常酷(对于那个时候而言)的可视化编程设计。

    Alan Cooper初期使用的是别的编程语言,但是比尔盖茨让他换成BASIC语言,因为盖茨认为那是当时最为简单的编程语言。于是乎,大名鼎鼎的Visual Basic,就从BASIC中衍生出来——对象这一概念以及新的编程技术问世了。

    后面又发生了一些很有意思的事情。Borland Delphi的创造引领者,Anders Hejlsberg也到微软工作,并且引领创建了一个新的编程语言——C#。

    这种编程语言非常类似于Java语言。刚开始的学习或许有点难,但是一旦上手,你绝对会对它爱不释手。C#很快就成为了微软的旗舰编程语言。现在的话,在软件行业中,有很多很多需要C#的工作岗位,不少都是高薪聘用的。

    虽然针对自己的CLR运行,微软创建了C#,但是它的工程师们另外还创建了一个盖茨深爱的BASIC语言版本,命名为Visual Basic.NET。

    该编程语言借用了BASIC语言的语法,但是它的编码方法却与C#相似。虽然Visual Basic.NET也在发展,但是优胜劣汰总是不可避免的——大家都选择了C#,于是Visual Basic.NET就成为了明日黄花。

    下面是摘自微软网页上的一段Visual Basic.NET程序:

    'Allow easy reference to the System namespace classes.

    (这里的“Hello World”也可以替换成“Goodbye World”,这个没关系。)

    3039ef918cc4937736d9959901fdc3e6.png

    04 Adobe Flash和AIR

    从技术上讲,这些都是平台,而非编程语言。我之所以将它们包含进来是因为如果你想要使用它们,就必须安装Adobe自己的ECMAScript版本,即ActionScript。

    ActionScript是JavaScript(当前最流行的编程语言之一,因为它能用于所有的浏览器)的一个近亲。ActionScript在ECMAScript(这是JavaScript实现标准的官方名称)中增加了一些细节;但是除了Adobe Flash,其他地方几乎没有ActionScript的用武之地。

    你使用Flash不?乔布斯非常讨厌它,并且也不允许iPhone使用它。然后随着iPhone(以及随后的iPad)的逐渐普及,Web开发人员不得不创建不必依赖于Flash的网站。那些以ActionScript为生的开发人员也不得不纷纷下岗。(我曾经看到过一个Flash开发人员指责另一个JavaScript开发人员毁了他的职业生涯。)

    Adobe也曾试图通过AIR以求得其编程平台的一线生机,于是配建了一个用于构建AIR app的工具,称为Flex。至于AIR,许多人都说,这是一场灾难。不过我们目前也不知道为什么Adobe会推出AIR,可能是想用AIR取代Flash?也可能是想要AIR和Flash相亲相爱共同发展?

    记得有一段时间,得益于Twitter平台——TweetDeck(要求用户在电脑上安装AIR运行时)的使用,AIR很是红火了一阵子。那时大概有数以百万计的pc AIR应用被开发出来,只是后来Twitter在2011年买了TweetDeck之后,又改写本地代码取代了AIR。于是乎,AIR的辉煌就到此为止。

    随着Flash和AIR的逐渐逝去,Adobe的ActionScript也开始向世界吻别。下面是一些用ActionScript写的代码示例。

    package {

    (你可能会发现这与JavaScript非常相似,都使用var、function和new,并且也使用小数点来访问成员变量。)

    aa623df4e0757a448d68b6e780cbd845.png

    05 Delphi's Object Pascal

    首先我得向我曾经的好伙伴Delphi表示歉意,因为我不得不公布Object Pascal的“死讯”。well,Delphi(用于发Object Pascal的工具)历经变迁之后,依然苟延残喘着(它起源于Borland公司,现在抱着Embarcadero公司的大腿)。

    早先Delphi和它的Object Pascal语言确实给我们提供了一个良好的工作环境:虽然有点啰嗦,但是编译器很快,而且相比Visual Basic(这里指的是pre-Visual Basic.NET,1995年左右),创建Windows程序更容易。

    但是它的优势并没有持续下去。也很难说是什么原因,因为这个平台真心是不错的。就在这时,Borland公司开始在其Delphi的产品线上支持C#和C++。

    发展到后来,Borland公司甚至直接将Delphi卖给了Embarcadero公司,然后Embarcadero公司继续使用Delphi开发产品。话说,它做得相当不错,但是重点再也不是Pascal了。当然,你依然可以用Pascal编程,但是几乎没人走这条路了。

    事实上,我们可以使用Delphi建立许多不同的平台,包括iOS、Android,以及即将到来的Linux操作系统。

    但是,如果你去Embarcadero公司的网站看看,你会发现他们主要是在促进Delphi's C++ 的支持。因此,换言之就是,Object Pascal已然逝去了。写到这里,我不禁悲从心来,因为我花了很多很多时间来学习Pascal语言,特别是Delphi's Object Pascal。但是没办法,现实就是如此残酷,不转行就只能饿死。

    下面请看Object Pascal的代码:

    program HelloWorld;

    译者注:以上观点仅代表作者个人观点。

    acfded3b6c4bb675a64fef624e666b97.gif 划重点👇 干货直达👇
    • 父亲节,来认识一下这几位“爸爸”

    • 手把手教你用直方图、饼图和条形图做数据分析(Python代码)

    • 2020上半年,50万大数据DT用户最爱的10本书

    • 哪些数据库是行存储?哪些是列存储?有什么区别?

    更多精彩👇 在公众号对话框输入以下关键词 查看更多优质内容! PPT | 读书 | 书单 |  硬核  |  干货   |   讲明白 大数据 | 云计算 |  数据库  | Python | 可视化  |   神操作 AI | 人工智能 |  机器学习  |  深度学习  |  神经网络 5G   |  中台  |  用户画像  1024  |  大神  |  数学 | 揭秘 据统计,99%的大咖都完成了这个神操作 👇

    d9518a147b9276ea57976f47f1d96da9.gif

    4f11e60505a31ae582e0d69ab2ea6f5a.png
    展开全文
  • 29-原创VB上位机控制数码管,很经典适合学习
  • vb.net写的modbus通信上位机小程序,可以实现读,写寄存器和线圈的功能。
  • VB实现plc与上位机通讯应用程序可编程控制器PLC与上位机PC之间通信,下位机为PLC,基于其可靠性极高,主要承担控制功能,而上位PC机主要承担监察管理功能,兼备部分控制功能,如发出运行,停止命令。VB语言是基于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 884
精华内容 353
关键字:

vb上位机编程200例