1)今天在做与6001进行对接,后来需要扫描设备地址,我做了个循环
for (int i = 1; i < 50; i++)
{
if (scanResultFlag)
{
byte[] msg = ModbusRtu2.readModbusRtuRegister(i, 10 - 1, 1);
userComControlMeter.serialSendMsg(msg);
showMessageTolog("读设备地址", msg);
Thread.Sleep(500);
}
else
{
break;
}
}
本以为在接收端进行数据解析,接收到数据,然后就break跳出循环,但是与设想的不一致,虽然接收到了数据,但是并不能进行parseScan(),估计是for(50)循环占据了主线程,只有在主线程全部结束后,才能进行解析,所以,最后全部运行完毕后,报出了地址=10的提示
DelgateCOMFourFaithConnect delgateCOMMeterConnectByte = new DelgateCOMFourFaithConnect(showRead6001Info);
Invoke(delgateCOMMeterConnectByte, buffer);
private void parseScan(byte[] buffer)
{
if (buffer[1] == 0x03)
{
byte[] bScrq = new byte[2];
Array.Copy(buffer, 3, bScrq, 0, 2);
txt_sbdz.Text = ByteCalculator.byte2Int(bScrq[0], bScrq[1]).ToString();
showMessageTolog("设备地址返回", buffer);
MessageBox.Show("设备地址="+ ByteCalculator.byte2Int(bScrq[0], bScrq[1]).ToString());
delByteToByteList(buffer);
}
else
{
delByteToByteList(buffer);
}
}