VB编写的简单的上位机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 Sub
Private Sub Command6_Click()
On Error GoTo uerror:
If Command6.Caption="打开串口"Then
MSComm1.PortOpen=True
Command6.Caption="关闭串口"
Shape1.FillColor=RGB(0,255,0)
Else
MSComm1.PortOpen=False
Command6.Caption="打开串口"
Shape1.FillColor=RGB(128,128,128)
End If
Exit Sub
uerror:
msg$="无效端口号"
Title$="串口调试"
X=MsgBox(msg$,48,Title$)
End Sub
Private Sub Form_Load()
Text1=""
Text3=""
Combo2.ListIndex=0
Combo1.ListIndex=0
Timer1.Interval=Val(Text2)
mPort=Combo1.ListIndex+1
MSComm1.RThreshold=1
MSComm1.InputLen=0
If Option3Then MSComm1.InputMode=comInputModeBinary End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen Then MSComm1.PortOpen=False End Sub
Private Sub MSComm1_OnComm()
Dim BytReceived()As Byte
Dim strBuff As String
Select Case mEvent
Case comEvReceive
If Option4Then
Text3=Text3&MSComm1.Input
Else
strBuff=MSComm1.Input
BytReceived()=strBuff
strBuff=""
Dim i As Integer
For i=0To UBound(BytReceived)
If Len(Hex(BytReceived(i)))=1Then
strBuff=strBuff&"0"&Hex(BytReceived(i))&""
Else
strBuff=strBuff&Hex(BytReceived(i))&""
End If
Next
Text3=Text3&strBuff
End If
End Select
End Sub
Private Sub Option3_Click()
MSComm1.InputMode=comInputModeBinary
End Sub
Private Sub Option4_Click()
MSComm1.InputMode=comInputModeText
End Sub
Private Sub Timer1_Timer()
Dim SendBuff()As Byte
Dim Bytflag As String
Dim strBuff As String
Dim i As Integer
Dim flag As Boolean
If Option2Then
MSComm1.Output=Text1.Text
Else
For 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"Then
flag=True
Else
flag=False
Exit For
End If
Next
If flag Then
If Len(LTrim(Text1))Mod2<>0Then
strBuff="0"&LTrim(Text1)
Else
strBuff=Text1
End If
ReDim SendBuff(Len(strBuff)/2-1)
For i=0To UBound(SendBuff)
SendBuff(i)=Val("&h"&Mid(strBuff,2*i+1,2)) Next
MSComm1.Output=SendBuff
Else
msg$="请输入HEX格式数据:a-f、A-F、0-9"
Title$="串口调试助手"
X=MsgBox(msg$,48,Title$)
Timer1.Enabled=False
Command3.Caption="自动发送"
End If
End If
End Sub
Private Sub Combo1_Click()
mPort=Combo1.ListIndex+1
End Sub
Private Sub Command1_Click()
Text1=""
End Sub
Private Sub Command2_Click()
Dim SendBuff()As Byte
Dim Bytflag As String
Dim strBuff As String
Dim i As Integer
Dim flag As Boolean
Timer1.Enabled=False
If MSComm1.PortOpen Then
If Option2Then
MSComm1.Output=Text1.Text
Else
For 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"Then
flag=True
Else
flag=False
Exit For
End If
Next
If flag Then
If Len(LTrim(Text1))Mod2<>0Then
strBuff="0"&LTrim(Text1)
Else
strBuff=Text1
End If
ReDim SendBuff(Len(strBuff)/2-1)
For i=0To UBound(SendBuff)
SendBuff(i)=Val("&h"&Mid(strBuff,2*i+1,2))
Next
MSComm1.Output=SendBuff
Else
msg$="请输入HEX格式数据:a-f、A-F、0-9"
Title$="串口调试助手"
X=MsgBox(msg$,48,Title$)
End If
End If
Else
msg$="请打开串口"
Title$="串口调试助手"
X=MsgBox(msg$,48,Title$)
End If
End Sub
Private Sub Command3_Click()
If MSComm1.PortOpen Then
If Command3.Caption="自动发送"Then
Timer1.Enabled=True
Timer1.Interval=Val(Text2)
Command3.Caption="关闭自动"
Else
Timer1.Enabled=False
Command3.Caption="自动发送"
End If
Else
msg$="请打开串口"
Title$="串口调试助手"
X=MsgBox(msg$,48,Title$)
End If
End Sub
Private Sub Command4_Click()
Text3=""
End Sub
Private Sub Command5_Click()
Unload Me
End Sub。

相关文档
最新文档