Как подсказывает кто-то еще в комментариях к вашему вопросу, это, безусловно, похоже на то, что вы пишете в порт:
port.Write("<STX>02<FS>0011000<FS>0020<ETX><LRC>");
необходимо полностью перевести на ASCII.
Сначала определите управляющие символы ASCII :
private byte[] STX = new byte[] { 0x02 };
private byte[] EXT = new byte[] { 0x03 };
private byte[] FS = new byte[] { 0x1C };
Вам также нужна функция для расчета LRC, основанная на остальной части сообщения. Я взял этот :
public static byte calculateLRC(byte[] bytes)
{
byte LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC ^= bytes[i];
}
return LRC;
}
Затем преобразуйте числовые строки в сообщении в байты, используя кодировку ASCII:
byte[] bytes1 = System.Text.Encoding.ASCII.GetBytes("02");
byte[] bytes2 = System.Text.Encoding.ASCII.GetBytes("0011000");
byte[] bytes3 = System.Text.Encoding.ASCII.GetBytes("0011000");
Создаем новый блок памяти для хранения сообщения:
var message = new MemoryStream();
Добавьте байты, которые мы хотим отправить к нашему сообщению, кусками:
message.Write(STX, 0 , 1);
message.Write(bytes1, 0, bytes1.Length);
message.Write(FS, 0 , 1);
message.Write(bytes2, 0, bytes2.Length);
message.Write(FS, 0 , 1);
message.Write(bytes3, 0, bytes3.Length);
message.Write(EXT, 0 , 1);
Рассчитать LRC:
var LRC_msg = calculateLRC(message)
Добавить к сообщению:
message.Write(LRC_msg, 0, LRC_msg.Length);
И, наконец, запишите это в порт:
port.Write(message, 0, message.Length);
Вам также следует учитывать, что журнал, который вы видите, может вводить вас в заблуждение цифровой частью сообщения. Если вы все еще не получили ответ, возможно, пришло время взглянуть на реальные данные о порте. Для этого вы можете открыть терминал типа Termite или RealTerm . Я не уверен, как работает упомянутый вами симулятор, но я предполагаю, что это программное обеспечение и ему нужен последовательный порт, к которому он подключается для отправки данных. Если это так, вы можете попробовать перенаправить два реальных или виртуальных последовательных порта на вашем компьютере, как я объяснил здесь .
Было также предложено , что вам может потребоваться прервать вашу команду с помощью CR или LF.