VB编写的GPIB控制设备和串口控制产品的测试系统程序

合集下载

程控仪器标准命令SCPI_通过串口或者gpib卡,vb_vc都能控制

程控仪器标准命令SCPI_通过串口或者gpib卡,vb_vc都能控制
哈工大测控所
5
第一节 SCPI的目标及主要内容

SCPI提供不同层次的仪器控制

简单的测量命令为用户提供方便快捷的SCPI仪器控制,而 更详细的命令则提供传统仪器的控制 SCPI允许不断用新命令扩充仪器程控命令,当新的仪器出 现时能够保持与已有的SCPI仪器的编程兼容性

SCPI的可扩性,是其成为“活”标准
哈工大测控所
9
第一节 SCPI的目标及主要内容

助记符的生成规则

长型助记符由一个单词或短语构成。如果是单词,则整个 单词构成助记符;如果是短语,则每个单词的第一个字符 和整个最后一个单词构成助记符

CONFIGURE --CONFigure remote message--RMESsage

10
第一节 SCPI的目标及主要内容

程控题头

公用命令与询问题头 仪器控制命令与询问题头 字符程控数据 十进制数值程控数据 布尔程控数据 单位和后缀

参数

哈工大测控所
11
第一节 SCPI的目标及主要内容

表达式

数值表达式 通道列表表达式 数值列表表达式 数据交换格式表达式 仪器指示表达式 事件状态寄存器结构 操作状态寄存器 可疑数据/信号状态寄存器
13
第一节 SCPI的目标及主要内容
3.数据交换格式


定义了仪器与应用程序之间、应用程序和应用程 序之间以及仪器与仪器之间数据集的标准的表示 形式 数据交换格式采样模块化结构
(1999版本)
4.仪器类别

主要是定义了通用的仪器类别功能实现所需的命 令和行为
(数字表、数字化仪、信号转接开关、电源、射频与微波源、 发射装置、发射测试单元、框架测力计)

vb.net编写的简易串口调试程序

vb.net编写的简易串口调试程序

编写的简易串口调试程序Imports SystemImports System.IO.PortsPublic Class Form1Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load'获取计算机有效串口Dim ports As String() = SerialPort.GetPortNames() '必须用命名空间,用SerialPort,获取计算机的有效串口Dim port As StringFor Each port In portsportnamebox.Items.Add(port) '向combobox中添加项Next port'初始化界面baudratebox.Text = baudratebox.Items(2) '注释和不注释的地方可以替换portnamebox.Text = portnamebox.Items(0)'baudratebox.SelectedIndex() = 2' portnamebox.SelectedIndex() = 0Serial_Port1() '初始化串口Label3.Text = SerialPort1.IsOpenstatuslabel.Text = "串口未连接"statuslabel.ForeColor = Color.Redsendbox.Text = "123"receivebytes.Text = "0"linecheck.Enabled = Truetimebox.Enabled = TrueEnd SubPrivate Sub Serial_Port1() '设置串口参数'SerialPort1.BaudRate = Val(baudratebox.Text) '波特率'SerialPort1.PortName = portnamebox.Text '串口名称SerialPort1.PortName = portnamebox.SelectedItemSerialPort1.BaudRate = Val(baudratebox.SelectedItem)SerialPort1.DataBits = 8'数据位SerialPort1.StopBits = IO.Ports.StopBits.One '停止位SerialPort1.Parity = IO.Ports.Parity.None '校验位End Sub'关闭串口连接Private Sub closebtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closebtn.Click TrySerialPort1.Close() '关闭串口Label3.Text = SerialPort1.IsOpenIf SerialPort1.IsOpen = False Thenstatuslabel.Text = "串口未连接"statuslabel.ForeColor = Color.Redreceivebox.Text = ""receivebytes.Text = ""End IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'打开串口连接Private Sub openbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openbtn.Click TrySerialPort1.Open() '打开串口Label3.Text = SerialPort1.IsOpenIf SerialPort1.IsOpen = True Thenstatuslabel.Text = "串口已连接"statuslabel.ForeColor = Color.GreenEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'手动发送数据Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Clicksend()End Sub'触发接收事件,接收数据Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceivedMe.Invoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数End Sub'接收数据过程Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs)' Dim strIncoming As ByteDim strIncoming As IntegerDim str1() As StringDim str2() As StringDim bytes() As ByteDim i As IntegerTryThreading.Thread.Sleep(100) '添加的延时receivebytes.Text = Str(Val(receivebytes.Text) + SerialPort1.BytesToRead)If SerialPort1.BytesToRead > 0ThenReDim bytes(SerialPort1.BytesT oRead)'strIncoming = Convert.T oByte(SerialPort1.ReadByte())If receivecheck.Checked = True ThenstrIncoming = SerialPort1.ReadByte()bytes(0) = strIncomingFor i = 1To SerialPort1.BytesToReadstrIncoming = SerialPort1.ReadByte() '读取缓冲区中的数据bytes(i) = strIncomingNext' SerialPort1.Write(sendbox.Text)'发送数据SerialPort1.DiscardInBuffer()str1 = Split(BitConverter.ToString(bytes), "-")ReDim str2(str1.Length - 1) '去除str1中最后的字符For i = 0To str1.Length - 2str2(i) = str1(i)Nextreceivebox.Text = receivebox.Text & Join(str2, " ")'BitConverter.T oString(bytes)Elsereceivebox.Text = receivebox.Text & SerialPort1.ReadExisting()End IfEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'更改串口设置Private Sub portnamebox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles portnamebox.SelectedIndexChangedTrySerial_Port1()Catch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'清空接收区Private Sub clearbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearbtn.Clickreceivebox.Text = ""End Sub'定时发送数据Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.TickTimer1.Interval = timebox.Textsend()End Sub'选择定时发送的触发事件Private Sub timecheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timecheck.CheckedChangedIf timecheck.Checked = True ThenIf timebox.Text = ""ThenMsgBox("时间间隔不能为0")timecheck.Checked = FalseElsesend()timebox.Enabled = FalseEnd IfElsetimebox.Enabled = TrueEnd IfEnd SubPublic Sub send() '发送数据过程Dim databyte() As ByteDim str1() As StringDim str2 As StringDim str3 As StringDim i As IntegerTryIf sendcheck.Checked = False Then'不按照16进制发送'timecheck.Enabled = TrueIf linecheck.Checked = False Then'判断是否选中分行发送SerialPort1.Write(sendbox.Text)ElseSerialPort1.WriteLine(sendbox.Text)End IfElse'按照16进制发送If InStr(sendbox.Text, " ") Then'判断是否有空格str1 = Split(sendbox.Text)str2 = Join(str1, "")Elsestr2 = sendbox.TextEnd IfIf str2.Length Mod2 = 0Then'判断字符串字节数是否为偶数ReDim databyte(str2.Length / 2) '重新定义数组For i = 0To str2.Length / 2 - 1databyte(i) = Convert.ToByte(Mid(str2, 2 * i + 1, 2), 16) '两个字符转换为一个16进制字节'databyte(i) = Val(Mid(str2, 2 * i + 1, 2))NextSerialPort1.Write(databyte, 0, databyte.Length - 1)sendbytes.Text = Str(Val(sendbytes.Text) + databyte.Length - 1)Elsestr3 = Mid(str2, 1, (str2.Length - 1)) & "0"& Mid(str2, str2.Length)ReDim databyte(str3.Length / 2)For i = 0To str3.Length / 2 - 1databyte(i) = Convert.ToByte(Mid(str3, 2 * i + 1, 2), 16)NextSerialPort1.Write(databyte, 0, databyte.Length - 1)sendbytes.Text = Str(Val(sendbytes.Text) + databyte.Length - 1)End If'databyte = System.Text.Encoding.Default.GetBytes(sendbox.Text)把每个字符转换成字节End IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'是否按照16进制发送,如果是换行将不可选。

