串口接受数据存在mysql中_关于串口接收并解析数据

在处理串口接收的数据时,由于数据帧可能不完整或交错,需要先缓存数据,确保一帧数据的完整性和时间正确性。通过检查数据头和尾来判断数据包,并将其存储到MySQL数据库中。
摘要由CSDN通过智能技术生成

这个必须要将数据进行缓存,因为一次来的数据可能并不是你所期望的一帧数据,可能多,也可能少,同时可能由于某种原因,一帧数据没有完,后一帧的数据又来了,会导致数据错乱,所以也要确定一帧数据到达的时间,超过了时间就丢弃。

var msg = Encoding.Default.GetString(this.buf.ToArray());                         //2.完整性判断

while (msg.Length > BeginOfLine.Length + EndOfLine.Length)//至少要包含头(2字节)+长度(1字节)+校验(1字节)

{

if (msg.IndexOf(BeginOfLine) == 0)

{

if (msg.IndexOf(EndOfLine) > 0)

{

this.Raw = new byte[msg.IndexOf(EndOfLine) - BeginOfLine.Length + 1];

this.buf.CopyTo(BeginOfLine.Length, this.Raw, 0, msg.IndexOf(EndOfLine) - BeginOfLine.Length);

this.buf.RemoveRange(0, msg.IndexOf(EndOfLine) + EndOfLine.Length);                         if (this.buf.Count > 0)

{

msg = Encoding.Default.GetString(this.buf.ToArray());

}

else msg = "";

this.OnGetNew(this.Raw);

}

else

{

break;

}

}

else

{

//这里是很重要的,如果数据开始不是头,则删除数据

int index = msg.IndexOf(BeginOfLine);

if (index > 0)

{

this.buf.RemoveRange(0, index);

msg = msg.Substring(index,msg.Length- index);

}

else

{

if(this.buf.Count>0)this.buf.RemoveAt(0);

msg = "";

}

}

Qt是一个跨平台的C++应用程序开发框架,其包括了QSerialPort模块,用于处理串口通信。如果你想在Qt接收串口数据,并将其存储到数据库,可以按照以下步骤操作: 1. **设置串口连接**: - 首先,你需要创建一个`QSerialPort`实例,并指定要监听的串口名称(如COM1、COM3等)。设置波特率、数据位、停止位和校验位。 ```cpp QSerialPort serialPort("COM1", baudRate); serialPort.open(QIODevice::ReadWrite); ``` 2. **数据接收**: - 当串口有新数据可用时,你可以注册一个槽函数(slot)来处理接收到的数据,例如使用`readyRead()`信号。 ```cpp connect(&serialPort, &QSerialPort::readyRead, this, [this]() { QByteArray data = serialPort.readAll(); processReceivedData(data); }); ``` 3. **解析数据**: - `processReceivedData()`函数需要解析接收到的字节流(data),通常这会涉及到将字节转换为你想要的数据结构,比如字符串、整数或其他自定义类型。 4. **数据库操作**: - 使用Qt的数据库模块(QSqlDatabase、QSqlQuery等)连接到数据库(SQLite、MySQL、PostgreSQL等)。然后,根据业务需求,编写SQL查询并将数据。 ```cpp QSqlDatabase db("database_name"); db.open(); QSqlRecord record; record << "field1" << "field2"; // 根据实际数据结构填充字段 QSqlInsertStatement insertStatement(db); insertStatement.prepare("INSERT INTO table_name (fields) VALUES(:values)"); insertStatement.bindValue(":values", record); insertStatement.execute(); ``` 5. **错误处理**: - 一定要处理可能出现的错误,例如数据库连接失败、数据读取错误等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值