android在线程里面关闭串口,串口读不到数据,子线程会自动退出吗?

int sum = commDev.BytesToRead();

while (sum > 0)

{

iRead = commDev.ReadByte();

if (iRead 

{

break;

}

switch (dev.AddByte((byte)iRead))

{

case enDeviceResult.通讯结束:

DeviceList.RemoveAt(0);

if (DeviceList.Count == 0)

{

commDev.Close();

}

commFlag = CommFlag.Idle;

tTicks = DateTime.Now.Ticks;

break;

case enDeviceResult.校验错误:

commFlag = CommFlag.Encoding;

tTicks = DateTime.Now.Ticks;

break;

case enDeviceResult.校验正确:

commFlag = CommFlag.Encoding;

iRetry = 1;

tTicks = DateTime.Now.Ticks;

break;

default:

break;

}

}

//if (((DateTime.Now.Ticks - tTicks) >= 20000000) && (commFlag == CommFlag.Rx))

//{

//    if (iRetry == 0)

//    {

//        commFlag = CommFlag.Idle;

//        if (DeviceList.Count == 0)

//        {

//            if (CommMessage != null)

//            {

//                CommMessage(this, "通讯设备已清空!");

//            }

//            break;

//        }

//        DeviceList.RemoveAt(0);

//        if (DeviceList.Count == 0)

//        {

//            commDev.Close();

//        }

//    }

//    else

//    {

//        iRetry--;

//        commFlag = CommFlag.Encoding;

//    }

//}

break;

}

}

}

3、子线程中两个读取串口的方法

SerialPort spComm = new SerialPort();

public int BytesToRead()

{

if (spComm.IsOpen == false)

{

Close();

return -1;

}

return spComm.BytesToRead;

}

public int ReadByte()

{

if (spComm.IsOpen == false)

{

Close();

return -1;

}

return spComm.ReadByte();

问题:要采集的电表是DL645_97协议的(浙江立新),波特率是1200,偶校验。

(1)电表波特率低,可能返回的比较少,第一次只读取了3字节。

有时候是“254 254 104”,这个是正确的。

有时候是“254,254,232”,这个应该是错误的,不明白232是什么意思?

(2)读完前三个字节,再次循环去读取数据的时候,数据读不到了。   读不到数据“貌似这个读数据的线程”会退出,以为主窗体重新显示了,跳出了断点,Why???   也就是第四次执行“ReadByte()”的时候,主窗体就会重新跳出来(开始的时候已经出来了)。

(3)用串口调试助手手动发送报文,返回报文是没有问题的,20个字节,很完整,而且响应很快,1秒内完成。

为什么自己写的程序去读串口一次只能读三字节。就算放大了线程Sleep的时间(5分钟),会变成四字节,第一个字节还不正确,不是“FEH”。

(4)第四次执行“ReadByte()”的时候,主窗体就会重新跳出来(开始的时候已经出来了)。这不是说明没有读到字节,读数据的这个线程自动终止了???

(5)改怎么样才能读取到完整的返回报文?  应该修改那里呢?

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值