实验23 字符串协议解析实验
2026/6/8 13:44:25 网站建设 项目流程

1.实验目的

通过串口屏实现字符串协议解析。

2.实验工具

  1. 任意三易串口屏,本例程采用的型号为SANY-WQ-S43-02M-C
  2. VP开发软件

3.页面设计

3.1page0:

3.2控件功能简介

控件名称

控件类型

控件功能

datagrid1

数据表格 可见

string数据类型,显示解析后的字符串

var3

变量 不可见

string数据类型,缓存接收到的字符串

p

协议解析器 不可见

用串口接收字符串并手动解析

arr5

数组 不可见

string数据类型,储存解析后的字符串

4.逻辑实现

4.1控件功能简介

使用"stringSub(源字符串,起始位置,检测字符个数)"检测帧头,例如

// 返回字符串“==string,test,test1,test2,test3”中的某段字符,位置从第一个字符开始,向后取2个字符,并由文本控件text2显示,字符串会返回“==”
Text0.txt=stringSub("==string,test,test1,test2,test3",0,2);//如此可检测帧头
//即“==”为帧头
if(stringSub("==string,test,test1,test2,test3",0,2)=="==")//条件为真,进入解析字符串
{

}

4.2 删除帧头

使用“stringTrimStart(源字符串,帧头字符个数)”删除帧头,例如

// 移除字符串的前2个字符,text0.txt变为” string,test,test1,test2,test3”
if(stringSub("==string,test,test1,test2,test3",0,2)=="==")
{
text0.txt=stringTrimStart("==string,test,test1,test2,test3",2);
}

4.3 检测分隔符

使用“stringIndex(源字符串,起始位置,分隔符),如“,”为分隔符,例如

// 在字符串“string,test,test1,test2,test3”中查找“,”的出现位置,并由整数控件num1显示,位置会返回6
if(stringSub("==string,test,test1,test2,test3",0,2)=="==")
{
text0.txt=stringTrimStart("==string,test,test1,test2,test3",2);
num1.val=stringIndex(text0.txt,0,",");
// 备注:如果找到,返回位置;否则返回 -1。
}

4.4 提取字符串

使用stringTrimEnd(源字符串,(源字符串长度-提取的长度))、数组arr[],使用string类型,例如

//“text0.txt ="string,test,test1,test2,test3";
// 移除字符串第一个分隔符“,”及以后的字符,变为“string”储存到字符串数组中,再显示到text3.txt。
if(stringSub("==string,test,test1,test2,test3",0,2)=="==")
{
text0.txt=stringTrimStart("==string,test,test1,test2,test3",2);
num1.val=stringIndex(text0.txt,0,",");
arr2.set(0,stringTrimEnd(text0.txt,stringLength(text0.txt)-num1.val));
text3.txt=arr2.get(0);
text0.txt=stringTrimStart(text0.txt,num1.val+1);//删除已提取的字符串
}

4.5 循环提取

使用协议解析器解析串口数据,使用字符变量储存串口数据,使用字符串数组储存提取后的字符串,使用列表显示提取的字符串。示例代码如下

inti;

intj;

intk;

intm;

ints;

var3.txt=stringDecode(p.rxBuf,0,p.rxLen);

  1. (stringSub(var3.txt,0,2)=="==")

// ==作为数据格式固定前两个字符,如果接受到前两个字符不一致,那么屏幕认为接收到的数据是非法数据不予解析

{

var3.txt=stringTrimStart(var3.txt,2);//接收到的数据

m=stringLength(var3.txt);//接收到的字符串长度

for(i=0;i<m;i++)//循环分割收到的数据

{

  1. (stringIndex(var3.txt,0,",")!=-1)//以“,”分割

{

j=stringIndex(var3.txt,0,",");//,位置

arr5.set(k,stringTrimEnd(var3.txt,stringLength(var3.txt)-j));//第一个字符串数据

var3.txt=stringTrimStart(var3.txt,j+1);//剩下的字符串数据

k++;//取出来的字符串数量

}

else

{

arr5.set(k,var3.txt);//最后一个字符串数据赋值

break;

}

}

for(s=0;s<k+1;s++)

{

datagrid1.setCellString(0,0,s,arr5.get(s));//所有取出来的字符串放在表格的同一列

}

}

5.下载验证

点击编译,查看调试。

点击下载,查看串口屏演示。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询