Kayıtlar

Durum Makineleri (State Machines)

  Durum makinesi, önceki durumlardan gelen değerlere veya sistem girdilerine bağlı olarak durumlara dinamik akış sağlayan bir programlama mimarisidir. Bu mimari, aşağıdakilerin bir kombinasyonu olarak tanımlanabilecek uygulamalar için uygundur: Durumlar (states) Belirli bir duruma ne zaman geçileceğini belirleyen karar verme mantığı Bir durum, programın genel görevini yerine getirirken program içindeki durum olarak tanımlanabilir. Durum örnekleri başlatma, bekleme, bir hesaplama çalıştırma, durumu kontrol etme vb. olabilir. Mantıksal ifadeler yeni bir duruma ne zaman geçileceğini ve hangi duruma geçileceğini belirlemeye yardımcı olur. Olaylar bir durumdan diğerine geçişi tetiklemek için kullanılabilir. Bunlar programatik olaylar olabileceği gibi bir butona basmak gibi kullanıcı tanımlı olaylar da olabilir. Durum Makinesindeki her durum benzersiz bir şey yapar ve diğer durumları çağırır. Böylece işlemler belli bir sırayla yapılabilir. Örneğin, resimde gördüğünüz state şemasına göre kapı

PureBasic - GUI Yanıt Vermiyor

Resim
  Resimde, pencerenin başlık bölümünde (Yanıt Vermiyor) yazdığını fark etmemiş olabilirsiniz. Aşağıda yanlış kodlanmış bir program örneği göreceksiniz. Bu programı, çalıştırıp, Check me kutucuğuna tıklarsanız veya pencereyi başlık kısmından tutup sürüklerseniz (taşırsanız) herhangi bir sorun olmayacaktır. Start butonuna tıkladıktan sonra bir şey yapmadan beklerseniz yine bir sorun olmayacaktır.  Amma velakin, Start butonuna tıkladıktan sonra aynı işlemleri yapmayı denerseniz, yapamadığınızı görürsünüz. Program size tepki veremeyecek ve çakılacaktır. Program, 20 saniye sonra loop (döngü) bittiğinde normale dönecektir. Start butonuna tıklayınca program Test_LongLoop() prosedürüne gider. Orada zaman alan bir For-Next döngüsüne girer. Bu esnada pencerede veya formda oluşan olaylarla ilgilenemez ve çakılır. Formda oluşan, butona tıklama veya pencereyi taşıma olayları'nı ihmal etmemek gerekiyor. Program yazarken sürekli olarak, oluşan olayları tüketmemiz gerekiyor. Tüketmez, ihmal ederse

PureBasic 4 - GUI programlama

Resim
  PureBasic ile resimdekine benzer arayüzleri komutlarla oluşturabiliyoruz. Aşağıdaki programda #ANA_PENCERE ve #BAYRAK bizim tanımladığımız sabit değerlerdir. #PB_Event_CloseWindow gibi PB ile başlayan sabitler, PureBasic içinde önceden tanımlı olan değerlerdir. Editörde menüden Tools -> Structure Viewer a tıklayın. Burada Constants (sabitler) sekmesine gelin. P harfine basıp bu sabiti bulun. Değerinin 13116 olduğunu görürsünüz. Programı çalıştırınca (F5), Event (oluşan olaylar) numaralarını, Debug penceresinde görürsünüz. Merhaba Dünya pencerisini kapattığınız anda Debug penceresinde en son 13116 yazdığını göreceksiniz. #ANA_PENCERE = 1 #BAYRAK = #PB_Window_SystemMenu | #PB_Window_ScreenCentered OpenWindow(#ANA_PENCERE, 0, 0, 300, 200, "Merhaba Dünya", #BAYRAK) Repeat Event = WaitWindowEvent() Debug Event Until Event = #PB_Event_CloseWindow End OpenWindow() komutu tahmin ettiğiniz gibi pencereyi açıyor. Editörde bu komuta tıklayın ve F1 tuşuna basın. Yardım dosyası a

PureBasic 3 - Bilinmesi gereken konular

