RS Tüm dünyada kabul edilen ve uluslararası standart haline gelmiş bazı haberleşme ara yüzleri vardır. Bütün üreticiler bu standartlar üzerinden haberleşme yaparak farklı marka ürünlerin birbirleriyle haberleşmelerine olanak tanır. RS , “Recommended Standard” yani tavsiye edilen standart kelimelerinin kısaltmasıdır. RS-232 Seri İletişim Protokolü İlk olarak 1962 yılında çıkmıştır ve onun üçüncü versiyonu 1969 yılında RS232C olarak adlandırılmıştır. RS-232D standardı ise RS-232C üzerinde genişletme yapmak için 1987 yılında çıkmıştır. RS232D standardı aynı zamanda EIA-232-D olarak da bilinir. RS-232 C Electronic Industries Assosiation (EIA) tarafından daha bilgisayarın başlangıç zamanları sayılan o yıllarda tasarlanmıştır. EIA‘da çalışan mühendisler gelecek için nasıl bir şey geliştireceklerinden pek emin değillerdi. Böylece RS-232 C standardının mümkün olduğu kadar esnek olması için çok sayıda farklı sinyal hatları sağlamışlardır. Fakat günümüzde bu sinyal bağlantılarının çoğu kullanılmamaktadır. RS-232 C ile kullanılan en yaygın konnektör tipi DB25’dir. DB-25 25 pinlidir. RS232 D’de 25 hatlıdır ve DB-25 konnektörünü kullanır. D tipi konnektörlerdir. Bu tip konnektörler D şeklinde olduğu için bu adı almışlardır. Amerika Birleşik Devletleri dışında bu DB-25 konnektörü kablosu V.24 ve V.28 olarak bilinir. V.24 ve V.28 standartları , Consultative Committee On International Telegraph and Telephone (CCIT) olarak bilinen Uluslararası standartlar grubu tarafından kabul edilmiştir. RS-232C 25 pin DB-25 konnektörü kullanması yanında bazı seri arabirimler, daha küçük olan DB-9 konnektörünü de kullanır. Bu konnektör 9 pinlidir. 1984 yılında IBM’in bilgisayarı AT’yi takdim etmesinde 9 pinli D tipi DB-9 konnektörünü kullanmıştır.I BM’in standartları belirlemede bir üstünlüğü olduğundan dolayı o zamanlarda bazı üretici firmalar tarafından 9 pinli konnektörler desteklenmiştir. Ad Asıl amaç Kısaltma Data Terminal Ready DTE'den DCE'ye olduğunu ifade eder. DTR Data Carrier Detect DCE, telefon hattına bağlıdır. DCD Data Set Ready DCE, komut veya veri almaya hazır. DSR Ring Indicator DCE, telefon hattına zil çalma sinyali geldiği algılandı. RI Request To Send DTE, DCE'nin veri alımına hazır olduğu isteği. RTS Clear To Send DCE'nin veri alımını kabul ettiğini ifade eder. CTS Transmitted Data DTE'den DCE veri taşır. TxD Received Data DCE'den DTE'ye veri taşır. RxD Common Ground GND Protective Ground PG DTE : Data Terminal Equipment : veri terminal ekipmanı DCE : Data Communication Equipment : veri taşıma ekipmanı RS-232 standardı ile iletim seri bir şekilde ve asenkron olarak yapılır. Örnek olarak bir bilgisayarla diğer bir bilgisayarın modemle bağlantısını düşünelim. Bir RS-232 standardı ile çalışırken ve iletişimi sağlanan birim DTE (Data Terminal Equipment) ve iletişimi sağlayan birim DCE (Data Communication Equipment) olarak adlandırılır. DCE en genel şekilde modem’dir. Modemler, telefon hatları üzerinden haberleşirler. Normalde bilgisayar içindeki haberleşme paralel bir şekilde yapılmaktadır. Karşımıza şöyle bir sorun çıkmaktadır. Bu da bilgisayarın dışına yapılacak olan veri akışının seri bir şekilde olmasıdır. Dolayısıyla bilgisayardaki datayı dışarıya göndermek için bunu seri bir forma dönüştürmemiz gerekir. Bu işlem UARTS olarak adlandırılan arabirim devreleri (IC) ile yapılmaktadır. Bu devrelerin birçok çeşidi bulunmaktadır. Aynı zamanda bu devreler bilgisayar içinde kullanılan sinyal seviyeleri olan TTL (+5V ve 0V)’yi RS-232 Sinyal seviyeleri olan +12V, -12V ‘a dönüştürürler. Daha sonra gönderilecek veriler, RS-232 portundan dışarıya bir RS-232 tablo ile ulaşılması istenen DCE birimine gönderilir RS-232 sürücü Seri porttan alınan veri TTL devrede kullanılacaksa verinin gerilim seviyesinin o devrenin standardına uydurulması gerekmektedir. Bu işlem MAX232 gibi entegreler vasıtasıyla yapılmaktadır. SİNYAL KODLAMASI RS-232 C hatları TTL sinyal seviyelerini (+5V, OV) taşımaz. Tipik olarak gerilim seviyeleri +12 V ve -12V’dur. Fakat RS-232 hatları, +25VDc’ye kadar yüksek olan sinyal seviyeleri ile 25 V Dc’ye kadar düşük olan sinyalleri taşıyabilir. Negatif gerilimler lojik “1”i pozitif gerilimler lojik “0”’ı temsil etmektedir. Bilindiği üzere bilgisayardaki data iletimi ikilik sistemde olmaktadır. Lojik 1’e +5V karşılık gelirken, lojik 0’a OV seviyesi denk gelir. Bu tür bir çevrime TTL (Transistor, Transistor Lojik Level) çevrimi denir. Bu, bilgisayar içindeki haberleşme standardı kabul edilir. Bilgisayar içindeki data transferlerinde TTL seviyeli sinyallerin kullanılması birkaç sebepten dolayı avantajlıdır. • Güç Yönünden • Isı dağılımının az olmasından • TTL aletler yüksek hızda çalışabilir. Bu durum bilgisayar içindeki data transferleri için çok uygundur. Peki Neden Bu TTL RS-232C için Kullanılmamıştır? Çünkü TTL haberleşmesinde birkaç karış mesafeden sonra sonra çok ciddi problemler ortaya çıkmaktadır. Ayrıca TTL, dışarıdan gelen sinyallerden çok çabuk etkilenir. Dolayısıyla sinyaldeki birkaç Voltluk kayıp sinyalin belirsiz bölgeye düşmesine sebep olur. RS-232 hatları gürültülü hatlar üzerinde yüzlerce karış mesafede sinyalleri göndermek zorunda kalabilmektedir. +5V, uzak mesafelere göndermede bir zayıflamaya maruz kalacaktır. Başarılı bir iletimin sağlanabilmesi için RS-232 sinyalleri pozitif bir sinyal için +5V ile +15 V arasında ve negatif bir sinyal içinde -5V ile-15V arasında bir değer almalıdır. Bu aralığı bu şekilde tutarak, gürültüden dolayı oluşan gerilim dalgalanmalarından etkilenmesini de minimuma indirmiş oluruz. Bu şekilde bir sinyal transmitter’dan gönderildi diyelim. RS-232 receiver’ı için ise bu sinyal aralığı +3V’dan yukarısı için pozitif sinyal, -3V ve bundan aşağı için ise negatif sinyal olduğu anlaşılır. Peki -3V ile +3V arasındaki bölgede ne olacak? Bu bölge kararsız bir bölgedir. Bu bölgede bulunan bir sinyal, gürültü olarak kabul edilir. RS-232 hatları pozitif olarak +25 V’a kadar, negatif olarak da -25V’a kadar olan sinyalleri taşıyabilir. Seri Data Formatı Seri data formatı bir start biti, 5 ve 8 bit arasında data biti ve bir stop biti içerir. Formata gerektiğinde bir parity biti ve bir stop biti daha eklenebilmektedir. Seri iletişimde veriler byte olarak iletilir. Aşağıda verilen yapıda 12 bit vardır. Burada hata var gibi gözükebilir ama bilgisayarda saklanan kısım data bitleridir. Diğer startstop bitleri ve parity bitleri kaydedilmez. A=65D, 41H, 0100 0001B Senkron İletişim: (Eşzamanlı) İki cihazın da saat çevrimi aynıdır. Bu iletim şeklinde başla ve dur bitleri gönderilmez. Asenkron iletişim: (Eşzamansız) İletişimdeki cihazların saat çevrimi farklıdır. Bu iletim şeklinde başla ve dur bitleri gönderilmelidir. Bitler nasıl iletilir? Seri iletişimde belli bir sürede bir bit iletilir. Bitlerin iletim sırası aşağıdaki gibidir: 1. 2. 3. 4. 0 değerindeki start biti Data bitleri ilk data biti iletilecek verinin LSB son data biti MSB bitidir. Tanımlanmışsa parity (eşlik) biti 1 değerindeki bir tane ya da 2 tane stop biti Saniyede iletilen bit sayısı baud rate olarak tanımlanmaktadır. Burada transfer edilen bitler start biti, data bitleri, parity biti ve stop bitleri de hız hesabına dahil edilmektedir. Start ve Stop Bitleri (Başla ve Dur bitleri) Senkron ve asenkron iletişimin tanımından da anlaşıldığı üzere bir çok seri port asenkron olarak iletişim sağlayabilir. Start biti iletilecek verinin başladığını, stop biti verinin iletildiğini ifade etmektedir. Bu bitlerin tanımlanması aşağıdaki gibi olmaktadır: Seri port pini boşta iken (veri iletmiyorken) “on” durumundadır. Veri iletileceği zaman “off” konumuna getirilir. (Bu start bitidir). Stop bitine bakılarak veri iletimi bittiğinde seri port pini tekrar “on” konumuna getirilir. Data Bitleri Seri porttan iletilen veri cihaz komutu ya da sensörden okunan veri, hata mesajları vb. olabilir. İletilen veri binary ya da ASCII olabilir. Çoğu seri port 5-8 bit veri iletir. Binary veri tipik olarak byte şeklinde (8bit) iletilir. Eğer veri ASCII formatta iletiliyorsa minimum 7 bit gereklidir çünkü 27 yada 128 farklı karakter mevcuttur. Eğer 8. bit kullanılıyorsa 0 yapılmalıdır. Eğer data genişletilmiş ASCII karakter seti içeriyorsa 8 bit kullanılır çünkü bu aralıkta 28 ya da 256 farklı karakter vardır. Parity biti Parity biti iletilen veri için basit hata kontrolü sağlar. Parity bit değerleri aşağıdaki gibi ayarlanabilmektedir: Even: Data bitleri ve parity biti içindeki 1’lerin sayısı çifttir. Odd: Data bitleri ve parity biti içindeki 1’lerin sayısı tektir. Mark: Parity biti her zaman 1’dir Space: Parity biti her zaman 0’dır. Mark ve space parity kontrolleri çok nadir kullanılmaktadır çünkü minimum düzeyde hata kontrolü sağlarlar. Parity kontrolü aşağıdaki aşamalardan oluşmaktadır: 1. Veri ileten cihaz parity biti 0 ya da 1 olarak ayarlanır. 2. Alıcı cihaz parity bit ile alınan verinin tutarlı olup olmadığına bakar. Tutarlı ise bitler kabul edilir değil ise geri hata döndürülür. Örneğin 01110001 data bitleri bilgisayarınıza geldi. Eğer even parity bit seçili ise cihaz tarafından parity bit 0 yapılır çünkü 1’lerin sayısı çifttir. Eğer odd parity seçili ise parity bit 1 olarak ayarlanır. Bu şekilde iletilen 1’lerin sayısı tek olur. Not: Parity kontrol biti ile sadece 1 bitlik hatalar anlaşılır. hatalarında veri geçerli gibi görünebilir. Çoklu bit J:74D,4AH, 0100 1010B RS232C’NİN ELEKTRİKSEL DALGALANMALARA KARŞI KORUNMASI RS232C seri portları, yüksek voltajdan kolaylıkla zarar görebilir. Bilgisayarın seri portlarına gelen bir zararın sonucu çok pahalı olabilir. Genellikle, zarar gören bir seri port için tüm ana kartın değiştirilmesi gerekir. Bu yüzden de, bu portların yüksek voltaja karşı korunması gereklidir. RS232C seri portunu yüksek voltajdan korumak aslında oldukça kolaydır. Standartlara göre sinyal +25V ile -25V arasında olmalıdır. Bu yüzden, bunun dışındaki voltajlara izin verilmemelidir. Tipik bir RS232C alıcısı +30V ile -30V ‘a kadar dayanabilir. Bu amaçla kullanılan voltaj koruma devresi, +25V ile -25V arası dışındaki tüm voltajları keser. Voltaj koruma devresinde; • Varistörler(Varit Resistor):Bu elemanın direnci, gerilime bağlı olarak değişir. • zener diyotlar kullanılmaktadır. İLETİM MESAFESİ RS-232 standardı azami kablo uzunluğunu tanımlamaz. Fakat maksimum yük kapasitesi sürücü devresi uyumluluğunu tolere etmelidir. Uygulamalar, 15m'den daha uzun kabloların çok büyük kapasitansa sahip olduğunu göstermiştir. Düşük kapasitanslı kablolar kullanılarak tam hız iletişimi, yaklaşık 300m mesafeye kadar sağlanabilmektedir. Uzun mesafelerde yüksek hız elde etmek için RS-485 gibi diğer standartlar daha uygundur. Kaynaklar • http://320volt.com/rs232-seri-iletisim-portuhakkinda-bilgiler/ USB-RS-232 dönüştürücüler http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application Sistemdeki seri portları listeleme public SerialPortManager() { // Finding installed serial ports on hardware _currentSerialSettings.PortNameCollection = System.IO.Ports.SerialPort.GetPortNames(); _currentSerialSettings.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (_currentSerialSettings_PropertyChanged); // If serial ports is found, we select the first found if (_currentSerialSettings.PortNameCollection.Length > 0) _currentSerialSettings.PortName = _currentSerialSettings.PortNameCollection[0]; } Baud rate güncelleme private void UpdateBaudRateCollection() { _serialPort = new SerialPort(_currentSerialSettings.PortName); _serialPort.Open(); // Getting COMMPROP structure, and its property dwSettableBaud. object p = _serialPort.BaseStream.GetType().GetField("commProp", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_serialPort.BaseStream); Int32 dwSettableBaud = (Int32)p.GetType().GetField("dwSettableBaud", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(p); _serialPort.Close(); _currentSerialSettings.UpdateBaudRateCollection(dwSettableBaud); } Seri port ayarlama ve seri portu dinleme public void StartListening() { // Closing serial port if it is open if (_serialPort != null && _serialPort.IsOpen) _serialPort.Close(); // Setting serial port settings _serialPort = new SerialPort( _currentSerialSettings.PortName, _currentSerialSettings.BaudRate, _currentSerialSettings.Parity, _currentSerialSettings.DataBits, _currentSerialSettings.StopBits); // Subscribe to event and open serial port for data _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived); _serialPort.Open(); } Veri okuma void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { int dataLength = _serialPort.BytesToRead; byte[] data = new byte[dataLength]; int nbrDataRead = _serialPort.Read(data, 0, dataLength); if (nbrDataRead == 0) return; // Send data to whom ever interested if (NewSerialDataRecieved != null) NewSerialDataRecieved(this, new SerialDataEventArgs(data)); } Seri porta veri gönderme _serialPort.Send(this.SendText.Text); Portu kapatma /// Closes the serial port public void StopListening() { _serialPort.Close(); }