Прежде всего, ваш код выглядит неправильно.
Скорее всего, это работает, поскольку отправка FF 01 01, возможно, в порядке.
Тем не менее, вам нужен этот "/" в текстовом потоке.
Итак, эта строка кода должна быть:
Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H1) & "/" & chr(&H0)
Или, поскольку "/" равно 47 в ASCII, то это также будет хорошо:
Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H1) & chr(47) & chr(&H0)
И, 47 ("/") в HEX это 2F
Итак, это будет работать:
Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H1) & chr(&H2F) & chr(&H0)
Итак, что вам нужно для 2-й команды?
Вы хотите вывести этот FF A1 00
Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H0)
Теперь, вероятно, со временем у вас есть все виды команд. И написание вышесказанного довольно сложно,
Итак, вы бы хорошо сказали создать подпрограмму, которую вы можете вызывать.
Итак, это будет выглядеть так:
Sub WriteCommand(strCommand As String)
Dim strBuf As String
Dim i As Integer
strBuf = ""
For i = 1 To Len(strCommand) Step 3
strBuf = strBuf & Chr("&H" & Mid(strCommand, i, 2))
Next i
Open "COM4: 9600, N, 8.1" For Binary As #1
Put #1, , strBuf
Close #1
End Sub
То, что сказано выше, требует от вас, чтобы вы передали строку, и она будет скрывать ее для вас.
Так, например, ваша первая команда такая:
FF 01 01 / 00
Теперь, выше "/" является частью проблемы. «/» на самом деле 47 из таблицы ASCII.
Итак, вышеприведенное будет записано как
FF 01 01 2F 00
Итак, наша процедура для отправки выше будет:
Sub Ctestwr ()
Dim strCommand As String
' Note that hex 47 = / = 2F in hex
strCommand = "FF 01 01 2F 00"
Call WriteCommand(strCommand)
End Sub
Итак, чтобы отправить свою вторую команду, вы бы / могли сейчас go:
Call WriteCommand("FF A1 00")
Сейчас, Я подозреваю, что во многих случаях после отправки команды вы, вероятно, захотите подождать или получить ответ обратно. Не ясно, отправляет ли устройство результат, а затем ключ возврата, или что результат ВСЕГДА одинаковой длины. Вы бы хорошо узнали эту информацию, так как тогда подпрограмма NEXT, которую вы напишете, объединит приведенный выше код и некоторый код для возврата / захвата / получения ответа, и, вероятно, превратит его обратно в красивую строку HEX с пробелами между каждое значение.
Итак, с помощью описанной выше простой процедуры:
Вы можете легко отправить любую команду. Просто помните, что вы не можете использовать «/» в строке - вы должны заменить его на 47 (& H2F) (но просто запишите это число).
Итак, теперь для отправки любой команды , вы можете просто сделать это:
Sub Ctestwr()
' Note that hex 47 = / = 2F in hex
Call WriteCommand("FF 01 01 2F 00")
End Sub
Теперь, когда вышеперечисленное сработает, вы можете использовать вышеприведенное или создать новую команду, которая отправляет команду, а также возвращает ответ обратно.
Итак, вы можете go:
dim strResult as string
strResult = CmdAndResponse("FF 01 01 2F 00")
' strResult would now have the response sent from the machine
Итак, идея в том, что вы создали подпрограмму для отправки команды. И это так просто в использовании, поскольку теперь мы можем просто ввести шестнадцатеричную строку (с пробелом между каждым значением). Это выписало бы строку как двоичные значения. И тогда он будет ждать ответа и плюет вам обратно.