10 OPEN"cOMM2:4800,N,8,1,CD0,DS0,CS0" FOR RANDOM AS #1
100 'MAIN LOOP
110 PRINT #1,"SERS=AUTO"
130 PRINT #1, "UN=C"
120 K$=INKEY$:IF K$>CHR$(34) GOTO 300
220 LINE INPUT #1,A$
230 PRINT A$
240 K$=INKEY$:IF K$>CHR$(34) GOTO 300
250 GOTO 100
300 'END PROGRAM
310 CLOSE
320 ENDVB 代码
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Dim cl As String
'初始化
Private Sub Form_Load()
'Dim cl As String
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1" MSComm1.InputLen = 0
MSComm1.PortOpen = True '打开串口
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = 0
MSComm1.RThreshold = 1
MSComm1.Output = "SERS=AUTO" '发送控制命令
MSComm1.Output = "UN=C"
End Sub'串口中断处理
Private Sub MSComm1_OnComm()
Dim in_data As String
Dim chanel As String
Select Case MSComm1.CommEvent '判断MSComml通讯事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件
Sleep (100)
Buffer = MSComm1.Input
Text1.Text = Buffer
Case Else
MsgBox "出错啦!"
End Select
End Sub在QB中运行正确,而VB运行没有反应呢?
100 'MAIN LOOP
110 PRINT #1,"SERS=AUTO"
130 PRINT #1, "UN=C"
120 K$=INKEY$:IF K$>CHR$(34) GOTO 300
220 LINE INPUT #1,A$
230 PRINT A$
240 K$=INKEY$:IF K$>CHR$(34) GOTO 300
250 GOTO 100
300 'END PROGRAM
310 CLOSE
320 ENDVB 代码
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Dim cl As String
'初始化
Private Sub Form_Load()
'Dim cl As String
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1" MSComm1.InputLen = 0
MSComm1.PortOpen = True '打开串口
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = 0
MSComm1.RThreshold = 1
MSComm1.Output = "SERS=AUTO" '发送控制命令
MSComm1.Output = "UN=C"
End Sub'串口中断处理
Private Sub MSComm1_OnComm()
Dim in_data As String
Dim chanel As String
Select Case MSComm1.CommEvent '判断MSComml通讯事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件
Sleep (100)
Buffer = MSComm1.Input
Text1.Text = Buffer
Case Else
MsgBox "出错啦!"
End Select
End Sub在QB中运行正确,而VB运行没有反应呢?
MSComm1.CommPort = 1 '你确定是com1口?MSComm1.RThreshold = 1 '若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件,如果设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
MSComm1.RTSEnable = True '确定是否使 Request To Send (RTS) 线有效。一般情况下,由计算机发送 Request To Send 信号到联接的调制解调器,以请示允许发送数据。
'当 RTSEnable 设置为 True,端口打开时,Request To Send 线设置为高电平,端口关闭时,设置为低电平。
'Request To Send 线用在 RTS/CTS 硬件握手。RTSEnable 属性允许手动检测 Request To Send 线以确定其状态。MSComm1.SThreshold = 1 '在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
'若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。
'若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
'如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。
'comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。
'例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。
'如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。'没有以上三行(默认设置)就不能收到返回的信息,也不能接收短信
MSComm1.CommPort = 4 '设置端口号码,控件手工设置无效,必须重新指定
MSComm1.Settings = "9600,N,8,1" '9600波特,无奇偶校验,8位数据,一个停止位,可省略
MSComm1.PortOpen = True '打开端口,不,可省略MSComm1.Output = "AT" & vbCr '告诉MODEM发送的是AT命令
MSComm1.Output = "SERS=AUTO" & vbCr
MSComm1.Output = "UN=C" & vbCr
MSComm1.Output = "SERS=AUTO & vbCr
MSComm1.Output = "UN=C" & vbCr[/code]
MSComm1.Output = "SERS=AUTO & vbCr
MSComm1.Output = "UN=C" & vbCr
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'初始化
Private Sub Form_Load()
'Dim cl As String
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1" MSComm1.InputLen = 0
MSComm1.PortOpen = True '打开串口
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = 0
MSComm1.RThreshold = 1
MSComm1.Output = "SERS=AUTO" '发送控制命令
MSComm1.Output = "UN=C"
End Sub
'串口中断处理
Private Sub MSComm1_OnComm()
Dim in_data As String
Dim chanel As String
Dim Buffer As String
Select Case MSComm1.CommEvent '判断MSComml通讯事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件
Sleep (100)
Buffer = MSComm1.Input
Text1.Text = Buffer
Case Else
MsgBox "出错啦!"
End Select
End Sub
QB是这样的:
31 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 8: SC1: 95
32 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
33 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
34 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
35 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
36 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 8: 5.15713
37 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
38 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
39 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
40 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
41 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 2: C.
42 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
43 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
44 9:19:29 ntvdm.exe IRP_MJ_READ Serial0 SUCCESS Length 0:
45 9:19:29 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0
46 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: S
47 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: E
48 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: R
49 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: S
50 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: =
51 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: A
52 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: U
53 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: T
54 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: O
55 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
56 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: U
57 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: N
58 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: =
59 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: C
60 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
1 9:23:25 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask:
2 9:23:25 VB6.EXE IOCTL_SERIAL_CLR_DTR Serial0 SUCCESS
3 9:23:25 VB6.EXE IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
4 9:23:25 VB6.EXE IRP_MJ_CLEANUP Serial0 SUCCESS
5 9:23:25 VB6.EXE IRP_MJ_CLOSE Serial0 SUCCESS
6 9:23:26 VB6.EXE IRP_MJ_CREATE Serial0 SUCCESS Options: Open
7 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
8 9:23:26 VB6.EXE IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 1024 OutSize: 512
9 9:23:26 VB6.EXE IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
10 9:23:26 VB6.EXE IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:5000
11 9:23:26 VB6.EXE IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
12 9:23:26 VB6.EXE IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
13 9:23:26 VB6.EXE IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
14 9:23:26 VB6.EXE IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
15 9:23:26 VB6.EXE IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
16 9:23:26 VB6.EXE IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
17 9:23:26 VB6.EXE IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
18 9:23:26 VB6.EXE IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
19 9:23:26 VB6.EXE IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 4800
20 9:23:26 VB6.EXE IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
21 9:23:26 VB6.EXE IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
22 9:23:26 VB6.EXE IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
23 9:23:26 VB6.EXE IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:9 Replace:80 XonLimit:256 XoffLimit:256
24 9:23:26 VB6.EXE IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: RXABORT RXCLEAR
25 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
26 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
27 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
28 9:23:26 VB6.EXE IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT TXCLEAR
29 9:23:26 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
30 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
31 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
32 9:23:26 VB6.EXE IRP_MJ_WRITE Serial0 SUCCESS Length 9: SERS=AUTO
33 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
34 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
35 9:23:26 VB6.EXE IOCTL_SERIAL_GET_PROPERTIES Serial0 SUCCESS
36 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
37 9:23:26 VB6.EXE IRP_MJ_WRITE Serial0 SUCCESS Length 6: UN = C
38 9:23:26 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
39 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
40 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
41 9:23:26 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK Serial0
42 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
43 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
MSComm1.Output = "UN=C" 改为:dim Buff() as byte buff()=strconv("SERS=AUTO",vbfromunicode)
MSComm1.Output = buff() '发送控制命令
buff()=strconv("UN=C",vbfromunicode)
MSComm1.Output = buff()
46 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: S
47 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: E
48 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: R
49 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: S
50 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: =
51 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: A
52 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: U
53 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: T
54 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: O
55 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
56 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: U
57 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: N
58 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: =
59 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: C
60 9:19:29 ntvdm.exe IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
VB拦截到的是
32 9:23:26 VB6.EXE IRP_MJ_WRITE Serial0 SUCCESS Length 9: SERS=AUTO
33 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
34 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
35 9:23:26 VB6.EXE IOCTL_SERIAL_GET_PROPERTIES Serial0 SUCCESS
36 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
37 9:23:26 VB6.EXE IRP_MJ_WRITE Serial0 SUCCESS Length 6: UN = C
38 9:23:26 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
39 9:23:26 VB6.EXE IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
40 9:23:26 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
应该也是发送对了的啊。怎么不正确呢?
"SERS=AUTO" & Chr(13) & "UN=C" & Chr(13)
那么VB的代码如下:
Option Explicit
Dim Buffer As String
Private Sub Command1_Click()
MSComm1.Output = "SERS=AUTO" & Chr(13) & "UN=C" & Chr(13) '发送控制命令
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "4800,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True '打开串口
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = 0
MSComm1.RThreshold = 1
End Sub
'串口中断处理
Private Sub MSComm1_OnComm()
Dim in_data As String
Dim chanel As String
Select Case MSComm1.CommEvent '判断MSComml通讯事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件
Buffer = Buffer & MSComm1.Input
Text1.Text = Buffer
'Case Else
'MsgBox "出错啦!"
End Select
End Sub
他不听
我的代码是从我自己写的程序里抠出来的
是AT命令
那是按你的代码在QBASIC下调试获得的.
Chr(13)是回车符,也即vbCr,其ASCII值是13(16进制为0X0D)
此外接收代码有改动.