我用C#和.net 2.0
写这个我被设备发送的4字节数组作为单独的字节。
我目前以下列方式阅读
while(m_ReadThreadisRunning)
{
if(canRead)
{
lock (m_Serialport)
{
try
{
//Check if data read needs reset
if(DataRead[3] != 0)
{
m_ReadBuffer.Add(DataRead);
DataRead = new byte[4];
ReadCounter = 0;
}
int ByteRead = m_Serialport.ReadByte();
Debug.Log("Byte : " + ByteRead);
try
{
DataRead[ReadCounter] = ConvertIntToByte(ByteRead);
}
catch(Exception e)
{
Debug.Log("Error when setting element in DataRead");
}
finally
{
if(ByteRead != 0)
ReadCounter ++;
}
}
catch(TimeoutException e)
{
}
catch(Exception e)
{
ReadCounter = 0;
}
}
}
}
问题是多个设备可以同时向我发送信息,这会导致某些数据以错误的数组结束。
发送给我的字节数组总是以十六进制' 2f'并以结账金额结束。
对于我能做些什么来处理这个问题的任何建议都将不胜感激。
[编辑]
抱歉,我知道我错过了重要信息。所有设备都连接到同一端口。字节数组按以下顺序排列: - ' 2f' '设备ID' ' MSG' '校验和'
答案 0 :(得分:0)
我只是忽略了潜在的问题。
由于该方面外包,我无法控制硬件。
他包含一个我可以检查状态的命令,所以当我收到狡猾的数组时,我现在只需轮询所有设备的状态。但是当所有设备开始向我发送状态时,我更容易得到混淆信息。
我只是丢弃狡猾的数据并希望最好。
然而,我在业余时间开始构建简单的设备,所以我也可以覆盖项目的硬件部分。
我认为最好的选择是使用某种类型的HUB连接所有设备吗?
欢迎任何建议或说明。