繁体   English   中英

串行通信 - 通过 Modbus 发送十六进制数据

[英]Serial Communication - Sending Hex Data via Modbus

我是使用 Modbus 通信的新手,我在这里找到了一些其他相关线程,但不幸的是,它适用于其他语言或使用 TCP 而不是 Modbus 的 RTU 连接。

所以我有这段 C# 代码可以用来发送数据:

  byte address = Convert.ToByte(txtSlaveID.Text);
  ushort start = Convert.ToUInt16(txtWriteRegister.Text);
  short[] value = new short[1];

  if(Int16.TryParse(txtWriteValue.Text, out short numberValue))
  {
     value[0] = numberValue; //This part works!
  }
  else
  {
     value = new short[3] { 0x52, 0x4E, 0x56 }; //This is where I am trying to send letters/ASCII
  }
                
 try
 {
     mb.SendFc16(address, start, (ushort)value.Length, value);
 }
     catch (Exception err)
 {
    WriteLog("Error in write function: " + err.Message);
 }

 WriteLog(mb.modbusStatus);

因此,当我想发送单个值时,此代码有效。 它将使用短数组并执行以下操作来构建数据包:

  //Put write values into message prior to sending:
  for (int i = 0; i < registers; i++)
  {
    message[7 + 2 * i] = (byte)(values[i] >> 8);
    message[8 + 2 * i] = (byte)(values[i]);
  }

如您所见,我尝试使用数组中的十六进制值,并将它们发送到寄存器。

这是我试图为 ASCII 字母写入的寄存器的图像

这是我应该使用的十六进制代码

如何修改第一个代码示例以便能够发送十六进制值,并将字符写入第一个图像中的寄存器空间?

我认为您无法在设备的寄存器中写入字符。 您不需要将十六进制值存储到短数组中。 只需将字符存储到数组中,在将它们写入寄存器之前将它们转换为字节。

注 - 无论将写入设备寄存器的数据都应以字节为单位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM