各位大侠:现在小弟遇到一问题需要帮助,请指教一二,小弟不胜感激。我利用MSCOMM控件做数据通讯的程序,其中有收发数据的操作,
我怎么发"680C000000004601040100000000"
对方收到68 0C 00 00 00 00 46 01 04 01 00 00 00 00
现在我发"680C000000004601040100000000"
我现在用串口调试工具十六进制收到:00 F8 78 00 FF 00 00 00 00 00 80 00 78 1E 00 00 E0 00 00 78 00 00 80 00 00 00 00
串口调试工具直接收到 x€xx€
代码如下:在函数中
Dim a As String
a = "680C000000004601040100000000"
' Modem.Output = a '终端与主站建立连接后,发初始化报文
Call SENDCCOM(Modem, a)
对应的调用
Public Sub SENDCCOM(Modem As MSComm, mrr As String)
Dim sss() As Byte
Dim i As Integer
Dim l As Integer
Dim X As Integer
Dim Y As Integer
Dim Send_data As Byte
Dim T_len As Integer
Modem.OutBufferCount = 0
Modem.InBufferCount = 0
EVMSG$ = "free!"
If EVMSG$ = "free!" Then
EVMSG$ = "busy!"
T_len = Len(mrr)
For i = 1 To T_len Step 2
X = Asc(Mid(mrr, i, 1))
If X < 65 Then
X = X - 48
Else
If X < 97 Then
X = X - 55
Else
X = X - 87
End If
End If
Y = Asc(Mid(mrr, i + 1, 1))
If Y < 65 Then
Y = Y - 48
Else
If Y < 97 Then
Y = Y - 55
Else
Y = Y - 87
End If
End If
Send_data = X * 16 + Y
l = ConvertC(ChrB(Send_data), sss)
'sss = ChrB(Send_data)
' Frmss.Text6.Text = Frmss.Text6.Text + "-" + Hex(Send_data)
Modem.Output = sss
EVMSG$ = "free!"
Next i
Else
MsgBox "串口正忙,发送错误"
End IfEnd Sub
我怎么发"680C000000004601040100000000"
对方收到68 0C 00 00 00 00 46 01 04 01 00 00 00 00
现在我发"680C000000004601040100000000"
我现在用串口调试工具十六进制收到:00 F8 78 00 FF 00 00 00 00 00 80 00 78 1E 00 00 E0 00 00 78 00 00 80 00 00 00 00
串口调试工具直接收到 x€xx€
代码如下:在函数中
Dim a As String
a = "680C000000004601040100000000"
' Modem.Output = a '终端与主站建立连接后,发初始化报文
Call SENDCCOM(Modem, a)
对应的调用
Public Sub SENDCCOM(Modem As MSComm, mrr As String)
Dim sss() As Byte
Dim i As Integer
Dim l As Integer
Dim X As Integer
Dim Y As Integer
Dim Send_data As Byte
Dim T_len As Integer
Modem.OutBufferCount = 0
Modem.InBufferCount = 0
EVMSG$ = "free!"
If EVMSG$ = "free!" Then
EVMSG$ = "busy!"
T_len = Len(mrr)
For i = 1 To T_len Step 2
X = Asc(Mid(mrr, i, 1))
If X < 65 Then
X = X - 48
Else
If X < 97 Then
X = X - 55
Else
X = X - 87
End If
End If
Y = Asc(Mid(mrr, i + 1, 1))
If Y < 65 Then
Y = Y - 48
Else
If Y < 97 Then
Y = Y - 55
Else
Y = Y - 87
End If
End If
Send_data = X * 16 + Y
l = ConvertC(ChrB(Send_data), sss)
'sss = ChrB(Send_data)
' Frmss.Text6.Text = Frmss.Text6.Text + "-" + Hex(Send_data)
Modem.Output = sss
EVMSG$ = "free!"
Next i
Else
MsgBox "串口正忙,发送错误"
End IfEnd Sub
你是想680C000000004601040100000000 这个当做字符串发送还是二进制式发送
如果你是以二进制方式,你应该定义一个Byte数组,然后将将它们放在这个数组里
比如dim bin(xx) as byte 'xx是你的长度
bin(0)=&H68
bin(1)=&hc0
....如果你是以字符方式发送的话,应该先将这个字符串转化为ANSI编号字串
dim bin() as byte
bin=strconv("68C0...",vbfromunicode) 'vbfromunicode 好像是这样拼写的两种方式都是同一种发送方法,就是
Modem.Output =bin
bytSendData(0) = &H68
bytSendData(1) = &H0C
....
bytSendData(13) = &h00mscomm1.output = bytSendData ' 16进制发送
T_len = Len(mrr)
For i = 1 To T_len Step 2
X = Asc(Mid(mrr, i, 1))
If X < 65 Then
X = X - 48
Else
If X < 97 Then
X = X - 55
Else
X = X - 87
End If
End If
Y = Asc(Mid(mrr, i + 1, 1))
If Y < 65 Then
Y = Y - 48
Else
If Y < 97 Then
Y = Y - 55
Else
Y = Y - 87
End If
End If
Send_data = X * 16 + Y
l = ConvertC(ChrB(Send_data), sss)'你既然是直接传一个十六进制的字符串(设置Modem为二进制式传输方式),可这样写:
Public Sub SENDCCOM(Modem As MSComm, mrr As String)
Dim ii As Integer,bytSendData() as Byte,jj As Integer
Redim bytSendData(Len(mrr)/2-1)
jj =1
For ii=0 to Ubound(bytSendData)
bytSendData(ii)=CInt("&H" & Mid(mrr,jj,2))
jj =jj +2
Next iiModem.Output = bytSendData
End Sub