Program mantığı yardım isteği

xrerox

Üye
Katılım
14 Nis 2014
Mesajlar
7
Puanları
1
Yaş
33
Herkese iyi akşamlar ;

Arkadaşlar s7300 de yazmış olduğum programın bir yerinde takıldım. Program yazarken aşağıda bahsedeceğim gibi durumlarla çok karşılaşıyorum ve beni çok zorluyor. Program işlerinde daha yeniyim ve yazdığım programlar küçükte olsa uydurma olmasından ziyade profesyonel olmasını istiyorum.. şöyleki ;

İki adet piston var sistemde , sistemin ilk hareketinde iki pistonunda hareket şartları (önlerindeki kontağı) "true" oluyor ve iki pistonda hareket ediyor. Fakat mekaniksel olarak birbirlerine çarpıyorlar. Önce birinin daha sonrada diğerinin hareket etmesi gerekiyor. Herşeyi denedim set-reset komutu, belki jump komutu falan ama içinden çıkamadım..

Böyle bir durumda ne yapabilirim , yani 1 piston ileri geri yapacak , daha sonra ikincisi . Birbirlerine sıra ile yol vericekler, yani ladderda satırları sıra ile nasıl işleticem while döngüsü yokki onu beklesin sonra diğerini yapsın.. Uzun oldu ama yardımlarınızı bekliyorum iyi akşamlar..
 
Arkadaşlar sistemi çok basitçe anlattım yani pnomatiksel olarak yada ek bir sensörle falan olmuyor , programla çözmeliyim..
 
Timer koyamam riskli olur , yokmudur bunun bi blogu bi yontemi ? Ladderda dongy loop yapamazmiyim yani ? Illa birinin kapali kontagi yik digerinin acigi falan.. oylede olmuyo gerci..

KontrolKalemi Mobile ile gönderildi.
 
Sinyal çakışmasını önlemenin en garanti yolu sıralı harekettir. Sıralı hareketin mantığı ise bir hareketin bitiminin, sıradaki hareketin başlama sinyalini vermesi esasına dayanır. Bu başlama sinyalinin verilebilmesi ise sınır anahtarları, piston switchleri vb. şeylerle yapılır. Bu durumda timer kullanma seçeneğini bir kenara bıraktığımızda, sensör kullanmaktan başka nasıl bir çare bulmayı düşünüyorsun ben de merak ediyorum.
 
Tam olarak anlatamadim sorunu aslinda iki pistondada ileri geri sensorleri mevcut , ama ornegin ikiside geri pozistonunda baslangic pozisyonunda yani sinyal geliyo , istiyorumki birinci sistem ileri geri gelsin bitiminde digeri. Sistem farkli aslinda ama basitce boyle anlatiyorum , ne yapiyosunuz boyle durumda profesyonel bi cozum yok mudur ?

KontrolKalemi Mobile ile gönderildi.
 
Profosyonel çözüm var, aslında bir teknik var. Tekniğin adı Finite State Machine(Sonlu Durum makinası) kısaca aşağıdaki gibi bir mantık, bu teknikte her sonraki adım, bir önceki adımı resetliyor, adımlar arasındaki geçiş şartı Lojik duruma bağlı yani şarta veya şartlara(Senin probleminde Sensörlere) göre geçiş yapıyor.

----|M0 |-----------<logic here>-----------------(set M1)-(reset M0)----
----|M1 |-----------<logic here>-----------------(set M2)-(reset M1)----
----|M2 |-----------<logic here>-----------------(set M3)-(reset M2)----
----|M3 |-----------<logic here>-----------------(reset M3)----

Yukarıdaki mantığı senin problemine uygularsak
Kod:
      A     "sTARTbUTON"
      FP    M     10.0
      S     "sTART"   //        M0.0 Start

      A     "sTART"          //M0.0 Durumu
      A     "Piston1Geride"  // Lojik kısmı input
      A     "Piston2Geride"  // Lojik kısmı devamı input sorgulanır
      S     "Piston1Ileri"     //M0.1 Sonraki durum
      R     "sTART"           // M0.0 Mevcut durumu bitir

      A     "Piston1Ileri"     //M0.1 Yeni Mevcut Durum
      A     "Piston1Ileride"  // Lojik input geçiş şartı
      S     "Piston1Geri"    // M0.2 Sonraki duruma geçiş
      R     "Piston1Ileri"    //M0.1 Mevcut durumu bitir

      A     "Piston1Geri"   //M0.2 Yeni Mevcut durum
      A     "Piston1Geride"  //Lojik geçiş şartı
      S     "Piston2Ileri"    //M0.3 Sonraki durum
      R     "Piston1Geri"    //M0.2 Mevcut durumu bitir

      A     "Piston2Ileri"  //M0.3
      A     "Piston2Ileride" // input
      S     "Piston2Geri"   //M0.4
      R     "Piston2Ileri"   //M0.3

      A     "Piston2Geri"  //M0.4
      A     "Piston2Geride" //inputa bak
      R     "Piston2Geri"// M0.4 reset bitti...

