delphi的spcomm接收到数据后怎么讲数据存放到对应的edit中? 5
spcomm接收函数看的不太懂,这个函数处理的时候是处理一个字节还是一帧数据?还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。...
spcomm接收函数看的不太懂,这个函数处理的时候是处理一个字节还是一帧数据?
还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。 展开
还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。 展开
1个回答
展开全部
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字节和检验位(前面的数据的累加和 抛弃进位)
指令数据根据应用不同 长度自己定义 至于具体数据格式 也可以自己定义
串口通讯容易丢失数据位,所以必须有校验。
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字节和检验位
自己活学活用呀!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询