Dijital Giriş Çıkış Modülü – 4. Versiyon

MAVIS olarak kendi üretimimiz olan Digital Input / Output modülünün yeni versiyonu üretip kullanmaya başladık.

Bu yeni modülde, eski versiyonlardaki gibi 8 giriş / 8 çıkış değil, içindeki kartın farklı olmasından dolayı 6 giriş / 5 çıkış değeri mevcuttur. Daha fazla sayıda giriş/çıkış gerektiği zaman, birden fazla modül aynı anda bilgisayara takıp kullanılabiliyor. Boyut olarak da eskiye göre daha küçüldü.

dijital giris cikis modul 4

Çıkışlar röle çıkışı, kuru kontak denilen şekildedir. Yani 2’li klemensin bir tarafından voltaj verilir. İlgili çıkış verildiği anda röle çekilir ve diğerinden bu verilen voltaj alınabilir, röle çıkışı verilmez ise bu voltaj alınmaz.

  • USB ya da Seri Port (9600 bps, 8, N, 1) ile bağlantı sağlanabiliyor.
  • 24V beslemesi verilir. USB ile bağlı ise buna gerek yok çünkü gücünü bilgisayardan alır.
  • Küçük boyutlar (10cm x 7cm x 3cm)
  • Elektriksel parazitlenmeye karşı korumalı donanımı ve yazılımı vardır. Gelen ve giden sinyaller için pattern (sabit ek byte’lar) kullanılıyor.
  • Gelen girişlerin doğru olduğuna emin olmak için birden fazla okuma yap (tekrarlı okuma sayısı parametrik). Sizin için kontrol zamanı çok önemli ise bu tekrarlı okuma sayısını azaltabilirsiniz, ya da biraz zamanınız var ve gelen bilginin doğru olması çok önemli ise bu sayıyı arttırabilirsiniz.

Dijital Giriş / Çıkış Modülümüzün Çizimi:

modul4

Normalde çevreden elektriksel sinyal kapma olasılığı her zaman pek olmasa da, özellikle sistemin yakınında yüksek akım çeken makinelerin varlığı, motorların veya konveyörlerin çalıştığı, kaynak aletlerinin, pres makinelerinin olduğu durumlarda bazen parazit sinyal kapması sorun olabiliyor. Bu durum özellikle USB bağlantıda daha çok olduğu için Seri modda çalışmasını tavsiye ediyoruz.

Ancak yine de bir şekilde parazit sinyal gelmesi durumunda, bu sefer durumu yazılım ile kontrol altına alıyoruz.

2 şekilde parazit sinyal alınma ihtimali var; Birincisi, modülde giriş kısmına sanki tetik sinyali alınmış gibi gelen parazitler. İkincisi, modül ile bilgisayar arasında kablonun kapmış olduğu parazit sinyaller.

Birinci tipteki problemler için; modülün yazılımında, sistemden gelen sinyalin hala gelip gelmediğine bakarak bunu anlayabiliyoruz. Bunun için modülün içindeki parametreleri değiştirebilme olanağımız var. Parazit sinyal hemen gelip geçici olduğu için gerçek sinyal olmadığı anlaşılacaktır.

İkinci tipteki problemler için ise; Gerçek sinyal geldiğinde modülden gelen data pattern’li oluyor, yani önüne başka sabit ek byte’lar ekleniyor. Modül ile bilgisayar arasında kabloya parazit sinyaller geldiğinde, pattern’siz yani sabit ek byte’lar olmadan data gelecektir, bu datayı dikkate almayarak sistemin şaşırmasını engelleyeceğiz.

Aşağıda USB ve seri modda çalışarak nasıl giriş okunur çıkış verilir kısaca açıklamaya çalıştım. Daha detaylı bilgi için bize ulaşabilirsiniz. Modülümüzü alıp kullanmak isteyenlere zaten detaylı dokümanı gönderiyoruz. İletişim için: info@mavis.com.tr ya da kagan@mavis.com.tr.

USB bağlantıda;

  • Çıkış vermek için; 9 byte göndeririz. [0 1 OutputVal 0 0 0 0 0 0] şeklinde olmalıdır. Buradaki 1 değerinde olan 2. byte: yazma işleminin kodudur. OutputVal ise çıkış vermek istediğimiz değerdir.
  • Girişleri sorgulama için; [0 4 0 0 0 0 0 0 0] datasını göndeririz. 4 kodu bizim girişleri sorduğumuzun koddur. Bunun sonucunda bize gelen data şu şekilde olacaktır: [250 251 252 id 14  InputVal  0 0 0]. İlk 3 byte pattern’dir, yani gelen sinyal modülden doğru şekilde gelmiştir. id değeri, modüle atadığımız id numarasıdır. 14 değeri, girişleri sormamıza istinaden modülün verdiği cevap olduğunu gösterir. InputVal ise modülde şuanda var olan giriş değerleridir.

