C# 如何从串口中 提取出多个数据

下位机通过串口向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,都谢谢了。
最新回答
含悦人道

2024-07-02 09:36:58

看看你数据的格式了。 和收到的数据的频率了,频率慢的话可以用正则表达式匹配字符串处理;
快的话建议状态机,一个个字符处理。伪代码如下
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+)℃
日暮下の思念

2024-07-02 07:14:48

先将数据Split('摄氏度')分离数组,每个数组数据格式为T=数字,将数组内每个元素indexof('=')取数值。
追问
强强强
我再搜下分离的用法,还没用过..