Delphi 之前解析串口数据
//串口接收数据
procedure TfrmClientMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
ss,ffnn:string;
rbuf:array of byte;
begin
//setlength(rbuf,0);
memo1.Lines.Add('长度:'+inttostr(bufferlength));
setlength(rbuf,BufferLength);
move(buffer^,pchar(rbuf)^,BufferLength);
ss:='接收:';
for i:=0 to bufferlength-1 do
begin
ss:=ss+inttohex(rbuf[i],2)+' '; //接受数据
//showmessage(ss);
end;
memo1.Lines.Add(ss);
//showmessage(inttohex(rbuf[1],1));
if inttohex(rbuf[1],2)='43' then
begin
DataStream:=TMemoryStream.Create;
DataAll:=0;
PkAll:=0;
PkNo:=0;
RadioNo1:='';
SayAddr; //发送读收音机编号命令
end;
if inttohex(rbuf[1],2)='A1' then
begin
GetRadioNo(rbuf); //读收音机编号
SayDataAll; //发送读数据总量命令
end;
if inttohex(rbuf[1],2)='A4' then
begin
GetDataAll(rbuf); //读数据总量
if dataall=0 then
begin
memo1.Lines.Add('卡的内容为空,请拔卡!');
end else
begin
SayPkNo; //发送第0个数据包号
end;
end;
if inttohex(rbuf[1],2)='D4' then
begin
GetPk(rbuf); //接收数据包
if PkNo=PkAll then //当最后一个包接收完毕
begin
memo1.Lines.Add('总数据量:'+inttostr(DataAll)+'流的大小:'+inttostr(datastream.size));
if DataAll=DataStream.Size then
begin
ffnn:=SaveFileName;
DataStream.SaveToFile(SourceFileDir+ffnn); //写文件
DataStream.Free;
AScanSThread:=TScanSThread.CreateIt(ffnn);
//SayFormat; //发送格式化命令
end else
begin
DataStream:=TMemoryStream.Create;
DataAll:=0;
PkAll:=0;
PkNo:=0;
RadioNo1:='';
SayAddr; //重新在进行一遍
end;
end else
begin
SayPkNo; //发送读取下一个包命令
end;
end;
end;
procedure TfrmClientMain.GetRadioNo(buf:array of byte);
var
i:integer;
begin
RadioNo1:=BytetoStrings(buf[2])+BytetoStrings(buf[3])+BytetoStrings(buf[4])+BytetoStrings(buf[5]);
memo1.Lines.Add('收音机编号:'+RadioNo1);
end;
procedure TfrmClientMain.SayDataAll;
var
sbuf:array[1..7] of byte;
begin
sbuf[1]:=byte($35);
sbuf[2]:=byte($A4); {命令号}
sbuf[3]:=byte($00);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($00);
sbuf[7]:=byte($58);
senddata(sbuf);{调用发送函数}
end;
procedure TfrmClientMain.GetDataAll(buf:array of byte); //取得数据
var
s:string;
begin
//showmessage('###@@@!!!:'+inttohex(buf[3],2));
s:=inttohex(buf[2],2)+inttohex(buf[3],2);//+inttohex(buf[4],2); 根据090810ctc-r-100新协议修改
DataAll:=strtoint(HexStrToDecStr(s));
memo1.Lines.Add('数据总量:'+inttostr(dataall));
if (dataall mod 128)=0 then
begin
pkall:=DataAll div 128;
end else
begin
pkall:=DataAll div 128+1;
end;
memo1.Lines.Add('包数:'+inttostr(pkall));
end;
Delphi 之前解析串口数据的更多相关文章
- delphi XE3解析JSON数据
测试数据如下: Memo1.text中的数据: { "date":"周二(今天, 实时:12℃)", "dayPictureUrl":&qu ...
- Delphi中使用ISuperObject解析Json数据
Java.Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即Isuper ...
- python 3下对stm32串口数据做解析
1.最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化. python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和pyth ...
- python 下串口数据的读取,解析,和保存-
#!/usr/bin/python # -*-coding: utf-8 -*- import serial import threading import binascii from datetim ...
- 教程-Delphi MSComm 实时串口通讯
Delphi MSComm 实时串口通讯 MSComm控件具有丰富的与串口通信密切相关的属性,提供了对串口进行的多种操作,进而使串行通信变得十分简便.MSComm的控件属性较多,常用的属性如下:1) ...
- C# ---- 串口数据YSI实例
原文:C# ---- 串口数据YSI实例 C#----串口数据接收发送中,发送接收数据已经可以模拟了. 本次YSI实例过程中 主要是:类型转换问题 .计算校验码 一.不同设备不同的规则,本次实例代码如 ...
- jQuey知识点三 解析json数据
1.解析简单数据 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="vie ...
- C#SerialPort如何读取串口数据并显示在TextBox上
SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...
- Android(Linux)实时监控串口数据
之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于监控和显示CAN盒与主机之间的串口数据.因为需要抢占市场先机 ...
随机推荐
- Java-在线聊天系统-线程
一.概述 1.目标:在上一个版本非线程的聊天系统中,出于要不断监听接收新client和接收client发出的信息,把accept()和DataInputStream.readUTF()分别写在了whi ...
- linux下python启动第三方程序,并控制关闭
import subprocess import os import signal p = subprocess.Popen("recordmydesktop -o /home/test/t ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- JSP下载txt 和 Excel两种文件
JSP下载txt 和 Excel两种文件 jsp 下载txt文件和excel文件 jsp 下载txt文件和excel文件 最近做了个用jsp下载的页面 将代码贴出来 权作记录吧 1 下载txt文件 ...
- LabelMe图像数据集下载
Download MATLAB Toolbox for the LabelMe Image Database 利用Matlab Toolbox工具箱下载图像库 一.下载Matlab Toolbox工具 ...
- 14_把文件存放在SDCard
权限添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> /** ...
- Ubuntu下eclipse的Extjs提示插件安装
使用eclipse编写extjs时,一定会用到spket这个插件,spket可以单独当作ide使用,也可以当作eclipse插件使用,我这里是当作eclipse的插件使用的,下面来一步步图解说明如何配 ...
- OSX 升级 vim
善用 Homebrew 神器啊,少年!Homebrew - The missing package manager for OS X安装完成后打开终端输入: brew install vim --wi ...
- 选择——ERP信息系统选型
做一次选择并不难,难的是做一次坚定而正确的选择.TCL电脑公司的ERP软件选型就是一次正确而艰难的选择过程.让我们从头说起吧! 业界都知道TCL电脑是IT行业的新入行者,更知道TCL的另一个诠释:& ...
- javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全
目录1历史 2澄清误解 3基本概念 4特点 5与Java的不同 6开发工具 历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C减减(C-minus-minus,简称Cmm)的嵌入式脚 ...