PROGRAM Motor
VAR
motorsicaklik: INT;
setdeger: INT;
Motor: BOOL;
TON_1: TON;
TOF_1: TOF;
END_VAR
(*10 sn sicakligin yuksek durmasi*)
TON_1(IN:=(motorsicaklik>=setdeger) ,
PT:= T#10s);
TOF_1(IN:= (TON_1.Q = 1),
PT:=T#5m );
IF (TOF_1.Q=1) THEN
Motor:=0;
ELSE
Motor:=1;
END_IF;
PROGRAM PLC_PRG
VAR
bMOverTemp : BOOL; (* TRUE if Motor Actual Temperature > Motor Set Temperature*)END_VAR
dMSetTemp : DINT; (* Motor Set Temperature*)
dMActTemp : DINT; (* Motor Actual Temperature*)
bLockMotor : BOOL; (*Motor Lock Control*)
tonOverTemp : TON; (*Q after 10 seconds of bMOverTemp*)
tonLockMotor : TON; (*Q after 5m of bLockMotor*)
qMotor : BOOL; (*simulation of %QX1.0 to inverter start signal*)
bMOverTemp := dMActTemp > dMSetTemp;
tonOverTemp (IN := bMOverTemp, PT := t#10s);
IF tonOverTemp.Q THEN
bLockMotor := TRUE;
END_IF
tonLockMotor(IN := bLockMotor, PT := t#5m);
IF tonLockMotor.Q AND NOT bMOverTemp THEN
bLockMotor := FALSE;
END_IF
(*OUTPUTS*)
qMotor := NOT bLockMotor;
(*alttaki kodda state_machine DINT olarak tanıtılabilir*)
CASE state_machine OF
0:
qMotor := TRUE;
tonOverTemp (IN := dMActTemp > dMSetTemp, PT := t#10s);
IF tonOverTemp.Q THEN
state_machine := 10;
END_IF
10:
qMotor := FALSE;
tonLockMotor(IN:=TRUE, PT:=T#5M);
IF tonLockMotor.Q THEN
state_machine := 20;
END_IF
20:
IF dMActTemp < dMSetTemp THEN
state_machine := 0;
END_IF
ELSE (*STATE ERROR CASE*)
qMotor := FALSE;
state_machine := 20;
END_CASE
PROGRAM PLC_PRG
VAR
bMOverTemp : BOOL; (* TRUE if Motor Actual Temperature > Motor Set Temperature*)
dMSetTemp : DINT; (* Motor Set Temperature*)
dMActTemp : DINT; (* Motor Actual Temperature*)
bLockMotor : BOOL; (*Motor Lock Control*)
tonOverTemp : TON; (*Q after 10 seconds of bMOverTemp*)
tonLockMotor : TON; (*Q after 5m of bLockMotor*)
qMotor : BOOL; (*simulation of %QX1.0 to inverter start signal*)
state_machine : STATES;
END_VAR
daha sonra üstte yazdığım case'li kod parçasını, aşağıdaki gibi değiştirelim. Dediğiniz gibi TIMER'ları statelerin içinde tanımlayacaksak, FALSE olmasını garanti etmeliyiz.TYPE STATES :
(
(*0*) S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE :=0,
(*1*) S_OVER_TEMPERATURE_LOCK_MOTOR,
(*2*) S_WAIT_NOMINAL_TEMPERATURE
);
END_TYPE
CASE state_machine OF
S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE:
qMotor := TRUE;
tonOverTemp (IN := dMActTemp > dMSetTemp, PT := t#10s);
IF tonOverTemp.Q THEN
tonOverTemp(IN:=FALSE);
state_machine := S_OVER_TEMPERATURE_LOCK_MOTOR;
END_IF
S_OVER_TEMPERATURE_LOCK_MOTOR:
qMotor := FALSE;
tonLockMotor(IN:=TRUE, PT:=T#5M);
IF tonLockMotor.Q THEN
tonLockMotor(IN:=FALSE);
state_machine := S_WAIT_NOMINAL_TEMPERATURE;
END_IF
S_WAIT_NOMINAL_TEMPERATURE:
IF dMActTemp < dMSetTemp THEN
state_machine := S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE;
END_IF
ELSE (*STATE ERROR CASE*)
qMotor := FALSE;
state_machine := S_WAIT_NOMINAL_TEMPERATURE;
END_CASE
tonOverTemp (IN := (dMActTemp > dMSetTemp) AND (state_machine = S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE) , PT := t#10s);
tonLockMotor(IN:=(state_machine = S_OVER_TEMPERATURE_LOCK_MOTOR), PT:=T#5M);
CASE state_machine OF
S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE:
qMotor := TRUE;
IF tonOverTemp.Q THEN
state_machine := S_OVER_TEMPERATURE_LOCK_MOTOR;
END_IF
S_OVER_TEMPERATURE_LOCK_MOTOR:
qMotor := FALSE;
IF tonLockMotor.Q THEN
state_machine := S_WAIT_NOMINAL_TEMPERATURE;
END_IF
S_WAIT_NOMINAL_TEMPERATURE:
IF dMActTemp < dMSetTemp THEN
state_machine := S_CONTINIOUS_CONTROL_OF_MOTOR_TEMPERATURE;
END_IF
ELSE (*STATE ERROR CASE*)
qMotor := FALSE;
state_machine := S_WAIT_NOMINAL_TEMPERATURE;
END_CASE
TYPE STATES_P12_OTOMATIK_MOD3 :
(
SP12_BASLA:=0,
SP12_CATAL_SENSOR_KONTROLU,
SP12_SERVO_YATAGINDA_URUN_KONTROLU,
SP12_YATAK_KONTROLU_JOGGING_SONLANDIRMA,
SP12_YATAKTA_URUN_YOK_BASLANGIC_POZISYONUNA_GIT,
SP12_YATAGA_URUN_BESLE,
SP12_CATAL_SENSOR_GORENE_KADAR_URUNU_TASI,
SP12_POZISYONLAMA_ONCESI_KLAPE_AC,
SP12_ISTENEN_POZISYONA_GIT,
SP12_DAYAMA_ASAGIYA,
SP12_ISTENEN_POZISYONLAMA_YAVAS_SONLANDIR,
SP12_OTOMATIK_DONGU_BASLANGIC_DURUMU,
SP12_BASKI_CENESI_PRESS_YAP,
SP12_ARABA_BEKLEME_POZ_YAP,
SP12_DONME_ONCESI_DAYAMA_BEKLE,
SP12_DONME_MOTORU_CALISTIR,
SP12_DUZ_HIDROLIK_ILERI,
SP12_DONME_HIDROLIK_ILERI_GERI,
SP12_DUZ_HIDROLIK_GERI,
SP12_GRIPPER_ILERI,
SP12_NP_CATAL_SENSOR_KONTROL_ET,
SP12_NP_CATAL_SENSOR_ONU_BOSALT,
SP12_NP_BEKLEME_POZISYONUNA_GERI_DON,
SP12_NP_YATAGA_URUN_BESLE,
SP12_NP_CATAL_SENSOR_GORENE_KADAR_URUNU_TASI,
SP12_NP_ISTENEN_POZISYONA_GIT,
SP12_NP_ISTENEN_POZISYON_YAVAS_SONLANDIR,
SP12_GRIPPER_GERI,
SP12_CATAL_SENSORDEKI_URUNU_BOSALT,
SP12_CATAL_SENSORDE_URUN_YOK,
);
END_TYPE
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?