3000下位机串口通信
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
1、 数据链路MAC子层参数约定
波特率:115200
奇偶校验位:无
数据位: 8 bits,
停止位:1bit
2、 链路层帧
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
1.帧格式
消息格式:
STX
LENGTH
Message
ETX
LRC
2.各字段、控制字定义
名称
含义
取值
STX
帧开始标志
0x02
LENGTH
长度(2字节)
由Message长度决定
Message
发送的数据
由Message内容决定
ETX
帧结束标志
0x03
LRC
校验和
由STX和ETX之间的内容决定,不包含STX
3、 Message字段的结构
1.消息格式
LENGTH
TYPE
DATA TYPE
DATA
字段定义:
字段
字段长度
内容
1
LENGTH
2
数据部分长度
2
TYPE
0x38
结果传输消息的类型
3
DATA TYPE
0x01
类别
3
DATA
xx
数据
4、 测量结果传送
各种类型DATA数据字段格式、内容:
数据内容从高到低依次为:
1. 19项参数数据(与界面显示顺序相同),每项2字节,共38字节。
2. WBC直方图,256字节
3. RBC直方图,256字节
4. PLT直方图,128字节
5. 标杆参数,顺序为:WBC标杆,4字节;RBC标杆,2字节;PLT标杆,2字节;共8字节。
6. R1,R2,R3,R4,PM报警,每项1字节,共5字节。
7. WBC计数时间,2字节
8. RBC计数时间,2字节
四、传输端程序
case TRANSFER_RESULT:
{
tx_temp[1] = 0x02; //STX
tx_temp[1] = 0x02; //LENGHT
tx_temp[2] = 0xc5;
tx_temp[3] = 0x38; // TYPE
tx_temp[4] = 0x01; //DATA TYPE
tx_temp[5] = (uchar)(wbc >> 8); // WBC
tx_temp[6] = (uchar)wbc;
tx_temp[7] = (uchar)(w_scr >> 8); // LY%
tx_temp[8] = (uchar)w_scr;
tx_temp[9] = (uchar)(w_mcr >> 8); // MO%
tx_temp[10] = (uchar)w_mcr;
tx_temp[11] = (uchar)(w_lcr >> 8); // GR%
tx_temp[12] = (uchar)w_lcr;
tx_temp[13] = (uchar)(w_scc >> 8); // LY#
tx_temp[14] = (uchar)w_scc;
tx_temp[15] = (uchar)(w_mcc >> 8); // MO#
tx_temp[16] = (uchar)w_mcc;
tx_temp[17] = (uchar)(w_lcc >> 8); // GR#
tx_temp[18] = (uchar)w_lcc;
tx_temp[19] = (uchar)(rbc >> 8); // RBC
tx_temp[20] = (uchar)rbc;
tx_temp[21] = (uchar)(hgb >> 8); // HGB
tx_temp[22] = (uchar)hgb;
tx_temp[23] = (uchar)(hct >> 8); // HCT
tx_temp[24] = (uchar)hct;
tx_temp[25] = (uchar)(mcv >> 8); // MCV
tx_temp[26] = (uchar)mcv;
tx_temp[27] = (uchar)(mch >> 8); // MCH
tx_temp[28] = (uchar)mch;
tx_temp[29] = (uchar)(mchc >> 8); // MCHC
tx_temp[30] = (uchar)mchc;
tx_temp[31] = (uchar)(rdw_cv >> 8); // RDW_cv
tx_temp[32] = (uchar)rdw_cv;
tx_temp[33] = (uchar)(rdw_sd >> 8); //rdw_sd
tx_temp[34] = (uchar)rdw_sd;
tx_temp[35] = (uchar)(plt >> 8); // PLT
tx_temp[36] = (uchar)plt;
tx_temp[37] = (uchar)(mpv >> 8); // MPV
tx_temp[38] = (uchar)mpv;
tx_temp[39] = (uchar)(pdw >> 8); // PDW
tx_temp[40] = (uchar)pdw;
tx_temp[41] = (uchar)(pct >> 8); // MPV
tx_temp[42] = (uchar)pct;
for( i = 0; i < 256; i++ )
{
tx_temp[43 + i] = wbchist[i];
tx_temp[299 + i] = rbchist[i];
if( i < 128 )
tx_temp[555 + i] = plthist[i];
}
tx_temp[683] = swbclline;
tx_temp[684] = swbchline;
tx_temp[685] = lwbclline;
tx_temp[686] = lwbchline;
tx_temp[687] = rbclline;
tx_temp[688] = rbchline;
tx_temp[689] = pltlline;
tx_temp[690] = plthline;
tx_temp[691] = alarm.r1;
tx_temp[692] = alarm.r2;
tx_temp[693] = alarm.r3;
tx_temp[694] = alarm.r4;
tx_temp[695] = alarm.pm;
tx_temp[696] = alarm.wbctime >> 8;
tx_temp[697] = alarm.wbctime;
tx_temp[697] = alarm.rbctime >> 8;
tx_temp[699] = alarm.rbctime;
tx_temp[700] = bh[5];
tx_temp[701] = bh[4];
tx_temp[702] = bh[3];
tx_temp[703] = bh[2];
tx_temp[704] = bh[1];
tx_temp[705] = bh[0];
tx_temp[706] = timer.year;
tx_temp[707] = timer.month;
tx_temp[708] = timer.date;
tx_temp[709] = timer.hour;
tx_temp[710] = timer.minute;
tx_temp[711] = timer.second;
tx_temp[712] = 0x03; //ETX;
tx_temp[713] = 0;
for( i = 1; i < 713; i++ )
{
tx_temp[713] =
tx_temp[i] ^ tx_temp[713]; //LRC
}
}
break;