串口通讯调试器用VB调试串口通讯-vb教程

串口通讯调试器用VB调试串口通讯-vb教程

串口通讯调试器:用VB调试串口通讯-vb教程疯狂代码 / ĵ:http://VisualBasic/Article15514.htmllass=MsoNormal style=\"MARGIN: 0cm 0cm 0pt\">现有电子秤台使用串口和计算机进行通讯编写VB来访问串口达到读取电子秤上显示数据该电子秤为BE01型仪表输出为RS-232C标准接口波特率为300-9600、偶校验、7个数据位、2个停止位所有均发送11位ASCII码个起始位在VB中和串口通讯需要引入Control控件MSComm串口通讯Control控件(在Microsoft Comm Control 6.0中)具体如下:Control控件简称:MSCDim Out(12) As Byte ´接收var中值Dim var As Variant ´接收MSC.input中数值Dim nRece As Integer ´计算MSC.inputbuffer个数Dim i As Integer, j As Integer ´随即变量计算循环****************************************************************************Private Sub Form_LoadClearTextWith MSC.CommPort = 1 ´设置Com1为通信端口.Settings = \"9600,E,7,2\" ´设置通信端口参数 9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进步介绍说明是:.Setting=”BBBB,P,D,S”含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit).InBufferSize = 40 ´设置缓冲区接收数据为40字节.InputLen = 1 ´设置Input次从接收缓冲读取字节数为1.RThreshold = 1 ´设置接收个字节就产生OnComm事件End WithEnd Sub**************************************************************************** Private Sub ClearTextText3.Text = \"\"Text2.Text = \"5\"Text1.Text = \"\"End SubPrivate Sub Command1_ClickClearText´ nRece = 0 ´计数器清零With MSC.InputMode = comInputModeBinary ´设置数据接收模式为 2进制形式.InBufferCount = 0 ´清除接收缓冲区If Not .PortOpen Then.PortOpen = True ´打开通信端口End IfEnd WithEnd SubPrivate Sub MSC_OnCommDelayTime ‘用来延续时间ClearTextWith MSCSelect Case .CommEvent ´判断通信事件Case comEvReceive: ´收到Rthreshold个字节产生接收事件SwichVar 1If Out(1) = 2 Then ´判断是否为数据开始标志.RThreshold = 0 ´关闭OnComm事件接收End IfDoDoEventsLoop Until .InBufferCount >= 3 ´循环等待接收缓冲区>=3个字节 ´ nRece = nRece + 1For i = 2 To 12SwichVar iText1.Text = Text1.Text & Chr(Out(i))NextText1.Text = LTrim(Text1.Text)Text2.Text = Text2.Text & CStr(nRece).RThreshold = 1 ´打开MSComm事件接收Case Else´ .PortOpen = FalseEnd SelectEnd WithEnd Sub**************************************************************************** Private Sub DelayTimeDim bDT As BooleanDim sPrevious As Single, sLast As SinglebDT = TruesPrevious = Timer (Timer可以计算从子夜到现在所经过秒数在Microsoft Windows中Timer可以返回秒小数部分)Do While bDTIf Timer - sPrevious >= 0.3 Then bDT = FalseLoopbDT = TrueEnd Sub(通信传输速率为9600bps则最快速度1.04ms发送个字节仪表每秒发送50帧数据每帧数据有4个字节即每秒发送200个字节平均5.0ms 发送个字节连续读取串口数据时要在中添加循环等待)Private Sub SwichVar(ByVal nNum As Integer)DelayTimevar = Nullvar = MSC.InputOut(nNum) = var(0)End Sub(设置接收数据模式采用 2进制形式即 InputMode=comInputModeBinary但用Input属性读取数据时不能直接赋值给 Byte 类型变量只能通过先赋值给个 Variant 类型变量返回个 2进制数据再转换保存到Byte类型数变量中)Private Sub Text1_ChangeText3.Text = CText(Text1.Text) - CText(Text2.Text)End Sub****************************************************************************Private Function CText(ByVal str As String) As CurrencyIf str <> \"\" ThenCText = CCur(Val(str))ElseCText = 0End IfEnd Function(仪表每秒发送50帧数据微机收到帧完整数据至少需要20 ms时间然后再进行数据处理如果微机在下帧数据接收前即20ms内能将数据计算处理完毕则接收缓冲区内只会保存有帧数据不会存有两帧以上数据接收缓冲区大小不会影响实时监测效果(接收缓冲区>4字节)这时完全可以实现实时监测或实时控制;如果微机在20ms内不能将数据计算处理完毕接收缓冲区设置得又很大在数据计算处理完毕前接收缓冲区内就会保存有两帧以上数据而且次工作时间越长缓冲区内滞留数据帧就越多数据采集和数据处理的间产生逐渐增大额外时间差当接收缓冲区充满后时间差不再增大固定在某值部分数据因不能及时采集到接收缓冲区中数据产生丢失现象真实工作情况就会和微机处理结果产生较大时间差对实时监测和实时控制很不利这种情况下接收缓冲区大小就会影响实时监测效果所以接收缓冲区设置不能过大以保证数据处理实时性)小结:本文所用仪表为梅特勒公司出产BE01型电子秤其输出每个编码均为标准ASCII码其他仪表存在发射编码中含有BCD压缩码而且分为高低位需要接收后对其进行解码换算的后还要将高位和低位数字进行相加即可以将其BCD码换算成实数另还存在误差可能:判断最大值仪表在刚开始工作时有干扰会传导些乱码位移传感器有参数偏差最大值般都略大于50毫米所以取51为极限最大值取-51为极限最小值暂时先写这些当然其他情况可以依此类推!2009-2-12 3:53:31疯狂代码 /。

自制VB上位机串口监控简单程序

自制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开发GPIB接口仪器网络测试研究

VB开发GPIB接口仪器网络测试研究
使用 、 软件 设 计 方法 等 有 重要 参 考 价值 的部 分 内容 。

