永发信息网

关于c#用serial port发送信息

答案:4  悬赏:10  手机版
解决时间 2021-03-26 23:42
关于c#用serial port发送信息
最佳答案
//--------------------------------------------
// 利用集合List来拼接数据帧比较方便
// 过程见以下代码
private void ConvertAndSend_Click(object sender, EventArgs e)
        {
            if (serialPort.IsOpen)
            {
                List TxBuffer = new List();
                string[] coords = textBox1.Text.Split('
');
                for (int i = 0; i <= coords.Length - 1; i++)
                {
                    if (coords[i].Length > 0)
                    {
                        byte[] Data =  GetValue(coords[i]));
                        TxBuffer.Add(0x5A);
                        TxBuffer.Add(Instruction);
                        TxBuffer.Add((byte)Data.Length);
                        TxBuffer.AddRange(Data);
                        TxBuffer.Add(0x2C);
                    }
                }
                //拼接完毕后,转换成字节数组并一次发送
                byte[] t = TxBuffer.ToArray();
                serialPort.Write(t, 0, t.Length);
            }
        }追问你好!谢谢你的回答!我试了你的代码,可还是和原来一个效果。就是每个data都是在独立的bufeer里面发送的追答修改:
private void ConvertAndSend_Click(object sender, EventArgs e)
        {
            if (serialPort.IsOpen)
            {
                List TxBuffer = new List();
                
                //帧起始标志
               TxBuffer.Add(0x5A);
               //命令字节
               TxBuffer.Add(Instruction);                

                string[] coords = textBox1.Text.Split('
');
                for (int i = 0; i <= coords.Length - 1; i++)
                {
                    if (coords[i].Length > 0)
                    {
                        byte[] Data =  GetValue(coords[i]));
                        TxBuffer.Add((byte)Data.Length);
                        TxBuffer.AddRange(Data);
                    }
                }
                
                //帧结束标志
               TxBuffer.Add(0x2C);                

                //拼接完毕后,转换成字节数组并一次发送
                byte[] t = TxBuffer.ToArray();
                serialPort.Write(t, 0, t.Length);
            }
        }追问大神,还是分开发的,,麻烦你了啊!追答您说的:“还是分开发的……”是什么意思呀?
按照上面的程序,构造处理的待发送字节数组个格式如下图所示

执行以下代码
byte[] t = TxBuffer.ToArray();
serialPort.Write(t, 0, t.Length);
图示的字节数组应该是一次发送的呀!

追问你好我没表达清楚,抱歉!现在的程序的确就是你如上所说的那样,需要的是:在instruction之后,显示这个buffer里面的总字节数,然后data,最后2c。还有另外一个问题就是,原来旧的程序应该是在接受端把收到的data从byte转换为hex并显示,同时也转换为float,并显示为string的,但是在您最新修改的程序里,并不显示float了,只显示hex。我的接受程序在上面的回复里有链接。
全部回答

private void ConvertAndSend_Click(object sender, EventArgs e)
        {
            if (serialPort.IsOpen)
            {
                byte[] TxBuffer = new byte[240];
                string coords = textBox1.Text.Trim();
                TxBuffer[0] = 0x5A;    //这是头检测部分??
                 TxBuffer[1] = Instruction;
                 TxBuffer[2] = (byte)Data.Length;
                for (int i = 0; i < coords.Length; i++)
                {
                    if (coords[i].Length > 0)
                    {
                        Data = GetValue(coords[i]);
                       
                        if( TxBuffer.Length < 240)    //防止越界
                            Data.CopyTo(TxBuffer, TxBuffer.Length);
                        else
                            break;    //这里越界了 你自行处理
                    }
                }
                try
                {
                 TxBuffer[TxBuffer.Length + 3] = 0x2C;    //这个应该是结束标志吧
                 serialPort.Write(TxBuffer, 0, TxBuffer.Length);
                }
                catch
                {
                    //这里可能会有异常   因为上面TxBuffer[TxBuffer.Length + 3]可能会越界,这里我就不做处理
                }
            }
        }
这是我对您提问的处理,希望能对您有帮助!!
追问你好!你的程序很详细哈,不过有两个报错。
if (coords[i].Length > 0)-----------char不包括length这个definition。
Data = GetValue(coords[i]);-------不可以把char转换为string。而且有不成立的argument。
谢谢!
你好!那你就把多个 Data 先合并到一起追问请问怎么合?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
田亮被国家队除名是什么原因?
湖北省大悟县至广东省梅州市大埔怎么走
oppq r811拼音成了繁体字了,怎么办
300w功率多长时间烧开水
LiMn2O4、锂钒氧化物和磷酸铁锂哪个做锂离子
对龙对凤面衾上有哪八对纹样
________Iamwellagain,Icangoonwi
由,打一《三国演义》一人物
报纸上的一条消息称:“舒适型”小轿车的售价
4000608886这个加盟能打通吗
我女同学在qq上跟我说:I want to fuck you 是
如何看待荆州发展前景
LED电源长条跟堵头有什么区别
中国县级地域面积前十都有哪些县城?
无聊一周观察――亲们,知道社保账上有多少钱
推荐资讯
真的能通过基因改造让普通人变成超人吗?
u深度u盘启动盘制作失败如怎么办
浅谈如何找出教学重难点
如何更改电脑的IP地址
柳叶鲳鱼的做法
五点半八小时制按看懂法律犯法不?
这种四开的灯开关怎么接啊?
八零后美容美发工作室地址在什么地方,想过去
天津市杨柳青民族
是知道质量与体积质量怎么换算呀,比如:kg与
十个房子里有一个金色的房子
为什么元朝版图那么大,到明朝就小了好多
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?