![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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);
}
)
);
} 展开
,求详解啊
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);
}
)
);
} 展开
3个回答
展开全部
不要收一位就输出一位,将你接收到的内容组合成一个字符串,比如就是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并输出内容。
展开全部
你要弄成一个缓存区
以/为开始和结束
然后取前三个数字
假定数据为x,x=0
第一个数乘以100加到x
第二个数乘10加进x
...
以/为开始和结束
然后取前三个数字
假定数据为x,x=0
第一个数乘以100加到x
第二个数乘10加进x
...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
接收到数据后进行处理下,比如0 3 0 . 0 0 0 0,你可以先存储为string。然后在强制类型转换,如果确定都会是整型的话就直接强制类型装换成int,如果不是就转换成float。
希望楼主早日解除疑惑,不明白可以HI百度我~~~
希望楼主早日解除疑惑,不明白可以HI百度我~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询