添加自研批检仪检测命令
This commit is contained in:
@@ -1,86 +1,78 @@
|
||||
#include "codec_slave.h"
|
||||
#include "base/crc.h"
|
||||
|
||||
|
||||
myarray codec_slave::encode(int srcAddr, int dstAddr, int cmd, myarray data)
|
||||
{
|
||||
Q_UNUSED(srcAddr);
|
||||
myarray t;
|
||||
uint16_t len=data.size()+10;
|
||||
cmd_no++;
|
||||
Q_UNUSED(srcAddr);
|
||||
myarray t;
|
||||
uint16_t len = data.size() + 10;
|
||||
cmd_no++;
|
||||
|
||||
t.append('Y');
|
||||
t.append('e');
|
||||
t.append(len&0xff);
|
||||
t.append(len>>8);
|
||||
t.append(char(0));// 源地址
|
||||
t.append(char(dstAddr&0xff));// 目标地址
|
||||
t.append(cmd);// 命令码
|
||||
t.append(cmd_no&0xff);
|
||||
t.append(cmd_no>>8);
|
||||
t.append(data);
|
||||
t.append(crc::crc8((uint8_t *)t.data(),t.size()));
|
||||
return t;
|
||||
t.append('Y');
|
||||
t.append('e');
|
||||
t.append(len & 0xff);
|
||||
t.append(len >> 8);
|
||||
t.append(char(0)); // 源地址
|
||||
t.append(char(dstAddr & 0xff)); // 目标地址
|
||||
t.append(cmd); // 命令码
|
||||
t.append(cmd_no & 0xff);
|
||||
t.append(cmd_no >> 8);
|
||||
t.append(data);
|
||||
t.append(crc::crc8((uint8_t *)t.data(), t.size()));
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
myarray codec_slave::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
|
||||
{
|
||||
myarray r;
|
||||
QString str_err="ok";
|
||||
if(data.size()<10)
|
||||
{
|
||||
// 一帧数据至少10字节
|
||||
qWarning("recv data len too less");
|
||||
str_err="recv data len too less.";
|
||||
return r;
|
||||
}
|
||||
uint16_t len=data[2]|(data[3]<<8);
|
||||
uint8_t crc=crc::crc8((uint8_t *)data.data(),data.size()-1);
|
||||
if(len!=data.size())
|
||||
{
|
||||
// 如果长度不相等则产生了数据丢失
|
||||
qWarning("recv data have lossed");
|
||||
str_err="recv data have lossed.";
|
||||
return r;
|
||||
}
|
||||
srcAddr=data[4];
|
||||
dstAddr=data[5];
|
||||
uint16_t no=data[7]|(data[8]<<8);
|
||||
uint16_t h_no=cmd_no;
|
||||
if(no!=h_no)
|
||||
{
|
||||
// 发送一条指令应等待其返回,此时流水号应相同
|
||||
//qWarning()<<"alave_addr="<<src_addr<<" cmd_no error:host="<<h_no<<",slave="<<no<<endl;
|
||||
//return r;
|
||||
//str_err="cmd no err.";
|
||||
}
|
||||
if(crc!=uint8_t(data[len-1]))
|
||||
{
|
||||
// crc校验不对
|
||||
qWarning("recv data crc check error:%02x,%02x",crc,uint8_t(data[len-1]));
|
||||
qWarning("data=%s",data.toHex(' ').data());
|
||||
str_err="crc check err.";
|
||||
}
|
||||
cmd=data[6];
|
||||
r=data.mid(9,len-10);
|
||||
myarray r;
|
||||
QString str_err = "ok";
|
||||
if (data.size() < 10)
|
||||
{
|
||||
// 一帧数据至少10字节
|
||||
qWarning("recv data len too less");
|
||||
str_err = "recv data len too less.";
|
||||
return r;
|
||||
}
|
||||
uint16_t len = data[2] | (data[3] << 8);
|
||||
uint8_t crc = crc::crc8((uint8_t *)data.data(), data.size() - 1);
|
||||
if (len != data.size())
|
||||
{
|
||||
// 如果长度不相等则产生了数据丢失
|
||||
qWarning("recv data have lossed");
|
||||
str_err = "recv data have lossed.";
|
||||
return r;
|
||||
}
|
||||
srcAddr = data[4];
|
||||
dstAddr = data[5];
|
||||
uint16_t no = data[7] | (data[8] << 8);
|
||||
uint16_t h_no = cmd_no;
|
||||
if (no != h_no)
|
||||
{
|
||||
// 发送一条指令应等待其返回,此时流水号应相同
|
||||
// qWarning()<<"alave_addr="<<src_addr<<" cmd_no error:host="<<h_no<<",slave="<<no<<endl;
|
||||
// return r;
|
||||
// str_err="cmd no err.";
|
||||
}
|
||||
if (crc != uint8_t(data[len - 1]))
|
||||
{
|
||||
// crc校验不对
|
||||
qWarning("recv data crc check error:%02x,%02x", crc, uint8_t(data[len - 1]));
|
||||
qWarning("data=%s", data.toHex(' ').data());
|
||||
str_err = "crc check err.";
|
||||
}
|
||||
cmd = data[6];
|
||||
r = data.mid(9, len - 10);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Codec *codec_slave_get()
|
||||
{
|
||||
static Codec *codec_=nullptr;
|
||||
if(codec_==nullptr){
|
||||
codec_=new codec_slave();
|
||||
}
|
||||
return codec_;
|
||||
static Codec *codec_ = nullptr;
|
||||
if (codec_ == nullptr)
|
||||
{
|
||||
codec_ = new codec_slave();
|
||||
}
|
||||
return codec_;
|
||||
}
|
||||
|
||||
|
||||
codec_export(codec_slave,codec_slave_get);
|
||||
|
||||
|
||||
|
||||
|
||||
codec_export(codec_slave, codec_slave_get);
|
||||
|
Reference in New Issue
Block a user