我试图找出为什么简单的RS232传输不起作用。如这图片所示,我正在运行调试器来查看要传输的数据值。问题是,发送和接收的字节是完全不同的。我不知道这里出了什么问题。如果有人需要更多信息,请告诉我。
以下是代码段:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace ShimmerAPI
{
class Transmission
{
const short multiplier = -1020; // 10000/-9.81
byte[] Combine (byte[] a0, byte[] a1, byte[] a2)
{
byte[] ret = new byte[a0.Length + a1.Length + a2.Length];
Array.Copy(a0, 0, ret, 0, a0.Length);
Array.Copy(a1, 0, ret, a0.Length, a1.Length);
Array.Copy(a2, 0, ret, a0.Length + a1.Length, a2.Length);
return ret;
}
short Multiply (double x)
{
if (x > 25 || x < -25)
return 0;
else
return Convert.ToInt16(x * multiplier);
}
public void TransmitData (SerialPort port, ObjectCluster obj)
{
double[] data = obj.GetData().ToArray();
short X = Multiply(data[3]);
short Y = Multiply(data[5]);
short Z = Multiply(data[7]);
byte[] combBytes = Combine(BitConverter.GetBytes(Z), BitConverter.GetBytes(Y), BitConverter.GetBytes(X));
port.Write(combBytes, 0, 1);
}
}
}

发布于 2014-07-20 00:18:10
SerialPort.Write的第二个和第三个参数指定要发送的数组的一部分;您的代码只发送一个字节,因为这正是您所请求的(第三个参数,count,设置为1)。
我不知道嗅探器中的其他字节是否来自,但是索引0的字节,即11,是这个函数发送的唯一字节。
你可能是说
port.Write(combBytes, 0, combBytes.Length);https://stackoverflow.com/questions/24846154
复制相似问题