spcomm 西门子变频器uss协议通信的问题(100分)

  • 主题发起人 主题发起人 netsnowfly
  • 开始时间 开始时间
N

netsnowfly

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在调试一台西门子的变频器uss协议,采用rs232转rs485,delphi spcomm串口编程
现在的情况是数据发送以后没有接受到反应!com1端口
程序代码如下大家帮忙看看:




var
Form1: TForm1;
Viewstring : string;
i:integer;
j:integer=1;
rbuf,sbuf:array[1..14] of byte;
commflg:boolean;
rP:^integer;
bcc:string;
bcccode:byte;
xorresult:integer;
const
resendcount:integer=5;




procedure SendData;
var
i:integer;

begin
viewstring:=' ';
commflg:=true;
for i:=1 to 14 do

begin
if not form1.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时} //对于西门子的uss协议这里要不要考//虑报文超时啊,这里sleep(2)对不对啊?
viewstring:=viewstring+inttohex(sbuf,2)+' ';
end;
viewstring:='发送'+viewstring;
form1.memo1.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then
begin
sleep(2000); //发送失败时延时2秒再发5次
if j<> resendcount then
begin
inc(j);
senddata;

end;

if j=resendcount then //发送5次以后都失败则显示失败
begin
showmessage('发送失败!');
j:=1;
application.ProcessMessages;
exit;
end;
end;
end;


procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
checkbcc:integer;
count:integer;
begin
checkbcc:=0;
viewstring :='';
rP := @rbuf;
move(buffer^,pchar(rP^),bufferlength);
for i:=1 to bufferlength do begin
count:=i;

if count <> bufferlength then
checkbcc:= checkbcc xor rbuf ; //计算bcc码

viewstring :=viewstring+inttohex(rbuf,2)+'';
end;

if checkbcc=rbuf[bufferlength] then
begin
viewstring:='接受'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end
else //出错了
begin



end;
end;

procedure getbcc ; //异或取得bcc校验码的过程 验证报文的正确性

begin
xorresult:=0;
for i:=1 to 13 do
xorresult:= xorresult xor sbuf ;
bcccode:=byte(xorresult);
sbuf[14]:=bcccode; {帧尾}
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
sbuf[1]:=byte($02); {帧头}
sbuf[2]:=byte($0c); {命令号}
sbuf[3]:=byte($01);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($00);
sbuf[7]:=byte($00);
sbuf[8]:=byte($00);
sbuf[9]:=byte($00);
sbuf[10]:=byte($0c);
sbuf[11]:=byte($7f);
sbuf[12]:=byte($20);
sbuf[13]:=byte($00);
getbcc;
senddata;{调用发送函数}

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sbuf[1]:=byte($02); {帧头}
sbuf[2]:=byte($0c); {命令号}
sbuf[3]:=byte($01);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($00);
sbuf[7]:=byte($00);
sbuf[8]:=byte($00);
sbuf[9]:=byte($00);
sbuf[10]:=byte($04);
sbuf[11]:=byte($76);
sbuf[12]:=byte($00);
sbuf[13]:=byte($00);
getbcc;
senddata;{调用发送函数}

end;


整个程序是在win98下调试的,要不要在系统硬件管理器,串口属性里设置什么东西啊?
还有对于uss协议,spcomm属性里要不要做一下设计?有没有人有用spcomm写与西门子变频器通讯的经验的啊?
 
主要是 uus 协议
 
你先别管数据格式,先看到底能不能收到东西.

加我QQ,发个我自己的程序给你测试下,看能不能收到?

16970995
 
我加了等你验证!
我现在的情况是我发了出去,他没有反应,收不到。听说spcomm自身的属性设置重要。
还有就是uss采用偶校验,但是在98系统的硬件管理里看到的comm端口的属性里,他没有采用偶校验!这个要手动设置吗?
 
晕,今天忘了上QQ.

马上上.
 
接受答案了.
 
后退
顶部