使用VB,串口发送大文件,串口设置怎么写

供稿:hz-xin.com     日期:2025-01-15
VB Xmodem协议发送10M文件到串口

给提个建议既然以两进制打开,就应以字节流发送到串口,将获得的字节流数组分批发送以防串口拥堵。两进制读取文件的代码:
Private Sub Command5_Click() Dim aryContent() As Byte Dim j As Long CommonDialog1.CancelError = True ' 设置“CancelError”为 True On Error GoTo ErrHandler CommonDialog1.Flags = cdlOFNHideReadOnly ' 设置标志 ' 设置过滤器 CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & "(*.txt)|*.txt|Batch Files (*.bat)|*.bat" CommonDialog1.FilterIndex = 2 ' 指定缺省的过滤器 CommonDialog1.ShowOpen ' 显示“打开”对话框 ' 显示选定文件的名字 'MsgBox CommonDialog1.FileName Open CommonDialog1.FileName For Binary As #1 ReDim aryContent(LOF(1) - 1) j = LOF(1) Get #1, , aryContent Close #1 Label1.Caption = j Exit SubErrHandler: ' 用户按了“取消”按钮 Exit SubEnd Sub用以上代码读取一个0.3G大小的文件所获取的数组与文件大小一致。

你要看清楚了,你程序用的是COM1,台式机上的pci转串口是不是转换出来的串口也是COM1?

建议使用 二进制读取文件的方式发送。
Open "TESTFILE" For Binary Access Write As #1

Close #1

在二进制访问模式中,可以把文件指针移到文件的任何地方。文件刚被打开时,文件指针指向第一个字节,以后将随着文件处理命令的执行而移动。

