我去年开发过一个串口通讯的程序
定义一个VARIENT数组,将该数组如下所示取值:
dim aa as varient
aa=mscomm1.Input
定义一个VARIENT数组,将该数组如下所示取值:
dim aa as varient
aa=mscomm1.Input
解决方案 »
- vb ListView网格线颜色可以设置吗?
- 对论坛有点失望!但是再次提问!期待有人回答!
- 请教高手atl&&com入门
- 关于common dialig小问题一个(在线)
- 模式窗体显示时不能显示非模式窗体?万分火急!!在线等啊!
- 这段代码运行后,VB提示错误‘424’, “无对象”?错在哪里?
- 怎样才能不让msgbox以独占方式打开?
- 太奇怪了,高手幫幫忙啊,急死個人哪~~~~~!
- 请问怎样创建并打开带有密码的access数据库
- 有人知道outlook和foxmail的通讯簿的格式吗?谢谢!急!!
- 大家好:有什么办法可以捕捉到comm1(串口)的所有事件
- 我用MSCOMM接收单片机发向串口的二进制数,如FF,FE 急急!
dim aa as varient
aa=mscomm1.Input
取数值也只需用VARIENT 数进行:
mscomm1.output=aa
machunfeng老兄,你做出来了吗?
然后设定波特率
如果利用事件接收发送应将MSCOMM的RThreshold=1及SThreshold=1,如果不利用通讯事件接收发送应置为0,
然后在通讯事件中利用INPUT OUTPUT 属性发送和接收数据
具体的看看MADN,有详细的介绍
Dim intI As Integer
Dim intCheck As Integer
Dim dblData As Double
Dim strChar As String
Dim blnError As Boolean
'*** 届けたデータを受信する
strChar = ""
Select Case MSComm1.CommEvent
'*** Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
'*** Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of chars.
strChar = MSComm1.Input
Case comEvSend ' There are SThreshold number of characters in the transmit buffer.
Case comEvEOF ' An EOF charater was found in the input stream
End Select
'*** 受信した一つ文字を処理する
If Len(strChar) = 0 Then Exit Sub
Select Case strChar
Case Chr(2):
mstrInput = strChar
Case Else:
mstrInput = mstrInput & strChar
End Select
If Len(mstrInput) < 8 Then Exit Sub
'*** 確認として、ACK信号を発送する
MSComm1.Output = Chr(&H6)
'*** 受信した文字行をチェックする
mstrBuffer = mstrInput
mstrInput = ""
blnError = False '*** 先ず、エラーがなしにセットする
intCheck = 0 '*** BCC の始値
For intI = 1 To 8
strChar = pfAnsiMidB(mstrBuffer, intI, 1)
Select Case intI
Case 1: '*** STX
If strChar <> Chr(2) Then
blnError = True
End If
Case 2 To 6: '*** データ
If strChar < "0" Or strChar > "9" Then blnError = True
Case 7: '*** ETX
If strChar <> Chr(3) Then blnError = True
Case 8: '*** BCC
'If (intCheck Mod 256) <> Asc(strChar) Then blnError = True
End Select
If Not blnError Then intCheck = intCheck + Asc(strChar)
Next intI
'*** 受信したデータが不正だったら、今回の電文を廃棄にする。
If blnError Then Exit Sub dblData = CDbl(pfAnsiMidB(mstrBuffer, 2, 5))
End Sub
[email protected]
多谢!
' 保存输入子串的缓冲区
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
End Sub'接收数据MSComm1.Input,有两种方法:
'1、事件驱动
' 缓冲区变化后,产生OnComm,响应时间并接收处理,适应于不等个数据包长或随时发送而不是定时发送,如:
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement' 错误
Case comEventBreak ' 收到 Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR Timeout。
Case comEventFrame ' Framing Error
Case comEventOverrun '数据丢失。
Case comEventRxOver'接收缓冲区溢出。
Case comEventRxParity' Parity 错误。
Case comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB] 时意外错误 ' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of chars.
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '
'
Case comEvEof ' 输入数据流中发现 EOF 字符
'
End Select
End Sub
'2、定时接收
Private Sub Timer1_Timer()
Buffer$ = MSComm1.Input
End Sub
'发送数据MSComm1.Output
Dim datas[10] as byte
Dim datasend
datas[1]=1
datas[2]=11
datas[3]=21
datas[4]=41
datas[5]=71
'.
'.
'.
datasend=datas
MSComm1.Output = "要发送的数据,可以是字符或二进制数据"
MSComm1.Output = datasend
'最后关闭串行端口。
MSComm1.PortOpen = False
--------------------------------------------------------------------------------