vb串口通信视频教程

时间:2024-07-05 05:30:49编辑:分享君

在vb中如何实现串口数据的读取

未见串口打开语句,你的MSComm1_OnComm事件代码有些冲突,你究竟想以二进制接收还是以ASCII码接收:
Private Sub MSComm1_OnComm()
''
Dim Buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary‘此处及后3句用前2句不用后2句,反之亦然
Buffer = MSComm1.Input
MSComm1.InputMode = comInputModeText
Buffer = AscB(MSComm1.Input)
Text1.Text = Buffer
Case Else
End Select
''
End Sub


vb串口通信程序实例

我也是自己摸索开发出来的每一款VBtoCOM通讯,有具体的思路如下:给你推荐一个工具“com串口测试工具 ComTone V1.0 中文绿色版”1、打开你的噪音计的测试软件,调整好串口号、通讯频率等等,我用温度计举例说明。开始查询后有返回数值,这个Receive:就是返回的数值000304012200004b05,打开串口监视精灵,监视软件的com口事件:这里面的Write是测试软件发出的查询指令,read是设备返回的数据指令Private Sub Command1_Click() '发送指令If Not MSComm1.PortOpen Then MSComm1.CommPort = 7 '串口为7 MSComm1.Settings = "9600,n,8,1" MSComm1.InBufferCount = 0 '清除接收缓冲区 MSComm1.OutBufferCount = 0 '清除发送缓冲区 MSComm1.InputMode = comInputModeBinary '二进制接收 MSComm1.InputLen = 0 '读取接收缓冲区的所有字符 MSComm1.PortOpen = True '打开串口 MSComm1.RTSEnable = False '置为发送状态End IfDim pu() As ByteDim strdata As StringDim crc_js() As ByteReDim pu(7) '这个数组是8位的查询指令pu(0) = "&H00" '温度计地址pu(1) = "&H03" '查询指令pu(2) = "&H00" '2、3为温度计地址pu(3) = "&H00" '2、3为温度计地址pu(4) = "&H00" '4、5为读取寄存器长度pu(5) = "&H02" '4、5为读取寄存器长度pu(6) = "&HC5" '6、7为CRC校验码 因为我们不知道设备的CRC校验规则所以用测试软件产生的校验码pu(7) = "&HDA" '6、7为CRC校验码MSComm1.Output = pu'不做任何事情,仅仅允许其它应用程序处理它们的事件。DoEventsMSComm1.InBufferCount = 0 '清除接收缓冲区MSComm1.RThreshold = 9 '所要接收的数据长度,我们通过COM检测精灵看到了回传数据一共是9字节MSComm1.RTSEnable = True '转为接收状态End SubPrivate Sub Command2_Click()Timer1.Enabled = FalseEnd SubPrivate Sub Form_Unload(Cancel As Integer) If MSComm1.PortOpen Then MSComm1.PortOpen = False '关闭串口 End If Timer1.Enabled = FalseEnd SubPrivate Sub MSComm1_OnComm() 'COM事件 Dim PA() As Byte Dim PB As StringSelect Case MSComm1.CommEvent Case comEvReceive MSComm1.InputLen = 0 '读取接收缓冲区的所有字符 PB = MSComm1.Input PA() = PB For i = 0 To UBound(PA()) 'Print "PA(" & i & ")"; PA(i) If Len(Hex(PA(i))) = 1 Then strdata = strdata & "0" & Hex(PA(i)) Else strdata = strdata & Hex(PA(i)) End If Next '回传的数据串:000304012600000AC4,这9字节根据通讯协议我们进行拆分 '00为协议内回传机号,03为读命令,04为返回的数据长度 0126 为我要的温度数据为十六进制表达,下面我进行数据处理 wd = CLng("&H" & Left(Right(strdata, 12), 4)) / 10 & "℃" '根据通讯协议换算成温度 Text1 = Text1 & vbCrLf & strdata & " " & wd strdata = "" MSComm1.PortOpen = False '关闭串口 End SelectEnd SubPrivate Sub Timer1_Timer()Call Command1_ClickEnd Sub这是我的测试结果。下面是通讯协议这个是我的软件用检测精灵检测的结果

VB串口通信程序