Structure (yapı) Structure, farklı tiplerden değişken tiplerini bir çatı altında toplayarak, gruplandırmayı sağlayan bir veri türü yapısıdır. Bu yapı, bize program yazarken çok yardımcı olur. Structure Personel isim.s yas.l EndStructure OpenConsole() Dim personeller.Personel(2) For x = 0 To 2 With personeller(x) \yas = x + 30 \isim = "Erol" EndWith Next For x = 0 To 2 PrintN("yas: " + Str(personeller(x)\yas)) PrintN("isim: " + personeller(x)\isim) Next Delay(4000) Burada iki elemanlı Personel isminde bir yapı tanımlandı. Sonra bu yapıya dayanan üç elemanlı, personeller isminde bir array (dizi) oluşturuldu. With (ile) komutu sayesinde personeller(x) i sürekli yazmak gerekmiyor. Prosedürler Bir programda aynı kodları tekrarlamaktansa bir prosedür oluşturulur. Procedure.l karesi(x.l) ProcedureReturn x*x EndProcedure OpenConsole() PrintN(Str(karesi(2))) Delay(2000) Karesi(x.l) prosedürü oluşturuldu. Prosedüre PrintN() komutuyla long tipi

PureBasic 2 - Hadi başlayalım

Resim
Merhaba PureBasic Basit bir konsol uygulaması ile başlayalım. Aşağıdaki kodu editöre kopyalayın, ardından F5 e basın. Siyah pencerede istediğiniz şeyler yazacaktır. OpenConsole() PrintN("Merhaba, Dünya!") Print("merhabalar") Input() Burada PrintN, yazdırılan bilgiye satır sonu karakteri ekler. Bir alt satırdan yazmaya devam eder. Ekranın hemen kapanmaması için Input() kullandık. Input() komutu, kullanıcıdan bilgi girişi bekler. Enter tuşuna basınca siyah pencere kapanacaktır.  Tek bir satırla da kullanıcıya bilgi verilebilir. MessageRequester("Hoşgeldiniz", "Merhaba Dünya") Debugger (Hata ayıklayıcı) OpenConsole() Debug "Siyah pencere geliyor.." a = 5 PrintN("Merhaba!") Debug "Program 2 saniye bekliyor.. " + a Delay(2000) Siyah pencerede Merhaba yazarken Debug penceresinde diğerleri yazacaktır. Debug penceresi sadece yazılımcının hatalarını bulabilmesi içindir. Program, son halini alıp, derlenip exe dosyası elde edi

PureBasic - Tanıtım

Resim
  Not:  GitHub.io 'da sadece Purebasic içeren  yeni bir blog  oluşturdum.  PureBasic , tahmin edeceğiniz gibi, Basic programlama dilini temel alan gelişmiş bir dildir. Diskte 300 MB yer kaplayan yazılım, tek kullanıcı için 79€ ya satılmaktadır. Programı tanımak, öğrenmek veya bir exe oluşturmak için bu ödemeyi yapmanız şart değil. Sitesinden indireceğiniz program ile 800 satıra kadar olan programları ücretsiz olarak yazabilirsiniz. Yazılımın, Windows, Linux, OS X, Raspberry Pi ve AmigaOS sürümleri vardır. Yani aynı kodu, farklı platformlar için derleyebilirsiniz. Programı satın alırsanız ömür boyu güncel versiyon kullanmayı da hak etmiş oluyorsunuz. Dünyada yazılan milyonlarca satırdan oluşan programlardan sonra VB 6.0 bitti VB .Net e geçelim.. Yok o da bitti bitiyor VB .Net Core a geçelim. Neyse ki PureBasic kültüründe böyle durumlar olmuyor 😁 Özetle PureBasic için, öğrenmesi kolay, hızlı ve iş bitirici diyebiliriz. Normalde PureBasic IDE, arka fonu açık sarı renkli geliyor. Gözü

S7-1200 encoder bağlantısı

Resim
  Resimdeki gibi bir düzenek kurdum. Step motor, üzerindeki kalemi hareket ettirerek teneke kutu üstünde bulunan kağıda minik bir çizgi koyuyor. Kutunun altında görülen mavi disk, 3D yazıcı ile basılmış bir encoder diski diyebiliriz. Sağ altta görülen fotosel mavi disk bir tur attığında bir sinyal veriyor. Burada amaç kutu hangi hızda dönerse dönsün, kalemin hep aynı yere işaret koymasıdır. Çalışan sistemin videosunu youtube bağlantısından izleyebilirsiniz. Elimdeki S7-1200 röle çıkışlı olduğundan step motor sürme işini önceki yazıda anlattığım PLC Zero yapıyor. S7-1200, Q0.0 çıkışı ile PLC Zero girişine sinyal yolladığında kalem hareket ediyor. Kalem ile aslında bizim etiket aplikatörünü simüle etmiş oluyorum. PLC Zero yu ve kalemi etiket aplikatörü gibi düşünebiliriz.  Encoder diski üstündeki kutucukları görmek için 5V ile çalışan u-tip sensör kullanıldı. Sensör çıkışını S7-1200 I0.0 girişine bağlamak için 24V a çevirmemiz gerekiyor. Bunun için de yine ULN2004 entegresi kullanıldı