串口数据传输的问题!!救命啊!!!! 开最后一个回复 (50分)

  • 主题发起人 主题发起人 ahjie
  • 开始时间 开始时间
A

ahjie

Unregistered / Unconfirmed
GUEST, unregistred user!
s:='FF55AA02';
for i:=0 to (length(s) div 2)-1do
begin
temp:=temp+chr(strtoint('$'+copy(s,i*2+1,2)));//十六进制发送;
end;
mscomm.output:=temp;
请问,为什么在串口调试时,收到的数据是 FF 55 3F
请大侠指教
 
s:='FF55AA02';
temp:='';
for i:=0 to (length(s) div 2)-1do
begin
temp:=temp+chr(strtoint('$'+copy(s,i*2+1,2)));//十六进制发送;
end;
mscomm.output:=temp;
 
帮你提一下。
 
我的temp有初始化为''的
只是没有把所有的代码贴上来
 
mscomm.output:= s;干吗不这样直接发啊?
 
这样发当然不行啦,为什么我也不清楚。不是很熟悉串口编程。
 
MSCOMM有两种传输方式,你把MSCOMM设成文本传输方式就可以了!
 
设置成文本传输方式,然后对方可以当作16进制来接收么?
比如13185015895这个号码
调试工具里面显示为 31 33 31 38 35 30 31 35 38 39 35
是这样么?
 
每一个16进制的发一次!
 
分开发?为什么要这样做呢?
指教一下。
 
to wrf
按你说的,我每个16进制发一次
比如
FF 55 AA 02 0B 31 35 31 FF
发出去,接收到显示为
FF 55 00 02 0B 31 35 31 FF
真不知道为什么了
 
s: string
不能为WideString
 
我的s的确为string,而不是widestring
 
各位,小弟实在不明白,请指教!
我把程序改成:
s:=Chr($FF)+Chr($55)+Chr($02)+Chr($0B)+'13185015895'+Chr($FF);
就可以正常显示
FF 55 02 0B 31 33 31 ..... FF
但如果
s:=Chr($FF)+Chr($55)+Chr($AA)+Chr($02)+Chr($0B)+'13185015895'+Chr($FF);
就出错,显示为
FF 55 3F 0B 31 33 31 ......FF
Chr($AA)和后面的一个字节合并为了 3F。
上面我是把s整个一起发送出去的,但如果一个字符一个字符发
就会把AA显示为 00。
大侠救我!!
 
鎴戜篃纰板埌姝ら棶棰橈紝鍙?$80浠ヤ笅鐨勯兘姝g‘锛?$81-->#$FE,鍙戝?鏁颁釜閿欒?锛屽彂鍋舵暟涓??纭?
 
我也碰到此问题,#$80前的数没问题,可#$81--->#$FE,发奇数个错误,发偶数个正确。
各位大侠帮忙啊!!!!!
 
1、可能是MSCOMM的版本问题,或者你换个不同的版本
2、MSCOMM本身就有BUG,比如发00就无法发出
3、如果把缓冲区等设大点试试
4、设个握手协议试试
 
问题解决啦!!
真高兴啊
要用动态数组,不能用字符啊
var
bytesend:array of byte;
i:integer;
begin
setlength(bytesend,256);
for i:=0 to 255do
bytesend:=i;
label1.Caption:='hex--->int'+chr(13);
mscomm1.Output:=bytesend;
//
 
MSCOMM收发都是用Variant
如果有丢0的情况,则肯定是你的MSCOMM1控件的discardnull属性设为True了。
 
后退
顶部