ST dilde Convert işlemi

Cevapla
Kullanıcı avatarı
DeisS
Mesajlar: 48
Kayıt: 08 Mar 2021, 15:07
İletişim:
Durum: Çevrimdışı

ST dilde Convert işlemi

Mesaj gönderen DeisS »

Merhabalar.

15MC ile program hazırlıyorum.
ST dilinde DINT_TO_UDINT convert işlemi icin ;

Sayi1 := DINT_TO_UDINT(In:= Sayi2 ) ;

yazımı doğrumudur?
teşekkürler.
Kullanıcı avatarı
Coşkun
Mesajlar: 155
Kayıt: 07 Mar 2018, 14:26
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen Coşkun »

Merhaba,

Kullanım şekliniz doğrudur.

ST_DINT_TO_UDINT.elcx.png



Saygılarımla, iyi çalışmalar dilerim.
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Coşkun Özdemir - Senior Field Application Engineer - DELTA Electronics Turkey
Kullanıcı avatarı
DeisS
Mesajlar: 48
Kayıt: 08 Mar 2021, 15:07
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen DeisS »

Teşekkürler.
Kullanıcı avatarı
DeisS
Mesajlar: 48
Kayıt: 08 Mar 2021, 15:07
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen DeisS »

Coşkun Bey merhabalar.
CANopenBuilder ile 15MC çalışması yapıyorum.
Aşağıda kodunu verdiğim kod paracığında CASE işleminde bir türlü sıralı çalışmayı yakalayamadım.
CASE döngüsü 10'dan 30'a atlıyor ve bu şekilde birer atlamalı gidiyor.
MC_MoveAbsolute bloğunun EN girişine bir bit ekledim RESET ve SET işlemlerini yaptım ama yine sonuç alamadım.
Birde MC_MoveAbsolute bloğunun giriş ve cıkışlarında TRUE şeklinde kalanlar oluyor.
Hata nerede acaba ?
Yardımcı olurmusunuz?
Teşekkürler.

Kod: Tümünü seç


IF Otomatik AND SenkronCalisma THEN		
	IF EDGEPOS(xStart) AND NOT(osCalisma_Basladi) THEN        // Otomatik çalışma başlasın
		osCalisma_Basladi := True ;
	    osAdimPos := 10 ;
	END_IF ;

	
		  os_AdimAbs(EN:= True,           // MC_MoveAbsolute fonksiyon bloğu
	  Axis:= 1,
	  Execute:= osAdimBasla,
	  Position:= os_igPos,
	  Velocity:= os_igVel,
	  Acceleration:= osAbs_Acc,
	  Deceleration:= osAbs_Dec,
	  Jerk:= osAbs_Jerk,
	  Direction:= 1,
	  BufferMode:= 0,
	  );
	
	
	IF EDGEPOS(os_AdimAbs.Done) THEN         // Aktif adım pozisyonuna ulaşıldı
		osAdimBasla := FALSE ;
	END_IF ;
	
END_IF;


CASE osAdimPos OF
	
	10: // Adım1
	
	     osA1Gecikme_tmr (EN:= osAdimPos = 10 ,     // Adım1 gecikme timer
	          IN:= osAdimPos = 10 ,
	          PT:= osA1Gecikme,
	          );
			
	    IF osA1Gecikme_tmr.Q THEN         // Adım1 gecikme bittiyse pozisyona git
	        osAdimBasla := TRUE ;
	    END_IF ;
		
		  os_igPos := hmi_osA1_AbsPos ;       // Adım1 pozisyon ataması
		  os_igVel := hmi_osA1_AbsVel ;       // Adım1 Hız ataması
			
	    IF EDGEPOS(os_AdimAbs.Done) THEN         // Adım1 bittiyse Adım2'ye geç
	        osAdimPos := 20 ;
	    END_IF ;
	
	20: // Adım2

		
	     osA2Gecikme_tmr (EN:= osAdimPos = 20 ,     // Adım2 gecikme timer
	          IN:= osAdimPos = 20 ,
	          PT:= osA2Gecikme,
	          );
			
	    IF osA2Gecikme_tmr.Q THEN         // Adım2 gecikme bittiyse pozisyona git
	        osAdimBasla := TRUE ;
	    END_IF ;
		
		  os_igPos := hmi_osA2_AbsPos ;       // Adım2 pozisyon ataması
		  os_igVel := hmi_osA2_AbsVel ;       // Adım2 Hız ataması
			
	    IF EDGEPOS(os_AdimAbs.Done) THEN         // Adım2 bittiyse Adım3'e geç
	        osAdimPos := 30 ;
	    END_IF ;
	
	
	30: // Adım3
	
	     osA3Gecikme_tmr (EN:= osAdimPos = 30 ,     // Adım3 gecikme timer
	          IN:= osAdimPos = 30 ,
	          PT:= osA3Gecikme,
	          );
						
	    IF osA3Gecikme_tmr.Q THEN         // Adım3 gecikme bittiyse pozisyona git
	        osAdimBasla := TRUE ;
	    END_IF ;
		
		  os_igPos := hmi_osA3_AbsPos ;       // Adım3 pozisyon ataması
		  os_igVel := hmi_osA3_AbsVel ;       // Adım3 Hız ataması
			
	    IF EDGEPOS(os_AdimAbs.Done) THEN         // Adım3 bittiyse Adım4'e geç
	        osAdimPos := 40 ;
	    END_IF ;
		
	
	40: // Adım4
	
	     osA4Gecikme_tmr (EN:= osAdimPos = 40 ,     // Adım4 gecikme timer
	          IN:= osAdimPos = 40 ,
	          PT:= osA4Gecikme,
	          );
						
	    IF osA4Gecikme_tmr.Q THEN         // Adım4 gecikme bittiyse pozisyona git
	        osAdimBasla := TRUE ;
	    END_IF ;
		
		  os_igPos := hmi_osA4_AbsPos ;       // Adım4 pozisyon ataması
		  os_igVel := hmi_osA4_AbsVel ;       // Adım4 Hız ataması
			
	    IF EDGEPOS(os_AdimAbs.Done) THEN         // Adım4 bittiyse Adım5'e geç
	        osAdimPos := 50 ;
	    END_IF ;
		
	
	50: // Adım5
	
	     osA5Gecikme_tmr (EN:= osAdimPos = 50 ,     // Adım5 gecikme timer
	          IN:= osAdimPos = 50 ,
	          PT:= osA5Gecikme,
	          );
						
	    IF osA5Gecikme_tmr.Q THEN         // Adım5 gecikme bittiyse pozisyona git
	        osAdimBasla := TRUE ;
	    END_IF ;
		
		  os_igPos := hmi_osA5_AbsPos ;       // Adım5 pozisyon ataması
		  os_igVel := hmi_osA5_AbsVel ;       // Adım5 Hız ataması
			
	    IF EDGEPOS(os_AdimAbs.Done) THEN         // Adım5 bittiyse Adım6'ya geç
	        osAdimPos := 0 ;
	    END_IF ;
		

  ELSE
    osAdimPos := 0 ;
	
