串口发送4000来个数据的文件,发第一次行,发第二次为什么就不行了呢?要关了重新运行程序才能在发(不过发些小的数据可以多次发送,不用重新运行程序)这是为什么呢?
解决方案 »
- 如何为窗体增加一个事件呢?我想在窗体hide后,再次show出来时,触发一个自定义事件
- 帮帮忙吧!!把这两条语句合在一起...在线等
- can't use a public user define type wthin a private object module啥意思
- 请问怎么从Dim ladoData As New Recordset中查出为"合格"记录的总数?
- 急!!!!关于Cia XP Suite 2.15 的打包问题
- 如何选定相同字符?
- 我可否达到这个效果?
- 急等初学问题 如何用vb来打印报表
- 文件共享的问题!!!!!!!
- 《大话西游之对付女鬼2之阴魂不散的十九种方法》
- 请问这本VB教程的书名是什么?哪个网站有售?
- 用ADOData控件作了一个窗体,后来再次打开时发现,要我输入用户密码等,点击否的话还不能直接看到窗体了.....
下面是我串口通讯的代码:
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 1024
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1 '设置接收一个字节就产生OnComm事件
MSComm1.InputMode = comInputModeBinary '采用二进制传输*****
MSComm1.PortOpen = True
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Text6 = ""
Text7 = ""
Timer1.Enabled = False
Timer1.Interval = 10
End SubPrivate Sub Command1_Click() '发送
Dim NextLine As String
Dim Txt_sj As String
Dim yTemp() As Byte
ReDim yTemp((Len(Text1) + 24) / 2 - 1)
Dim i As Integer
yTemp(0) = &H97
yTemp(1) = &H0
yTemp(2) = &H1
yTemp(3) = &HFF
yTemp(4) = &HB1
yTemp(5) = "&H" & Hex(Combo1.ListIndex + 1)
yTemp(6) = "&H" & Hex(Combo2.ListIndex + 1)
yTemp(7) = "&H" & Hex(Combo3.ListIndex + 1)
yTemp(8) = "&H" & Hex(Text4)
yTemp(9) = &H0
yTemp(11) = &H0
yTemp(12) = &H0
For i = 1 To Len(Text1) Step 2
yTemp((i - 1) / 2 + 12) = "&H" & Mid(Text1, i, 2) '0X**
Next Ulen = UBound(yTemp)
Llen = LBound(yTemp)
Yu_sum = (Ulen + 1) Mod 128
for_Sum = (Ulen + 1) \ 128
Picture1.Print "字节长= "; Ulen + 1; "循环次数= "; for_Sum; "余数= "; Yu_sum '格式:[对象.]Print[表达式表][,l;]
ReDim sj(Ulen)
For i = 0 To Ulen
sj(i) = yTemp(i)
Next
If for_Sum > 0 Then
Timer1.Enabled = True
j = Timer
'j.Refresh
ElseIf for_Sum = 0 Then
MSComm1.Output = yTemp
End If
End Sub
Private Sub Timer1_Timer() 'timer控制节奏发送
Static sum As Long
Dim i As Integer
ReDim dataSend(127) As Byte
For i = 0 To 127
If sum >= for_Sum Then
Exit For
End If
dataSend(i) = sj(i + sum * 128)
Next
MSComm1.Output = dataSend
sum = sum + 1
If sum >= for_Sum Then
'Cmd_Fsend '发送剩余字节
Text2 = " " & Mid((Timer - j), 1, 5) & " 秒"
Text2.Refresh
Timer1.Enabled = False '关闭定时器
'发送yu_sum If Yu_sum > 0 Then
ReDim dataSend(Yu_sum - 1)
For i = 0 To Yu_sum - 1
dataSend(i) = sj(128 * for_Sum + i)
Next
MSComm1.Output = dataSend
End If
End If
End Sub
Option Explicit
Dim strData As String
Dim bytInput() As Byte
Dim dataSend() As Byte
Dim yTemp() As Byte
Dim SJ() As Byte
Dim i As Long
Dim Ulen As Long
Dim Llen As Long
Dim for_Sum As Long
Dim Yu_sum As Integer
Dim strfFleName As String
Dim sum As Integer '将sum定义从过程中取消,放窗体声明处Private Sub cmdOpen_Click()
Dim str1 As String
Dim NextLine As String
Dim Txt_sj As String
Dim yTemp() As Byte
CommonDialog1.ShowOpen
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Text6 = ""
strData = ""
str1 = ""
DoEvents
strfFleName = CommonDialog1.FileName
Text6 = Timer
Text6.Refresh
Open strfFleName For Input As #1
Do While Not EOF(1)
Input #1, str1
strData = strData & Right(str1, 2) '& Chr(13) & Chr(10)
Loop
Close
Text1 = strData
ReDim yTemp(Len(strData) / 2 - 1)
Dim i As Integer
For i = 1 To Len(strData) Step 2
yTemp((i - 1) / 2) = "&H" & Mid(strData, i, 2)
Next
Ulen = UBound(yTemp)
Llen = LBound(yTemp)
Yu_sum = (Ulen + 1) Mod 256
for_Sum = (Ulen + 1) \ 256
Print "字节长= "; Ulen + 1; "循环次数= "; for_Sum; "余数= "; Yu_sum
ReDim SJ(Ulen)
For i = 0 To Ulen
SJ(i) = yTemp(i)
Next
sum = 0 '开始发送时将Sum初始化为0
If for_Sum > 0 Then
Timer1.Enabled = True
Text2 = Timer
Text2.Refresh
ElseIf for_Sum = 0 Then
Cmd_Dsend
End If
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 1024
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Text6 = ""
Timer1.Enabled = False
Timer1.Interval = 100
End SubPrivate Sub Timer1_Timer() '大数据包分解为多个小数据包
Dim i As Integer
ReDim dataSend(255) As Byte
For i = 0 To 255
If sum >= for_Sum Then
Exit For
End If
dataSend(i) = SJ(i + sum * 256)
Next
MSComm1.Output = dataSend
sum = sum + 1
If sum >= for_Sum Then
Cmd_Fsend '发送剩余字节
Text3 = Timer
Text3.Refresh
Timer1.Enabled = False
End If
End SubPrivate Sub Cmd_Dsend()
ReDim dataSend(Yu_sum - 1)
For i = 0 To Yu_sum - 1
dataSend(i) = yTemp(i)
Next
MSComm1.Output = dataSend
End SubPrivate Sub Cmd_Fsend()
Text4 = Timer
Text4.Refresh
If Yu_sum > 0 Then
ReDim dataSend(Yu_sum - 1)
For i = 0 To Yu_sum - 1
dataSend(i) = SJ(256 * for_Sum + i)
Next
MSComm1.Output = dataSend
End If
Text5 = Timer
Text5.Refresh
End Sub
Dim str1 As String
Dim NextLine As String
Dim Txt_sj As String
Dim yTemp() As Byte
Text1 = "" '以下8行都执行初始数据
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Text6 = ""
strData = ""
str1 = ""
DoEvents
CommonDialog1.ShowOpen
strfFleName = CommonDialog1.FileName
Text6 = Timer
Text6.Refresh
Open strfFleName For Input As #1
Do While Not EOF(1)
Input #1, str1
strData = strData & Right(str1, 2) '& Chr(13) & Chr(10)
Loop
Close
Text1 = strData
ReDim yTemp(Len(strData) / 2 - 1)
Dim i As Integer
For i = 1 To Len(strData) Step 2
yTemp((i - 1) / 2) = "&H" & Mid(strData, i, 2)
Next
Ulen = UBound(yTemp)
Llen = LBound(yTemp)
Yu_sum = (Ulen + 1) Mod 256
for_Sum = (Ulen + 1) \ 256
Print "字节长= "; Ulen + 1; "循环次数= "; for_Sum; "余数= "; Yu_sum
ReDim SJ(Ulen)
For i = 0 To Ulen
SJ(i) = yTemp(i)
Next
sum = 0 '开始发送时将Sum初始化为0
If for_Sum > 0 Then
Timer1.Enabled = True
Text2 = Timer
Text2.Refresh
ElseIf for_Sum = 0 Then
Cmd_Dsend
End If
End Sub