Seri bağlantıda;

  • Çıkış vermek için; [254 253 252 1 OutputVal 0] şeklinde olmalıdır. Buradaki ilk 3 byte pattern’dir. 1 değeri, yazma işleminin kodudur. OutputVal ise çıkış vermek istediğimiz değerdir.
  • Girişleri sorgulama için; [254 253 252 4 0 0] datasını göndeririz. 4 kodu bizim girişleri sorduğumuzun koddur. Bunun sonucunda bize gelen data şu şekilde olacaktır: [250 251 252 id 14 InputVal]. İlk 3 byte pattern’dir, yani gelen sinyal modülden doğru şekilde gelmiştir. id değeri modüle atadığımız id numarasıdır. 14 değeri, girişleri sormamıza istinaden modülün verdiği cevap olduğunu gösterir. InputVal ise modülde şuanda var olan giriş değerleridir.
  • Giriş değerleri anlık olarak değiştiğinde görebilmek için; serialPort1_DataReceived event’i tanımlı olması gerekmekte. Bu event tetiklendiğinde, seri porttaki byte’lar okunarak işleme devam edilir. Okuma sonucunda gelen data şu şekilde olacaktır: [250 251 252 id 10 InputVal]. 10 değeri, girişlerde değişkenlik olduğunun kodudur. InputVal ise modülde şuanda var olan giriş değerleridir.

 

 

USB Modül Kurulum ve Kullanımı

%100 Açık kaynak kodlu, Mavis USB I/O sınıfının kullanımı:

VS içinden projenizi açıp, Mavis tarafından tedarik edeceğiniz USB_DIO ve DioModule sınıfını projenize eklendiğinizde Solution Explorer içinde soldakine benzer bir görüntü olması lazım.

USB_DIO, HID USB fonksiyonlarının olduğu bir kütüphanedir. Genel USB giriş çıkış fonksiyonlarının tamamını destekler.

DIOModule ise, genel USB fonksiyon setinin Mavis tarafından geliştirilmiş giriş çıkış modülüne uyarlanmış halidir. Byte se Bit seviyesinde okuma yazma yapabilen ve modülün giriş çıkış işlemlerine olanak sağlayan yapıları içerir.

Bu aşamadan sonra, normal C# sınıf kullanımı gibi DIOModule kullanımı yapılabilir.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;

namespace VYP
{    

    public partial class frmMain : Form
    {

		public DIOModule dioModule = new DIOModule();

bu tanımlama ile dioModule isminde global bir değişkenimiz oldu.

Bir trigger yardımıyla sürekli okuma

		private void tmrDIO_Tick(object sender, EventArgs e)
		{
			if ((dioModule.connected) && (dioModule.Active))
			{
				byte inputDIO;
				dioModule.ReadDio(out inputDIO, false);
                if (dioModule.DIChanged())
                {
					if (inputDIO == dioModule.triggerSignal)
					{
						//RunAll();
						// Put Here your trigger code...
					}
                }
			}
		}

DIOModule kullanarak belirli bir çıkış değerini set etme

if ((dioModule.Active) && (dioModule.connected))
{
dioModule.WriteDio(1, false); // Led leri yakıyoruz...
}

DIOModule kullanarak girişteki değeri okuma

if ((dioModule.Active) && (dioModule.connected))
{
byte inputDIO;
dioModule.ReadDio(out inputDIO, false);
// okunan değer inputDIO değişkenine alındı
}

dioModule Pin bazında erişim imkanı da sunmaktadır. Indexer yapısıyla desteklenmiş bu kullanım moduna göre

dioModule.SetPin(2);

dioModule.SetPin(4);

gibi yapı kullanılabilir. Bunun yerine daha gelişmiş olan;

dioModule.Pins[2] = 1;

dioModule.Pins[4] = 0;

gibi, indexer yapısı da tercih edilebilir.

Belirli bir pin değerini okumak için;

dioModule.GetPin(2);

yapısı

veya

byte b = dioModule.Pins[2]; indexer yapısı tercih edilebilir.

Belirli bir pin değerini sıfırlamak için

dioModule.ClearPin(2);

yapısı kullanılabilir. Bu yapıya göre, diğer çıkış değerlerinin ne olduğuna bakılmaksızın 2 nolu pin sıfıra çekilecektir.

Mavis, dioModule için gelişmiş fonksiyon setine sahiptir. Daha fazla bilgi için bizimle irtibata geçiniz…