通过modbusTCP读写ABB510变频器
FUNCTION_BLOCK "Modbustcp Client Abb Frequency Converter"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
IPaddress0 : Byte := 192;
IPaddress1 : Byte := 168;
IPaddress2 : Byte := 53;
IPaddress3 : Byte := 200;
"slave address" : Byte;
ID : CONN_OUC := 16#1;
END_VAR
VAR_OUTPUT
ERROR { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
STATUS { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word;
STATUS_SAVE { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word;
END_VAR
VAR_IN_OUT
MB_DATA_PTR_R100 : Variant;
MB_DATA_PTR_W0 : Variant;
MB_DATA_PTR_R400 : Variant;
END_VAR
VAR
REQ { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := 1;
DISCONNECT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := 0;
MB_MODE { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : USInt := 0;
MB_DATA_ADDR { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UDInt := 40101;
MB_DATA_LEN { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UInt := 50;
CONNECT {InstructionName := 'TCON_IP_v4'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TCON_IP_v4;
DONE { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
BUSY { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
"Read and write control" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
STEP { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
MB_CLIENT_Instance {InstructionName := 'MB_CLIENT'; LibVersion := '4.1'} : MB_CLIENT;
END_VAR
BEGIN
#CONNECT.RemoteAddress.ADDR[1] := #IPaddress0;
#CONNECT.RemoteAddress.ADDR[2] := #IPaddress1;
#CONNECT.RemoteAddress.ADDR[3] := #IPaddress2;
#CONNECT.RemoteAddress.ADDR[4] := #IPaddress3;
#MB_CLIENT_Instance.MB_Unit_ID := #"slave address";
#CONNECT.ID := #ID;
CASE #STEP OF
0:
#MB_MODE := 0;
#MB_DATA_ADDR := 40101;
#MB_DATA_LEN := 50;
// VariantGet(SRC := #MB_DATA_PTR_R100,
// DST => #MB_DATA_R100);
#MB_CLIENT_Instance(REQ := #REQ,
DISCONNECT := #DISCONNECT,
MB_MODE := #MB_MODE,
MB_DATA_ADDR := #MB_DATA_ADDR,
MB_DATA_LEN := #MB_DATA_LEN,
DONE => #DONE,
BUSY => #BUSY,
ERROR => #ERROR,
STATUS => #STATUS,
MB_DATA_PTR := #MB_DATA_PTR_R100, //读取40100..40150
CONNECT := #CONNECT);
1:
#MB_MODE := 1;
#MB_DATA_ADDR := 40002;
#MB_DATA_LEN := 2;
// VariantGet(SRC := #MB_DATA_PTR_W0,
// DST => #MB_DATA_W0);
#MB_CLIENT_Instance(REQ := #REQ,
DISCONNECT := #DISCONNECT,
MB_MODE := #MB_MODE,
MB_DATA_ADDR := #MB_DATA_ADDR,
MB_DATA_LEN := #MB_DATA_LEN,
DONE => #DONE,
BUSY => #BUSY,
ERROR => #ERROR,
STATUS => #STATUS,
MB_DATA_PTR := #MB_DATA_PTR_W0, //写入40001..40002
CONNECT := #CONNECT);
2:
#MB_MODE := 0;
#MB_DATA_ADDR := 40401;
#MB_DATA_LEN := 8;
// VariantGet(SRC := #MB_DATA_PTR_R400,
// DST => #MB_DATA_R400);
#MB_CLIENT_Instance(REQ := #REQ,
DISCONNECT := #DISCONNECT,
MB_MODE := #MB_MODE,
MB_DATA_ADDR := #MB_DATA_ADDR,
MB_DATA_LEN := #MB_DATA_LEN,
DONE => #DONE,
BUSY => #BUSY,
ERROR => #ERROR,
STATUS => #STATUS,
MB_DATA_PTR := #MB_DATA_PTR_R400, //读取40401..40408
CONNECT := #CONNECT);
ELSE
;
END_CASE;
IF #DONE THEN //OR #ERROR
#STEP += 1;
IF #STEP = 3 THEN
#STEP := 0;
END_IF;
END_IF;
IF #ERROR THEN
#STATUS_SAVE := #STATUS;
END_IF;
END_FUNCTION_BLOCK
以上是程序FB块,设置IP地址,ID,连接等,连接分别读取40100,40400,写入40001!
DB块.xlsx