收到 # 你就继续读取文件发送,收到!你就停止读取。如此循环,直到文件结束,
判断文件结束的命令为 eof(#1)=true

我只能告诉你这个方法,具体代码自己写吧。
照抄别人的代码不如自己写的代码学到东西的东西多。

应该是先将大文件读入字符串变量,然后将其转换为字节(BYTE)数组。采用控制发送节奏的方式来保证发送的数据正确。
详细代码如下:
Option Explicit
Dim data As Variant
Dim Temp1 As String
Dim m As Integer
Dim strData As String
Dim bytInput() As Byte
Dim sj() As Byte
Dim i As Integer
Dim j As Integer
Dim sTemp As String
Dim yTemp() As Byte
Dim Hsum As Integer
Dim Ulen As Long
Dim Llen As Long
Dim for_Sum As Long
Dim Yu_sum As Integer
Dim strfFleName As String

Private Sub cmdSend_Click()
Dim strData As String
Dim str1 As String
Dim NextLine As String
Dim Txt_sj As String
CommonDialog1.ShowOpen
Text1 = ""
strfFleName = CommonDialog1.FileName
Open strfFleName For Input As #1
Do While Not EOF(1)
Input #1, str1
sTemp = sTemp & str1 & Chr(13) & Chr(10)
Loop
Close
Text1 = sTemp
Text1.Refresh
yTemp = StrConv(sTemp, vbFromUnicode)
Hsum = UBound(yTemp)
Text2 = Hsum
Text2.Refresh
yTemp = StrConv(sTemp, vbFromUnicode)
Hsum = UBound(yTemp)
Text2 = Hsum + 1
Ulen = 128
Llen = 0
Yu_sum = (Hsum + 1) Mod Ulen
for_Sum = (Hsum + 1) \ Ulen
Print "字节长= "; Hsum + 1; "循环次数= "; for_Sum; "余数= "; Yu_sum
DoEvents
ReDim sj(Ulen - 1)
Text7 = Timer
Text7.Refresh
If (Hsum + 1) Mod Ulen = 0 Then
For i = 0 To Ulen - 1
sj(i) = yTemp(i + Ulen * j)
If i >= Ulen Then
Exit For
End If
Next i
MSComm1.Output = sj
ElseIf (Hsum + 1) Mod Ulen <> 0 Then
For j = 0 To for_Sum - 1
For i = 0 To Ulen - 1
sj(i) = yTemp(i + Ulen * j)
If i >= Ulen Then
Exit For
End If
Next i
MSComm1.Output = sj
Next j
ReDim sj(Yu_sum - 1)
For i = 0 To Yu_sum - 1
sj(i) = yTemp(i + Ulen * for_Sum)
Next
MSComm1.Output = sj
ElseIf (Hsum + 1) < Ulen Then
MSComm1.Output = yTemp
End If
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Text7 = ""
End Sub

这个很简单吧。
RS232驱动要用。MCU你用什么都一样。串口与上位机接好。配置好波特率例如9600.VB端用MSCOM这个控件。配置为二进制发送。中断为为1.下位机(MCU)计算接收个数,如128.个数达到向上返回个(!)。之后处理再返回(#)。我的下载程序就这样做的,不过多了个MODBUS.

为什么分那么少

使用VB,串口发送大文件,串口设置怎么写
建议使用 二进制读取文件的方式发送。Open "TESTFILE" For Binary Access Write As #1 Close #1 在二进制访问模式中,可以把文件指针移到文件的任何地方。文件刚被打开时,文件指针指向第一个字节,以后将随着文件处理命令的执行而移动。收到 # 你就继续读取文件发送,收到!你就停止读取。如此循环,直...

怎么用VB.NET进行串口通信-四川成都软件开发定制APP编程
首先,通过代码读取计算机的串口,并将可用的串口号显示在下拉列表中。如果计算机没有串口,程序会提示用户需要插入USB转串口线。之后,设置串口的配置参数,如串口号、波特率、数据位、停止位和缓冲区大小等。在完成配置后,打开串口,此时可以进行数据的收发操作。发送数据时,将数据存储于数组中并通过串口...

51单片机与vb通过串口通信,单片机为什么只能发送0至255的数?然后怎么...
可以发送多次,分别发这个数的个十百千万位。然后用程序组合

VB串口发送接收
End Sub 这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。以下修改了LZde1代码,供参考:Option Explicit Dim strdataPrivate Sub Command1_Click() '发送HEX数据93 93 93 93 Dim send(3) As Byte send(0) = "&H93" send(1) = "&H93" ...

vb串口通信代码详解
这里推荐设置一个DataReceived事件,当串口接收到数据时,这个事件会被触发,然后可以从中读取数据。发送数据到串口的过程是通过调用SerialPort对象的Write()方法,将需要发送的数据写入串口。发送完毕后,可能会需要关闭串口,此时可以使用SerialPort对象的Close()方法来完成操作。在进行串口通信的过程中,还...

VB 如何用:socket 发送数据
1、首先看控件区有无串口控件,表明串口控件并未被启用,选择工程→部件→Micosoft comm Control6.0选项,点击应用,即可添加串口控件。2、绘制两个text控件用于存储串口需要收发的数据。一个button控件用于发送指令,添加串口控件。3、编写程序: Private Sub Command1_Click() MSComm1.Output = Text2...

vb.net怎么实现串口传输文件
Public Class Form1 Private 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 String For Each port In...

VB三种读取串口数据的方式
第一种方式是使用MsComm控件。MsComm控件简化了串口通信的底层操作,开发者只需编写少量代码即可完成开发。这种方法最适合数据量不大、通信要求不高的场景。在使用MsComm控件时,需要特别注意以下几个属性:1. Settings属性:以字符串形式设置并返回波特率、奇偶校验位、数据位和停止位。这个属性非常重要,不同...

VB怎么通过串口收发数据,谢谢,我是新手,希望能附上代码,感激
VB里面有串口控件MSComm。 使用比较简单的。提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。1.MSComm控件两种处理通讯的方式 MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。1.1 事件驱动方式 事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多...

怎么用VB控制串口发送10进制数据
有两种方式可以实现,一种是使用byte数组进行完成,二是通过字符串格式进行发送 这个要看你发送的数据值范围是多少咯 255以内的使用byte就行。超过这个可以使用字符串格式发送。