摘要:逛github時(shí)看到這個(gè)QT的串口示波器,完全開源,支持串口、TCP、波形顯示、通信協(xié)議。感覺很不錯(cuò),跟以前分享的那個(gè)vofa+有點(diǎn)像。感興趣的可以下載下來學(xué)習(xí)學(xué)習(xí)。
Sailor Project功能說明

串口調(diào)試助手功能
- 支持傳統(tǒng)的串口調(diào)試助手的基本收發(fā)功能,同時(shí)可以刷新大量的數(shù)據(jù)而不卡頓
- 支持保存接收的數(shù)據(jù)
- 支持最大200條可編輯指令的設(shè)置,并用于多條發(fā)送
- 支持定時(shí)器發(fā)送
- 支持換行符替換時(shí)間戳功能
- 支持較多的中文編碼格式
- 值得注意的是支持Linux簡(jiǎn)單的串口調(diào)試
- 支持加載csv表格數(shù)據(jù)到200條可編輯指令
- 支持部分窗口配置的保存和重啟恢復(fù)(前提是你不會(huì)刪除配置文件)
操作說明
注意由于QT自帶文本顯示窗口加載大量數(shù)據(jù)后會(huì)造成軟件卡頓,現(xiàn)解決方案為設(shè)定一個(gè)顯示緩沖區(qū),在有刷新數(shù)據(jù)階段(即串口接收數(shù)據(jù)階段),如果需要保持刷新狀態(tài)(即實(shí)時(shí)顯示接收得數(shù)據(jù)),則僅顯示顯示緩沖區(qū)的內(nèi)容,你可以使用鼠標(biāo)移動(dòng)向上滾動(dòng)條,停止數(shù)據(jù)刷新,同時(shí)當(dāng)你向上移動(dòng)滾動(dòng)條到一定程度,便會(huì)開始加載所有數(shù)據(jù),如果你想再次觸發(fā)實(shí)時(shí)刷新數(shù)據(jù)狀態(tài),只需要將滾動(dòng)條移動(dòng)到最低端,并確保有數(shù)據(jù)接收。
由于保存數(shù)據(jù)為顯示界面的數(shù)據(jù),如果出于刷新狀態(tài),則無法保存所有數(shù)據(jù),正確的做法是關(guān)閉串口后,將滾動(dòng)條移動(dòng)到最頂端,加載全部數(shù)據(jù),然后保存窗口數(shù)據(jù)。
TCPServer界面





SEASKY串口通信協(xié)議
通信方式是串口,配置為波特率115200, 8位數(shù)據(jù)位, 1位停止位, 無硬件流控, 無校驗(yàn)位。
1、通信協(xié)議格式
幀頭 | 設(shè)備類型 | 設(shè)備ID | 數(shù)據(jù)ID | 幀尾 |
---|---|---|---|---|
protocol_header(4-byte) | equipment_type(2-byte) | equipment_id (2-byte) | data_id(2-byte) | frame_tail(2-byte,CRC16,整包校驗(yàn)) |
2、幀頭詳細(xì)定義

