简单的C ++ / CLI SerialPort ReadByte(至少,所以我想......)

时间:2016-08-24 14:52:45

标签: c++ arduino byte rs485

所以,我正在使用VisualStudio中的C ++ / CLI和基于Arduino的板。我的目标是通过RS485实现MODBUS。

所以我的开发设置如下......

笔记本电脑通过FTDI USB-RS485接口电缆连接到Maxim MAX3485芯片,该芯片连接到Arduino串口" Serial1"。

我一直在Visual Studio中编写我的MODBUS协议,并通过要求Arduino响应5个寄存器(5字节数组)的内容来测试它。 除了某些原因,一切都有效,当我检查结果时,返回字节会被分成两部分。

I.E ...我从Arduino发送以下字节:

0 A 0 14 0 1E 0 28 0 32

A实际上是" 0A",但终端窗口仅将其显示为" A"。计算机上的软件接收字节,并将它们存储在一个数组中。然后我将屏幕上显示的字节显示为文本。我得到的是:

0 A 0 1 4 0 1 E 0 2 8 0 3 2

看起来是正确的,除了" 1&之间的空间。 4"," 2& 8"等...告诉我我有14个字节而不是我发出的10个字节。

我在屏幕上以空格分隔显示每个字节。我验证了使用单独的COM端口上的终端窗口正确格式化的字节离开,所以问题必须在于读取字节?

我的Arduino代码:

// Print to terminal window to verify bytes leaving
  Serial.print("Sending:-  "); 
  for (int x = 0; x < i_Index; x++) {

    Serial.print(DataTxRegister[x], HEX);
    Serial.print(" ");

  }
  Serial.println(" ");


  // CONFIGURE 485 CHIP TO TX MODE
  digitalWrite(CNTL_PIN, HIGH);
  delay(5);

  // TRANSMIT ALL DATA FROM TX REGISTER
  for (int x = 0; x < i_Index; x++) {

    Serial1.print(DataTxRegister[x], HEX);

  }

  i_Index = 0;
  delay(5);
  // CONFIGURE 485 CHIP BACK TO RX MODE
  digitalWrite(CNTL_PIN, LOW);

Visual Studio代码

阅读字节....

int8_t Byte;
// DATA RECIEVED FROM ARDUINO / DEVICE USING MODBUS PROTOCOL
if(sender == this->serialPort1){

    Msg.Message_Length = 0;
    while (this->serialPort1->BytesToRead != 0) {

    Byte = this->serialPort1->ReadByte;         
    if (Byte != -1) {

        Msg.Incoming_Bytes[Msg.Message_Length++] = (Byte);
    }


    }

this->BeginInvoke(gcnew EventHandler(this, &Form1::DisplayMBRecieved));
}

显示字节...

this->textBox1->AppendText("\r\n");
this->textBox1->AppendText("Bytes Received: ");
this->textBox1->AppendText(Convert::ToInt32(Msg.Message_Length).ToString("X8") + "  :-  ");

for (unsigned int i = 0; i < Msg.Message_Length; i++) {

    this->textBox1->AppendText(Convert::ToString(Convert::ToChar(Msg.Incoming_Bytes[i])));

    this->textBox1->AppendText(" ");

}

Msg.Message_Length = 0;

0 个答案:

没有答案