www.mamboteam.com
plcnedir.com Advertisement
FORUM arrow Sizden Gelenler arrow plc ile Seri port tan haberleşme naıl yapılır
Saturday, 31 July 2010
 
 
PLC MARKALARI
Ana Menü
FORUM
ANA SAYFA
PLC KONULAR
PLC NEDİR
PLC TEZİ
SORULAR CEVAPLAR
YENİ SORU SOR
Temel PLC Sistemleri
PLC Programlama
Faydalı Bilgiler
Örnekler
Dahlender Motor
İleri Geri Yıldız-Üçgen Motor
DC Motor Kontrolu
Popüler Yazılar

plc ile Seri port tan haberleşme naıl yapılır Yazdır E-posta
Saturday, 10 May 2008
Seri port haberleşme protokolleri ve yaşanılan sorunlar.Kesintisiz,Hatasız ve hızlı çalışan seri port programları nasıl yapabiliriz Seri haberleşmernrnBir çoğumuz seri port\'tan bilgi transferi ihtiyacı duymuşuzdur.rnBu transferin Vb 6\'da vb.net 2003\'de ve vb.net 2005\'de benzer rnşekilde çalışan sistemleri vardır. Fakat bu sistemler Buffer\'dakirnbilgiyi okumaya ve yazmaya,Buffer boyutu ayarlama\'ya ve Buffer\'darnbilgi olup olmadığını sorgulamaya yönelik temel operasyonları yönetir.rnOysa gelişmiş haberleşme sistemleri bu temel fonksiyonlar ile daha bir rnçok operasyonu yönetirler. Gelişmiş haberleşme sistemlerinden en yaygınrnolanları profibus ve modbus\'tır. Konuyu daha iyi açıklamak için profibus\'ırninceleyelim. Otomasyonun öncü firmalarından Siemens makine ortamında bulunanrncihazların birbirleri ile ve bilgisayarlar ile haberleşme ihtiyacını ilk farkedenrnfirmalardan biridir. Bu amaçla seri port üzerinden rs232 ve rs422 hardware yapısınırnkullanarak 3964 ve 3964R protokolleri ile haberleşme gerçekleştirmiştir. rnrnBu protokoller ilk haberleşme protokolleri olarak önemlidir. Genel hatlarırnile bilgi gönderecek olan cihaz diğerine \"STX\" gönderir.\"STX\" text başlangıcırndemektir ascii tablosunda decimal 20 vedaha küçük olan decimal sayılar rnkarşılığında bir harf üretmezler.Bunun yerine bir eylemi ifade ederler.\"STX\" rnascii tablosunda 02 olarak ifade edilir.\"STX\" okuyan cihaz bilgi almaya hazırrnolduğunu yine \"STX\" olarak ifade eder. Gönderen cihaz cevabı alınca bir stringrnoluşturur string başında \"STX\" ikinci karekter data boyu ve son karekter yine \"STX\" olur.rnBilgiyi alan cihaz ilk önce başında ve sonunda \"STX\" olup olmadığını kontrol ederrnBu testi geçen string\'in ikinci karekterine bakar string boyuda uyuşuyorsa \"DLE\"rngöndererek bilginin doğru şekilde alındığını teyid eder. Eğer bilgi uyuşmuyorsarngönderen cihaz aynı eylemi tekrarlayacaktır. Bu şekilde mümkün olan en kesin sonucarnulaşılmaya çalışılmıştır. Yinede bilgi boyu değişmeden string ortasındaki değerlerdenrnbir veya bir kaçı hatalı olabilir.Bu sistemde bu göz ardı edilmiş olması çok düşükrnbir olasılıktır. Bu olasılığı ortadan kaldırmak alınan stringin geri gönderilmesirnve gönderen cihaz tarafından birebir karşılaştırılması ile mümkün olacaktır.Buda haberleşmerntrafiğini ikiye katlayacaktır hızıda yarıya indirecektir.rnrnEndüstride otomasyonun artması ile haberleşme ihtiyacıda artmıştır. Bu amaçla yeni nesil haberleşmernsistemleri üretilmeye başlamıştır. Bunların başında profibus gelmektedir. Bu sistemde rnprogramcı profibus protokolüne sahip cihazlarla haberleşebilmek için üçüncü parti yazılımları düşükrnbedelle satın alarak hazırladığı program içerisinde activeX olarak etkinleştirip. Kendi programındarnsanki kendisinin hazırladığı bir değişkenmiş gibi kolaylıkla kullanabilmektedir. Ayrıca cihaz üretenrnfirmalarda profibus chiplerini satın alarak cihazlarına monte etmektedirler. Böylece ne cihaz üreten nedernprogram yazanlar bu protokolü bilmek zorunda kalmamış oluyorlar.rnrnBu ürünlerin fiyatları bir kaç yüz dolar seviyesindedir.Böyle bir otomasyon sisteminde OPC server,OPC clintrnve profibus giriş çıkış modülleri alınması gerekliliği düşünüldüğünde bedel bir anda 1000 dolar ve üstü seviyelerernulaşmaktadır. Bu bedel büyük otomasyon işlerinde önemli olmamakla birlikte aynı sistemden çokca üretileceksernciddi bir maliyet oluşturmaktadır.rnrnBu açıklamalardan sonra makalemizin asıl amacına dönelim.rnKesintisiz,Hatasız ve hızlı çalışan seri port programları nasıl yapabiliriz. Aslında bu ifadede görecelidir. Yanirnçok fazla uğraşıp çok fazla kod işleterek profibus kapasitesinde bir protokol hazırlayabiliriz. Ancak böyle birrnsistemi hazırlamak bize daha fazla maliyet oluşturacaktır. Zira çok fazla vakit harcıyacağız. Bunun yerine biraz daharnyavaş biraz daha güvensiz ama doğru çalışan bir protokol hazırlamak daha doğru olabilir.rnilk olarak trafik tek taraflımı çift taraflımı tespit etmeliyiz. Eğer tek taraflı ise yani bilgi sadece A cihazından B rncihazına gidecekse A cihazı sürekli bilginin bulunduğu string göndermelidir. Alıcı cihaz ise ihtiyac duyduğu aralıklardarnbuffer\'a abakarak bilgiyi okumalı ve stringi sonundan başlayarak işlemelidir. Haberleşme çift taraflı ise bilgi gönderimirnbelli bir sıra dahilinde olmalıdır. A cihazı bilgiyi göndermeli B cihazı bilgiyi aldığında kendi bilgisini göndermelidir.rnB\'nin bilgiyi alamama ihtimaline karşı A cihazı bilgi gönderdikten belirli bir süre sonra tekrar bilgi göndermelidir.rnTrafik bu şekilde sürüp gidecektir.Her seferinde farklı bilgiler gönderileceği sistemlerde mutlaka handshake kullanılmalıdır.rnhandshake sayesinde bir önceki gönderimin ulaştığı teyid edilecektir.rnrnGönderilen stringin yapısı nasıl olmalıdır? Her iki sistemdede stringin başı ve sonunda normalde oluşmayacak yani rngöndereceğimiz data\'lardan biri olmayan bir karekter bulunmalıdır. Örneğin sadece sayı gönderiyorsak bir harf olabilir,rneğer harfde göndereceksek ascii tablosundaki harf ve sayı olmayan komut\'lardan birini seçmeliyiz. String başı ve sonu birrnharf olabiliyorsa işimiz biraz daha kolay buffer\'ı komple okuyup stringe transfer edip burada parçalayabiliriz. Ancak harfrnolamıyorsa bunu bir stringe transfer ettiğimizde Ascii komut karekterleri kaybolacaktır. Bu sebeble bufferdan okurken rnparçalamamız gereklidir. Her iki yöntemdede benzer parçalama yöntemi kullanılacağından dolayı biz harf olabildiğini rnvarsayarak string parçalamayı anlatalım.rnrngönderen cihazda gönderilen string boyu sabit kalacak şekilde stringimizi oluşturmalıyız. Yani string başlangıçrnkarekterinden sonra stringin hangi karekterleri hangi değişkenin hangi basamağı olduğu sabit kalmalıdır. örneğin rnBaşlangıç karekteri \"A\" olsun ve ilk sayı 3 karekter boyunda olsun, \"A010B\" = 10 , \"A100\" = 100. iki değişken gönderiyorsak rn\"A010005B\" 10 ve 5,\"A100050B\" 100 ve 50 bir diğer yöntemde değişkenler arasına işaret koymak olabilir. \"A10-5B\" 10 ve 5rn\"A100-50B\" 100 ve 50. Stringimizi bu şekilde oluşturduktan sonra okuyucu cihazda bu stringi parçalamalıyız. Bufferrnokunduğunda bu stringin tamamı okunacaktır, Ancak bir önceki okumada bu stringden bir kısmını okumuş ise son okumada kalanrnkısmı okunacaktır. Yani ilk okuma eyleminde gönderen cihaz gönderimi tamamlamamıştı ve buffer\'ı okuyup temizlediniz ilkrnokunan bilgi \"A01\" idi sonraki okunan bilgide \"0005B\" olabilir veya byt tam okunmadığından dolayı karekterlerde farklırnçıkabilir. Her iki bilgide bir işinize yaramayacaktır. Bu durumda gönderen cihazla senkronize olamamışsınızdır. Senkronize rnolabilmek için bufferda bilgi oluşmaya başladıktan belli bir süre (söz konusu stringin maksimum gönderilme süresi kadar)rnsonra buffer\'ı okumalısınız. Böylece bufferda bilgi tamamlanacak ve siz hepsini birden okuyacaksınız. String parçalanırkenrnilk ve son karakterin uyuşup uyuşmadığı ve string boyu kontrol edilmelidir. Uyuşmadığı taktirde bu bilgiyi işlemeden rngöndereceğiniz stringi göndermelisiniz zira A cihazı bilgi almak maksadı ile sürekli buffer\'ını kontrol etmekte ve bellirnbir sürenin sonunda size ikinci defa göndereceği stringi göndermeyi beklemektedir.rnrngelişmiş haberleşme yöntemlerinde ascii karekterler tam olarak taşınmazlar. Örneğin sayıları ifade etmekte 1 byte oldukçarnbüyük bir değerdir. 0 ila 9 arasında 10 sayı 4 bit ile iletilebilir. 4 bitte 16 değişik ifade oluşturabilirsiniz bunlarınrn10 tanesini sayıları oluşturmakta kalan 6 tanesinide komutları oluşturmakta kullanabilirsiniz. Örneğin porta gelen bir rnkarekteri okuyup ascii\'sini alalım ve bu ascii değeri binary\'e çevirip ilk dört bitini 1. karekter 2. dört bitini 2. karekterrnolarak kabul edelim. ilk dört bitten elde ettiğim sayı 0 ila 9 arasındaki bir sayıyı ifade etsin eğer sayı 10 ise string rnbaşı 11 ise string sonu olsun. Bu şekilde hazırlayacağımız bir protokol ascii karekterleri kullandığımız protokolden 2 katrndaha hızlı çalışacak fakat gönderen ve alan cihazda fazladan kodlar yazmamıza sebep olacaktır. Daha öncede belirttiğimizrngibi ihtiyaz duyduğumuz profibus kadar hızlı bir protokol ise profibusı satın almak daha ucuza gelecektir. Ancak ona yakınrnhızda fakat daha düşük bir maliyeti hedeflemişsek kendi protokolümüzü oluşturmak doğru seçenek olacaktır. rnrnSalih KüçükbayrakrnFultek Kontrol Sistemlerirnwww.fultek.com.trrn
Cevaplar/Yorumlar
Ara
Sadece kayitli kullanicilar Cevap/yorum yazabilir!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Son Güncelleme ( Saturday, 31 May 2008 )
 
Sonraki >
 
Top! Top!