VB怎么通过串口收发数据,谢谢,我是新手,希望能附上代码,感激

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-29
急需:请教用vb串口收发数据的简单程序代码,通过com1实现两台计算机数据传输?非常感谢!!!

一个按钮,2个TEXT控件,还有一个MSCOMM控件
Option Explicit

Private Sub Command1_Click()
If Len(Text1.Text) = 0 Then Exit Sub
Dim I As Integer
Dim SendByte() As Byte
I = Len(Text1.Text)
ReDim SendByte(I - 1)
For I = 0 To UBound(SendByte)
SendByte(I) = Asc(Mid(Text1.Text, I + 1, 1))
Next
If MSComm1.PortOpen = True Then MSComm1.Output = SendByte
End Sub

Private Sub Form_Load()
On Error Resume Next
Command1.Caption = "发送数据"
Text2.Text = ""
Text3.Text = ""
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 1 '通讯端口号,请根据实际调整
MSComm1.NullDiscard = False
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case 2
Dim InByte, I As Integer
InByte = MSComm1.Input
For I = 0 To UBound(InByte)
Text2.Text = Text2.Text & "&H" & Hex(InByte(i)) & " "
Next
End Select
End Sub

如果只是检测PLC通信口发送的数据,需要一个485转232转换器,连接到电脑(笔记本还需要一个usb转232转换器)打开串口调试助手就可以了,如果要和PLC通信,除了以上的准备之外还要知道PLC的通信协议了。

VB里面有串口控件MSComm。 使用比较简单的。

提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
1.MSComm控件两种处理通讯的方式
  MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。
  1.1 事件驱动方式
  事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。
  1.2 查询方式
  查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
2.MSComm 控件的常用属性
  MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。
  CommPort 设置并返回通讯端口号。
  Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
  PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
  Input 从接收缓冲区返回和删除字符。
  Output 向传输缓冲区写一个字符串。
  下面分别描述:
  CommPort属性:设置并返回通讯端口号。
  语法 object.CommPort[value ] (value 一整型值,说明端口号。)
  说明 在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。
  注意:必须在打开端口之前设置 CommPort 属性。
  RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
  语法:object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )
  说明:当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
  CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。
  语法: object.CTSHolding(Boolean)
  Mscomm 控件的 CTSHolding 属性设置值:
  True Clear To Send 线为高电平。
  False Clear To Send 线为低电平。

  说明:如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时,MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 OnComm 事件。

  Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态,CTSHolding 属性给出一种手工查询的方法。

  SThreshold 属性: MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
  语法 object.SThreshold [ = value ] value 整形表达式,代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。

  说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。
  
  Handshake 常数

  常数        值     描述
  comNone      0      无握手。
  comXonXoff    1      XOn/Xoff 握手。
  comRTS      2      Request-to-send/clear-to-send 握手。
  comRTSXOnXOff 3      Request-to-send 和 clear-to-send 握手皆可。
  OnComm 常数

  常数        值     描述
  comEvSend    1    发送事件。
  comEvReceive    2      接收事件。
  comEvCTS     3      clear-to-send 线变化。
  comEvDSR     4      data-set ready 线变化。
  comEvCD      5      carrier detect 线变化。
  comEvRing     6      振铃检测。
  comEvEOF     7      文件结束。
  Settings 属性: 设置并返回波特率、奇偶校验、数据位、停止位参数。

  语法: object.Settings[ = value]
  说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。
  Value 由四个设置值组成,有如下的格式:
  "BBBB,P,D,S"
  BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:
  "9600,N,8,1"
  InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。

  语法 object.InputLen [ = value]
  InputLen 属性语法包括下列部分:
  value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。
  说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。

  若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。

