串口连接

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO.Ports;namespacetiqu{publicpartialclassForm1:Form{privateSerialPortsp;privateCRecvBufrecvBuf;publicForm1(){InitializeComponent();}classCRecvBuf{publicList<byte>li;publicintmaxLength;publicbyte[]getAllData(){byte[]x=newbyte[li.Count];for(inti=0;i<li.Count;i++){x[i]=li[i];}returnx;}publicCRecvBuf(intmaxLength){li=newList<byte>();this.maxLength=maxLength;}publicvoidAdd(byte[]b){if(b.Length>maxLength)thrownewException("接收到的数据量超出缓冲区的长度");li.AddRange(b);if(li.Count>maxLength)li.RemoveRange(0,li.Count-maxLength);}}publicclassCCheck{publicstaticstringBinaryToHexString(byte[]buff){StringBuildertmp=newStringBuilder();for(inti=0;i<buff.Length;i++)tmp.Append(buff[i].ToString("X2")+"");returntmp.ToString().Trim();}}privatevoidbutton1_Click(objectsender,EventArgse){bytefirstByte;byte[]tmp;sp.ReadTimeout=10000;try{firstByte=(byte)sp.ReadByte();tmp=newbyte[sp.BytesToRead+1];tmp[0]=firstByte;sp.Read(tmp,1,tmp.Length-1);textBox1.Text=CCheck.BinaryToHexString(tmp);recvBuf.Add(tmp);textBox2.Text=CCheck.BinaryToHexString(recvBuf.getAllData());tmp=getBlock(recvBuf.li);if(tmp!=null)textBox3.Text=CCheck.BinaryToHexString(tmp);elsetextBox3.Text="";}catch(TimeoutExceptionex){textBox1.Text=ex.Message;}}privatevoidtextBox3_TextChanged(objectsender,EventArgse){}privatevoidForm1_Load(objectsender,EventArgse){recvBuf=newCRecvBuf(60);sp=newSerialPort("COM1",9600,Parity.None,8,StopBits.One);sp.Open();}privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){if(sp!=null&&sp.IsOpen)sp.Close();}privatebyte[]getBlock(List<byte>li){byte[]b=null;if(li.Count<30)returnb;intp=li.Count;while((p=li.LastIndexOf(0x12,p-1))!=-1)if(li.Count>=p+30)if(li[p+1]==0x34&&li[p+2]==0x56)break;if(p!=-1){b=newbyte[30];li.CopyTo(p,b,0,30);}returnb;}}}以上为接受一个完整数据帧,怎样才能对数据帧解码?请各位高手说说啊。先谢谢了。

解决方案

解决方案二:
你得知道通信协议才能解码,不然你只能显示每个字节的值,至于哪几个字节组合成一个数字你是不知道的
解决方案三:
比如收到6个字节数据,协议如下:0XAA(报文头)+电流低字节+电流高字节+电压低字节+电压高字节+CRC这样你知道:第一个字节0XAA是报文头,第二个和第三个组合成电流值:电流=receBuff[2]<<256+receBuff[1];电压=receBuff[4]<<256+receBuff[3];,最后一个是CRC,是用来判断接收数据是否正确

时间: 2024-10-30 09:32:27

串口连接的相关文章

C# serialPort 串口连接modem通信 64位系统不能通信

问题描述 C# serialPort 串口连接modem通信 64位系统不能通信 C# serialPort 串口连接modem通信,在32位系统是能正常通信,当发布 64位系统不能通信了?请大牛啊!! 解决方案 要是串口能打开就说明能正常通信,能打开则是其他原因,要是不能先检查64位系统上驱动. 解决方案二: 看看驱动,因为32bit和64bit,软件是通用的,但是驱动不行. 解决方案三: 把程序编译成x86,不要用anycpu试试

串口通信-使用php_dio.dll通过串口连接gsm模块发短信,电信的手机号收不到短信

问题描述 使用php_dio.dll通过串口连接gsm模块发短信,电信的手机号收不到短信 存在问题如下 1.设备连接好之后,必须要使用串口助手之类的软件打开串口,再关闭软件,才能使用php发送读串口的at指令,否则就假死,为什么? 2.电信手机号收不到短信,不知为什么? 解决方案 电信手机收不到的话,这个要问运营商了.也许你的号码被当作垃圾短信号了. 解决方案二: 当作垃圾短信的因素可以排除,因为把卡放到手机里发送,电信号能收到短信. 解决方案三: 没人知道吗?专家在哪里?

串口通信-win7通过串口连接linux外设后,如何登录root用户?

问题描述 win7通过串口连接linux外设后,如何登录root用户? 我想自己做一个MFC小工具,功能可以概括为"简易版secureCRT": 现在串口已经通过CreateFile()连接成功,超时.奇偶校验.波特率这些设置貌似也没有问题了. 接下来,我如何得到linux的login:和password:提示符并把用户名root和密码发出去?如何远程打开一个终端从而可以向内核发送linux命令(比如ls.cd这些)? 贴上部分代码吧: BOOL Cserial_comm_win_1D

VNX系列如何使用串口连接SP?

故障现象: 如何使用串口连接VNX的SP,连接速率是多少? 解决方案: VNX系列的SP在正常启动成功之后使用串口连接时是无法显示信息的,只有在SP重启的时候连接才会显示信息. 端口连接速率:9600

RXTXcomm 串口连接不上,为什么?

问题描述 我用RXTXcomm 的包连接串口,看网上的配置,然后自己运行下查找com串口的打印都打不出来,怎么回事?有经验的指教下.谢谢 问题补充:yqin 写道 解决方案 还有 检查环境配置是不是正确的 有没有相关的dll解决方案二:看看这个http://users.frii.com/jarvi/rxtx/解决方案三:检查一下串口是不是好的

如何用DTU连接虚拟串口

  1打开DTU参数配置工具configtool 选择DTU型号 选择串口号,波特率115200数据位8校验位NONE,停止位1,控制流NONE (一般只要选择串口号就可以,其他的按照系统默认就可以了)确定工作状态是配置状态 串口号查看 右击"我的电脑"图标点击管理,选择设备管理器,查看端口(com和LPT) 打开串口 日志里提示打开串口成功请给设备上电或重新上电这时候我们在接上电源或是(重新上电) 上电后数10秒到1分钟左右(不同型号的DTU启动时间不一样)当日志里显示以下信息是就可

想用VC++做一个软件,可以同时连接串口数据和网站数据

问题描述 想用VC++做一个软件,通过计算机串口采集数据,在软件上显示,同时将数据存入网络上一个数据库.关于计算机与串口连接自己可以实现,现在不知道怎么接入网络.网站数据库自己来建,然后访问.想问以下问题:怎么建网站数据库,并且和软件有一个接口,软件最好是做上用户登录?建网站数据库用JAVA可以吗?我的软件怎么与网络接入,其中的协议什么的怎么弄? 解决方案 解决方案二:做一个接口,.,,,

想用VC++做一个上位机软件,可以同时连接串口数据和网站数据

问题描述 想用VC++做一个上位机软件,通过计算机串口采集数据,在软件上显示,同时将数据存入网络上一个数据库.关于计算机与串口连接自己可以实现,现在不知道怎么接入网络.网站数据库自己来建,然后访问.想问以下问题:怎么建网站数据库,并且和软件有一个接口,软件最好是做上用户登录?建网站数据库用JAVA可以吗?我的软件怎么与网络接入,其中的协议什么的怎么弄? 解决方案 解决方案二:用JAVA可以,不过我建议你找一个懂的人合作一下解决方案三:你如果很着急找人合作,如果不着急,可以慢慢学ASP.NETWE

如何连接两台电脑

如果只是要连接两台电脑,那么无论串口连接.并口连接还是利用两块网卡来实现互联都是可以的.但是,要连接3台以上计算机,那就只好通过集线器(Hub)或交换机(Switch)将各计算机连接在一起了.如果仅仅为了3台机器的联网而购买一个集线器或交换机似乎又显得不太合算.如果采用同轴电缆连接的总线型网络,虽然可以解决问题,并且组网非常简单,硬件成本也十分低廉,但这种网络的可靠性较差,并且传输速率只能达到10Mbps,况且现在市面上出现的100Mbps网卡上都不再提供BNC接口.因此,要不采用同轴电缆连接的