求助:关于CPort串口通信的问题
方法一,只有一个单元文件:
function StrToHexStr(const Str:string):string;
var i:Integer;
begin
for i:=1 to Length(Str) do
begin
if i=1 then
Result:= IntToHex(Ord(Str[1]), 2)
else Result:= Result+ #32+ IntToHex(Ord(Str[i]), 2);
end;
end;
//串口收数过程
procedure TwMain.CPortRxChar(Sender: TObject; Count: Integer);
var strGet: String;
begin
CPort.ReadStr(strGet, count);
memo1.Text:= StrToHexstr(strGet);
end;
方法二,有两个单元文件:
//unit2.pas单元中定义:
//全局变量:
var DataGet: Array of Byte;
//然后定义过程:
procedure SaveData(const Data: Array of Byte);
var i: Integer;
begin
SetLength(DataGet, Length(Data));
for i:= 0 to Length(DataGet)-1 do
DataGet[i]:= Data[i];
end;
function Show(): String;
var i: Integer;
begin
for i:= 0 to Length(DataGet) do
begin
if i= 0 then
Result:= IntToHex(DataGet[0], 2)
else Result:= Result+ #32+ IntToHex(DataGet[i], 2);
end;
end;
//unit1.pas单元中定义,已引用uint2.pas
//串口收数过程
procedure TwMain.CPortRxChar(Sender: TObject; Count: Integer);
var
strGet: String;
i: Integer;
CommData: Array of Byte;
begin
CPort.ReadStr(strGet, count);
SetLength(CommData, Length(strGet));
for i:= 0 to Length(strGet)-1 do
CommData[i]:= Ord(strGet[i+1]);
SaveData(CommData);
memo1.Text:= Show();
end;
用方法一,串口收到的数据显示正确,用方法二就不对。具体错误表现,据我观察,似乎memo中显示的数据为串口收到的数据(字符串StrGet,转存到全局数组变量DataGet中)的最后3个(有时变成2个)字节加上数组DataGet后的未知内存空间中的的一定长度的字节。但是显示的长度和我定义的要显示的DataGet数组的长度又不一样,比如StrGet字符串长度为28,那么memo中显示的数据是DataGet的最后三个字节,然后加上其后未知内存空间中的26个字节,显示的长度比定义的长度多了一个字节。请问这是怎么回事?
需要解决的问题:
我现在想用方法二来显示串口收到的数据,中间变量数组DataGet必须有,因为要根据DataGet中各个数组元素的二进制值的0、1位状态来表示机器相应功能的运行状态,所以只能用方法二。但是搞了半天,串口数据就是显示不正确,好像调用是SaveData函数存储的时候,数据发生了变化,不知道究竟是怎么回事,求各位Delphi高手速速相助!
谢谢!!!
相关推荐
在Delphi中用CPort组件开发串口通信程序
Delphi可以通过许多控件实现串口通信,此篇文章主要是介绍用CPort控件,希望能够更好的帮助开发人员用CPort开发串口通信
CPort类在手机串口通信中的应用与Delphi开发指南
本文还有配套的精品资源,点击获取 简介:本文深入讲解了CPort类库在手机串口通信中的应用以及如何利用Delphi RAD工具进行程序开发。介绍了CPort类的功能和方法,以及如何在Delphi中配置和使用该类库进行设备控制、数据采集和调试等任务。提供了CPort类的使用示例代码,帮助开发者理解并掌握其在串口通信中的应用。 1. CPort类库简介 CPor...
Cport串口通信控件的版本概览
在现代IT和工业自动化领域,数据通信是实现各种功能和任务的关键。串口通信作为数据通信的一种基本形式,广泛应用于计算机与外部设备之间。Cport,一个功能强大的串口通信控件,为开发者提供了一种简便的解决方案,以实现复杂的串口通信需求。Cport是一个在多种编程环境中广泛使用的串口通信控件。无论是在Windows环境下,还是嵌入式系统,Cport都能为用户提供高效、稳定的串口通信能力。凭借其灵活的配置选项和易于理解的API,Cport已经成为许多工程师和开发者的首选。
Delphi 7 CPort30串口编程工具包
本文还有配套的精品资源,点击获取 简介:Delphi 7是一款支持高效串口编程的可视化开发环境,广泛应用于嵌入式系统和工业自动化领域。该工具包提供了一个名为"CPort30"的组件,旨在简化串口操作,增强开发者在设备控制和数据传输任务中的效率。它包含丰富的API、示例代码和故障排除文档,特别适合需要进行串口通信的Delphi 7用户。该资源包括源代码、帮助文档、示例程序和本...
Cport 各个版本
被称为最牛叉的串口控件,用于C++ builder和Delphi。丁丁大侠的sscom就是用的这款控件,把例子改一下,也就是自己的串口调试助手了


语言基础/算法/系统设计
