Operatör panelden timer'a değer atama yardım

xrerox

Üye
Katılım
14 Nis 2014
Mesajlar
7
Puanları
1
Yaş
32
Merhaba arkadaşlar ;

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.

Yardımcı olabilecek bir arkadaş var mıdır acaba ?
 
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
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.
Kod:
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.
 
Son düzenleme:
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
 
bizim kullandığımız programlarda siemensin kendi timer komutu vardı.
Kod:
L  // sacadadan girilen değer
ITB
L  2 // ( 0-3 arasında olmalı 2 değeri saniye için kullanılıyor)
SLD 12
OW
T  MW100

bu şekildeki kullanımda scadadan degeri saniye olarak timera gönderebiliyorsun.
 
Moderatör tarafında düzenlendi:
bizim kullandığımız programlarda siemensin kendi timer komutu vardı.
Kod:
L  // scadadan girilen değer
ITB
L  2 // ( 0-3 arasında olmalı 2 değeri saniye için kullanılıyor)
SLD 12
OW
T  MW100

bu şekildeki kullanımda scadadan degeri saniye olarak timera gönderebiliyorsun.
Scadadan 1.25sn gibi bir değer istenirse yukarıdaki kod çalışmaz. Yukarıdaki kod sadece tam sayı süre değerleri içindir. Örn: 2s 3s 10sn gibi
 

Forum istatistikleri

Konular
128,324
Mesajlar
916,713
Kullanıcılar
450,162
Son üye
SoftwareMan

Yeni konular

Geri
Üst