首先,感谢您抽出宝贵时间阅读我的问题。任何意见,将不胜感激。我目前正在Excel中从事VBA项目。我已经完成了大部分项目,但遇到了一个明显的小障碍。 有点背景故事。我正在编写Excel代码以通过CANUSB与PWM发生器进行通信。该设备通过USB连接到计算机,并且充当虚拟COM端口。我必须向其发送一个预先配置/预定的命令才能激活PWM。我先使用相关的com设置连接到终端腻子,然后对命令进行了测试。该设备正在使用腻子终端,但是当我发送相同的命令时,例如:t02180002F4012C01B80B(此处仅第一个字符为“ t”,其余所有字符均为十六进制),设备/ CANUSB不会通过该命令发送命令到PWM。我在这里看到的唯一问题是,当终端腻子正确解释或传递命令时,excel vba程序要么将其转换为其他内容,要么未发送正确的字符串。我也尝试过将十六进制转换为char,并且还以字符串形式发送。 关于我应该发送的命令的一些细节。第一个字符始终是t,其后是8字节大小的十六进制命令(即,每个字节都作为十六进制命令写入程序)。 这是我的一些代码(用于发送,使用的其他选项标记为注释):
Private Sub PWM_cmd_Send(ByVal cmd As String)
'I was first defining it as string then tried defining it as Variant
Dim Hex_Cmd As Variant
'Tried sending the direct whole command as input
If cmd = "Push" Then
Hex_Cmd_Final = "t02180002F4012C01B80B"
'Another way of setting the command that didnt work
'Hex_Cmd_Final = "t" & Chr(&H2) & Chr(&H18) & "0" & Chr(&H0) & "0" & Chr(&H2) & Chr(&HF4) & Chr(Hex_Cmd) & "0" & Chr(&H1) & Chr(&HB8) & "0" & Chr(&HB)
'Another option that didnt work
'Hex_Cmd_Final = Chr("t") + &H0 + &H2 + &H1 + &H8 + &H0 + &H0 + &H0 + &H2 + &HF + &H4 + &H0 + &H1 + &H0 + &H2 + &HC + &H0 + &H1 + &HB + &H8 + &H0 + &HB + vbCr
ElseIf cmd = "Pull" Then
Hex_Cmd_Final = "t02180001F4012C01B80B" + vbCr
'Hex_Cmd_Final = Chr("t") + &H0 + &H2 + &H1 + &H8 + &H0 + &H0 + &H0 + &H1 + &HF + &H4 + &H0 + &H1 + &H0 + &H2 + &HC + &H0 + &H1 + &HB + &H8 + &H0 + &HB + vbCr
'Hex_Cmd_Final = "t" & "0" & Chr(&H2) & Chr(&H18) & "0" & Chr(&H0) & "0" & Chr(&H1) & Chr(&HF4) & Chr(Hex_Cmd) & "0" & Chr(&H1) & Chr(&HB8) & "0" & Chr(&HB)
Else
MsgBox ("Something is wrong, command not being read correctly")
End If
'The command message is then sent over to another sub to be fowarded
'to the Virtual Com Port.
PWMcmdSend_Default (Hex_Cmd_Final)
End Sub
过程PWMcmd_Default使用
mclsComm2.Senden (cmd)
依次使用以下代码行发送命令(取自模块文件中定义的senden函数)
' Text senden
abyteBuffer = StrConv(Text, vbFromUnicode)
lngRet = WriteFile(mlngComHandle, VarPtr(abyteBuffer(0)), Len(Text), lngWritten, 0)
如果有人有任何建议,欢迎您。亲切的问候