当前位置:文档之家› 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事件。

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"&LTrim(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"&LTrim(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。

相关主题