Коммуникация на C # Delphi ComPort

#c# #delphi

#c# #delphi

Вопрос:

Я использую Visual Studio 2008 (C #) или Delphi CodeGear и создал программу, которая взаимодействует с устройством последовательного com-порта. Устройство отправляет мне данные в шестнадцатеричном формате, и я их читаю.Реальный пример — 40 32 00 D2 01 A6 B2 Первый байт «40» — это номер устройства. Второй байт «32» — это то, какая кнопка устройства была нажата. и т.д….

Мой вопрос в том, как искать байты отдельно.Когда я получаю 40 32 00 D2 01 A6 B2, я должен сказать, что это устройство ‘1’ (например) и на нем была нажата кнопка ‘2’ (например). Если кто-нибудь знает, как это сделать, я был бы очень благодарен за некоторую помощь.Спасибо

Комментарии:

1. Вы говорите, что «прочитали это». Как вы это читаете (в каком формате — строка, массив байтов, ??)?

2. Можете ли вы опубликовать некоторый код (только ту часть, где вы считываете входящие данные).

Ответ №1:

Я нашел этот код и использую его :

 void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //determine the mode the user selected (binary/string)
            switch (CurrentTransmissionType)
            {
                //user chose string
                case TransmissionType.Text:
                    //read data waiting in the buffer
                    string msg = comPort.ReadExisting();
                    //display the data to the user
                    DisplayData(MessageType.Incoming, msg   "n");
                    break;
                //user chose binary
                case TransmissionType.Hex:
                    //retrieve number of bytes in the buffer
                    int bytes = comPort.BytesToRead;
                    //create a byte array to hold the awaiting data
                    byte[] comBuffer = new byte[bytes];
                    //read the data and store it
                    comPort.Read(comBuffer, 0, bytes);
                    //display the data to the user
                    DisplayData(MessageType.Incoming, ByteToHex(comBuffer)   "n");
                    break;
                default:
                    //read data waiting in the buffer
                    string str = comPort.ReadExisting();
                    //display the data to the user
                    DisplayData(MessageType.Incoming, str   "n");
                    break;
            }
        }
  

И я получаю это «40 32 00 D2 01 A6 B2» (шестнадцатеричный формат) Я хочу, чтобы этот первый байт означал, что это устройство имеет номер 1, второй байт означает, что нажата кнопка с номером N и т.д. ….

Комментарии:

1. Выберите код, нажмите {} кнопку над редактором или Ctrl K .

2. В качестве альтернативы: <pre><code> your block of code </code></pre> .