标题:QserialPort接收的问题
作者:harold00124
日期:2016-12-01 09:53
内容:
小弟现在用RS232与硬体沟通
硬体会发送一笔5Byte长度的资料
目前因为硬体部份工程师还没做完没办法实测
所以我现在也还不知道硬体发送的状况是如何
而且依照小弟之前练习的经验 有时后插座插拔时模拟器的程式有时会接到一些脉冲乱码
问题1:小弟要如何确保5个Byte接收完毕才让程式执行编译
问题2:接收到的资料要如何分割成1个byte分别放入阵列内?
问题3:要如何确保脉冲乱码不会导致我接收资料的长度出现错误
比方说程式接收到
1byte脉冲乱码 5byte资料(1) 5byte资料(2) 5byte资料(3) 5byte资料(4)
程式编译到 脉冲乱码+4Bbyte资料(1)1byte资料(1)+4byte资料(2)............
导致整个程式由前到后读取的资料都变的不正确
#1 [uidab 12-01 11:04]
修改协议,增加起始和结束字节判断。
比如约定AAAAAA,三个字节起始。ZZZZZZ三个字节结束。
#2 [harold00124 12-01 11:29]
谢谢版大的回应 请教一下有没有相关的范例能够查找呢? 因为小弟刚学 脑袋中会用的代码还不多
#3 回 harold00124 的帖子 [uidab 12-01 12:44]
harold00124:谢谢版大的回应 请教一下有没有相关的范例能够查找呢? 因为小弟刚学 脑袋中会用的代码还不多 (2016-12-01 11:29)
以前写的都是MFC的,估计找起来也不容易了。你可以搜一下,网上这方面还是挺多的。
#4 [harold00124 12-02 18:09]
小弟现在是以传输的资料作XOR当做除错 因为本身传输就有添加检查码在内
但是目前碰的状况是有时后传输的资料速度可能不完整 比方说可能一次5byte 7byte 3byte 或者多到破百byte
现在搞不懂该从何下手
自己手写了几个条件但是就是不知道该如何着手 小弟QT跟C++是同时间入门的 目前刚学1个月还非常的渣
1:如果緩存數大於5 暫停發送請求
2:如果緩存數並非5的基數 等待傳送直到長度正確才做下個動作
因为老板要求检查要频繁 所以我的发送请求用Timer设定为1ms
runTime->start(1);//定時器時脈 ms
//定時器連結槽
connect(runTime,SIGNAL(timeout()),this,SLOT(TimeDeary()));void MainWindow::TimeDeary()//定時器
{
WidthRead(Dsp[DspPoint]);
DspPoint+=1;
if(DspPoint>23)
{
DspPoint=0;
}
}
传送要求後硬体会返回相对应的资料
void MainWindow::Rxreaddate()//解码將值編號取出並呼叫副程式
{
bool ok;
int Read_Data[4];
QString Strcode[256];
Rx=Rxserialport->readAll();
int Rxlength=Rx.length();
for(int i=0;i