Operatör panelden programda kullandığım bir timera değer atamak istiyorum . Bunun için bir data blokta data type'ı "s5time" olan bir değişken oluşturdum. Ve ekrandaki tagı buraya bağladım ancak girdiğim değer ms olarak yazılıyor. Örneğin timer'a 5 min girmek istediğimde timer 50 ms değerini alıyor.
Ekrandan girilen değeri programda ms çevirip yazmaya çalışıyorum ancan en fazla 65 bin küsür değer yazılabiliyor burayada.
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
L MD10 // real format (seconds) OP den gelen REAL değer (sn biriminde)
L 1000.0
*R
RND // here you get DINT in ms. It the same as TIME format
T #Time_in_ms
CALL "TIM_S5TI" // FC 40 from Standart library->IEC functions
IN := #Time_in_ms
OUT := #S5_time_output //TİMER A GÖNDERECEĞİN DEĞER
s5 timer yerine iec timer kullanmak daha mantıklı eğer operatör panelden değer gireckseniz çünkü s5 timer tam sayı olarak saymaz iec tımer ise tam sayı olarak sayar
Panelden veriyi real data olarak girmek her zaman kullanışlıdır, çünkü istediğin matemetiksel işlemi real değer üzerinde yapabilir tekrar S5time tipine çevirip kullanabilirsin.
Mesale arkadaş dakika(veya saat) olarak veri girilmesini istemiş ise yukarıdaki kodda MD60'ı 60.0(saat ise 3600.0 ile) ile çarpıp yukarıdaki işlemlerden geçirip timera yükleyebilir.
Real değeri s5time dönüştüren fonksiyon. Not: Denemedim alıntıdır..
Kod:
FUNCTION "Real->S5T" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
Zeit_min : REAL ;
END_VAR
VAR_OUTPUT
Zeit_W : WORD ;
END_VAR
VAR_TEMP
T_sek : REAL ;
OFlow : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
L #Zeit_min;
L 6.000000e+001;
*R ;
T #T_sek;
L #T_sek;
L 9.990000e+000;
<R ;
SPB P0;
TAK ;
L 9.990000e+001;
<R ;
SPB P1;
TAK ;
L 9.990000e+002;
<R ;
SPB P2;
TAK ;
L 9.999000e+003;
>R ;
= #OFlow;
SPA P3;
NETWORK
TITLE =
P0: NOP 0;
L #T_sek;
L 1.000000e+002;
*R ;
RND ;
ITB ;
L 2#0;
OW ;
T #Zeit_W;
BEA ;
P1: NOP 0;
L #T_sek;
L 1.000000e+001;
*R ;
RND ;
ITB ;
L 2#1000000000000;
OW ;
T #Zeit_W;
BEA ;
P2: NOP 0;
L #T_sek;
RND ;
ITB ;
L 2#10000000000000;
OW ;
T #Zeit_W;
BEA ;
P3: NOP 0;
L #T_sek;
L 1.000000e+001;
/R ;
RND ;
ITB ;
L 2#11000000000000;
OW ;
T #Zeit_W;
UN #OFlow;
BEB ;
L W#16#3999;
T #Zeit_W;
BEA ;
END_FUNCTION