串口通信问题

问题描述

数据帧格式:帧头地址命令数据小数点单位校验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);}}

时间: 2024-11-10 11:07:13

串口通信问题的相关文章

我在写串口通信程序遇到的坑

我在做基于HC6800的51单片机上,写串口通信程序遇到了许多坑. 一个大坑:为什么HC6800上U转串口不能发送数据. 因为我们向HC6800烧程序都是使用图1所示的软件,所以我想当然地认为可以直接通过HC6800上的U转串进行串口通信,而我的同学信誓旦旦地告诉我可以.坑爹.并且这个软件好像也在提示可以用直接用U转串,进行串口通信(见图2).但是当我打开串口调试助手的时候(如图3),却发现单片机掉电了(如图4).其实HC6800上有另一个串口的,我们只要把连接图5黄框处串口.并且在图4中的6处

STM8L151G6串口通信问题

问题描述 STM8L151G6串口通信问题 哪位大神用过STM8低功耗的单片机 最近在用这个调到串口通信怎么也调不通了,谁有这个方面经验分享下.感激不尽,坐等回复 解决方案 http://www.pudn.com/downloads554/sourcecode/embedded/detail2285865.html

单片机读写内部的EEPROM怎么操作,串口通信我已经做好了?

问题描述 单片机读写内部的EEPROM怎么操作,串口通信我已经做好了? 我要从PC上把数据发给单片机,单片机接收到后存储到EEPROM,单片机读取EEPROM的数据发送到PC上,我看了手册.网上查过资料,做了好久,没 有实现,单片机是STC15F2K16S2,求指导 解决方案 你没有实现,是卡在什么地方了?PC 与单片机的串口通讯.还是 EEPROM 的读写呢? 解决方案二: 我是卡在了EEPROM的读写了,看了手册.百度过了,还是不能实现EEPROM的读写,我用的单片机是15F2S16S2,用

在php串口通信编程时,出现win_serial is not compiled into PHP

问题描述 在php串口通信编程时,出现win_serial is not compiled into PHP 最近想试试php的串口通信,我装的是phpstudy2014,我看了一下apache2.4和php5xx等系列都装在里面,于是下了个对应php版本的php_ser++.dll,并且放在了ext中,并在php.ini中添加了extension=php_ser++.dll,但用php designer8.0调试时,却出现了win_serial不能被编译成PHP,事关紧急,忘大神指导?????

在CB6下基于api函数编写串口通信程序简介

1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数) 跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统根本就不管不问,对串口操作所造成的一切后果都是用户一个人承担的,这时候用户对串口具有高度自由的支配权:但是,这种情况好景不长,

C#结合串口通信类实现串口通信源代码

mycom是串口通信类.下面是串口通讯测试程序的源代码,将mycom类放在此项目中,可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namesp

Win32下的几种串口通信编程

要完成串口通信, 在32位模式下, 一般说来有以下四种方法: 1.以文件方式打开串口: 这里使用的是Win32 API 函数, 所以无论在BCB或VC下都可以实现.具体的函数的意义可以参考Win32 API 的帮助.这里有一个易于使用的BCB下的类, 可以方便的使用串口. 下面给出简要说明: (1) 应用CreateFile() 来初始化串口 FhFileComm=CreateFile( FCommName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, //

.NET Compact Framework下的串口通信

在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如 可以通过串口访问GPS的receiver,从而接收NMEA Data. 在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操 作,不再需要P/Invoke就可以直接操作串口. 下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行. public class Recei

VisualBasic串口通信程序设计

1mscomm.vbx通信控件描述 mscomm.vbx通信控件可直接从vb的toolbox中加入窗体form,即可用其进行通信.若toolbox中无此控件,则用tools的customcontrols将mscomm.vbx从windows的system子目录中加入vb的toolbox中. 1.1通信方式 mscomm.vbx有2种不同的方式来处理和解决各类通信软件的开发和设计问题 1.事件驱动.它与c/c 写windows软件时的窗口回调函数类似,是1种功能强大的处理问题的方法.在实际工作中,

zigbee学习之串口通信

纠错:U0DBUF发送缓冲区,但是我在中文手册手册上没有找的到这个寄存器,手册上只有U0BUF,U0BUF编译会出错, 我去查了下英文手册,才发现原来是翻译人员翻译错误了,只有U0DBUF,建议看英文手册. 串口通信: P_2 接收端 P_3发送端(单片机和电脑的电频不同,通过PL2303转换,这是针对zigbee模块的 ,想51单片机可以通过232,485来转换). TTL 输出:低电平小于0.8,高电平大于2.4 .TTL 输入:低电平小于1.2,高电平大于2 P_2和P_3可以复用到串口,