END_CASE ;







Kullanıcı avatarı
Coşkun
Mesajlar: 155
Kayıt: 07 Mar 2018, 14:26
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen Coşkun »

Merhaba,

Komutların EN girişini keserseniz komut pasif olur ve aktif olana kadar bir işlem yapmaz. Burada izlediğiniz yöntem yanlıştır.

Daha doğru çalışma yöntemi için "EN" koşulu önüne "Power.Status, MotionState.Jog değil" gibi koşullar ekleyip komutu sürekli çevrimde bırakmalısınız. Daha sonra komutu çalıştırmak için komutun "Execute" girişini kullanabilirsiniz. "Execute" setli kaldığı sürece komut tamamlandı "Done" çıkışı da aktif olacaktır. Taki "Execute" girişi resetleninceye kadar.

Ayrıca burada her "case" altında komut çağırmak yerine Örn. Axis formu oluşturup orada eksenler için birer adet komut tanımlayıp daha sonra o komutları programın farklı yerlerinden çağırabilirsiniz (Tek komut ile sadece pozisyon ve hız değiştirip aynı eksen kontrol edilebilir). Bu yöntem daha pratik olacaktır.

Bir başka yöntem olarak da makro hareket komut kümesi oluşturup daha sonra o komutları program içerisinden farklı noktalardan çağırabilirsiniz. Daha sonra komutların durumuna göre "case" adımları dallandırabilirsiniz.



Saygılarımla, iyi çalışmalar dilerim.
Coşkun Özdemir - Senior Field Application Engineer - DELTA Electronics Turkey
Kullanıcı avatarı
DeisS
Mesajlar: 48
Kayıt: 08 Mar 2021, 15:07
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen DeisS »

Bilgi için teşekkür ederim.
ST dilinde yeniyim ve öğrenmeye çalışıyorum.
Elimdeki projeyide ST olarak yaparak tecrübe kazanmak istiyorum.
Rica etsem 1-2 satırlık bir örnek paylaşırmısınız.
Coşkun yazdı: 22 Haz 2022, 17:58
Ayrıca burada her "case" altında komut çağırmak yerine Örn. Axis formu oluşturup orada eksenler için birer adet komut tanımlayıp daha sonra o komutları programın farklı yerlerinden çağırabilirsiniz (Tek komut ile sadece pozisyon ve hız değiştirip aynı eksen kontrol edilebilir). Bu yöntem daha pratik olacaktır.

Bir başka yöntem olarak da makro hareket komut kümesi oluşturup daha sonra o komutları program içerisinden farklı noktalardan çağırabilirsiniz. Daha sonra komutların durumuna göre "case" adımları dallandırabilirsiniz.
Burada demek istediklerinizi anlamadım maalesef :)
Birkaç konumluk absolute hareket döngüsüyle örneklendirmeniz mümkün mü?
Teşekkürler.
Kullanıcı avatarı
Coşkun
Mesajlar: 155
Kayıt: 07 Mar 2018, 14:26
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen Coşkun »

Merhaba,

ST ile hazırlamış olduğum ekteki örnekten faydalanabilirsiniz.

ST_Example_20220625.png


Saygılarımla, iyi çalışmalar dilerim.
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Coşkun Özdemir - Senior Field Application Engineer - DELTA Electronics Turkey
Kullanıcı avatarı
DeisS
Mesajlar: 48
Kayıt: 08 Mar 2021, 15:07
İletişim:
Durum: Çevrimdışı

Re: ST dilde Convert işlemi

Mesaj gönderen DeisS »

Teşekkürler
Cevapla

“MC Forum” sayfasına dön