Sae rtcl 定 使 用 的 协 议 是T P 是U 的 判 断 : tt。P ooo设 C还 DP 取值 sk C Poo o表示 T P,取 值 sk P rtcl 4 c T P rtcl C c UD P ooo ̄ 表 示 UD 。 因 为 WiS c 控 件 的 默 认 设 置 是 P n ok sk C Poo o .所 以 应 用 程 序 中 可 以 使 用 默 认 的 c T P rtc1
Poo o属 性 。 Sae 性 反 映 的 是 当 前 T PI 连 接 状 rtc l tt属 C/ P的

W iS c 控 件 的 属 性 n ok
WiS c 控 件 是 一 个 运 行 不 可 见 的 控 件 , 它 对 nok
态 . 的取 值 及其 含义 如 表2 示 。 它 所
值 0 l 2 3 4 5

描 述 缺 省 值 , 闭 关 打 开 侦 听 连 接挂 起 识 别 主 机 已识 别 主机
正 在连 接
D t v1 aa A a Err r o
Sn C m le ed o pe t Sn Pors ed rges
事 件
Coe ls
R mo P r e t o e t
S ceH n l okt ade St te a Pooo r cl t
远程机器通信应用程序的端 口
WiSc P 的句 柄 参 数 nokA I 连 接 的 当 前 的 状 态 设置使用协议( C/ D ) T P U P
描 述
远 程 机 器 关 闭 时 触 发
C n et on c C n eteu s oncR qet

vb编写的串口调试程序

vb编写的串口调试程序

vb编写的串口调试程序(源代码)作者:Javen_yue,2005-5-17 13:23:00 发表于:《自动化软件论坛》共有8人回复,2108次点击加为好友播客博客发送留言小弟刚入行不久,写了个小程序,希望各位大侠能帮我指点一二,谢谢!Public countRX As IntegerPublic countTX As IntegerPublic num As BytePublic setport As StringPrivate Sub Combo1_Click()openportEnd SubPrivate Sub combo2_click()openportEnd SubPrivate Sub combo3_click()openportEnd SubPrivate Sub combo4_click()openportEnd SubPrivate Sub combo5_click()openportEnd SubPrivate Sub Command3_Click()Text1.Text = ""End SubPrivate Sub Command4_Click() '手动发送Dim send() As ByteDim i As IntegerDim length As IntegerDim a() As ByteDim b As Bytelength = Len(Text2.Text)If length > 0 ThenReDim a(length - 1)ReDim send(length - 1)End Ifsend = Text2.TextcountTX = countTX + lengthIf Check2.Value = 0 ThenMSComm1.Output = send'countTX = countTX + MSComm1.OutBufferCountElsei = 0b = 0Do While i <= (length - 1) * 2If ((send(i) >= 48 And send(i) <= 57) Or (send(i) >= 65 And send(i) <= 70) Or (send(i) >= 97 And s end(i) <= 102)) ThenIf (send(i) >= 97 And send(i) <= 102) Thena(b) = send(i) - 32Elsea(b) = send(i)End IfElseIf b > 0 ThenReDim Preserve a(b - 1)End IfExit DoEnd Ifi = i + 2b = b + 1DoEventsLoopMSComm1.Output = aEnd IfLabel5.Caption = "TX:" & countTX End SubPrivate Sub command5_Click()Text2.Text = " "End SubPrivate Sub Command6_Click() Label4.Caption = "RX:0 "Label5.Caption = "TX:0 "End SubPrivate Sub Form_Load()Combo1.ListIndex = 0 'initialCombo2.ListIndex = 0Combo3.ListIndex = 0Combo4.ListIndex = 0Combo5.ListIndex = 0End SubSub openport()'Dim num As Byte'Dim setport As StringOn Error GoTo msgnum = Combo1.ListIndex + 1If MSComm1.PortOpen = True Then 'MsgBox ("没有发现串口或被占用") MSComm1.PortOpen = FalseEnd IfmPort = numsetport = Combo2.Text + ","If Combo3.ListIndex = 0 Thensetport = setport + "N,"End IfIf Combo3.ListIndex = 1 Thensetport = setport + "O,"End IfIf Combo3.ListIndex = 2 Thensetport = setport + "E,"End IfIf Combo4.ListIndex = 0 Thensetport = setport + "8,"End IfIf Combo4.ListIndex = 1 Thensetport = setport + "7,"End IfIf Combo5.ListIndex = 0 Thensetport = setport + "1"End IfIf Combo5.ListIndex = 1 Thensetport = setport + "2"End IfMSComm1.Settings = setportMSComm1.PortOpen = True'If MSComm1.PortOpen = True Then'Label3.Caption = "stats:" & num & ",open" & "," & setport'Else' Label3.Caption = "stats:" & num & "close" & "," & setport 'End Ifmsg:End SubSub command1_click()On Error GoTo msgMSComm1.PortOpen = Truemsg: MsgBox ("port had opened")End SubSub command2_click()MSComm1.PortOpen = FalseEnd SubPrivate Sub Timer1_Timer()If MSComm1.PortOpen = True ThenShape1.FillColor = RGB(0, 255, 0)Command1.Visible = Falsecommand2.Visible = TrueLabel3.Caption = "stats:" & num & ",open" & "," & setport ElseShape1.FillColor = RGB(255, 0, 0)Command1.Visible = Truecommand2.Visible = FalseLabel3.Caption = "stats:" & "close" & "!"End IfEnd SubPrivate Sub Timer2_Timer() '接收信号Dim recBuf() As ByteDim recCnt As IntegerDim str As StringDim i As IntegerDim str1 As String'Dim countRX As Integer' Do Until MSComm1.InBufferCount <> 0' DoEvents' LooprecCnt = MSComm1.InBufferCountcountRX = recCnt + countRXIf recCnt > 0 ThenReDim recBuf(recCnt)recBuf = MSComm1.Inputstr = "" ' CStr(Now) & " rec:"If Check1.Value = 1 ThenFor i = 0 To recCnt - 1str = str & CStr(Hex(recBuf(i)))Next iElseFor i = 0 To recCnt - 1str = str & Chr(recBuf(i))Next iEnd IfText1.Text = Text1.Text + strLabel4.Caption = "RX:" & countRXEnd IfEnd SubPrivate Sub Timer3_Timer() '自动发送Dim length As Integerlength = Len(Text2.Text)Timer3.Interval = Text3.TextIf (Check3.Value = 1 And length <> 0) Then Dim send() As ByteDim i As IntegerDim a() As ByteDim b As ByteReDim a(length - 1)ReDim send(length - 1)countTX = countTX + lengthsend = Text2.TextIf Check2.Value = 0 ThenMSComm1.Output = sendElsei = 0b = 0Do While i <= (length - 1) * 2If ((send(i) >= 48 And send(i) <= 57) Or (send(i) >= 65 And send(i) <= 70) Or (send(i) >= 97 And s end(i) <= 102)) ThenIf (send(i) >= 97 And send(i) <= 102) Thena(b) = send(i) - 32Elsea(b) = send(i)End IfElseIf b > 0 ThenReDim Preserve a(b - 1)End IfExit DoEnd Ifi = i + 2b = b + 1DoEventsLoop。

用VB控制电脑串口(正确版)

