前言
介绍一款将串口接收的数据绘制成曲线,方便观察和记录。
一、JXChart 是什么?
JXChart 是一个用于PC电脑端的UART数据接收工具,通过约定的通信协议进行数据传输,并将数据通过曲线的方式展示出来。
通过常见的数据接发(RX接收、TX发送),实现数据交互。软件界面如下图:
实际操作界面
下载地址
更多我们未能呈现的示例,还有待您在阅读文档、以及不断使用的过程,去深入挖掘。
最新app获取:
百度盘:https://pan.baidu.com/s/1xY1PU-we3AM3_545WFgZRQ?pwd=btij
腾讯微云:https://share.weiyun.com/qDfi5jLN
普通下载:直接下载
二、使用方法
1.硬件
需要PC电脑端支持串口功能(或USB转串口助手)
2.通信协议(内置协议)
方式1:带校验和通信-单笔数据
头码HEAD(2个字节) + 命令码CMD(1字节) + 数据长度LENGTH(1个字节) + 数据DATA(N字节) + 校验码CS(1字节)
HEAD:固定为0x4A 0x58
CMD:
0x01:无符号整型(1字节,标准C)
0x02:无符号整型(2字节,标准C)
0x03:无符号整型(4字节,标准C)
0x04:有符号整型(1字节,标准C)
0x05:有符号整型(2字节,标准C)
0x06:有符号整型(4字节,标准C)
0x07:有符号整型(2字节,高字节为符号)
0x08:有符号整型(3字节,高字节为符号)
0x09:有符号整型(5字节,高字节为符号)
0x0A:浮点型(3字节,标准C)
0x0B:浮点型(4字节,标准C)
LENGTH:即 DATA的总长度(不含CS)
DATA:数据包含了通道和对应的数值,DATA=通道[1字节]+数值VALUE[长度要根据CMD来选择]
CS等于HEAD、CMD、LENGTH、DATA单字节累计后取低8位,再取反。
例如,将一个长度为2字节的无符号整型数值“10000”,发送到通道“1”,则操作如下:
2字节的无符号整型对应的命令码CMD是0x02
send_buff[8]={0x4A,0x58,0x02,0x03,0x01,0x27,0x10,CS};
//0x4A,0x58 是头码
//0x02 是命令码
//0x03 是后面的数据长度(不含校验码)
//0x01 是通道编号
//0x27,0x10 是 10000 的 16 进制码(标准C写法)
Arduino 完整代码如下
void setup()
{
Serial.begin(9600);
}
void loop() {
//向通道 1 发送 10000 (2字节无符号整型)
char send_buff2[8]={0x4A,0x58,0x02,0x03,0x01,0x27,0x10,0x00};
//0x4A,0x58 是头码
//0x02 是命令码
//0x03 是后面的数据长度(不含校验码)
//0x01 是通道编号
//0x27,0x10 是 10000 的 16 进制码(标准C写法)
char CS2 = 0;
for(char i = 0;i< sizeof(send_buff2);i++){
CS2 += send_buff2[i];//累加
}
CS2 = ~(CS2&0xff);//累加后低8位取反
send_buff2[sizeof(send_buff2)-1]=CS2;//校验和写到数组的最后
Serial.write(send_buff2,sizeof(send_buff2));//
delay(1000);
}
其他格式命令范例请查看JXChart 曲线显示串口工具 - 带校验和通信
方式2:ASCII码传送
例如,发送到通道“CH1”,数值为“12345”,则操作如下:
依次发送 ASCII 码: {CH1,12345}
前提是需要将数值转换成 ASCII 码
例如数值 12345,对应的 16 进制是 0x30,0x39,那要如何才能转成 ASCII 码 12345 呢?
Arduino 发送方法举例
void setup()
{
Serial.begin(9600);
}
void loop() {
//向通道 CH1 发送 12345 ,发送的 ASCII 字符串格式是 {CH1,12345},对应的 16 进制如下
char start_code[]={
0x7B,//{ 头码
0x43,//C 通道名
0x48,//H 通道名
0x31,//1 通道名
0x2C,//, 逗号隔开
};
Serial.write(start_code,sizeof(start_code));//发送头码和通道名,并且用逗号隔开
int value=12345;//要发送的数值 12345
char value_buff[16]={0};
char pos=0;
while(value)
{
value_buff[pos]=value%10+0x30;//求余数。余数+0x30就可以转成ASCII码
value=value/10;
pos++;
}
//上面 value_buff 得到的是反序,即54321,需要从高往低发送,处理过程如下
for(char i=0;i<pos;i++)
{
Serial.print(value_buff[pos-i-1]);//
}
//之后发送结束码
char end_code[]={
0x7D,//} 结束码
};
Serial.write(end_code,sizeof(end_code));//发送结束码
//char buff[11]={0x7B,0x43,0x48,0x31,0x2C,0x31,0x32,0x33,0x34,0x35,0x7D};
//Serial.write(buff,11);//
//0x7B 代表 ASCII 码 {
//0x43,0x72,0x31 代表 CH1 。也可以是其他英文字母或者数字的 ASCII 码值,即 0~9、A~Z、a~z,对应的 16 进制范围是 0x30~0x39、0x41~0x5A、0x61~0x7A
//0x44 是分割符,固定为 0x44
//0x31,0x30,0x30,0x30,0x30 ASCII 代表 12345
//0x7D 代表 ASCII 码 }
delay(1000);
}
对应的ascii字符串格式是:
Serial.write("{CH1,12345}",11);//向 CH1 通道发送 12345
方式3:固定头码结束码传送
如果觉得校验码计算或者数值转ASCII码很麻烦,可以采用这种方式来发送
例如要向通道 11 发送正整数 10000
void setup()
{
Serial.begin(9600);
}
void loop() {
//向通道 11 发送正整数 10000(2字节整型)。
char buff2[11]={0xA1,0xA1,0xA1,11,0x27,0x10,0xB1,0xB1,0xB1};
//0xA1,0xA1,0xA1,0xA1 是头码
//11 是通道编号
//0x27,0x10 是 10000 的 16 进制码(标准C写法)
//0xB1,0xB1,0xB1,0xB1 是结束码
Serial.write(buff2,sizeof(buff2));
delay(1000);
}
其他格式命令范例请参考JXChart 曲线显示串口工具 - 固定头码结束码传送
3.下载地址
更多我们未能呈现的示例,还有待您在阅读文档、以及不断使用的过程,去深入挖掘。
最新app获取:
百度盘:https://pan.baidu.com/s/1xY1PU-we3AM3_545WFgZRQ?pwd=btij
腾讯微云:https://share.weiyun.com/qDfi5jLN
普通下载:直接下载
总结
曲线显示,更直观、更高效。
使用说明参考
JXChart 曲线显示串口工具 - 命令协议创建
JXChart 曲线显示串口工具 - 连续命令交互
JXChart 曲线显示串口工具 - 带校验和通信
JXChart 曲线显示串口工具 - ASCII码传送
JXChart 曲线显示串口工具 - 固定头码结束码传送