delphi的spcomm接收到数据后怎么讲数据存放到对应的edit中? 5

spcomm接收函数看的不太懂,这个函数处理的时候是处理一个字节还是一帧数据?还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。... spcomm接收函数看的不太懂,这个函数处理的时候是处理一个字节还是一帧数据?
还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。
展开
 我来答
sirouszlh
2014-05-16 · TA获得超过1651个赞
知道小有建树答主
回答量:1038
采纳率:100%
帮助的人:648万
展开全部
spcomm的接收事件

TByteArrData = array[0..1023] of Byte;

procedure TComComponent.ReceiveData(Sender: TObject; Buffer: PAnsiChar; BufferLength: Word);
var
ByteArr: TByteArrData;
begin

Move(Buffer^, ByteArr, BufferLength);
end;

接收以后 就是一个数组 按规约解析这个数组。
至于具体如何解析。 得看规约。
典型的如 modbus
如果你要自定义规约,那简单。
可以定个最简单的规约
1地址位 1指令之类 N字节指令数据 1-2字节和检验位(前面的数据的累加和 抛弃进位)

指令数据根据应用不同 长度自己定义 至于具体数据格式 也可以自己定义

串口通讯容易丢失数据位,所以必须有校验。
追问
这种写法的话数据就存在bytearr数组里面,是吧?
你这个定义的数据类型时byte。edit是string型。
怎么转换呢?
追答
这个自己定义了
例如
你如果传输的是
如果是2个字节
可以是 vint:=ByteArr[3];

双节 可以是 vint:=ByteArr[3]*256+ByteArr[4];
然后 edit1.text:=inttostr(vint);

如果 字符 可以是 str:=char(ByteArr[3])+char(ByteArr[4])+。。。。。
edit1.text:=str;
如果是其他格式 需要进制转换 那你可以自己写
以上只是最简单的数据格式

对了 如果是不定长数据 可以在协议里加一个长度位
1地址位 1指令之类 1字节长度 N字节指令数据 1-2字节和检验位

自己活学活用呀!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式