C# 如何从串口中 提取出多个数据
下位机通过串口向PC传了以下格式的温度数据:“欢迎使用该设备,T1=15℃T2=25℃T3=30℃T4=40℃”已经在串口上位机的DataReceived事件中,将这些数...
下位机通过串口向PC传了以下格式的温度数据:
“欢迎使用该设备,T1=15℃ T2=25℃ T3=30℃ T4=40℃”
已经在串口上位机的DataReceived事件中,将这些数据读取到了textbox1.text文本框中。
我现在想将T1、T2、T3、T4的温度数据,分别放到4个文本框中,便于分开显示,应该怎么提取这些数据呢?
我目前是傻傻的用indexof("=")获取第一个=的位置,indexof"℃"获取第一个℃的位置,然后将15取出来,但这样的话如果数据较多,就比较慢,而且放在DataReceived事件还会出现“不在同一个进程”的错误。
您有类似的案例吗?烦请指点一下,直接回复或发邮件至lping@cnnp.com.cn,都谢谢了。 展开
“欢迎使用该设备,T1=15℃ T2=25℃ T3=30℃ T4=40℃”
已经在串口上位机的DataReceived事件中,将这些数据读取到了textbox1.text文本框中。
我现在想将T1、T2、T3、T4的温度数据,分别放到4个文本框中,便于分开显示,应该怎么提取这些数据呢?
我目前是傻傻的用indexof("=")获取第一个=的位置,indexof"℃"获取第一个℃的位置,然后将15取出来,但这样的话如果数据较多,就比较慢,而且放在DataReceived事件还会出现“不在同一个进程”的错误。
您有类似的案例吗?烦请指点一下,直接回复或发邮件至lping@cnnp.com.cn,都谢谢了。 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
2个回答
展开全部
看看你数据的格式了。 和收到的数据的频率了,频率慢的话可以用正则表达式匹配字符串处理;
快的话建议状态机,一个个字符处理。伪代码如下
int st = 0;
switch(st)
{
case 0: //等待第一个字符
if (c == 0xAA) //假设第一个字符是AA
st++;
break;
case 1:
if (c==0xBB)
st++;
else
st = 0;
break;
...
case n: //到实际的数据就拿出来单独处理,这样就肯定不会出错了。
}
快的话建议状态机,一个个字符处理。伪代码如下
int st = 0;
switch(st)
{
case 0: //等待第一个字符
if (c == 0xAA) //假设第一个字符是AA
st++;
break;
case 1:
if (c==0xBB)
st++;
else
st = 0;
break;
...
case n: //到实际的数据就拿出来单独处理,这样就肯定不会出错了。
}
追问
数据格式是Tn=???摄氏度,我想对已接收到的文本内容进行数据的提取...不知道这样说您清楚吗?呵呵
追答
我的意思是在接收的时候进行处理,同时读取,因为串口数据本质上是一个个来的,分包的情况不定,“欢迎使用该设备,T1=15℃ T2=25℃ T3=30℃ T4=40℃”有可能是先收到前面一半,再收到后面一半, 不像网络包是一起来的,所以建议一个个自己处理。
如果你是想对收到的数据进行处理,建议直接用正则表达式,自己百度一下。基本上下面的就可以了。
欢迎使用该设备,T1=(\d+)℃ T2=(\d+)℃ T3=(\d+)℃ T4=(\d+)℃
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询