MS Access de Timer Kontrolu

| 12 Kasım 2012 | 3 Yorum




Microsoft Access de timer yani bir zamanlayıcı üzerinde kontroller gerçekleştirebiliriz. Bu örneğimde RS232 üzerinden bir veri okumak istediğimi düşünelim. Bunu bir butona bağlamadan belli zaman aralıkları yapmak istediğimi farz edelim. Mesela 5 sn de bir bu porttaki veriyi okumak istiyorum.

Öncelikle Access de boş bir Form oluşturup aşağıdaki alanları zaman,frekans ve sayac alanlarımızı tanımlayalım. Bunlar tamamen tablodan ilişkisiz alanlarım şu an için.



Bu formun özellikler sayfasına dizayn modunda sol köşedeki ekran görüntüsündeki sol imlecin bulunduğu alanı tıklatarak girebiliriz.

Burada süreölçer alanına 1000 yani 1sn karşılığını yazıyoruz. Zaman dolduğunda kısmı ise bize bir timer yani zamanlayıcı oluşturmamızı ve ne yapmamız gerektiğini tanımladığımız eylemleri tanımlıyor. Takip eden kodda (Private Sub Form_Timer()) diye geçen kısım. İlgili olay kutucuğunun yanındaki  üç nokta butonu seçip gelen ekrandan kod oluşturucuyu seçelim. Bu alana aşağıdaki kodları yazıyoruz.

Private Sub Form_Timer()

Me!zaman.Value = Now()

If (DateDiff("s", dteTime, Time()) Mod 5 = 0) Then

Me!frekans = DateDiff("s", dteTime, Time())

Me!sayac = Me!sayac + 1

End If

End Sub

Form Açıldığında eylemine ise;

Private Sub Form_Open(Cancel As Integer)

dteTime = Time()

Me!sayac = 0

End Sub

Yazalım. Programı çalıştırdığınızda PC saati üzerinde zaman tarihi alıyoruz ve buna bağlı zamanın saniyesini DateDiff ile ayırıp,  mod 5 e göre hesabımızı yaptığımızda bu değerin 0 olduğu ben port üzerinden okuma yapıyorum. Burada frekans geçen süre, sayac ise bu süre içersinde kaç kere okuma yapacağımı gösteriyor. Eğer daha sık okuma yapmak istersem mod5 değerini mod1 e çekmem yeterli olacaktır. Ekran görüntüsünde 30 sn içersinde 6 kere okuma yapılacağı anlamı çıkarılabilir. Ben diğer okuma eylemi kodlarını ilgilenen olursa daha sonra örnek olarak ekleyebilirim.

özelden aldığım mesajlar üzerine rs232 portundan okuma kodlarınıda ekliyorum.

RS232 seri port okuma (MScomm32.ocx) modülü;

With MSComm

 'seri portu kontrol et
 If .PortOpen Then .PortOpen = False
 'aktif portu com1 yap
 .CommPort = 1

'haberleşme hızı,parity,datab,t vs stop bit setleme

.Settings = "9600,N,8,1"
 ' DRT ve RTS bayraklarını setle
 .DTREnable = True
 .RTSEnable = True
 'porttan gelen tüm bit okumalarını yetkilendir
 .RThreshold = 0
 'gönderilecek tüm bitleri yetkilendir
 .SThreshold = 0
 'Seri portu aç
 .PortOpen = True

End With 'MSComm1

Forms!Form!Alan1 = MSComm.Input

MSComm.PortOpen = False 

bu kodları yukarıda yazılı Private Sub Form_Timer() içine end if ile end sub arasına yazalım. Forms!Form!Alan1 ise resimdeki Form a Tablo1 den eklediğim Alan1 adında bir değişken ve RS232 üzerinden okuduğum verileri bu alana yazdırıyorum.

Bu haberleşme sırasında Mscomm32.ocx kütüphanesi kullandım. Konu ile ilgili http://teknorapor.com/ms-access-rs232-com-port-haberlesme/ yazımda gerekli açıklamalar ve indirebiliceğiniz bu dosya mevcuttur. Mscomm32.ocx lisans problemi ile karşılaşırsanız VB6 veya Microsoft Studio programlarından birini deneme sürümüde olsa PC nize yüklemiz yeterli olacaktır. Bu arada süreölçer aralığı 1000 yani 1 sn iken bunu mesela bu alana 10 yazıp 10 ms de bir örneklemede yapabilirsiniz.

Bu RS232 uygulamasını videodan takip edebilirsiniz.



Kategori: İp Uçları

Bora M. Deniz ()

Teknoloji, internet, ve bilişim gibi konularda paylaşımlarım ve yazılarımla 2011 den beri teknorapor.com dayım. Sosyal medya da yararlı bulduğunuz yazılarımı paylaşmanız dileklerimle... The author shares and writings IT, internet and technology news blog offering

Yorum (3)

Trackback URL | Yorum RSS

  1. fikret kaya diyor ki:

    örneğiniz için teşekürler fakat bir yerde hata veriyor yardım edermisiniz şimdiden teşkürler

    hata satırı
    If .PortOpen Then .PortOpen = False

    burda hata veriyor

    • Bora M. Deniz diyor ki:

      Merhaba Tahminlerm MSCOMM bileşeni register edilmemiş olabilir. Ayrıca COM portunuzu kontrol edebilir misiniz? Hata da yazan mesaj tam olarak nedir?

  2. Mücahit diyor ki:

    Merhaba aynı uygulamayı ethernet üzerinden haberleşme şeklinde kullanmak istiyorum.Yardımcı olabilirmisiniz?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir