问题描述
数据帧格式:帧头地址命令数据小数点单位校验0xBB0xBB0xBB0x010xA10x**0x**0x**0x**0x030x020x**通过串口助手接收到的数据如下:BBBBBB01A1000000070302BB外加压力测试,传感器外加70Kg重物,仪表显示数据0.07T怎么在串口助手中添加一个功能,显示添加物品接收的重量啊!求代码。
解决方案
解决方案二:
串口助手是个什么鬼?你有源代码吗?
解决方案三:
有啊能接收到数据,不会解析数据
解决方案四:
串口返回的是字节流,你把它转为对应的数据类型即可,根据厂家提供的开发文档,上面都有说明的
解决方案五:
就是不知道怎么转换才问的嘛知道我就不问了
解决方案六:
BBBBBB01A1000000070302BB去掉头BBBBBB01A1和尾BB,接收到的数据类型是BYTE数组吧,那就把对应的数据转换为数字,然后判断单位和小数,显示到界面上,没有代码比如:byte[8]=07,取出来,转换格式
解决方案七:
BitConverter.ToDouble或者是其他类型,把byte[]转成double,int,short等数据类型。
解决方案八:
说明书我抄写下来求帮忙看看完全高不明白!!!1.仪表通信接口仪表支持RS232通信2.通信协议仪表支持MODBUSRTU协议3.MODBUSRTU协议仪表提供两种通信方式;连续方式(td)和主从方式(rt)连续方式(td)此通讯方式下,无需上位机发送数据,仪表直接从串口连续不断向外发送数据数据格式:1位起始位+8位数据位+2位停止位(无校验位,一位停止位)仪表发送数据格式:地址功能码数据长度数据(长整形有符号)CRC校验仪表地址0x030x04byte3(高)byte2byte1byteoCRC低8位CRC高8位我用串口助手(网上下的C#源码)接收的数据是这样的:BBBBBB01A1000000000302BB(没加重物时)我想添加一个功能:当我添加重物时,在串口助手下方提示添加了多少Kg的重物,没有重物的时候就提示没有重物。求代码,求注释,本人代码不熟
解决方案九:
你把你的硬件邮寄过来,让我们玩玩,就有代码了。
解决方案十:
引用楼主qq_31357321的回复:
数据帧格式:帧头地址命令数据小数点单位校验0xBB0xBB0xBB0x010xA10x**0x**0x**0x**0x030x020x**通过串口助手接收到的数据如下:BBBBBB01A1000000070302BB外加压力测试,传感器外加70Kg重物,仪表显示数据0.07T怎么在串口助手中添加一个功能,显示添加物品接收的重量啊!求代码。
编码问题,你的小助手没有将byte以适当的函数转换为String类型,它估计是byte.ToString("X2")了,我们往往是要Encode.Default.ToString(各种Byte);或者你不愿意改代码,可以将字符例如:BB=(16*16+11),对照ASCII码表看看这个代表那个字母或符号
解决方案十一:
转换的代码publicstringbyteToHexStr(byte[]bytes){stringreturnStr="";if(bytes!=null){for(inti=0;i<bytes.Count();i++){returnStr+=bytes[i].ToString("X2");}}returnreturnStr;}
数据自己从返回的string里去截取
解决方案十二:
//从输入缓存区中去读取第一次出现"AA"时的内容Byte[]buf=newByte[120];if(open)sp.Read(buf,0,120);//如果没有接到到数据,就返回//Debug.Log(buf.Length);if(buf.Length==0){return;}stringsbReadline2str=string.Empty;if(buf!=null){for(inti=0;i<buf.Length;i++){sbReadline2str+=buf[i].ToString("X2");//Debug.Log(buf[i]);}}//sbReadline2str=System.Text.Encoding.Default.GetString(buf,0,buf.Length);//Debug.LogError(sbReadline2str.ToString());//sbReadline2str=buf.ToString();//sbReadline2str=sbReadline.ToString();//提取完整的一个数据包,压入数据池中(队列中)if(sbReadline2str.StartsWith("DB90")){//分组数据包string[]_str=Regex.Split(sbReadline2str,"55AA",RegexOptions.IgnoreCase);foreach(stringsin_str){if(s.Length==16){//数据进入队列queueDataPool.Enqueue(s+"55AA");//Debug.LogError(s+"55AA");}}}else{sbReadline2str.Remove(0,sbReadline2str.IndexOf("DB90")+1);string[]_str=Regex.Split(sbReadline2str,"55AA",RegexOptions.IgnoreCase);foreach(stringsin_str){if(s.Length==16){//数据进入队列queueDataPool.Enqueue(s+"55AA");//Debug.LogError(s+"55AA");}//Convert.ToByte(s,16);}}