Programlama dillerine hakimsen aynı tekniğin daha, şık, esnek ve profosyonelcesi için aşağıdaki konuda anlatılmış
https://www.kontrolkalemi.com/forum...1-codesys-st-programlama-soru.html#post292566
 
Son düzenleme:
Cevabınız için teşekkür ederim Sn. elektronikmuh denedim fakat şöyle bir durum var , valflerin yay geri dönüşlü olduğu durumda yine bir sıkıntı çıkmakta ortaya şöyleki ;
A "sTARTbUTON"
FP M 10.0
S "sTART" // M0.0 Start

A "sTART" //M0.0 Durumu
A "Piston1Geride" // Lojik kısmı input
A "Piston2Geride" // Lojik kısmı devamı input sorgulanır
S "Piston1Ileri" //M0.1 Sonraki durum
R "sTART" // M0.0 Mevcut durumu bitir

A "Piston1Ileri" //M0.1 Yeni Mevcut Durum
A "Piston1Ileride" // Lojik input geçiş şartı
R "Piston1Ileri" // M0.2 Sonraki duruma geçiş

AN
"Piston1Ileri"
A
"Piston1Geride"
S
"Piston2Ileri" R "Piston1Ileri" //M0.1 Mevcut durumu bitir


Kıemızı ile yazdığım bu kısım programın ilk taramasında başlangıç şartına yine uyuyor yani piston1ileri yok ve piston1geride sinyali geliyor. İkiside starda geçicekmidir bu durumda ?
 
Madem valfler yay geri dönüşlü o zaman progamı yine mantığı değiştirmeden, Piston 1 Geri durumlarını yardımcı merker gibi düşünüp kullanmıyacaz. Yani M0.2 durumu true false olacak fakat diğer duruma(M0.3) program yine geçecektir. Çıkışlara bakarsanız yardımcı merkerlere durum bitlerini atadım o kadar.

Kod:
      A     "sTARTbUTON"
      FP    M     10.0
      S     "sTART"   //        M0.0 Start

      A     "sTART"          //M0.0 Durumu
      A     "Piston1Geride"  // Lojik kısmı input
      A     "Piston2Geride"  // Lojik kısmı devamı input sorgulanır
      S     "Piston1Ileri"     //M0.1 Sonraki durum
      R     "sTART"           // M0.0 Mevcut durumu bitir

      A     "Piston1Ileri"     //M0.1 Yeni Mevcut Durum
      A     "Piston1Ileride"  // Lojik input geçiş şartı
      S     "Piston1Geri"    // M0.2 Sonraki duruma geçiş
      R     "Piston1Ileri"    //M0.1 Mevcut durumu bitir

      A     "Piston1Geri"   //M0.2 Yeni Mevcut durum
      A     "Piston1Geride"  //Lojik geçiş şartı
      S     "Piston2Ileri"    //M0.3 Sonraki durum
      R     "Piston1Geri"    //M0.2 Mevcut durumu bitir

      A     "Piston2Ileri"  //M0.3
      A     "Piston2Ileride" // input
      S     "Piston2Geri"   //M0.4
      R     "Piston2Ileri"   //M0.3

      A     "Piston2Geri"  //M0.4
      A     "Piston2Geride" //inputa bak
      R     "Piston2Geri"// M0.4 reset bitti...
Kod:
//Çıkışlar
      O "Piston1Ileri"  //M0.1
      =Q0.0 //Piston 1 ileri, ileri yoksa zaten geri gelecek

      O "Piston2Ileri"  //M0.3
      =Q1.0 //Piston 2 ileri, ileri yoksa zaten geri gelecek
 
Son düzenleme:
Ayırdığınız vakit için çok teşekkür ederim, şimdi yattı kafama :) kolay gelsin..
 

Forum istatistikleri

Konular
129,840
Mesajlar
930,680
Kullanıcılar
452,678
Son üye
TengRi

Yeni konular

Çevrimiçi üyeler

Geri
Üst