还是买本 VB 串口通信 的书吧,这种原理与代码不是一两页纸能说清楚的。

  • VB怎么通过串口收发数据,谢谢,我是新手,希望能附上代码,感激
    答:若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。
  • vb如何使用串口通讯
    答:'==='PC机串行口用命令按钮启动接收/发送VB程序 Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口End Sub '点击“发送”命令按钮发送数据Private Sub Command1_Click() MSComm1.Output = Text1.Text '将文本框Text1的数据发送至对方End Sub '点击“接收”命令按钮接...
  • VB串口发送接收
    答:send(1) = "&H93"send(2) = "&H93"send(3) = "&H93"MSComm1.Output = send End Sub 这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。以下修改了LZde1代码,供参考:Option Explicit Dim strdataPrivate Sub Command1_Click() '发送HEX数据93 93 ...
  • 用VBA可以进行串口通讯吗?如果可以的话,该怎么实现,多谢大侠赐教!!
    答:一.将两台PC机串行口的连接(如图)二.建立VB工程1.在VB窗体添加控件(如图)2.VB编程:'PC机串行口用命令按钮启动接收/发送VB程序 Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口End Sub '点击“发送”命令按钮发送数据Private Sub Command1_Click() MSComm1.Output ...
  • 用vb的串口编程实现一个串口的自发和自收功能
    答:任何利用串口进行收发的程序,都可以利用将单个RS232口自身2与3脚短接,实现自发自收进行代码调试。新建VB工程,由工程菜单选部件项,在Microsoft Comm Control 6.0部件前打钩确定,VB的工具箱中就有MSCOMM控件,添加到窗体.Private Sub cmdSend_Click()Dim strSend As String strSend = Text2 MSComm1....
  • ...VB串口调试,不短接2,3脚,不用串口精灵。怎么直接在VB里实现串口自发...
    答:追问嗯,嗯。串口是可以自发自收,但是在收的时候要有一个收到数据的信号啊。我这里是没有串口的,所以不能短接2,3脚。也能用串口精灵。怎么在VB程序中直接模拟出串口的发送和接收。回答调试串口收发的程序,通常就是用 短接2,3脚的方法,或者用双机交叉方式。即程序发,辅助机器收;或者辅助的发...
  • VB编程串口通信
    答:'设置接收数据模式为二进制模式 .InputLen=1 '设置一次从接收缓冲区读取字节数为1 .Sthreshold=1 '设置一次从发送缓冲区读取字节数为1 .PortOpen=True '打开通信口 下面是响应Mycomm_OnComm事件的处理程序,对数据库采集的处理程序采用MSComm事件驱动方式。Private Sub MyComm_OnComm()With MyComm Sele...
  • VB 如何用:socket 发送数据
    答:1、首先看控件区有无串口控件,表明串口控件并未被启用,选择工程→部件→Micosoft comm Control6.0选项,点击应用,即可添加串口控件。2、绘制两个text控件用于存储串口需要收发的数据。一个button控件用于发送指令,添加串口控件。3、编写程序: Private Sub Command1_Click() MSComm1.Output = Text2...
  • 用vb串口实现发送一串000110010001010101000101010的二进制数 怎么发送...
    答:VB可以通过串口控件实现串口通信,串口通信一般8个字节为1组进行发送,下面以你的前三个字节27bit为例 需要先串口控件初始化,此处略 发送时:Dim Sendbuffer(3) as Byte SendBuffer(0)=&H19 SendBuffer(1)=&H15 SendBuffer(2)=&H45 MSCOMM.OUTPUT=Sendbuffer 接收时;在控件接收事件Oncomm中 Dim...
  • VB如何用串口发送一组ASCII码数据,所有发送或接收的数字都以ASCII代码...
    答:'b是你要往串口发的字节数组 b = StrConv(Right(String(6, "0") & Hex(Text1), 6), vbFromUnicode)'以下是验证 For i = 0 To UBound(b)s = s & Hex(b(i))Next Debug.Print s '以下是还原 s = Format(Val("&H" & StrConv(b, vbUnicode)), String(6, "0"))Debug.Print...