S7-1500 讀取V90/S120/S210/G120的常用驅動參數


S7-1500 讀取V90/S120的常用驅動參數

此程序已更新,可以下載例子程序

https://files.cnblogs.com/files/lion-zheng/PLC_async_drive.zip

1

不需要理解非周期通訊,調用這個FB就可以讀取常用的驅動狀態,程序塊已經封裝了非周期通訊功能。

故障代碼、報警代碼、扭矩、電流、直流母線電壓、電機溫度、驅動器溫度
功率、轉速

本文地址
http://www.cnblogs.com/lion-zheng/p/7853852.html

非周期通訊參考資料可在在西門子中文下載中心 搜索 非周期
http://www.ad.siemens.com.cn/download/

2

此功能塊的輸入管腳

name type datatype description
Hardware_ID in HW_IO Profinet/Profibus網絡標識ID *
Drive_Number in int V90/CU310 = 1, G120 = 2
Pulse in bool 連接5HZ或2.5HZ的脈沖信號
V90 in bool 區分驅動類型,V90 = 1, cu310 = 0

*HardwareID是以上參數中比較特別的一個,可以在TIA portal的Device configuration中找到。
如果一個設備有兩個HardwareID,那么很可能,兩個都可以用。

HardwareID也可以在TIA portal的Tags -> Default tag table -> System constants 中找到。

功能塊的輸出管腳

name type datatype description
FaultNumber out DINT 故障代碼
AlarmNumber out DINT 報警代碼
ActualTorque out real 扭矩
ActualCurrent out real 電流
DCvoltage out real 直流母線電壓
MotorTemp out real 電機溫度
DriveTemp out real 驅動器溫度
ActualPower out real 電機實際功率
ActualRPM out real 電機實際轉速

功能塊的調用效果,2個V90,1個CU310,可見只有HardwareID管腳略有不同

至此為止,你應該已經知道了此FB的功能和使用方法。下文是一些程序內部實現的細節。

3

在編寫此程序塊時,發現一個 WRREC 和 RDREC 程序塊的特點。
當我們讀取參數時,需要先調用WRREC來發送命令給驅動器,WRREC會返回Done信號。然而這個Done信號只保證了發送完成,並無法確認驅動已經准備好。因此我們需要延時一段時間,等待驅動准備好數據。V90需要大約50ms,S120需要30ms。延時后,再調用RDREC。發現此問題感謝我們的朋友 @內存1KB 的提醒。

1)正確的狀態,WRREC之后,立即發送RDREC,出現故障

  1. 正確的時序,WRREC之后,延時50ms,再發送RDREC,沒有故障

4

程序的細節

  • 定義報文頭
  • 定義每一個需要讀取的參數
  • 調用WRREC
  • 延時,並調用RDREC
  • 輸出變量到FB接口

//Telegram head
#write_record[0] := #task;
#write_record[1] := 01;//01 read-task, 02 write-task
#write_record[2] := INT_TO_BYTE(#Drive_Number);
#write_record[3] := 16#9;//number of parameter

//Parameter1 r2131 (16#853) fault number
#write_record[4] := 16#10;
#write_record[5] := 16#01;//number of index
#write_record[6] := 16#8;//parameter number
#write_record[7] := 16#53;//parameter number
#write_record[8] := 16#0;//first index number = 0
#write_record[9] := 16#0;//first index number = 0

//Parameter2 r2132 (16#854) alarm number
#write_record[10] := 16#10;
#write_record[11] := 16#01;//number of index
#write_record[12] := 16#8;//parameter number
#write_record[13] := 16#54;//parameter number
#write_record[14] := 16#0;//first index number = 0
#write_record[15] := 16#0;//first index number = 0

//Parameter3 r31 (16#1F) actual torque smoothed
#write_record[16] := 16#10;
#write_record[17] := 16#01;//number of index
#write_record[18] := 16#0;//parameter number
#write_record[19] := 16#1F;//parameter number
#write_record[20] := 16#0;//first index number = 0
#write_record[21] := 16#0;//first index number = 0

//Parameter4 r26 (16#1A) DC voltage smoothed
#write_record[22] := 16#10;
#write_record[23] := 16#01;//number of index
#write_record[24] := 16#0;//parameter number
#write_record[25] := 16#1A;//parameter number
#write_record[26] := 16#0;//first index number = 0
#write_record[27] := 16#0;//first index number = 0

//Parameter5 r27 (16#1B) ActualCurrent
#write_record[28] := 16#10;
#write_record[29] := 16#01;//number of index
#write_record[30] := 16#0;//parameter number
#write_record[31] := 16#1B;//parameter number
#write_record[32] := 16#0;//first index number = 0
#write_record[33] := 16#0;//first index number = 0

//Parameter6 r21 (16#15) ActualRpm
#write_record[34] := 16#10;
#write_record[35] := 16#01;//number of index
#write_record[36] := 16#0;//parameter number
#write_record[37] := 16#15;//parameter number
#write_record[38] := 16#0;//first index number = 0
#write_record[39] := 16#0;//first index number = 0

