永发信息网

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

答案:2  悬赏:50  手机版
解决时间 2021-02-06 19:55
spcomm接收函数看的不太懂,这个函数处理的时候是处理一个字节还是一帧数据?
还有,怎么讲接收到的数据送到对应的edit中。我知道制定协议,但是不知道怎么去实现。
最佳答案
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字节和检验位(前面的数据的累加和 抛弃进位)

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

串口通讯容易丢失数据位,所以必须有校验。
全部回答
你这个问题首先要确定瓶颈在哪里,一般人写,会把数据处理也写入到comm1receivedata事件里面去,比如以下代码: procedure tfcomm.comm1receivedata(sender: tobject; buffer: pointer;bufferlength: word); var i:integer; begin viewstring:=‘’ ; move(buffer^,pchar(@rbuf^),bufferlength); for i:=1 to bufferlength do viewstring:=viewstring+ inttohex(rbuf[i],2)+‘’ ; viewstring:=‘接收’+ viewstring; memo1.lines.add(viewstring); memo1.lines.add(‘’ ); end; 除了接收数据,它还干了其他两件事,1是字符串处理转换,2是往memo的缓存内丢数据,也许是你也是这么干的,如果想要优化,可以把buffer的处理丢到另外一个线程去干。 如果仅仅是响应receivedata时间就等待很长时间(可能是单个buffsize很大,也可能是buff发送很密集),这样的问题,仅仅靠spcomm控件是无法解决的,你可以考虑从winapi提供的一系列函数比如createfile、writefile、readfile等来实现,它们提供更多的优化方案。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
杜兰特系列的篮球鞋哪一款比较好?
做的皮妙镭射激光祛斑 没破皮的那种 第4天了
试从一个角度切入对这首词写一段鉴赏性的文字
2014年,某居民企业产品销售收入为6000万元,
android ftp获取服务端文件名
【黄鳝英文】干煸鳝鱼怎么用英文翻译?
艺之秀形象沙龙地址有知道的么?有点事想过去
手机卡是4g的流量怎么变4g啊
孙休是个什么样的人
贺银成的真题VS北医黄皮书VS北医真题哪一个好
如图表示发生在绿色植物体内的某些生理过程其
打篮球的男生为什么受女生欢迎?
湘粤之家木桶饭地址在哪,我要去那里办事
学厨师时,我认有一个师傅。对我特别好,他的
湖北的,如果高考考了250分能上在武汉上什么
推荐资讯
野生乌龟可以吃吗
怡宝桶装水姐妹批发部地址在什么地方,想过去
夏邑县王集信用合作社地址在什么地方,想过去
XBOX360 GTA5光盘版和数字版混用的问题
浙江日报大楼南地下停车场(入口)地址有知道的
三联家电德州店地址在什么地方,想过去办事
征途怀旧版新区分别是多少级封印?另外现在2
2014年考研286分能上浙江中医药大学中医妇科
手机GBA模拟器玩口袋妖怪绿宝石在游戏里生成
广州去海南怎么坐车
怎么将手机360卫士中加密的视频导出
手扭伤了,怎样才能让手好的更快些?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?