你看了接收端的设置没?不要光看发送端,即使发送了再多字节的信息,你接收端只接500,多余的截断,那肯定是不行的.
3:MSCOMM的设置: MSCOMM以设置成二进制方式 comm1.CommPort :=Form_Comsele.RadioGroup1.ItemIndex+1 ; ; comm1.DTREnable :=true; comm1.RTSEnable :=true; comm1.Settings :=Form_Comsele.RadioGroup3.Items.Strings[Form_Comsele.RadioGroup3.ItemIndex]+',N,8,1'; comm1.InBufferSize :=2048; comm1.OutBufferSize :=4096; comm1.InBufferCount :=0; //清除缓冲区 comm1.OutBufferCount :=0; //清除缓冲区 //comm1.SThreshold :=1; //发送缓冲区数据全部发送完时,触发 //comm1.InputLen :=1; //每次接受一个字符 comm1.InputLen :=0; //每次读空缓冲区 comm1.SThreshold :=0; //发送缓冲区数据全部发送完时,禁止触发 comm1.RThreshold :=1; //收到一个字符,触发一次 comm1.PortOpen:=true; comm1.Output:='ATQ0E0V1W0S0=1&C1&D2&K3'+chr(13)+chr(10); // 缓冲区貌似要设置成2的倍数?
是不是与波特率的设置有关(MSComm.Settings)
[quote=引用 4 楼 leeky 的回复:] 再有,你的数组不能分成多组发么? 再,建议:对于较长的串口数据,接收端可能会发生多次事件,每次只是一部分,应做缓冲机制,把多次的数据组合在一起。
再有,你的数组不能分成多组发么? 再,建议:对于较长的串口数据,接收端可能会发生多次事件,每次只是一部分,应做缓冲机制,把多次的数据组合在一起。
换组件吧,这组件我在十多年前用过,不好用。 可以换SPComm,或者CnPack中的Comm控件,强多了。
5,379
社区成员
262,722
社区内容
加载中
试试用AI创作助手写篇文章吧