如何把16进制的命令字符串发送到串口 急(20分)

  • 主题发起人 主题发起人 carrie4002
  • 开始时间 开始时间
C

carrie4002

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我的命令字符串是:3F 6C C2 2E;指令字由字符串组成,字符之间以空格间隔,
"3F 6C"为命令开始符,"2E"为结束符。
我的代码是:
Str:=#$3F+#$20+#$6C+#$20+#$C2+#$20+#$2E;
CommVstr.WriteCommData(pchar(StrVSTR),Length(Str));
编译时不报错,可不能建立通讯。
哪未有经验的大虾能帮忙?
 
你用的什么串口控件,我用的Mscomm,这是我们程序中的一段代码,参考一下吧
var aByte:Array of Byte;
aByte:=VarArrayOf([$ff,$80,$11,$00,$4c,$48,$fe]);
Mscomm1.Output:=aByte;
 
用MSCOMM或者SPCOMM都可以很简单的完成。
 
function Encrypt(barcode: string;encType:integer): pansichar;
var
a:pansichar;
i : Integer;
arrSend:array[0..9] of byte;
begin
a:=allocmem(10);
if EncType=0 then
arrSend[0] := $B3
else
arrSend[0] := $A3; //开头(1字节)
arrSend[9]:=$0;
For i := 1 To 8 do
arrSend := strtoint('$'+copy(barCode, (i * 2 - 1), 2));

For i := 0 To 8 do
begin //校验(1字节)
arrSend[9] :=arrSend[9] xor arrSend;
//result:=result+char(arrsend);
end;

//result:=result+char(arrsend[9]);
move(arrSend,a,10);
result:=a;
end;
 
如果 一个过程里,有很多的命令字,那不是都需要这样传送命令吗?
会不会影响通信速度?
 
先把十六进制字符转换成int,再转成asc码,用于放入字符串str,发送的时候字符串里的内容实际上是十六进制数3F 20 ....,
Str:=chr(strtoint('$3F'))+chr(strtoint('$20'))
CommVstr.WriteCommData(pchar(StrVSTR),Length(Str));
 
把命令字串定义为数组即可。然后将数组写入通讯缓存。
const StrArry:array[1..10] of byte=($AA,$BB,$CC,$DD,$AA,$BB,$CC,$DD,$AA,$BB);
.....
CommVstr.WriteCommData(@StrArry,sizeof(StrArry));
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部