用VB控制电脑串口(正确版)

如何用VB 实现电脑串口通信无协技术顾问: 陈文斯什么是串口,为何要学习串口串口是计算机上一种非常通用设备通信的协议。

大多数台式计算机包含两个基于RS232的串口(一般用9针公头接出其中一个接口,如图1所示)。

串口同时也是仪器仪表设备通用的通信协议;很多GPIB 兼容的设备也带有RS-232口。

鉴于串口应用如此广泛,大多数单片机也内置了串口。

通过串口,单片机可以很轻松地与其它设备交换信息。

用VB 编写串口通信的好处Windows 操作系统由于其友好的用户界面赢得了很多用户的青睐。

Visual Basic 即是微软公司基于Windows 操作系统的可视化编程平台。

有些同学会疑问:我又不是计算机专业的,学习VB 是不是十分痛苦。

我告诉你们,非也!要是你对它感兴趣,很快,你会爱上它的。

VB 十分容易入门。

设计用户界面就像我们平时制作PPT 的界面一样。

只需把你需要的控件拖到界面上并调整即可。

VB 的代码也很通俗易懂。

其实基本上都是调用系统函数的。

为抛砖引玉,现举个例子,简要介绍一下VB 编写。

(以下的所有例程都是基于VB6.0的,对于较高.net 版本,可能有所不同)任务1:软件界面上有一个文本框和按钮,当点击按钮时,文本框上显示“爱电子,爱生活。

华南理工大学电子爱好者协会”1、 运行VB ,在新建程序的界面上画出一个文本框(textbox )和按钮(commandbotton )。

如图2所示;2、 双击按钮,出现代码编辑窗口。

并在其中输入代码,如图3所示;3、 运行程序,点击按钮,即可看到如图4所示的效果:是不是很简单呢?!图2图3图1图4个人建议大一大二的师弟师妹应该学习如何用VB操作串口,特别是学会如何实现电脑跟单片机的通信。

这样子,我们日后设计的电子作品必定增色不少。

现在详细讲解一下如何用VB操作串口。

(读者可去图书馆借阅相关图书,掌握串口跟VB的基础知识)要用VB操作串口,需要用到Mscomm控件。

基于VB和GPIB接口的DC-DC变换器自动测试系统 - 罗丁

基于VB和GPIB接口的DC-DC变换器自动测试系统 - 罗丁

基于VB和GPIB接口的DC/DC变换器自动测试系统罗 丁,王智玮(中国电子科技集团公司 第二十四研究所,重庆 400060)摘 要: 从一个应用于批量生产和科研的测试研发实例出发,详细介绍了在Visual Basic环境下,利用GPIB接口和VISA COM库,将PC和各种测量仪器连接起来,构成一个实用的DC/DC变换器自动测试系统的方法。

该系统成功实现了对DC/DC变换器输出电压、效率、负载瞬变响应幅度等DC/DC变换器电特性的自动测试及可靠的数据管理。

关键词: GPIB接口;自动测试系统;DC/DC变换器中图分类号: T N707 文献标识码: A文章编号:1004-3365(2008)04-0578-03VB and GPIB Interface Based Automatic Test System for DC/DC ConvertersLUO Ding,WANG Zhiw ei(S ichuan Institute o f S olid S tate Circuits,China E lectronics Technology Gr ou p Corp.,Chongqing400060,P.R.China)A bstract: A practical automatic test sy stem for DC/DC conver ter based o n GP IB interface and V ISA CO M li-bra ry w as described in detail.T he develo pment of sy stem sof twar e under V isual Basic enviro nment was dealt w ith inpar ticular.Co nsisting of PC and o the r instruments,this sy stem co uld be used fo r automatic test o f DC/DCco nv erter's electrical parameter s,such as output vo ltag e,efficiency,load transient respo nse,as well as for reliabledata management.Key words: GP IB inte rface;A utomatic test system;DC/DC co nv erterEEACC: 7210A1 引 言随着电子技术的发展,DC/DC变换器静态、动态电特性种类越来越多,指标要求越来越高。

vb串口编程实例

vb串口编程实例

VB串口编程实例介绍VB(Visual Basic)是一种基于对象的编程语言,可用于开发Windows应用程序。

串口编程是指通过串行通信接口与外部设备进行数据交互。

本文将介绍如何使用VB进行串口编程,以实现与外部设备的通信。

前提条件在开始编写VB串口程序之前,需要确保以下条件已满足: - 安装了Visual Studio开发环境,可以选择最新版本的Visual Studio Community免费版。

- 确保计算机上有可用的串口(如COM1、COM2等)或USB转串口适配器。

步骤1. 创建新项目打开Visual Studio,选择创建一个新的VB Windows应用程序项目。

2. 添加控件在窗体上添加以下控件: - 一个ListBox控件用于显示接收到的数据。

- 两个Button控件分别用于打开和关闭串口。

- 一个ComboBox控件用于选择串口号。

- 一个TextBox控件用于输入要发送的数据。

- 一个Button控件用于发送数据。

3. 设置串口属性在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 打开串口TryserialPort.PortName = ComboBox1.SelectedItem.ToString()serialPort.BaudRate = 9600serialPort.Parity = Parity.NoneserialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueCatch ex As ExceptionMessageBox.Show("无法打开串口:" + ex.Message)End TryEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口TryserialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseCatch ex As ExceptionMessageBox.Show("无法关闭串口:" + ex.Message)End TryEnd SubEnd Class4. 接收数据和发送数据在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button 1.Click' 打开串口' 省略部分代码...AddHandler serialPort.DataReceived, AddressOf DataReceivedHandlerserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口' 省略部分代码...RemoveHandler serialPort.DataReceived, AddressOf DataReceivedHandler serialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseEnd SubPrivate Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedE ventArgs)' 接收数据并显示在ListBox中Dim data As String = serialPort.ReadLine()ListBox1.Invoke(Sub() ListBox1.Items.Add(data))End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button 3.Click' 发送数据If serialPort.IsOpen ThenDim dataToSend As String = TextBox1.TextserialPort.WriteLine(dataToSend)TextBox1.Clear()ElseMessageBox.Show("请先打开串口")End IfEnd SubEnd Class5. 运行程序点击运行按钮,程序将打开一个窗口,其中包含串口选择、打开/关闭串口、接收数据和发送数据的功能。

vb.net串口编程

vb.net串口编程

