环境:
win 7
unity 2019.3.1
API core.net 4.x
串口发送的数据格式: FC 02 00 00 如此循环
我遇到的问题: 只能接收到串口数据的字节长度 252, 当然我也没法确认这个是不是串口数据的长度还是什么的其他数据, 不过根据代码的推断应该是数据长度, 即便 我将数据转换成 int 类型, 还是 252 而不是我所需要的数据
我的代码 DeBugSerial.cs
public class DeBugSerial : MonoBehaviour {
private SerialPort serialPort;
private Thread readPortData;
public int[] SpeedValueArr;
int ClientCount = 2;
public List<byte> listReceive = new List<byte>();
private void Start() {
SpeedValueArr = new int[ClientCount];
try {
serialPort = new SerialPort("COM9", 115200);
serialPort.ReadTimeout = 500;
if (!serialPort.IsOpen) {
serialPort.Open();
}
readPortData = new Thread(new ThreadStart(readData));
readPortData.IsBackground = true;
readPortData.Start();
} catch (Exception) {
throw;
}
}
/// <summary>
/// 读取数据
/// </summary>
private void readData() {
try {
while (serialPort != null && serialPort.IsOpen) {
byte addr = Convert.ToByte(serialPort.ReadByte());
serialPort.DiscardInBuffer();
listReceive.Add(addr);
ParseReceive();
}
} catch (Exception) {
throw;
}
}
/// <summary>
/// 打印数据
/// </summary>
void PrintData() {
string str = string.Empty;
for (int i = 0; i < listReceive.Count; i++) {
str += listReceive[i].ToString("X2"); //这里只会得到数据 FC
}
}
private void ParseReceive() {
if (listReceive.Count < ClientCount + 2) {
return;
}
for (int i = 0; i < ClientCount; i++) {
SpeedValueArr[i] = listReceive[listReceive.Count - 1 - i]; //这里只会得到数据 252
}
listReceive.RemoveRange(0, ClientCount + 2);
}
}
在外部调用数据的时候, 是调用 SpeedValueArr 数组中的数据, 但是只会得到 252
而正确是获取的数据应该是 FC 02 00 00 中后面的两个数据, 所以,我到底是哪一步出了问题? 这个串口是直接返回十进制的数据的, 所以不需要进行位运算, 直接截取就行
我的另一个朋友用 2018.3.8 然后 用的 .net 3.5 + .net 2.0 的话, 是可以正常显示数据的, 但是为什么我的 4.x 就不行, 请各位高手给指个方向
修改 .NET 版本即可