3、串口通信協(xié)議
intparse_protocol(protocol_struct*pProtocol,uint16_tparseDataLen)
{
//解析數(shù)據(jù),使用前需提前緩沖pProtocol->message_st.pData
intret=-1;
uint16_tpos_offset;
frame_struct*pFrameStruct=&pProtocol->frame_st;
message_struct*pMessageStruct=&pProtocol->message_st;
if(check_protocol_heade(pMessageStruct->pData)==PROTOCOL_RESULT_OK)
{
//更新幀頭數(shù)據(jù)
pFrameStruct->header.sof=pMessageStruct->pData[0];
//獲取data段的數(shù)據(jù)長(zhǎng)度
pFrameStruct->header.data_length=(pMessageStruct->pData[2]<8)|(pMessageStruct->pData[1]);
pFrameStruct->header.crc_check=pMessageStruct->pData[3];
//獲取此次數(shù)據(jù)包長(zhǎng)度
pMessageStruct->data_len=pFrameStruct->header.data_length+PROTOCOL_DATA_OFFSET+2;
//計(jì)算解析后得到的data_union數(shù)據(jù)長(zhǎng)度
pFrameStruct->frame_user.cmd_data.data_len=(pFrameStruct->header.data_length)/sizeof(data_union);
if(pMessageStruct->data_len<=parseDataLen)
????????{
????????????if(pMessageStruct->data_len<=?pMessageStruct->max_data_len)
{
if(CRC16_Check_Sum(&pMessageStruct->pData[0],pMessageStruct->data_len)!=0)
{
pFrameStruct->frame_user.equipment_type=(pMessageStruct->pData[5]<<8)|(pMessageStruct->pData[4]);
pFrameStruct->frame_user.equipment_id=(pMessageStruct->pData[7]<8)|(pMessageStruct->pData[6]);
pFrameStruct->frame_user.data_id=(pMessageStruct->pData[9]<8)|(pMessageStruct->pData[8]);
//拷貝data段指定長(zhǎng)度數(shù)據(jù)
ret=(int)memcpy(&pFrameStruct->frame_user.cmd_data.pData[0],&pMessageStruct->pData[PROTOCOL_DATA_OFFSET],pFrameStruct->header.data_length);
pos_offset=pFrameStruct->header.data_length+PROTOCOL_DATA_OFFSET;
pFrameStruct->frame_tail=(pMessageStruct->pData[pos_offset+1]<8)|(pMessageStruct->pData[pos_offset]);
returnPROTOCOL_RESULT_OK;
}
else
{
//待解析BUFF超過預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sumerr!
");
returnPROTOCOL_RESULT_CHECK_FRAME_ERR;
}
}
else
{
//待解析BUFF超過預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
pMessageStruct->data_len,
pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//通過包頭計(jì)算,還未收到完整的數(shù)據(jù)包
//PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
//pMessageStruct->data_len,
//pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//待解析BUFF超過預(yù)定解析數(shù)據(jù)容量,避免內(nèi)存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_headeerr!
");
returnPROTOCOL_RESULT_CHECK_HEAD_ERR;
}
PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_headeok!
");
returnPROTOCOL_RESULT_ERR;
}
軟件截圖




項(xiàng)目開源地址:
https://github.com/SEASKY-Master/vSailorProject
-
示波器
+關(guān)注
關(guān)注
113文章
6879瀏覽量
193123 -
串口
+關(guān)注
關(guān)注
15文章
1596瀏覽量
81379 -
Qt
+關(guān)注
關(guān)注
2文章
317瀏覽量
39886
原文標(biāo)題:一個(gè)開源的QT的串口示波器,很nice!
文章出處:【微信號(hào):FANYPCB,微信公眾號(hào):凡億PCB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于QT的串口調(diào)試工具設(shè)計(jì)

QT串口通信的簡(jiǎn)單使用

Qt串口通信專題教程
基于Qt的串口通信應(yīng)用研究與實(shí)現(xiàn)嚴(yán)賢
基于RS232串口實(shí)現(xiàn)PIC單片機(jī)下位機(jī)與QT上位機(jī)通信

Qt小項(xiàng)目之串口助手控制LED

QT 串口示波器的串口調(diào)試助手功能
【飛凌OKA40i-C開發(fā)板試用體驗(yàn)】QT實(shí)現(xiàn)串口助手

分享一個(gè)開源的QT的串口示波器
QT篇QT上位機(jī)串口編程

QT實(shí)現(xiàn)簡(jiǎn)單的上位機(jī)軟件

Qt5實(shí)現(xiàn)上位機(jī)與串口通信

EtherCAT運(yùn)動(dòng)控制器實(shí)時(shí)數(shù)據(jù)的Qt示波器

評(píng)論