[quote]FUNCTION_BLOCK "FR-A8NP"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
//MITSUBISHI FR-A800 INVERTER FR-A8NP PFOFIBUS card
VAR
CUNT_READ { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Int;
PKE_RESP { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Word; // COMMAND RESPONSE
fp_RUN { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
AK_DONE { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
AK_READY { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
AK_BUSY { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
AK_ERROR { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
END_VAR
NETWORK
TITLE = READ PKW
//PPO type1 FR_AN8NP,melc0ea8.gsd
//6=0110
//PNU = 1.2,输出电流,0.1 A PKE IND = 6001 0200H#16
//PNU = 1.7,电机转矩,0.1%PKE IND = 6001 0700H#16
//PNU = 1.8,直流侧输出电压,0.1 V PKE IND = 6001 0800H#16
//PNU = 1.14,输出功率,0.1 kW PKE IND = 6001 0E00H#16
//PNU = 947.1,故障代码 PKE IND = 63 B3 0100H#16
//PNU = 949.1,输出频率 PKE IND = 63 B5 0100H#16
//PNU = 949.2,输出电流 PKE IND = 63 B5 0200H#16
//PNU = 949.3,输出电压 PKE IND = 63 B5 0300H#16
//READ ONE PARAMETER EVERY SCAN CYCLE
//READ PKW
CALL DPRD_DAT
{ptr_type := 'Variant', laddr_type := 'HW_IO'}
( LADDR := #II_Addr_1 ,
RET_VAL := #RD_VAL_1 ,
RECORD := #READ_1
);
//读AK,PWE AW F000H =(15-12 bit)000H ;= 4000H,传输完成;=7000H,指令错;=0000H,busy;
L #READ_1.PKE;
L W#16#F000;
AW;
T #PKE_RESP;
L W#16#4000;
==I;
= #AK_DONE;
L #PKE_RESP;
L W#16#7000;
==I;
= #AK_ERROR;
L #PKE_RESP;
L W#16#0000;
==I;
= #AK_BUSY;
//READ PNU VALUE
//READ FAULT CODE WHEN IT HAPPENED;WITH OUT FAULT,SEND REQUEST
A #READ_2.ZSW.FAULT;
AN #AK_BUSY;
JC L_CODE;
A #AK_BUSY;
JC NO_TASK;
L #CUNT_READ;
L 1;
==I;
JC L_CURRENT;
L #CUNT_READ;
L 2;
==I;
JC L_DCVOLT;
L #CUNT_READ;
L 3;
==I;
JC L_TORQUE;
L #CUNT_READ;
L 4;
>=I;
L #CUNT_READ;
JC L_POWER;
L #CUNT_READ;
L_CURRENT: NOP 0;
L W#16#6001;
T #WRITE_1.PKE;
L W#16#0200;
T #WRITE_1.IND;
L #CUNT_READ;
+ 1;
L_DCVOLT: NOP 0;
L W#16#6001;
T #WRITE_1.PKE;
L W#16#0800;
T #WRITE_1.IND;
L #CUNT_READ;
+ 1;
L_TORQUE: NOP 0;
L W#16#6001;
T #WRITE_1.PKE;
L W#16#0700;
T #WRITE_1.IND;
L #CUNT_READ;
+ 1;
L_POWER: NOP 0;
L W#16#6001;
T #WRITE_1.PKE;
L W#16#0E00;
T #WRITE_1.IND;
L #CUNT_READ;
+ 1;
L_CODE: NOP 0;
L W#16#63B3;
T #WRITE_1.PKE;
L W#16#0100;
T #WRITE_1.IND;
NO_TASK: NOP 0;
//REQUEST
CALL DPWR_DAT
{ptr_type := 'Variant', laddr_type := 'HW_IO'}
( LADDR := #II_Addr_1 ,
RECORD := #WRITE_1 ,
RET_VAL := #WR_VAL_1
);
END_FUNCTION_BLOCK[/quote]
原来一直使用西门子、ABB变频器器,PZD数据够用,这个三菱的PROFIBUS板子只有2个可用,第一个固定控制字/状态字,第二个固定给定/反馈频率,其他保留。。。
现在想使用PKE IND PWE来依次读电流,转矩,母线电压,故障代码,然而就产生了读写时序的问题。
PNU IND 表示代码写在了程序的注释里。
我这样理解:先写任务--读电流[PLC扫描周期m],然后读返回的值--电流[PLC扫描周期m+1],再写任务--读转矩[PLC扫描周期m+2],然后读返回的值--转矩[PLC扫描周期m+3]。。。是不是要判断指令的响应AK=4

图片链接
FR-A7NP和FR-A8NP一样的使用,编程没区别,2个对照看。
点击蓝色文档名进入百度网盘下载:
三菱FR-A800变频器说明书 6x3m
三菱FR-A7NP PROFIBUS通讯板说明书中文 3cf7
三菱FR-A8NP PROFIBUS通讯板说明书英文 pcvr