C#编程通过串口接收下位机数据的问题 10

我现在在用C#编一个上位机软件,我的软件要通过串口接收下位机传送上来的数据,如果下位机要传送给我一个数30,便会以030.0000的形式发送上来,并且是一位一位发送,即0... 我现在在用C#编一个上位机软件,我的软件要通过串口接收下位机传送上来的数据,如果下位机要传送给我一个数30,便会以030.0000的形式发送上来,并且是一位一位发送,即0 3 0 . 0 0 0 0最后有一个标志位“/”,表示发送完毕,下位机会每隔20毫秒发送这么一串数字,我想问的是,我在上位机应该怎么接收呢,因为现在编的程序只能接收成0 3 0 . 0 0 0 0,而我想要接收到的是,或者说可以有什么办法把它转换成数字30吗,再隔20毫秒再接收一个数字如40等等,而不是以一位一位的数字显示出来
,求详解啊
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialReadString = serialPort1.ReadExisting();
this.rTB_receive.Invoke
(
new MethodInvoker
(

delegate
{

this.rTB_receive.AppendText(serialReadString);
}

)
);
}
展开
 我来答
syht2000
高粉答主

2013-04-09 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
不要收一位就输出一位,将你接收到的内容组合成一个字符串,比如就是030.0000,比如存在str中,之后遇到/的时候,用比如int32.trypase(str.split('.')[0],out i )得到i并输出
追问
那我是不是只要在上面所编的代码里面增加一个数组存放数据,存好一个数据后输出一个,不用去改变别的地方了
追答
那就随你了,用不用数组都可以的,比如就一个string str,收到的byte为recv,可能就是

if(recv!=0x2f) str = str + (char)recv;
else
{
//输出
str="";
}

当然你用数组、stringbuilder或者list什么都行。不过个人感觉20ms这个时间可能有点短,你可以考虑一下将收到的字节放入一个queue,用另外一个线程来处理这个queue并输出内容。
anan640925
2013-04-09 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1063万
展开全部
你要弄成一个缓存区
以/为开始和结束
然后取前三个数字
假定数据为x,x=0
第一个数乘以100加到x
第二个数乘10加进x
...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
glslian14cce7
2013-04-09 · TA获得超过1541个赞
知道小有建树答主
回答量:1389
采纳率:81%
帮助的人:547万
展开全部
接收到数据后进行处理下,比如0 3 0 . 0 0 0 0,你可以先存储为string。然后在强制类型转换,如果确定都会是整型的话就直接强制类型装换成int,如果不是就转换成float。
希望楼主早日解除疑惑,不明白可以HI百度我~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式