怎样与台达plc(EH)进行通信,用的是spcomm. ( 积分: 300 )

  • 主题发起人 主题发起人 hanhongfei
  • 开始时间 开始时间
H

hanhongfei

Unregistered / Unconfirmed
GUEST, unregistred user!
如题:我想与台达plc进行通信用的是spcomm控件,最好有源码。
plc内部是否需要程序对应。
请高手指点!!!!!!!!
 
如分不够可以在加
 
没有API文档吗?
 
首先你需要plc的通讯资料。包括通讯参数和plc的通讯协议,至于你使用什么控件和plc通讯是没有关系的。你现在手上有plc的资料吗?如果没有就去找,否则你没法完成。
 
plc 中我写如了如下代码:
ld m1002
mov h86 d1120
mov k1 d1121
mov k100 d1129
set m1120
通信设置为 9600 e 7 1
 
你说的这种plc没有使用过,第一步你可以使用串口调试工具检测plc的输出,如果信息接受正常,那很容易了。你使用spcomm就可以写通讯代码。
 
to壁画:
通信已经调试通过了。用得spcomm控件。但LRC校验码不知如何换算,请指点!!!
附上vb的换算程序,望不吝赐教!!。谢谢!
Public Function LRC(str As String) As String
c = 0
l = Len(str)
For c = c + 1 To l
c_data = Mid$(str, c, 2)
d_lrc = d_lrc + Val("&H" + c_data)
c = c + 1
Next c
If d_lrc > &HFF Then
d_lrc = d_lrc Mod &H100
End If
h_lrc = Hex(&HFF - d_lrc + 1)
If Len(h_lrc) > 2 Then
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
End If
LRC = h_lrc
End Function
 
我是新手`还是有点看不懂`
 
感觉是这样的,没有调试,你参考吧。
Function LRC(str: String) : String;
var c :integer;
c_data:integer;
d_lrc:integer;
h_lrc:string;
begin
repeat
d_lrc:=d_lrc+strtoint('$'+copy(tstr,c,2));
c:=c+2;
until c>=length(str);
if d_lrc>0xff then
begin
d_lrc:=d_lrc mod 0x100;
end;
h_lrc:=inttohex(0xff-d_lrc+1,4);
h_lrc:=copy(h_lrc,length(h_lrc-1,2);
LRC:=h_lrc;
end;
 
to壁画:
首先谢谢!
我用如下代码实现了,
procedure TForm1.Button2Click(Sender: TObject);
var
ss,x:integer;
begin
ss:=0;
//ss:=ss+byte($01)+byte($01)+byte($0c)+byte($30)+byte($00)+byte($01);
ss:=ss+strtoint('$'+edit1.text)+strtoint('$'+combobox1.text)+strtoint('$'+edit4.text)+strtoint('$'+edit5.text)+strtoint('$'+edit7.text)+strtoint('$'+edit6.text);
edit2.Text:=inttostr(ss);
x:=byte($FF)-ss+1;
edit3.text:=inttohex(lo(x),2);
if x>byte($FF) then edit3.Text:=inttohex(strtoint('$'+'FF')-strtoint('$'+inttohex(lo(x),2))-1,2);
end;
//
希望能和你常联系: QQ:249675842
hhf789@hotmail.com
 
多人接受答案了。
 
后退
顶部