串口初始化
Private Sub Form
Load()
MSComm1.CommPort = 1
设置通信端口号为
COM1
MSComm1.Settings = "9600,n,8,1"
设置串口
1
参数
MSComm1.InputMode = 0
接收文本型数据
MSComm1.PortOpen = True
打开通信端口
1
End Sub
把字符通过串口发送出去
Private Sub Cmdsend
Click()
If Textsend.Text = "" Then
pp = MsgBox("
发送的数据不能为空!
Exit Sub
End If
MSComm1.Output = Trim(Textsend.Text)
For i = 1 To 20000000
Next i
End Sub
通过时钟控制来自动接收字符
Private Sub Timer1_
Timer()
Dim buf$
buf = Trim(MSComm1.Input)
将缓冲区内的数据读入
buf
变量中
If Len(buf) 0 Then
判断缓冲区内是否存在数据
TextReceive.Text = TextReceive.Text +Chr(13) + Chr(10) + buf
回车换行
End If
End Sub
关闭通信端口
停止程序运行
Private Sub Cmdquit
Click()
MSComm1.PortOpen = False
Unload Me
End Sub


vb如何使用串口通讯

用PC机的9针RS232接口,用VB6 含有的MSComm 控件编程两台PC机串行通信串行口的接线图: '=============================='PC机串行口用命令按钮启动接收/发送VB程序Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口End Sub'点击“发送”命令按钮发送数据Private Sub Command1_Click() MSComm1.Output = Text1.Text '将文本框Text1的数据发送至对方End Sub'点击“接收”命令按钮接收数据Private Sub Command2_Click() Dim st As String st = MSComm1.Input Text2.Text = st '将接收到的数据至入文本框Text2End Sub '==============================’PC机串行口定时自动接收/发送VB程序Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口 Timer1.Interval = 100 ’自动传送时间间隔100毫秒End SubPrivate Sub MSComm1_OnComm() Dim st As String If MSComm1.InBufferCount > 0 Then st = MSComm1.Input Text2.Text = st '将收到的数据放入Text2文本框 End IfEnd SubPrivate Sub Timer1_Timer() MSComm1.Output = Text1.Text '发送Text1文本框内容End Sub

有偿编程!!关于vb串口通信的!!

将接到的数据赋值于全局变量,通过ADO数据控件连接数据库及表,用以下代码保存数据:
Private Sub Timer1_Timer()
If Label1.Caption CStr(Time$) Then
Label1.Caption = Time$
sum_zj = sum_zj + 1
Text3 = sum_zj
'校准
If sum_zj >= 3 Then
sum_zj1 = sum_zj1 + 1
sum_zj = sum_zj - 3
Text4 = sum_zj1
Adodc1.Recordset.AddNew '每3秒记录一组数据
Adodc1.Recordset(0) = shiYAnH
Adodc1.Recordset(1) = Mid(Time$, 1, 2) & Mid(Time$, 4, 2) & Mid(Time$, 7, 2) '记录time
Adodc1.Recordset(2) = record_jm(0) '记录数据
Adodc1.Recordset(3) = record_jm(1) '记录数据
Adodc1.Recordset(4) = record_jm(2) '记录数据
Adodc1.Recordset(5) = record_jm(3) '记录数据
Adodc1.Recordset(6) = record_jm(4) '记录数据
Adodc1.Recordset(7) = record_jm(5) '记录数据
Adodc1.Recordset(8) = record_jm(6) '记录数据
Adodc1.Recordset(9) = record_jm(7) '记录数据
Adodc1.Recordset(10) = record_jm(8) '记录数据
Adodc1.Recordset(11) = record_jm(9) '记录数据
Adodc1.Recordset(12) = record_jm(10) '记录数据
Adodc1.Recordset(13) = record_jm(11) '记录数据
Adodc1.Recordset.Update
End If
End If
End Sub
Private Sub Timer2_Timer()
Picture4.DrawStyle = 0

以下代码绘制实时曲线(6点):
Picture4.DrawWidth = 3 ' = dash
Picture4.Line (sum_z1 * 18 + 500, record_jm(0) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(2) * -150 + 7900), vbRed ', BF
Picture4.Line (sum_z1 * 18 + 500, record_jm(1) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(3) * -150 + 7900), vbCyan ', BF
Picture4.Line (sum_z1 * 18 + 500, record_jm(2) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(4) * -150 + 7900), vbBlack ', BF
Picture4.Line (sum_z1 * 18 + 500, record_jm(3) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(5) * -150 + 7900), vbMagenta ', BF
Picture4.Line (sum_z1 * 18 + 500, record_jm(4) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(6) * -150 + 7900), vbGreen ', BF
Picture4.Line (sum_z1 * 18 + 500, record_jm(5) * -150 + 7900)-(sum_z1 * 18 + 500, record_jm(7) * -150 + 7900), vbBlue ', BF
End Sub

Private Sub Timer3_Timer()
If Label32 CStr(Time$) Then 'Label1.Caption
Label32.Caption = Time$
sum_z = sum_z + 1
Text31 = sum_z
'校准
If sum_z >= 5 Then
sum_z = sum_z - 5
sum_z1 = sum_z1 + 1
Text30 = sum_z1
End If
End If
End Sub

以下代码绘制曲线的坐标:
Private Sub Form_Load()
With Adodc1
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\kongtiao\cartemp.mdb;Persist Security Info=False"
Adodc1.RecordSource = "select * form car_bm"
End With
Text1 = ""
Text2 = "": Text3 = "": Text4 = "":
Text5 = "": Text6 = "": Text7 = "": Text12 = ""
Text8 = "": Text9 = "": Text10 = "": Text11 = ""
Text13 = "": Text14 = "": Text15 = "": Text16 = ""
'Load frmMain
colvb = vbBlack
xx = 100
yy = 150
txt = "℃"
wp = xp(colvb, xx, yy, txt)
xx = 200
yy = 350
txt = "50"
wp = xp(colvb, xx, yy, txt)
xx = 200
yy = 1850
txt = "40"
wp = xp(colvb, xx, yy, txt)
yy = 3350
xx = 200
txt = "30"
wp = xp(colvb, xx, yy, txt)
xx = 200
yy = 4850
txt = "20"
wp = xp(colvb, xx, yy, txt)
xx = 200
yy = 6350
txt = "10"
wp = xp(colvb, xx, yy, txt)
'Time坐标
colvb = vbRed
yy = 6500
xx = 400
txt = "0"
wp = xp(colvb, xx, yy, txt)
xx = 1480
txt = "5"
wp = xp(colvb, xx, yy, txt)
xx = 2560
txt = "10"
wp = xp(colvb, xx, yy, txt)
xx = 3640
txt = "15"
wp = xp(colvb, xx, yy, txt)
xx = 4720
txt = "20"
wp = xp(colvb, xx, yy, txt)
xx = 5800
txt = "25 min"
wp = xp(colvb, xx, yy, txt)
xx = 6880
txt = "30"
wp = xp(colvb, xx, yy, txt)
xx = 7960
txt = "35"
wp = xp(colvb, xx, yy, txt)
xx = 9040
txt = "40"
wp = xp(colvb, xx, yy, txt)
xx = 10120
txt = "45"
wp = xp(colvb, xx, yy, txt)
xx = 11200
txt = "50"
wp = xp(colvb, xx, yy, txt)
'画格
Picture1.DrawWidth = 1 ' = dash
Picture1.DrawStyle = 0
Picture1.ForeColor = vbCyan
For i = 0 To 39
Picture4.Line (450, 550 + i * 150)-(500, 550 + i * 150)
Next
Picture4.DrawStyle = 2
For i = 0 To 8
Picture4.Line (450, 400 + i * 750)-(11300, 400 + i * 750)
Next
For i = 0 To 15
Picture4.Line (450, 1000 + i * 300)-(500, 1000 + i * 300)
Next
For i = 0 To 10
Picture4.Line (500 + i * 1080, 400)-(500 + i * 1080, 6400)
Next
Picture4.DrawStyle = 0
End Sub
上述代码供参考.


vb6.0编程问题

Open 语句示例

本示例示范 Open 语句的不同用法来做到文件的输出与输入。

下列代码以顺序输入模式打开 TESTFILE 文件。
Open "TESTFILE" For Input As #1
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1


下列代码以只允许写操作的二进制方式打开文件。
Open "TESTFILE" For Binary Access Write As #1
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1


下列代码以随机方式打开文件,文件中含有用户自定义数据类型 Record 的记录。
Type Record ' 定义用户自定义数据类型。
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record ' 声明变量。
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1


下列代码以顺序输出方式打开文件;任何过程都可以读写该文件。
Open "TESTFILE" For Output Shared As #1
' 若要以其他方式打开文件,必需先关闭此文件。
Close #1


下列代码以只允许读的二进制方式打开文件;其他过程不可以读该文件。
Open "TESTFILE" For Binary Access Read Lock Read As #1


vb串口通讯数据连续发送

太阳雨多年积攒极其珍贵的原创VB串口通信技术资料V2.0


VB串口通信编程源码206个,多种行业多种应用...
VB串口通信技术文章160多篇,详尽地对VB串口通信的诠释...
VB串口通信电子书籍16部,工业通信名家著作,经典细致...
VB串口通信控件16个,简化串口通信编码,提高开发效率...
VB串口调试工具80个,应用于各种串口调试与校验计算...
VB串口视频教程46个,两套完整视频教程,讲解直观,更快掌握...
程序员发展类文章和书籍12部,帮助您的成长,健康和发展....

超级赠品一:OSI网络模型教程48M
超级赠品二:串口硬件层知识大全资料包24M

你在淘宝搜索“太阳雨VB串口资料”就可以找到,希望可以帮助到你。


高分求VBS操作COM口的代码

  用VB给你做了一个,一边是计算机串口,一边是PLC。按你所说,我用计算机发送数据,如果有PLC的返回信息,就说明我发送成功了。
  有设置发送字符,间隔时间,循环次数,有可以计算已经发送了多少次。
  调试成功,结合你的工程,你再改一些应该没什么问题了。
  反正基本就是这个原理。


  对MSCCOMM做一些设置,对应你另一边的通讯设备。
  代码如下:
  Option Explicit
  Dim strOutput$
  Dim N%, C%

  Private Sub cmdClear_Click()
  txtSend.Text = ""

  txtRec.Text = ""
  End Sub


  Private Sub cmdSend_Click()

  Timer1.Interval = Val(txtTime.Text)
  Timer1.Enabled = True
  N = Val(txtCount.Text)
  C = 0
  txtSend.Enabled = False
  txtTime.Enabled = False
  txtCount.Enabled = False
  cmdClear.Enabled = False

  End Sub


  Private Sub Form_Load()
  MSComm1.PortOpen = True
  End Sub

  Private Sub MSComm1_OnComm()
  Dim strInputBuf$
  Select Case MSComm1.CommEvent
  Case comEvReceive
  strInputBuf = MSComm1.Input
  If strInputBuf "" Then txtRec.Text = txtRec.Text + strInputBuf
  Me.Refresh
  End Select
  End Sub

  Private Sub Timer1_Timer()


  strOutput = txtSend.Text + "*" + Chr(13)
  MSComm1.Output = strOutput
  txtRec.Text = ""
  C = C + 1
  Label4.Caption = C
  If C > N - 1 Then
  Timer1.Enabled = False
  Label4.Caption = "完成"
  txtSend.Enabled = True
  txtTime.Enabled = True
  txtCount.Enabled = True
  cmdClear.Enabled = True
  End If
  End Sub


在java的web程序中怎么使用串口通讯

最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示
思路:
1.为了从RS485读取数据,由于暂时没有硬件设备,系统是win7,故采用Virtual Serial Port Drive(VSPD)这块虚拟串口软件代替。并下载sscom32.exe模拟串口通信软件。

2. 要想实现串口通信,用Java实现串口通信(windows系统下),需要用到sun提供的串javacomm20-win32.zip。其中要用到三个文件,配置如下:
comm.jar放置到 JAVA_HOME/jre/lib/ext;
win32com.dll放置到 JAVA_HOME/bin;
javax.comm.properties 两个地方都要放
jre/lib(也就是在JAVA文件夹下的jre),JAVA_HOME/jre/lib下
这个配置在我电脑上测试成功,也许不需要这样麻烦。注意的是,如果你使用myeclipse,因为它自带jre,你需要在它所在的jre相应位置放dll以及properties文件。

是不是感觉这个很麻烦,还有windows的限制。后来我们下载rxtx这款开源包代替了刚才的comm。不仅windows下可以,linux下也可以。使用方法很简单,配置如下:

RXTXcomm.jar放到JAVA_HOME/jre/lib/ext
rxtxSerial.dll放到JAVA_HOME/bin
如果你使用myeclipse工具,你需要把rxtxSerial.dll放到它自带的jre里。

3.新建eclipse工程,添加comm.jar或者RXTXcomm.jar包。因为javacomm20-win32.zip包里有样例SimpleRead.java,可以通过这个例子测试串口是否正确

4.接收数据正确后,根据传送接收双方的协议,采用CRC循环校验,根据传输的一方的校验函数判定是否是正确传输

5.把正确结束的数据解析,查看自己指定的通讯规则,然后解析

6.插入数据库,jdbc插入

7.数据统计,定时统计每小时,每天,每月,每年的平均值,采用quartz服务来实现。

8.建立web工程,采用hibernate3,spring3,dwr技术把数据库数据动态显示,图表采用jfreechart,以及AJAX的运用


如何用vb.net向串口发送十六位进制数据

下面代码就是将文本框中以一个空格隔开的十六进制转为字节的代码,文本框中数字格式为:01 02 03
Dim TestArray() As String = Split(TextBox1.Text)
Dim hexBytes() As Byte
ReDim hexBytes(TestArray.Length - 1)
Dim i As Integer
For i = 0 To TestArray.Length - 1
hexBytes(i) = Val("&h" & TestArray(i))
Next

SerialPort.Write(hexBytes, 0, hexBytes.Length)


VB串口通信

以前做工程用的,你修改一下,可能对你有用,你看看吧'======================串口初始化=======================Private Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer) On Error GoTo ErrorTrap If MSComm1.PortOpen = True Then MSComm1.PortOpen = False ' 串口若已打开,则先关闭 MSComm1.CommPort = Port ' 设置端口号 MSComm1.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率、校验位、数据位、停止位 MSComm1.InBufferSize = 1024 ' 设置接收缓冲区为1024字节 MSComm1.OutBufferSize = 4096 ' 设置发送缓冲区为4096字节 MSComm1.InBufferCount = 0 ' 清空输入缓冲区 MSComm1.OutBufferCount = 0 ' 清空输出缓冲区 MSComm1.SThreshold = 1 ' 发送缓冲区被清空时,触发OnComm事件 MSComm1.RThreshold = 1 ' 接收缓冲区每接收到一字节数据时,触发OnComm事件 MSComm1.PortOpen = True '打开串口 If MSComm1.PortOpen = True Then txtstatus.Text = "STATUS:" & cboport.Text & " OPEND," & cbobps.Text & "," & Left(CboParity.Text, 1) & "," & Cbobit.Text & "," & cbostop.Text Else txtstatus.Text = "STATUS:COM Port Cloced" End If Exit Sub ErrorTrap: Select Case Err.Number Case comPortAlreadyOpen MsgBox "串口冲突,请更改串口号", 48, "公司车辆管理系统" CloseCom Case Else MsgBox "没有发现此串口,请确认连接", 48, "公司车辆管理系统" CloseComEnd Select Err.Clear End SubPrivate Sub cmdclose_Click() Call CloseComEnd SubPrivate Sub cmdset_Click() Call Comm_initial(Val(Mid(cboport.Text, 4, 1)), cbobps.Text, Left(CboParity.Text, 1), Val(Cbobit.Text), Val(cbostop.Text))End SubPrivate Sub Form_Load()Call Comm_initial(Val(Mid(cboport.Text, 4, 1)), cbobps.Text, Left(CboParity.Text, 1), Val(Cbobit.Text), Val(cbostop.Text)) '串口初始化 MSComm1.InputMode = comInputModeText '通过文本方式读取数据End Sub'=========================数据接收子程序=========================Private Sub dataReceive() Dim strByte() As String '数据分割用数组 Dim receiveData As String ' 接收数据暂存 Dim i As Integer If (MSComm1.InBufferCount > 0) Then receiveData = "" ' 清接收数据暂存 receiveData = MSComm1.Input '接收数据 'txtreceive.Text = txtreceive & receiveData '===============数据在相应文本框里显示======= strByte = Split(receiveData) For i = 0 To UBound(strByte) txt1(i).Text = strByte(i) Next i txt1(8).Text = Now End IfEnd Sub'====================OnComm事件===========================Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent ' 设置oncomm事件,读取片机内存的值 Case comEvReceive Call dataReceive Case Else End SelectEnd Sub'====================关闭串口子程序=====================Private Sub CloseCom()On Error GoTo Err If MSComm1.PortOpen = True Then MSComm1.PortOpen = False ' 串口若已打开,则关闭 txtstatus.Text = "STATUS:COM Port Cloced"Err:End Sub

上一篇:lizhongrui

下一篇:wdm驱动