Imports System.IO.PortsImports System.TextPublic Class JCFrmDim RS232 As SerialPortPrivate Sub JCFrm_Load(ByV al sender As System.Object, ByV al e As System.EventArgs) Handles MyBase.LoadDim mBaudRate As IntegerDim mParity As IO.Ports.ParityDim mDataBit As IntegerDim mStopbit As IO.Ports.StopBitsDim mPortName As StringmPortName = "com1" '欲开启的通讯端口mBaudRate = 9600 '比特率mParity = Parity.None '校验位检查设定mDataBit = 8 '数据位设定值mStopbit = StopBits.One '停止位设定值'建立一个通讯端口对象RS232 = New IO.Ports.SerialPort(mPortName, mBaudRate, mParity, mDataBit, mStopbit)If Not RS232.IsOpen Then '尚未开启RS232.Open() '开启通讯端口ElseMsgBox("~~通讯端口已开启~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)EndEnd IfPrivate Sub readBtn1_Click(ByV al sender As System.Object, ByV al e As System.EventArgs) Handles readBtn1.ClickTryIf readBtn1.Text = "读取" ThenTimer1.Interval = 100Timer1.Enabled = TruereadBtn1.Text = "确定"readBtn2.Enabled = False '检测A W1的值,不能同时检测A W2的值。

如何用VB编写串口程序

如何用VB编写串口程序

如何用VB编写串口程序VB控件MSComm功能介绍VB中的MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi 等语言中均可使用。

Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。

在这些情况下,可以利用MSComm 控件的OnComm 事件捕获并处理这些通讯事件。

OnComm 事件还可以检查和处理通讯错误。

所有通讯事件和通讯错误的列表,参阅CommEvent 属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

这种方法的优点是程序响应及时,可靠性高。

每个MSComm 控件对应着一个串行端口。

如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。

如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

用VB实现基于GPIB总线的GSM直放站的自动测试系统

用VB实现基于GPIB总线的GSM直放站的自动测试系统
维普资讯

用 V 实现基 于 G 总线 的 G M直放站 的 B PB I S 自动测试系统
李舒楠
( 南京 邮 电大 学 南京 2 0 3 1 0) 0
摘 要 本文描述 了移动通信 设备 自动测试 系统 的系统 目 , 标 介绍了系统 的解决方案并对G I 接 口,V S PB  ̄ IA库 函数 1
件统一于 同一平台。VIA 函数是一套可方便调用的 S库 函数 , 其核心 函数能够控制各种类型器件 ,而无需考虑 器件的接 口类型和软件的兼 容性 。 与其他现存 的I O / 接 口软件相 比,V S IA具 有以下 3 个特点 。 ( )V S 1 IA的 I O控制功能适用于各种类型仪 器 , / 包括 VX 仪器 、G I I PB仪器、R 2 3 串行接 F仪器等 , S 22 1 既可用于 VXI 消息基 器件 , 也可用于 V 寄存 器基 器 XI
般说来将传统仪器的硬件和最新计算机软件技术
充分结合起来 ,以实现并扩展传统仪器的功能 。因此 , 将数据采集卡插入计算机空闲的扩展槽 中,利用软件在 屏幕上生成 虚拟面板 , 在软件 引导下进行信号采集 、 运 算 、分析和处理 ,实现仪器功能并完成检测的全过程 , 这就是所 谓的虚拟仪 器。 12 G I . P B通用接 口系统 该 系统采 用 G I ( e ea u p s n efc P B G n rl P r oe I tra e Bs u ,通 用总 线接 口)即 4 8口方式 ,并使用 A i n 8 gl t e
据交换 。 在工作过程 中, 台仪 器 ( 每 包括主控微机 ) 的 地位 ( 讲者 、听者和控者 )均可变更 。
() 2 它便于扩展 传统仪 器的功能 。 由于仪 器与计算

使用VB开发串口USB通信软件

使用VB开发串口USB通信软件

使用VB开发串口USB通信软件串口和USB通信软件是一种用于在计算机和外部设备之间进行数据传输的工具。

VB语言是一种适用于Windows平台的编程语言,可以使用VB 开发串口、USB通信软件。

串口通信是一种常见的数据传输方式,它通过计算机的串口(串行通信口)与外部设备进行连接。

在VB中,可以使用SerialPort类来实现串口通信。

下面是一个使用VB编写的串口通信软件的示例代码:```vbImports System.IO.PortsPrivate WithEvents SerialPort As New SerialPortPublic Sub New'设置串口参数SerialPort.PortName = "COM1"SerialPort.BaudRate = 9600SerialPort.Parity = Parity.NoneSerialPort.DataBits = 8SerialPort.StopBits = StopBits.OneEnd SubPublic Sub Open'打开串口SerialPort.OpenEnd SubPublic Sub Close'关闭串口SerialPort.CloseEnd SubPublic Sub WriteData(ByVal data As String)'向串口写入数据SerialPort.WriteLine(data)End SubPrivate Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) HandlesSerialPort.DataReceived'串口接收到数据时触发的事件Dim data As String = SerialPort.ReadLine'处理接收到的数据Console.WriteLine("Received data: " & data)End SubEnd Class```USB通信是另一种常用的数据传输方式,它通过计算机的USB接口与外部设备进行连接。

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明在VB中实现串口通讯可以分为以下几个步骤:1.引用串口通讯相关的命名空间首先在项目中引用System.IO.Ports命名空间,该命名空间包含了实现串口通讯所需的类和方法。

2.创建串口对象使用SerialPort类创建一个串口实例,可以指定串口的名称、波特率、数据位、停止位、校验位等参数。

```vbDim serialPort As New SerialPortserialPort.PortName = "COM1"serialPort.BaudRate = 9600serialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Parity = Parity.None```3.打开串口使用Open方法打开串口,可以在Open之前先判断串口是否已经打开。

```vbIf serialPort.IsOpen Then'串口已经打开ElseserialPort.OpenEnd If```4.串口数据接收通过事件处理函数来处理串口接收到的数据。

可以使用DataReceived事件来处理数据接收,当串口接收到数据时会触发该事件。

```vbPrivate Sub SerialPort_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles serialPort.DataReceived Dim data As String = serialPort.ReadExisting'处理接收到的数据End Sub```5.串口数据发送通过串口的Write方法来发送数据。

```vbserialPort.Write("Hello World")```需要注意的是,串口通讯是一种异步操作,发送和接收数据都需要一定的时间,因此在程序中需要合理处理串口的状态。

用VB实现基于GPIB的自动测试系统

用VB实现基于GPIB的自动测试系统

2007.5现代计量通讯用VB实现基于GPIB的自动测试系统季青(江苏省计量科学研究院)""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!"摘要:通过一个应用于数字移动通信综合测试仪输出小功率测试的完整实例,介绍了在VisualBasic编程环境中用SCPI实现对带有GPIB接口的智能仪器进行程控,组成一个自动测试系统的方法。

关键字:VBGPIB自动测试系统SCPI1引言飞速发展的无线通信技术对测试测量提出越来越高的要求,表现在测试任务多、精度要求高、测试速度快等方面,而传统的指标测量,采用多台仪器对被测设备的指标逐项进行测量,测试周期长,过程繁琐;其次测量结果通常采用人工记录,不能对数据进行有效的管理和回放,在一定程度上影响日后的数据处理。

这就使得传统的人工测量已不能满足实际测量的需求,迫切的要求采用自动测试系统。

通常把在最少人工参与的情况下能自动进行测量、数据处理并输出测量结果的系统称为自动测试系统。

一般,自动测试系统包括控制器、程控仪器与设备、总线与接口、测试软件、被测对象五个部分。

在数字移动通信综合测试仪的校准中,很多性能指标的测量都与测量接收机FSMR26有着密切的关系。

本文以测量接收机FSMR26测量小功率为例,介绍用VB实现计算机对带有GPIB接口的智能仪器程控的方法。

2系统组成及特点本测试系统用计算机通过GPIB接口卡和线缆与GPIB标准总线仪器搭建成仪器硬件平台。

由于每台GPIB标准总线仪器拥有唯一的GPIB地址,计算机则为整个系统的核心,采用GPIB接口卡、GPIB线缆与GPIB仪器相连,通过它对连接在总线上的仪器进行操作,并处理从通信仪器中获得的数据,而且按用户所希望的格式输出,其中GPIB接口卡实现了GPIB总线与USB总线间的连接。

系统的硬件基本组成框图如图1所示。

本系统有如下显著功能:2.1系统内部仪器的远程启动和关闭,远程设置GPIB仪器状态参数。

应用VB开发GPIB接口的电源控制器测试系统

应用VB开发GPIB接口的电源控制器测试系统

应用VB开发GPIB接口的电源控制器测试系统
孙芳方;叶卫东;钱锐
【期刊名称】《现代制造工程》
【年(卷),期】2011(000)004
【摘要】电源控制器(PCU)是卫星电源分系统的重要组成部分,在装入卫星前需要对其性能进行测试.介绍在Windows操作系统下,用VB软件开发基于GPIB接口的对PCU进行测试的系统,该系统能够完成对地面模拟设备的在线编程和实时控制、对遥测信号的采集、遥控指令的发送,以及蓄电池充放电量的管理等功能.
【总页数】3页(P92-94)
【作者】孙芳方;叶卫东;钱锐
【作者单位】上海第二工业大学,上海201209;上海第二工业大学,上海201209;上海第二工业大学,上海201209
【正文语种】中文
【中图分类】TP23
【相关文献】
1.基于MATLAB平台和GPIB接口的测试系统开发及应用 [J], 李军;李榕;常鸿森
2.基于VB和GPIB接口的阻抗分析仪及多功能万用表自动测试系统 [J], 曹菲;董显林
3.用VB开发基于GPIB的稳压电源自动检定测试系统 [J], 卜云萍;徐传生;王宏珍;李平;李变芳
4.基于VB和GPIB接口的DC/DC变换器自动测试系统 [J], 罗丁;王智玮
5.基于GPIB接口的射频模块自动测试系统开发与应用 [J], 杜菊;闫茂德
因版权原因,仅展示原文概要,查看原文内容请购买。

GPIB 编程范例VB

GPIB 编程范例VB

例一' Filename - Simple.frm'' This application demonstrates how to read from and write to the' Tektronix TDS 210 Two Channel Digital Real-Time Oscilloscope' using GPIB.'' This sample application is comprised of three basic parts:'' 1. Initialization' 2. Main Body' 3. Cleanup'' The Initialization portion consists of getting a handle to a' device and then clearing the device.'' In the Main Body, this application queries a device for its' identification code by issuing the '*IDN?' command. Many' instruments respond to this command with an identification string.' Note, 488.2 compliant devices are required to respond to this' command.'' The last step, Cleanup, takes the device offline.这部分为初始化的一些变量声明Option ExplicitConst BDINDEX = 0 ' Board IndexConst PRIMARY_ADDR_OF_SCOPE = 17 ' Primary address of device GPIB仪器的主要地址Const NO_SECONDARY_ADDR = 0 ' Secondary address of device 次要地址Const TIMEOUT = T100ms ' Timeout value = 10 seconds 起时的时长Const EOTMODE = 1 ' Enable the END message 字符串结束的信息Const EOSMODE = 0 ' Disable the EOS mode 字符串结束的模式Const ARRAYSIZE = 1024 ' Size of read buffer 缓冲区长度Dim ErrMsg As String * 100 ' 一些变量的声明Dim Dev As IntegerDim V alueStr As String * ARRAYSIZEDim ErrorMnemonicPrivate Sub GPIBCleanup(msg$) '定义错误信息使用的函数' After each GPIB call, the application checks whether the call' succeeded. If an NI-488.2 call fails, the GPIB driver sets the' corresponding bit in the global status variable. If the call' failed, this procedure prints an error message, takes the device' offline and exits.ErrorMnemonic = Array("EDVR", "ECIC", "ENOL", "EADR", "EARG", _"ESAC", "EABO", "ENEB", "EDMA", "", _"EOIP", "ECAP", "EFSO", "", "EBUS", _"ESTB", "ESRQ", "", "", "", "ETAB")ErrMsg$ = msg$ & Chr(13) & "ibsta = &H" & Hex(ibsta) & Chr(13) _& "iberr = " & iberr & " <" & ErrorMnemonic(iberr) & ">"MsgBox ErrMsg$, vbCritical, "Error"ilonl Dev%, 0 '如果出错,GPIB仪器就离线,断开远程连接EndEnd SubPrivate Sub Form_Load() '主函数'====================================================================== =='' INITIALIZA TION SECTION''====================================================================== ==' The application brings the oscilloscope online using ildev. A' device handle, Dev, is returned and is used in all subsequent' calls to the device.Dev% = ildev(BDINDEX, PRIMARY_ADDR_OF_SCOPE, NO_SECONDARY_ADDR, TIMEOUT,EOTMODE, EOSMODE) '初始化仪器,所用变量在前面已经声明If (ibsta And EERR) ThenErrMsg = "Unable to open device" & Chr(13) & "ibsta = &H" & Hex(ibsta) & Chr (13) & "iberr = " & iberrMsgBox ErrMsg, vbCritical, "Error"EndEnd If '如果出错显示的信息' The application resets the GPIB portion of the device by calling' ilclr.ilclr Dev% '清空GPIB装置If (ibsta And EERR) ThenCall GPIBCleanup("Unable to clear device")End If' The default command to be written to the oscilloscope is' displayed in the text box.ScopeCommand.Text = "READ?" '设定要发送的命令字符串End SubPublic Sub RunCmd_Click()Dim DisplayStr As String'====================================================================== =='' MAIN BODY SECTION'' In this application, the Main Body communicates with the instrument' by writing a command to it and reading its response. This would be' the right place to put other instrument communication.''====================================================================== ==' The application writes the text in ScopeCommand to the' oscilloscope.ilwrt Dev%, ScopeCommand.Text, Len(ScopeCommand.Text)If (ibsta And EERR) ThenCall GPIBCleanup("Unable to write to device")End If '从GPIB卡送出命令,如果出错,则显示相关信息' The application reads the ASCII string from the oscilloscope' into the V alueStr variable.ilrd Dev%, V alueStr$, Len(V alueStr$) '从仪器读出数据,如果出错,则显示相关信息If (ibsta And EERR) ThenCall GPIBCleanup("Unable to read from device")End If' The oscilloscope returns a Line Feed character with its output' string. Y ou could use the LEFT$() function which returns a' specified number of characters from the left side of a string to' remove the Line Feed character. The code fragment below' illustrates how to use the LEFT$() function along with the GPIB' global count variable, ibcntl, to copy the contents of V alueStr' into a new string called DisplayStr. , that you need one less' character than the total number contained in ibcntl.DisplayStr = Left(V alueStr, ibcntl - 1) '对所读到的字符串作的一些处理' The reading from the oscilloscope is displayed in the List box.ReadingsList.AddItem (DisplayStr)ReadingsList.RefreshEnd SubPrivate Sub QuitCmd_Click()'====================================================================== ='' CLEANUP SECTION''====================================================================== =' The device is taken offline.ilclr Dev% '清空GPIB装置,如果出错,则显示相关信息If (ibsta And EERR) ThenCall GPIBCleanup("Unable to clear device")End Ifilloc Dev% '使仪器成本地连接ilonl Dev%, 0 '仪器下线EndEnd Sub例二Dim Dev As Integer '定義Dev為GPIB儀器Private Function AddIbcnt() As String '定義變量AddIbcnt = Chr$(13) + Chr$(10) + "ibcnt = 0x" + Hex$(ibcnt)End FunctionPrivate Function AddIberr() As String '定義出錯處理函數If (ibsta And EERR) ThenIf (iberr = EDVR) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EDVR <DOS Error>"If (iberr = ECIC) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ECIC <Not CIC>"If (iberr = ENOL) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ENOL <NoListener>"If (iberr = EADR) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EADR<Address Error>"If (iberr = EARG) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EARG<Invalid argument>"If (iberr = ESAC) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ESAC <Not Sys Ctrlr>"If (iberr = EABO) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EABO <Op. aborted>"If (iberr = ENEB) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ENEB <No GPIB board>"If (iberr = EOIP) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EOIP <Async I/O in prg>"If (iberr = ECAP) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ECAP <No capability>"If (iberr = EFSO) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EFSO <File sys. error>"If (iberr = EBUS) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = EBUS<Command error>"If (iberr = ESTB) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ESTB<Status byte lost>"If (iberr = ESRQ) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ESRQ <SRQ stuck high>"If (iberr = ETAB) Then AddIberr = Chr$(13) + Chr$(10) + "iberr = ETAB <Table overflow>"ElseAddIberr = Chr$(13) + Chr$(10) + "iberr = " + Str$(iberr)End IfEnd FunctionPrivate Function AddIbsta() As String '定義出錯處理函數sta$ = Chr$(13) + Chr$(10) + "ibsta = &H" + Hex$(ibsta) + " <"If (ibsta And EERR) Then sta$ = sta$ + " ERR"If (ibsta And TIMO) Then sta$ = sta$ + " TIMO"If (ibsta And EEND) Then sta$ = sta$ + " END"If (ibsta And SRQI) Then sta$ = sta$ + " SRQI"If (ibsta And RQS) Then sta$ = sta$ + " RQS"If (ibsta And CMPL) Then sta$ = sta$ + " CMPL"If (ibsta And LOK) Then sta$ = sta$ + " LOK"If (ibsta And RREM) Then sta$ = sta$ + " REM"If (ibsta And CIC) Then sta$ = sta$ + " CIC"If (ibsta And AA TN) Then sta$ = sta$ + " A TN"If (ibsta And TACS) Then sta$ = sta$ + " TACS"If (ibsta And LACS) Then sta$ = sta$ + " LACS"If (ibsta And DTAS) Then sta$ = sta$ + " DTAS"If (ibsta And DCAS) Then sta$ = sta$ + " DCAS"sta$ = sta$ + ">"AddIbsta = sta$End Function'' Clear the list of readings in the test window'Private Sub ClearReadingsList() '定義清空列表,初始化用If ReadingsList.ListCount > 0 ThenFor i% = 0 To ReadingsList.ListCount - 1ReadingsList.RemoveItem 0Next i%End IfReadingsList.RefreshEnd SubPrivate Sub GpibErr(msg$)msg$ = msg$ + AddIbsta() + AddIberr() + AddIbcnt() + Chr$(13) + Chr$(13) + "I'm quitting!"MsgBox msg$, vbOKOnly + vbExclamation, "Error"' Take the device offline.ilonl Dev, 0 '出現任何錯誤,GPIB儀器就下線EndEnd Sub'' Initalize the form controls.'Private Sub Form_Load()GPIBglobalsRegistered = 0 '程序運行時,清空列表' Clear the List Box.Call ClearReadingsListEnd Sub'' Information about Devquery. '定義相關信息'Private Sub Info_Click()msg$ = "This form queries a device using the '*IDN?' command to read back the identification code."MsgBox msg$, vbInformationEnd SubPrivate Sub QuitButton_Click()EndEnd SubPrivate Sub RunRepeat_Click()Call Run '運行程序的按鈕End SubPrivate Sub Run() '主要程序Dim DisplayStr As String' Disable QUIT button during run.QuitButton.Enabled = 0'====================================================================== =='' INITIALIZA TION SECTION 初始化裝置''====================================================================== ==' Assign a unique identifier to the device and store in the variable' Dev. If the ERR bit is set in ibsta, call GpibErr with an error' message. Otherwise, the device handle, Dev, is returned and is used in' all subsequent calls to the device.Const BDINDEX = 0 ' Board IndexConst PRIMARY_ADDR_OF_DEV = 1 ' Primary address of deviceConst NO_SECONDARY_ADDR = 0 ' Secondary address of deviceConst TIMEOUT = T10s ' Timeout value = 10 secondsConst EOTMODE = 1 ' Enable the END messageConst EOSMODE = 0 ' Disable the EOS modeDev = ildev(BDINDEX, PRIMARY_ADDR_OF_DEV, _NO_SECONDARY_ADDR, TIMEOUT, EOTMODE, EOSMODE) '初始化If (ibsta And EERR) ThenGpibErr ("Error opening device.")End If' Clear the internal or device functions of the device. If the error bit' EERR is set in ibsta, call GpibErr with an error message.ilclr Dev '初始化時清空裝置If (ibsta And EERR) ThenGpibErr ("Error clearing device.")End If'====================================================================== =='' MAIN BODY SECTION'' In this application, the Main Body communicates with the instrument' by writing a command to it and reading its response. This would be' the right place to put other instrument communication.''====================================================================== ==' This application queries a device for its identification code by' issuing the "*IDN?" command. Many instruments respond to this command' with an identification string. Note, 488.2 compliant devices are' required to respond to this command. If the error bit EERR is set in' ibsta, call GpibErr with an error message.wrtbuf$ = "*IDN?" '要寫出的字串ilwrt Dev, wrtbuf$, Len(wrtbuf$)If (ibsta And EERR) ThenGpibErr ("Error writing to device.")End If' Read the identification code by calling ilrd. If the ERR bit is set in' ibsta, call GpibErr with an error message.rdbuf$ = Space$(100)ilrd Dev, rdbuf$, Len(rdbuf$) '從GPIB儀器讀數據到電腦If (ibsta And EERR) ThenGpibErr ("Error reading from device.")End If' The device returns a Line Feed character with the identification' string. Y ou could use the LEFT$() function which returns a' specified number of characters from the left side of a string to' remove the Line Feed character. The code fragment below illustrates' how to use the LEFT$() function along with the GPIB global count' variable, ibcntl, to copy the contents of rdbuf$ into a new string' called DisplayStr. Note, that you need one less character than the' total number contained in ibcntl.DisplayStr = Left$(rdbuf$, ibcntl - 1) '把讀出的數據加入到列表中' Display the list of readings.ReadingsList.AddItem DisplayStr'====================================================================== =='' CLEANUP SECTION''====================================================================== ==' Take the device offline.ilonl Dev, 0 '下線用If (ibsta And EERR) ThenGpibErr ("Error putting device offline.")End If' Enable user inputs.QuitButton.Enabled = 1End Sub。

串口测试软件 VB代码

串口测试软件 VB代码

串口测试软件 VB代码部分代码如下:Dim Port 'COM端口检测Dim p 'COM端口检测Dim s(255) As Integer '端口1-255Dim s1(255) '端口1-255Dim str '奇偶校验传递符Dim portstr As StringPrivate Sub Command1_Click()On Error Resume Next'---------------端口参数设置--------------- If Command1.Caption = "打开串口(&O)" Then Command1.Caption = "关闭串口(&C)"Command2.Enabled = TrueIf Combo3.Text = "无" Thenstr = "n"End IfIf Combo3.Text = "奇校验" Thenstr = "o"End IfIf Combo3.Text = "偶校验" Thenstr = "e"End IfIf Combo3.Text = "空格" Thenstr = "s"End IfIf Combo3.Text = "标记" Thenstr = "s"End If'---------------端口识别---------------For Port = 1 To 255s1(Port) = "COM" & PortIf Combo5.Text = s1(Port) ThenmPort = PortMSComm1.PortOpen = TrueIf MSComm1.PortOpen = True ThenRichTextBox2 = "COM" & Port & "已成功打开。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sleep Sleep_Cal '等待校准完成
buf = Trim(MSComm1.Input) '读取校准还回信息
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
ilclr Dev_OPM%
ilwrt Dev_ATT%, ":INP:ATT " & Initial_ATT, Len(":INP:ATT " & Initial_ATT) '发送衰减值给ATT
ilwrt Dev_ATT%, ":OUTP 0", Len(":OUTP 0") '关闭ATT
Private Sub Form_Load()
Textsend.Text = "pd 1" '发送栏赋初始命令
' 串口初始化
mPort = 1 ' 设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1" ' 设置串口1参数
Tpower$ = PowerVal$ + Initial_ATT '计算光源总功率
ilwrt Dev_ATT%, ":OUTP 0", Len(":OUTP 0") '关闭ATT
MsgBox ("请将光源接1A")
ilwrt Dev_OPM%, ":read1:chan1:power?", Len(":read1:chan1:power?") '发送读取光功率指令
ilrd Dev_OPM%, PowerVal$, Len(PowerVal$) '读取光功率返回值
Textcal.Text = Textcal.Text + Chr(13) + Chr(10) + buf '//回车换行
End If
ATT$ = Tpower$ - (-20) '计算光源输出-20dBm时的ATT值
Sleep Sleep_Cal '等待校准完成
buf = Trim(MSComm1.Input) '读取校准还回信息
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT
Sleep Sleep_ATT
MSComm1.Output = "pdc 1 -3000 0 " & Chr(13) '发送校准指令
Const Sleep_ATT = 3000 'ATT衰减延时后OPM才读值
Const Sleep_Comm = 100 '串口通信延时
Const Sleep_Cal = 6000 'PD校准延时
MsgBox ("请将光源接光功率探头1")
ilwrt Dev_ATT%, ":OUTP 1", Len(":OUTP 1") '打开ATT
Sleep Sleep_ATT '延时
'在电脑上使用时要安装NI488.2 GPIB驱动,在VB模块中加入niglobal.bas和vbib-32.bas
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '延时控件调用
'运行载入
Textcal.Text = Textcal.Text + Chr(13) + Chr(10) + buf '//回车换行
End If
ATT$ = Tpower$ - (-5) '计算光源输出-5dBm时的ATT值
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT Sleep Fra bibliotekleep_ATT
MSComm1.Output = "pd 1 " & Chr(13) '发送校准指令
Sleep Sleep_Comm '等待校准完成
buf = Trim(MSComm1.Input) '读取校准还回信息
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
'Const Offset_Pd = 0.5 'PD补偿值
Dev_ATT% = ildev(0, 28, 0, T3s, 1, 0)
Dev_OPM% = ildev(0, 20, 0, T3s, 1, 0)
ilclr Dev_ATT%
Sleep Sleep_ATT '延时
'校准PD1
ATT$ = Tpower$ - (0) '- Offset_Pd '计算光源输出-10dBm时的ATT值
Textcal.Text = Textcal.Text + Chr(13) + Chr(10) + buf '//回车换行
End If
ATT$ = Tpower$ - (-10) '计算光源输出-10dBm时的ATT值
Dim Tpower As String '光源总功率
Const Initial_ATT = 13 'ATT初始衰减量
Dim ATT As String 'ATT衰减量
ilwrt Dev_ATT%, ":OUTP 1", Len(":OUTP 1") '打开ATT
MsgBox ("确认连接插损最小")
'Shell "D:\study\VB\shiyan\GPIB.exe"
MSComm1.PortOpen = True '打开通信端口1
Sleep Sleep_Comm '等待校准完成
Sleep Sleep_Cal '等待校准完成
buf = Trim(MSComm1.Input) '读取校准还回信息
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
Textcal.Text = Textcal.Text + Chr(13) + Chr(10) + buf '//回车换行
End If
'验证PD1
ATT$ = Tpower$ - (5) '计算光源输出5dBm时的ATT值
MSComm1.InputMode = 0 ' 接收文本型数据
End Sub
'PD1校准
Private Sub Pd1cal_Click()
Textcal.Text = ""
Dim Dev_ATT As Integer 'ATT地址
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT
Sleep Sleep_ATT '延时
MSComm1.Output = "pdc 1 0 3 " & Chr(13) '发送校准指令
Sleep Sleep_Cal '等待校准完成
buf = Trim(MSComm1.Input) '读取校准还回信息
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT
Sleep Sleep_ATT
MSComm1.Output = "pdc 1 -2000 1 " & Chr(13) '发送校准指令
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT
Sleep Sleep_ATT '延时
MSComm1.Output = "pdc 1 -1000 2 " & Chr(13) '发送校准指令
ilwrt Dev_ATT%, ":INP:ATT " & ATT$, Len(":INP:ATT " & ATT$) ''发送衰减值给ATT
Sleep Sleep_ATT
MSComm1.Output = "pd 1 " & Chr(13) '发送校准指令
Textcal.Text = Textcal.Text + Chr(13) + Chr(10) + buf '//回车换行
相关文档
最新文档