我有一台采集数据的仪器
数据格式如下:
1 ,1, 1.581
1 ,恒Ⅲ94, 1.29, 359.5958, 95.1717, 17.176, 180, 264.4331, 17.176
2 ,A 1, 0, 282.0358, 57.4157, 14.899, 0, 0, 0
10 ,D 2, 0, 198.4823, 86.0519, 1.705, 0, 0, 0
11 ,2, 2, 296.3113, 91.4121, 26.126, 116.3128, 268.19, 26.124
12 ,2, 2, 296.3115, 91.4123, 26.124, 116.3128, 268.195, 26.124
13 ,3, 2.15, 187.0534, 89.0756, 42.879, 7.0524, 270.5145, 42.879
2 ,3, 1.592
14 ,1, 2.13, 359.5959, 89.2303, 42.884, 179.5958, 270.3658, 42.885
14 ,A 1, 0, 321.5439, 77.4724, 19.547, 0, 0, 0
我想用vb编写一个接收这样格式数据的程序
我在网上索很多例子 都说用MSComm1 但我不会用 不知那位高手帮帮忙
我的条件很简单 只要一个接收和保存按扭就行拉 另外就是接收时,一行一行的显示在text1.text中 我的接口是com1 通信口参数为 .Setting=“9600,N,8,1"
数据格式如下:
1 ,1, 1.581
1 ,恒Ⅲ94, 1.29, 359.5958, 95.1717, 17.176, 180, 264.4331, 17.176
2 ,A 1, 0, 282.0358, 57.4157, 14.899, 0, 0, 0
10 ,D 2, 0, 198.4823, 86.0519, 1.705, 0, 0, 0
11 ,2, 2, 296.3113, 91.4121, 26.126, 116.3128, 268.19, 26.124
12 ,2, 2, 296.3115, 91.4123, 26.124, 116.3128, 268.195, 26.124
13 ,3, 2.15, 187.0534, 89.0756, 42.879, 7.0524, 270.5145, 42.879
2 ,3, 1.592
14 ,1, 2.13, 359.5959, 89.2303, 42.884, 179.5958, 270.3658, 42.885
14 ,A 1, 0, 321.5439, 77.4724, 19.547, 0, 0, 0
我想用vb编写一个接收这样格式数据的程序
我在网上索很多例子 都说用MSComm1 但我不会用 不知那位高手帮帮忙
我的条件很简单 只要一个接收和保存按扭就行拉 另外就是接收时,一行一行的显示在text1.text中 我的接口是com1 通信口参数为 .Setting=“9600,N,8,1"
解决方案 »
- vb 6.0 TDBGrid列改为CheckBox,怎么打钩
- 有兴趣的朋友一起来研究:可以填空的文本输入框
- me.Controls 作为参数传递问题
- 关于使用webBrowser后,KeyPress不能用问题
- 还是WebBrowser的问题,如何处理按一个按扭后,弹出的Alert()函数?
- 一个时间格式转换问题
- 用vb中的shockwaveflash控件如何实现控制多个影片剪辑同时播放???高手请进!
- 很简单就是不会
- 谁能帮我写一段,在VB里做了数据库工程,现在要配置ODBC,能否不用手工配置,自己写在自己的程序里,用代码来实现.
- inputB(1,#1)在按字节读取WAVE文件时 会不会有遗漏?
- 計算出兩個日期之間為第幾星期
- 输入法怎么做?
1)CommPort:设置或返回串行端口号,其取值范围为1~99,缺省为1。
2)Setting设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomm.Setting="9600,N,8,1"。
3)PortOpen:打开或关闭串行端口,格式为:Mscomm.PortOpen={TRUE|FALSE}。
4)InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节。
5)InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区。
6)RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。
7)InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则INPUT读取整个缓冲区的内容。
8)Input:该属性表示从接收缓冲区移走一串字符。
9)OutBufferSize:设置或返回发送缓冲区,缺省为512字节。
10)OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
11)Output:向发送缓冲区传送一字符串。
12)EOFEnable:若置TRUE,则当输入中出现EOF,就停止输入并产生OnComm事件。
如果在通信过程中发生错误或事件,就会引发OnComm事件并且改变属性值,由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作,以下是部分属性常数值及其含义:
1)ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。
2)ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。
3)ComEventFrame:其值为1004,硬件检测到帧错误。
4)ComEventRxOver:其值为1008,接收缓冲区溢出。
5)ComEventTxFull:其值为1010,发送缓冲区溢出。
6)ComEventRxParity:其值为1009,奇偶校验。
7)ComEvEOF:其值为7,接收数据中出现文件结束(ASCII码为26)字符。
Private Sub Form_Load()
MSComm1.CommPort = 1 '设置或返回端口号,值为1到16的整数,PC通常可以有16个串口
MSComm1.InBufferSize = 1024 '设置接收缓冲区的大小
MSComm1.Settings = "9600,n,8,1" '设置并返回通讯参数,值为字符串String行
'MSComm1.Settings = BaudRate & ",n,8,1"
MSComm1.InputLen = 0 '设置或返回,从接收缓冲区读取的字符数,0时(默认),读取缓冲区全部字符
MSComm1.RThreshold = 1 '接收区的“门阀值”,0时(默认),不产生OnComm事件;1时,接收缓冲区每接收到一个字符,都会产生OnComm事件
MSComm1.SThreshold = 1 '发送区的“门阀值”,0时(默认),不产生OnComm事件;1时,发送缓冲区每接收到一个字符,都会产生OnComm事件
MSComm1.InBufferCount = 0
MSComm1.PortOpen = True '通讯时,必须打开串口,应用程序完成时,MSComm控件自动关闭串口
MSComm1.InputMode = comInputModeText
Text1.Text = ""end sub
private sub mscomm1_oncomm()
Dim number As Integer'确认串口事件
Select Case MSComm1.CommEvent
Case comEvReceive '2 :收到RThreshold个字符,持续产生事件,直到Input属性删除Input缓冲区的数据
Text1.Text = MSComm1.Input & Text1.Text
End Select
end sub
.....
Case comEvReceive
Text1.Text = MSComm1.Input & Text1.Text & che(13) & chr(10)
......
End Select
end subchr(13) & che(10)用来换行
你自己试着调试试试吧
Dim filefree As Integer
Dim k As Integer
Dim line, code
Dim comsetting As String
Dim nextline As String
Form1.CommonDialog1.DialogTitle = "保存为拓扑康GTS-701坐标数据文件"
Form1.CommonDialog1.Filter = "文本文件(*.TXT)|*.TXT|所有文件(*.*)|*.*"
Form1.CommonDialog1.Flags = &H2
Form1.CommonDialog1.filename = ""
Form1.CommonDialog1.ShowSave
infilename = Form1.CommonDialog1.filename
If infilename = "" Then
Exit Sub
End If
Form1.Caption = "全站仪与计算机通讯--" + infilename
comsetting = boundrate & "," & eocheck & "," & dataevent & "," & stopevent
If Form1.MSComm1.PortOpen = True Then
Form1.MSComm1.PortOpen = False
End If
Form1.MSComm1.CommPort = portnumber
Form1.MSComm1.Settings = comsetting
If handx = 1 Then
Form1.MSComm1.Handshaking = comNone
ElseIf handx = 2 Then
Form1.MSComm1.Handshaking = comXOnXoff
ElseIf handx = 3 Then
Form1.MSComm1.Handshaking = comRTS
ElseIf handx = 4 Then
Form1.MSComm1.Handshaking = comRTSXOnXOff
End If
'Form1.MSComm1.InBufferSize = 1024 取默认值
Form1.MSComm1.InputMode = comInputModeText
Form1.MSComm1.PortOpen = True
Form1.MSComm1.Output = "AT" + Chr(13)
Form1.Caption = "全站仪与计算机通讯--正在接收数据,请稍候..."
Form1.RichTextBox1.Text = ""
Form1.quxiao.Enabled = True
Form1.quxiao.Visible = True
Form1.comset.Enabled = False
Form1.datacom.Enabled = False
comk = True
Form1.MSComm1.InputLen = 100
Dim onealfa As String
Do
DoEvents
code = Form1.MSComm1.Input
Form1.RichTextBox1.SelStart = Len(Form1.RichTextBox1.Text)
For i = 1 To Len(code)
onealfa = Mid(code, i, 1)
If onealfa = Chr(26) Or onealfa = Chr(4) Then
Form1.RichTextBox1.SelText = code
Exit Do
ElseIf onealfa = Chr(10) Then
k = k + 1
Form1.Caption = "全站仪与计算机通讯--记录:" & k & " 正在接收,请稍候..."
End If
Next
Form1.RichTextBox1.SelText = code
Loop
Form1.Caption = "数据接收完毕!"
Form1.Timer1.Interval = 10000
Form1.Timer1.Enabled = True
Form1.Caption = "全站仪与计算机通讯"
Form1.MSComm1.PortOpen = False
Form1.RichTextBox1.savefile infilename, 1
Form1.comset.Enabled = True
Form1.datacom.Enabled = True
Form1.quxiao.Visible = False
rowcol
receivetxterr:
If Err.Number = 8180 Then
MsgBox Err.Description, vbOKOnly, App.Title
Form1.MSComm1.PortOpen = False
Exit Sub
End If
If Err.Number = 8002 Then
MsgBox Err.Description & vbCrLf & vbCrLf & "重新设置新的串行通讯端口试一试!", vbOKOnly, App.Title
Exit Sub
End If
End SubPrivate Sub saveeditfile_Click()
On Error GoTo patherr
Dim filename As String
filefree = FreeFile
Form1.CommonDialog1.DialogTitle = "保存为..."
Form1.CommonDialog1.Filter = "文本文件(*.TXT)|*.TXT|数据文件(*.DAT)|*.DAT|所有文件(*.*)|*.*"
Form1.CommonDialog1.filename = ""
Form1.CommonDialog1.Flags = &H2
Form1.CommonDialog1.ShowSave
filename = Form1.CommonDialog1.filename
If filename = "" Then Exit Sub
Form1.RichTextBox1.savefile filename, 1
Form1.Caption = "全站仪与计算机通讯--" + filename
rowcol
updatefile (filename)
patherr:
If Err.Number = 75 Then
MsgBox "文件可能正被别的程序使用!" & vbCrLf & vbCrLf & vbCrLf & "或者" & Err.Description & " !" & vbCrLf & vbCrLf & "请改正后重新保存。"
Exit Sub
End If
在做一个串口通讯的exe,PC端先循环发送握手信号&H20,一旦检测到握手成功,就发送命令信号&H2,然后再进行下一步操作。问题是:
在发送命令信号&H2时,根据打印的信息,下位机接收到的仍然是握手信号&H20,为什么会这样?
后来尝试在检测到握手成功后清空发送缓冲和接收缓冲,再发送命令信号,结果得不到改观;
而后又尝试在检测到握手成功后清空发送缓冲和接收缓冲、关闭串口,再打开串口,再执行清空发送缓冲和接收缓冲,再发送命令信号,结果仍得
不到改观。代码片断如下:
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_CODE) '&H20
If IsRxDataReady(1, 0) = True Then '
ReDim returnData(1)
returnData = ReadRxData(10)
If returnData(0) Then 'Handshak is OK ?
Exit Do
End If
End If
Loop MSComm1.OutBufferCount = 0 'clean buffer
MSComm1.InBufferCount = 0
MSComm1.PortOpen = False 'close com port OpenCommPort 'Open com port
MSComm1.OutBufferCount = 0 'clean buffer
MSComm1.InBufferCount = 0
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_COMMAND) '&H2
If IsRxDataReady(1, 0) = True Then
ReDim returnData(1)
returnData = ReadRxData(1)
If returnData(0) = CCHR Then 'Command is OK ?
Exit Do
End If
End If
Loop
但不知如何判断数据传送完毕.我用的是text 文件本框数据多了它就不动了 我想当数据传完了就 msgbox "数据传送完毕"但不知要判断那个条件