//Parameter7 r32 (16#20) ActualPower
#write_record[40] := 16#10;
#write_record[41] := 16#01;//number of index
#write_record[42] := 16#0;//parameter number
#write_record[43] := 16#20;//parameter number
#write_record[44] := 16#0;//first index number = 0
#write_record[45] := 16#0;//first index number = 0

//Parameter8 r35 (16#23) MotorTemp
//Parameter8 r632 (16#278)
#write_record[46] := 16#10;
#write_record[47] := 16#01;//number of index
IF #v90 THEN
    #write_record[48] := 16#2;//parameter number
    #write_record[49] := 16#78;//parameter number
ELSE
    #write_record[48] := 16#0;//parameter number
    #write_record[49] := 16#23;//parameter number
END_IF;
#write_record[50] := 16#0;//first index number = 0
#write_record[51] := 16#0;//first index number = 0

//Parameter9 r37 (16#25) DriveTemp
#write_record[52] := 16#10;
#write_record[53] := 16#01;//number of index
#write_record[54] := 16#0;//parameter number
#write_record[55] := 16#25;//parameter number
#write_record[56] := 16#0;//first index number = 0
#write_record[57] := 16#0;//first index number = 0

#R_TRIG_Instance(CLK:=#Pulse);
#WRREC_REQ := #R_TRIG_Instance.Q AND NOT #WRREC_BUSY AND NOT #REREC_BUSY;

#WRREC_Instance(REQ:=#WRREC_REQ,
                ID:=#Hardware_ID,
                INDEX:=47,
                DONE=>#WRREC_DONE,
                BUSY=>#WRREC_BUSY,
                ERROR=>#WRREC_ERROR,
                STATUS=>#WRREC_STATUS,
                RECORD:= #write_record);

#IEC_Timer_0_Instance(IN := #Pulse,
                      PT := T#100MS);

//#R_TRIG_Instance_1(CLK := #IEC_Timer_0_Instance.Q,
//                   Q => #REREC_REQ);

#REREC_REQ := #WRREC_DONE;
#RDREC_Instance(REQ:= #REREC_REQ,
                ID:= #Hardware_ID,
                INDEX:= 47,
                VALID=> #REREC_VALID,
                BUSY=> #REREC_BUSY,
                ERROR=> #REREC_ERROR,
                STATUS=> #REREC_STATUS,
                RECORD:= #read_record);

    //byte 0,1,2,3 telegram head
    
    //byte 4,5,6,7 ,parameter 1 ,r2131,fault code
    "Tag_23" := #read_record[6];
    "Tag_24" := #read_record[7];
    #FaultNumber := WORD_TO_DINT("Tag_25");
    
    //byte 8,9,10,11 ,parameter 2,r2132,alarm code
    "Tag_23" := #read_record[10];
    "Tag_24" := #read_record[11];
    #AlarmNumber := WORD_TO_DINT("Tag_25");
    
    //byte 12,13,14,15,16,17 ,parameter 3, r31 actual torque
    "Tag_23" := #read_record[14];
    "Tag_24" := #read_record[15];
    "Tag_26" := #read_record[16];
    "Tag_27" := #read_record[17];
    #ActualTorque := "Tag_28";
    
    //byte 18,19,20,21,22,23 ,parameter 4, r26 DC voltage
    "Tag_23" := #read_record[20];
    "Tag_24" := #read_record[21];
    "Tag_26" := #read_record[22];
    "Tag_27" := #read_record[23];
    #DCvoltage := "Tag_28";
    
    //byte 24,25,26,27,28,29 ,parameter 5, r27 actual current
    "Tag_23" := #read_record[26];
    "Tag_24" := #read_record[27];
    "Tag_26" := #read_record[28];
    "Tag_27" := #read_record[29];
    #ActualCurrent := "Tag_28";
    
    //byte 30,31,32,33,34,35 ,parameter 6, r21 actual RPM
    "Tag_23" := #read_record[32];
    "Tag_24" := #read_record[33];
    "Tag_26" := #read_record[34];
    "Tag_27" := #read_record[35];
    #ActualRPM := "Tag_28";
    
    //byte 36,37,38,39,40,41 ,parameter 7, r32 actual POWER
    "Tag_23" := #read_record[38];
    "Tag_24" := #read_record[39];
    "Tag_26" := #read_record[40];
    "Tag_27" := #read_record[41];
    #ActualPower := "Tag_28";
    
    //byte 42,43,44,45,46,47 ,parameter 8, r35 MOTOR TEMP
    "Tag_23" := #read_record[44];
    "Tag_24" := #read_record[45];
    "Tag_26" := #read_record[46];
    "Tag_27" := #read_record[47];
    #MotorTemp := "Tag_28";
    
    //byte 48,49,50,51,52,53 ,parameter 9, r35 MOTOR TEMP
    "Tag_23" := #read_record[50];
    "Tag_24" := #read_record[51];
    "Tag_26" := #read_record[52];
    "Tag_27" := #read_record[53];
    #DriveTemp := "Tag_28";


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM