我现在做的一个小程序需要用到串口,而设备只支持二进制,
我想把字符串如'48H 00 00 3 10 30 xx 00 '这个字符串转化为二进制传给设备,
然后再把从设备返回得二进制数据转化为字符串我得想法是先把这些字符串放到一个数组中,然后一个个转化,传出去,接受后再转换回来
但是我不知道怎么做,DELPHI里又没有字符串转二进制得函数,,,,,,,大家帮帮忙了.多谢各位了,
我想把字符串如'48H 00 00 3 10 30 xx 00 '这个字符串转化为二进制传给设备,
然后再把从设备返回得二进制数据转化为字符串我得想法是先把这些字符串放到一个数组中,然后一个个转化,传出去,接受后再转换回来
但是我不知道怎么做,DELPHI里又没有字符串转二进制得函数,,,,,,,大家帮帮忙了.多谢各位了,
var
buf: array[0..7] of Byte;
begin
buf[0] := $48;
buf[1] := $00;
buf[2] := $00;
buf[3] := $03;
buf[4] := $10;
...end;
串口通讯的程序如果用MSComm控件应该是不难的,我使用的是VC编写的动态连接库。和你的设计思路有点不太一样。
var
Buf: array of Byte;
begin SetLength(Buf,8);
Buf[0] := $7E;
Buf[1] := $40;
Buf[2] := SysDM.m_SysParam.PortID;
Buf[3] := $12;
Buf[4] := $34;
Buf[5] := $56;
Buf[6] := $00;
Buf[7] := CheckSum(Buf,6); if not SendComData(Buf,8,FALSE,FALSE) then
begin
G_MessageBox('数据通讯失败!',MB_ICONERROR);
Exit;
end;
......function TComm.SendComData(Buf: array of Byte; Len: Integer; CallRemote: Boolean; ByteSend: Boolean=True): Boolean;
var
i: Integer;
tmp: array of Byte;
begin Result := False;
if not MSComm.PortOpen then
begin
G_MessageBox('串口未打开,发送数据错误!',MB_ICONERROR);
Exit;
end;
if ByteSend then
begin
for i:=0 to Len-1 do
begin
SetLength(tmp,1);
tmp[0] := Buf[i];
MSComm.Output := tmp;
Sleep(10);
end;
end
else begin
SetLength(tmp,Len);
for i:=0 to Len-1 do
begin
tmp[i] := Buf[i]
end;
//如果是呼叫信号,那么需要用无校验
if CallRemote then MSComm.Settings := '9600,n,8,1'
else MSComm.Settings := '9600,s,8,1';
MSComm.Output := tmp;
Sleep(50);
end;
Result := TRUE;end;