Yazar arşivleri: selimpehlivan

selimpehlivan hakkında

Sen anladın onu...

Unutkanlıkta şifa vardır

Mutlu olmak unutmakla ve olaylar üstünde çok düşünmemekle mümkündür.

Eski bayramları, gönül işlerini, arkadaşlıkları falan kastetmiyorum.

Bu ülkede unutkanlık olmazsa olmazıdır aklını korumanın..

Kendi paranızı harcarken bile hatırmamanız gerekir neler olduğunu..

Parayı vermeden önce size söylenenleri hatırlayın istemezler.

O şeyi geçen sene kaça aldığınızı hatırlamanızı da istemezler.

O şeyin vergisiz fiyatı ne kadar bilin istemezler.

Hatta yüzde hesabı yapabilmenizi hiç istemezler.

Bunca çabaya, itinalı karartmaya rağmen bir yerlerden vergiler, devlet garantili yollar köprüler, hastaneler, santrallerle ilgili bir şeyler duymuşsanız bunları da “yeri geldiğinde” hatırlayın istemezler.

Söyledikleri şeylerin, kısa süre sonra tam aksini yaptıklarında, söyledikleri zamanı hatırlayın istemezler.

Köpeklerini beslemeleri sizin borçlanmanızla mümkündür, bunu etrafınıza baktığınızda görmemeniz imkansızdır ama ayağınızı yorganınıza göre uzatmanızı ve yarınınızı düşünmenizi istemezler.

Eh siz de artık sınıf atladım sanırsınız ve her gün size küfür edenleri beslemeye devam edersiniz.

Onları ilk tanıdığınız zamanki hallerini, varlıklarını, yaşantılarını hatırlayın istemezler. Neredeeeeen nereyeee gelen ülkenin zenginliğidir, onlarınki değil ne de olsa.

Şehrin yeşilliğini hatırlayın istemezler. Hayatın basitliğini, insanların içtenliğini hatırlayın istemezler.

Onlardan öncesine dair iyi olan hiçbir şey bilin istemezler.

Vaatlerini hatırlayın istemezler. Size düşen o vaatleri oy verir vermez unutmanızdır.

Başka yerlerde sizin durumunuzda olan insanlar nasıl yaşıyorlar, ne kadar çalışıyorlar, ne kazanıyorlar ve nasıl harcıyorlar bilin istemezler.

Milyonlarca insanın bu imkansız istekleri eksiksiz yerine getiriyor olmasından buldukları cüretle her gün daha ileri giderler.

Çünkü dünü hatırlamayan, istenmeyen hiçbir şeyi hatırlamayan, bir dakika ya, peki bu neden böyle diye durup kendi kendine sormak yerine önüne her konanı dişleyen aptal mahlukların ülkesini idare ettiklerinin bilincindedirler.

O yüzden…

Bir şeyleri hatırlamak hepten delirtir bu ülkede insanı.

Unutmak sağlıktır.

MODBUS

RS485 donanımı ucuz, uygulaması kolay bir haberleşme arayüzü olarak öncelikli tercihlerimizden biri olmayı sürdürmektedir. Endüstriyel otomasyon ve veri toplama gibi işlerde eskilerden beri kullanılagelen Modbus namlı bir protokol vardır. Bu protokol çok basit, çok minimalist bir kullanım ile RS485 üzerinden multi-drop, yani ikiden fazla cihazın müşterek kullandığı bir haberleşme ortamı kurmaya iyi bir örnektir.

Yakın zamanda benden Modbus üzerinden kumanda edilen bir takım giriş/çıkış modülleri tasarlamam istendi. Bu vesileyle de, uzun yıllardır pek çok farklı işte kullanmakta olduğum Modbus protokol yürütmesi hakkında birkaç not yazayım diye düşündüm.

Burada, Modbus protokolünün embedded tarafta, kaynakları sınırlı işlemciler üzerinde yürütülmesine dair yaptığım bazı şeyleri paylaşacağım. PC tarafında da kendi yazdığım modbus erişim programlarına örnekler vereceğim.

MODBUS RTU

Modbus protokolünün RS485 hattı üzerinde çalışan RTU yürütmesini kullanıyorum. Bu yürütmede paket byte’ları binary olarak anlamlanıyor. 

Protokol byte formatı olarak 8-E-1 kullanılır diyor. Ancak ben 8-N-1 kullanıyorum. (Hâlâ, donanımsal parite hesabı yapmayan işlemciler kullanan insanlar var çünkü) Aslında protokol, eğer parite kullanamıyorsan bari stop bitini 2 tane yap da diyor ama ben bunu da yapmadım.

Modbus’un standart protokol tanımlamalarına “olabildiğince” sadık kalmaya çalıştım. Aslında her ne kadar yalınlığına saygı duysam da, RS485 multi-drop pek çok uygulamada modbus en etkin yöntem olmuyor. Eğer sizin tasarladığınız cihazların dışında cihazlarla da haberleşecek bir ağ öngörüyorsanız o zaman işlerin bir standardı olmalı dediğiniz için modbus’ı ciddiye alırsınız. Belki bir gün RS485 üzerinde daha efektif veri haberleşmesi yapan kendi yöntemlerimi de burada paylaşmaya başlarım.

MODBUS ZAMANLAMALARI

RS485 asenkron bir seri haberleşme ortamıdır. Bu da demektir ki bu ortamda birbiriyle haberleşecek cihazlar yollanan verilerin içeriği kadar zamanlaması üzerinde de anlaşmış olmalıdırlar.

Modbus spesifikasyonu, iki byte arasında en fazla 1,5 byte süresi kadarlık bir boşluğa izin verildiğini belirtiyor. Bundan çıkaracağımız iki sonuç vardır:

  1. Paket byte’larını bekleme yapmadan art arda yollamamız gerekir.
  2. Bir veri alıyorken, 1,5 byte süresi kadar alma yapmazsak paket sonuna geldik diyebiliriz.

Bir alma işlemi esnasında paket boyunu saymak zorunda kalmadan paket almanın sonuna geldiğimize karar verebilmek işleri kolaylaştıran bir şeydir. Öyle olmasaydı, modbus paket boyları sabit uzunlukta olmadıkları için, bir veri gelmeye başladığında doğru anda paket boyunun ne olacağını hesaplamış olmamız gerekirdi. Ki bunun için de gelen verinin kaçıncı byte’ında olduğuna göre çalışan bir sorgumuz olması gerekirdi. Bir uart rx kesmesinin içine karmaşık sorgular yazmak akıllıca bir iş değildir, bana güvenin.

Yine modbus spesifikasyonu, iki paket arasında en az 3,5 karakter süresi kadar bir boşluk olması gerektiğini söyler. Bundan da bize iki hisse çıkıyor:

  1. Bir paket aldığımızda, cevap vermeden önce, master’ın son byte’ı yollamasından beri 3,5 karakter süresi geçtiğinden emin olmamız gerek.
  2. Bir modbus hattına ilk bağlandığımızda (fiziksel bağlanmayı kastetmiyorum) konuşmaları dinlemeye başlamadan önce en az 3,5 karakter süresi kadar bir sessizlik olmasını beklememiz gerek (paketlerle “senkronize olmak”).
modbus frame sync zamanlama tanımları

Aslında, üzerinde biraz düşünürseniz yukarıdaki iki maddenin birbirini gerektirmediklerini anlarsınız. Bir slave, master’ın sorgusuna 3,5 karakter süresini beklemeksizin yanıt verirse diğer slave’lerin bakış açısından tek bir paket gelmeye devam ediyor gibi olacaktır ve slave’ler sıralarını kollamaya başlamayacaklardır. Bu bir sorun yaratmaz çünkü o esnada konuşan slave zaten master’a cevap veriyordur.

Haberleşme protokolü dediğiniz şeyler bu şekilde paralel dallanan önermelerle doludur. Protokol yürütme denen şeyde aranan sonuç tamamen mantıksal tutarlılık ya da en sadelik değil, bir şeyi açık şekilde kabul etmek esasına dayanır. O yüzden, bu aşamada fazlasına kafa yormayıp TÜM paketlerin en az 3,5 byte süresi aralıkla hatta yüklenmesini gözeteceğim.

Yukarıda, sözünü ettiğim 3 zaman tanımının haberleşme çerçevesindeki yerlerini gösterdim. Slave taraf işlemcimiz DataProcessor( ) fonksiyonunu çalıştırırken bu süreleri gözetmek zorundadır.

Modbus protokolü süreleri karakter müddeti cinsinden tanımlamış. Yani, bu byte süresi dediğim ölçü birimi bir byte’taki bit sayısı bölü geçerli baudrate kadar olacak demektir. Ancak yine modbus protokolü, yüksek baud rate’ler için sürelerin çok küçük olmasının önüne geçmek için 19200bps üstü hızlar için bu sürenin sabit olabileceğini söylüyor.

Ben en başta bu süreleri tamamen baudrate’e bağlı yapmıştım. Ancak sonra, protokol dediğin şeyde önemli olanın mantıksal bütünlük değil, yaptığını açık şekilde ifade etmek esasına dayandığını hatırlayıp (yukarıda bunu anlattım) tüm zamanlamaları 9600bps’ye göre hesapladım ve sabit yaptım.

Bir byte’ı 10 bit kabul ederek zamanlama parametrelerini şu şekilde alıyorum:

t35 = 4,17ms

t20 = 2,6ms

t15 = 1,56ms

modbus data processor stack state diagram
modbus data processor stack state diagram

UART RX Kesmesi:

Haberleşme protokolü üç yazılım modülünden oluşur:

Veri alma kesmesi

Veri işlem

Veri yollama

Yukarıda çizdiğim durum makinesinin ilerlemesi iki dış etki ile olur: Sisteme veri gelmesi ya da bir zaman aşımı olması. Bunun haricindeki zamanlarda Data Processor dediğim durum makinesi ya hiçbir şey yapmaz ya da yeni girdiği durum için işletmesi gereken kodu çalıştırıp durağan bir adıma gider. Thread şeklinde algoritma gerçeklemenin benim uyguladığım yöntemi bu.

Bu uygulamada UART kesmesi dediğimizde yalnızca RX kesmesini düşünmemiz yeterli. TX kesme ile yönetilmek zorunda değil. Öyle olması gereken durumlar elbette vardır ama bunu ayrıca anlatırım. RX kesmesi öyle bir şey olmalı ki, içindeki kod DataProcessor( ) ‘ün o anki durumuna bağlı olmamalı. Böylece kesme kodumuzu (işin donanımın parmak soktuğu kısmı) olabildiğince yalın, asıl fonksiyonlarımızla az teması olan bir hale getirmemiz mümkün olur. Bu, embedded programlamada başarıyı çok etkileyen bir şeydir.

rx kesme fonksiyonu

Hep bahsettiğim gibi, bir kesme fonksiyonu olabildiğince basit olmalıdır, ama daha basit değil.. 🙂

Byte hatası yoksa gelen byte Xbuffer‘ın Xptr indeksli elemanına yazılır ve Xptr ilerler.

Son olarak da zaman aşımı denetimi için kullandığım timer’ı sıfırlıyorum. Byte geldiği müddetçe zaman aşımı olmamalıdır.

Kesme kodu bundan ibaret olacak. Elbette UART modülünün ürettiği donanım hatalarını da handle edip bir flag ile ana programa bildiriyorum. Ama bu işin ilginç kısımlarından biri değil.

Data Processor Durumları:

DataProcessor( ) bir thread fonksiyonu olarak kullanılır. Yani, ana sistem döngüsünde her geçişte koşulsuz olarak çağrılan bir fonksiyondur ve koşulsuz olarak da sistem kaynağı kullanır ( bir donanım timer’ı ve uart kesmesi). DataProcessor’ün timer overflow ya da uart rx kesmelerine vereceği tepkinin hızı ana sistem çevriminin periyoduna bağlı olacaktır.

DataProcessor( ) her çağrıldığında belli bir durumda olur. Durum geçişleri yalnızca fonksiyonun kendisi tarafından yapılır, yani hiçbir dış kod DataProcessor( ) state machine’in durumunu belirleyen commstat değişkenine erişemez.

DISABLED:
UART kapalı ve makine devre dışında. Yani modbus fonksiyonumuz kapalı.
Bu durumdan çıkış için kullanıcı kodun comm_cmd = CC_INIT yapması gerek.
Bu komut algılanınca Restart_RS485( ) fonksiyonu ile UART RX etkinleştirilir.

LISTENING:
UART veri alma etkin, yani makine Modbus hattını dinliyor ancak alınan byte’larla bir işlem yapılmıyor.
Bu durumdan çıkış için T35 süresi boyunca hiç RX olmaması gerekir. T35 süresi boyunca veri alınmaması Modbus hattının boşta durumda olduğu anlamına gelir. Makine artık paketleri dinleyip adresleri kontrol edeceği senrkonize duruma geçebilir.
Eğer bir byte hatası olursa makine SLEEP durumuna atlar.

SYNCD:
3,5 byte süresi boyunca hat sessiz kaldı. Demektir ki şu anda Modbus hattında iletilen bir paket yok. Artık makine senkronize durumda.
Bundan sonra gelen her byte’a bir paketin ilk byte’ı bu deyip adres byte’ı muamelesi yapacağız. Burada iki olasılık var: Paket bizi adresliyordur (ADDRESS_HIT) ya da adreslemiyordur (ADDRESS_MISS).
ADDRESS_MISS için SLEEP durumuna geçilir.
ADDRESS_HIT için de paketin devamını almak için PACKET_RX’e geçilir. Eğer bir byte hatası olursa makine SLEEP durumuna atlar.

PACKET_RX:
Veri alınıyor.
Bu durumda iken makine Xptr indeksini izler. Modbus fonksiyonu için ayrılmış buffer boyunun aşılması BUFFER OVERRUN hatası demek olur ve bu durumda paket alımı iptal edilip SLEEP adımına atlanır.
Bu durumdan çıkış paket sonu ile olacak. Paket sonunun algılanması T15 süresi boyunca bir byte alınmaması ile olur.
Eğer bir byte hatası olursa makine SLEEP durumuna atlar.

PARSE:
Paket sonu algılandığında, veri alma kapatılır.
Xptr sayacı alınan byte sayısını göstermektedir.
Geçerli bir Modbus master paketinde olması gereken genel koşulların sağlaması yapılır. Paket geçerli gözüküyor ise paket türüne bakılır ve ilgili komut işlemine atlanır
Paket hatalı gözüküyorsa SLEEP durumuna atlanır.

SLEEP:
Bir hata ya da ADDRESS_MISS durumunda ortalama bir paket boyu kadar bir süre boyunca makine kapalı durumda bekler. Bu süre baudrate’e göre belirlenir.
Bu sürenin geçmesi sonrasında makine Restart_RS485( ) seri haberleşme yeniden başlar. Makine LISTENING durumuna gider.

Bundan sonraki makine durumları alınan Modbus komutu ile ilgili işlemler ve verilecek yanıtlar ile ilgili kodlardır. Bunları ayrı ayrı anlatmak yerine desteklediğim Modbus komutlarından söz etmeyi uygun buluyorum:

DESTEKLENEN MODBUS KOMUTLARI

Modbus Fonksiyon Kodları
MODBUS fonksiyon kodları

Bu fonksiyon kodlarının kendi başlarına ne anlama geldiklerinin çok fazla konuşulmaya değer bir yanı yok. Önemli olan, üzerinde çalıştığımız cihazda bu kodlar ile neleri okuyup yazacağımızdır. İşin özeti şu: Elinizde bir cihaz vardır. Bu cihazın modbus üzerinden görünür bir bellek haritasını oluşturmuşsunuzdur. Yukarıdaki komutlar artık bu harita üzerinde bir anlam taşır. Bu konuda da olabildiğince özgürsünüz. Holding Register denen şeyle dijital giriş durumu da yollayabilirsiniz. Sonuçta bunu güzelce açıklamayı becerirseniz söz gelimi PLC ile cihazınıza okuma yapan adam holding register olarak okuduğu Word’leri bit olarak kullanabilir. Yani, Modbus’ın tanımındaki veri tiplerinin aslında pek bir bağlayıcılığı yoktur.

Şimdi benden istenen Modbus I/O modüllerinin bellek haritalarına bakalım. Okuyucuya genel bir bakış açısı kazandırmak için şöyle bir not ekleyeyim: Benim için modbus haberleşmeli bir uzak I/O modülü geliştirmek demek 3/4 oranında aşağıdaki tabloları hazırlamak demekti. Bundan sonrası zaten yokuş aşağıdır.

Komutlardan da anlayacağınız gibi Modbus, 4 bellek tipi üzerinde veri erişimi komutlarına sahiptir:

DISCRETE OUTPUTS (Y)
00001 adresinden başlayan dijital çıkış bitleridir.
Bu alan, 0x01 komutu ile okunur ve 0x05, 0x0F komutları ile de buraya yazılır.
Komut adresleri haberleşmede 0 -> 00001 olacak şekilde kullanılır.
DISCRETE INPUTS (X)
10001 adresinden başlayan dijital çıkış bitleridir.
Bu alan 0x02 komutu ile okunur.
Komut adresleri haberleşmede 0 -> 10001 olacak şekilde kullanılır.
ANALOG INPUTS (R)
30001 adresinden başlayan 16 bitlik sadece okunur register alanıdır.
Bu alan 0x04 komutu ile okunur.
HOLDING OUTPUTS (H)
40001 adresinden başlayan 16 bitlik okunabilen ve yazılabilen register alanıdır.
0x03 komutu ile okunur, 0x06 komutu ile yazılır.

X/Y Giriş Çıkışları:

Yaptığım cihazlarda değişik sayıda dijital girişler ve röle çıkışları var. Yani, bu ürünlerin işlevselliği büyük oranda dijital girişleri okumak ve röle çıkışlarını kumanda etmekten ibaret. O yüzden cihazların belirleyici özelliği aşağıda verdiğim X ve Y adres haritalarıdır.

Cihazların gerçek giriş çıkışlarını X ve Y haritalarında 1 adresinden başlayarak konumlandırdım:

MODISEL Cihazları Y Modbus Bellek Haritası

Görseli tam boyutlu görmek için TIKLAYIN.

MODISEL cihazları X Modbus Haritası

Görseli tam boyutlu görmek için TIKLAYIN

Input Register’ları:

Bu cihazlarda tam sayı olarak ifade edilebilecek bir giriş ya da çıkış bulunmuyor. Ancak, dijital giriş çıkışları birer bitmap olarak bu bellek haritasında okunabilir yapmak iyi bir fikir. Bu şekilde girişleri okumak için ayrı çıkışları okumak için ayrı bir komut kullanmak zorunda kalınmadan tek seferde her şey okunabilir.

Modisel Cihazları MODBUS Analog Input Register Map

Görselin tam boyutunu görmek için TIKLAYIN

Holding Register’lar:

Ben bu bellek alanını, yazılabilir olduğu için input register alanından ayrı tanımlıyorum. Buradaki “holding” sıfatına saygı olarak, cihazların silinmez belleğine yazılan parametreleri bu haritada tanımladım. Yine de bu haritanın bir kısmını son kullanıcı için sadece okunur yaptım (kullanıcının cihaz kimlik bilgilerini değiştirebilmesini istemem).

Input register alanında X ve Y vektörlerini bitmap olarak göstermeye benzer şekilde burada da Y vektörünü binary olarak yazma özelliği düşünülebilirdi ama zaten 0x0F komutu tam olarak bu işi yaptığı için böyle bir şeye gerek yok.

Modisel cihazları MODBUS Holding Register Map

Tablonun tam açıklamalarını görmek için TIKLAYIN

MODBUS Komutları:

MODBUS komutlarının benim uygulamalarımdaki yürütmesi belli kısıtlamalara tabi olabilir. Sonuçta protokolün kendisi çok genel olduğu için biz bazı yönleri bizdeki özelliklere ve kısıtlamalara göre basitleştirebiliriz.

Örneğin, discrete okuma komutlarında hedef adresinin 8’in katları şeklinde olmasını şart koşuyoruz. Benzer şekilde, 8’in katı olmayan vektör boylarını da kabul etmiyoruz. Bu işlevsel bir kısıtlama değil. Çünkü bu şart, genel modbus tanımlamasına bir istisna oluşturmuyor. Yalnızca onun bir alt kümesini geçerli kabul ediyor.

Ayrıca, 0x04: Read Input Register komutunda komutun serbestçe hazırlanmasına izin vermiyoruz. Bu komutu kullanacak kişi bir seferde cihazın 4 word’lük R bellek alanının tamamını okumak zorunda.

modbus fonksiyon kodu 01 Read Discrete Output
modbus fonksiyon kodu 01 Read Discrete Output
modbus fonksiyon kodu 02 Read Discrete Inputs
modbus 02 RDI komutu
modbus fonksiyon kodu 03 read holding registers
modbus fonksiyon kodu 03 read holding registers
modbus fonksiyon kodu 04 Read Input Registers
modbus fonksiyon kodu 04 Read Input Registers
modbus fonksiyon kodu 05 write discrete output
modbus fonksiyon kodu 05 Write Discrete Output
modbus fonksiyon kodu 06 Write Single Holding Register
modbus fonksiyon kodu 06 Write Single Holding Register
modbus fonksiyon kodu 0F Write Multiple Outputs
modbus fonksiyon kodu 0F Write Multiple Outputs

Telefonu açıncaya dek sizi ısrarla arayan numara. Mart 2019 seçimleri için anket yapıyorlar. Yani siz seçenekleri sonuna kadar dinleyip seçimde oy vereceğiniz partininkini tuşlayacaksınız, bu geri zekalılar da bu sonuçlara bakıp aaa burada bu aday öndeymiş diyecekler. 🙂 Şu memlekette hala buna inananlar olması insanı gerçekten üzüyor.

Beni yaşamadığım bir yerin adaylarından hangisine oy vereceğimi sormak için aramışlar.

Konuşan bir bant kaydı ve ses itici, tonlama yapay. Böyle şeylerle taşak geçmek için bir çizgi dizi yapsanız kullanacağınız ses budur derdim.

Benim bu tür şeylere tahammül ölçütüm çok basit: Telefonda benimle, bir metre önümde dururken konuşamayacağınız şekilde konuşuyorsanız sizin yapacağınız anketi de, satacağınız malzemeyi de o uyduruk laflarınızı da sikerim.

Basit, değil mi?

Gündüzüm Gece Oldu

Şimdi Ocak sonundayız. Benim gündüzüm Aralık başından beri gece olmuş durumda. Dikkat edin, sadece “benim” gündüzüm gece oldu. İddialı bir gerilim/bilim-kurgu filminde yaşıyor gibiyim. Sabah bir uyanıyorum. Saat 07:30 ve ortalık kapkaranlık. Daha kötüsü de var. Bazen en az benim kadar uykulu bir adamın dışarıda hoparlörden bağırdığını duyuyorum. Anlamadığım bir dilde bir şeyler söylüyor. Kızgın olduğu belli. Belki o da bu saatte havanın karanlık olmasının saçmalığına kızmıştır. Ama kızgın diye böyle hoparlörle bağırmak da neyin nesi? Bizi bırak küçücük çocuklar var.. Bu memlekette büyüyen çocuklar nasıl sevgi dolu olsunlar diyorum yüzümü yıkarken.

Hayatımın çok büyük bir kısmında (ki bu 30 seneden fazla yapıyor) sabahları erken kalktım. Sanırım henüz tamamen aklımı yitirmiş, hafızamı kaybetmiş değilim. Eski günleri hatırlayabiliyorum. Eskiden sabah saat 8’de hava aydınlık olurdu. Bazen kendimden emin olmak için bunu insanlara soruyorum. Genellikle hayır, hep böyleydi diyorlar. Saat 9 olduğunda kendi kendime “hah işte böyle oluyordu eskiden sabahlar” diyorum. Bu düşüncemi paylaşan neredeyse kimse yok.

Ah, bu iş kaç senedir böyle manyaklaştı? Üç sene mi, yoksa dört sene mi oldu. Tam üç sene önce yazdığım bir yazıya denk geldim şimdi. Üç sene önce, olayın şokunu yaşıyormuşum besbelli.

Sanırım sorun bende. Sabahın karanlığında, ayazın en yoğun zamanında, küçücük çocuğunu yol kenarına çıkarmış, psikopatın birinin minibüsle gelip almasını bekleyen adam dert ederdi bunu sanırım.

Gündüzki miskin hallerinden eser olmayan, çetesiyle beraber av kovalayan köpeklere bulaşmamak için sürekli kaldırım değiştirerek, direklerindeki lambaları yanmayan zifiri karanlık bir sokağı aşıp ana caddeye varmaya çalışan kadın benim kadar dert etmiyorsa, sorun bendedir muhtemelen.

Gece kim bilir neyle uğraşıp, sabah daha güneş doğmadan sıcak yatağından çıkıp geç kalma telaşıyla kalabalığın; başka hiçbir hayvanda göremeyeceğin, birbirine karşı tahammülsüz bir kalabalığın içinde dalıp, hiç sevmediği işine gitmek için yürüyen ölü gibi ilerleyen işe yaramazların bir bildikleri vardır, benim bilmediğim…

Aman buradan sevgili hükumetime bir eleştiri çıkabilir dürtüsüyle, ortamda bu konu açıldığında, “hava kapalı bugün” ya da “eskiden de böyleydi zaten” diye ortaya atılıp canlı bomba gibi itibarını patlatan insanların, her ne kadar bunu söyleyecek kapasiteleri olmasa da bir bildikleri vardır.

Bu durumu, karanlıkta evden çıkmak zorunda kalmama kızdığım için önemsemiyorum. Zamanında 6:10’da işe gittiğim bir rutinim de oldu. Erken kalkmak kolayca alışılabilir bir şeydir. Bu arada 8 erken bir saat falan da değil. Ancak şunda bir tuhaflık görüyor ve buna alışamıyorum. Arkadaş, ben 8’de evden çıktığımda hava aydınlanmış olmalı. Çünkü yaşadığımız enlemde meridyenimizin saatini kullanırsak öğle saatinden 4 saat önce de hava aydınlanmış olur.

Bu durumu, artık o kadar da sık güncel meseleler hakkında yazmayı bırakmış olduğum halde not edilmeye değer bulma sebebim insanların tepkisizliği. Daha doğrusu durumun farkında bile olmamaları. Sanki gün hep 9’da aydınlanıyordu

Hava hep karanlıktı bu saatte diyen adam var arkadaşlar! Hayır, hava hep karanlık değildi. Hiçbiriniz hatırlamıyorsa ben hatırlıyorum. Hava aydınlıktı saat 8’de.. Sabahımızı çaldılar.

Kendi kendine şunu diyen adamı anlarım: Benim sabahımı çalıp napsınlar ulan? İşe yarar kısımları sökeli çok oldu zaten… Senin sabahın karanlığında uyur gezer gibi dolaşmanla oturup alay etmiyorlardır elbette. Hatta senin gündüzünün, gecenin, ömrünün ne kıymeti var ki birader? Bak zamanında şöyle bir yazı yazmışım, orada bu değersizliği anlatmışım kısaca. Ha, bu arada, not etmeden geçmeyelim, sabahları fazladan harcanan elektrik de ihtiyaç sahiplerine cep harçlığı olmuştur, merak edenler bu dönemde fazladan harcanan elektriği araştırabilir.

Çoluk çocuk gecenin en ayaz vakti sokakta. Lan bari mutlu olmayın. Bir insanlık belirtisi gösterin ya. Anlıyorum, durduğunuz yerde korkunuzdan öleceksiniz. Hatta galiba çoktan öldünüz. Adamlar gündüzü geceye çevirmiş, bunu bile normal görmek için yırtınıyorsunuz. İçine düştüğü trajik durumu bu kadar kolay kabullenen başka bir canlı topluluğu var mıdır bilemiyorum.

Kıçından donunu çalsalar fark etmeyecek derler ya bazıları için. Bu memleketin ortalama insanına tam yakışan bir söz bu. Tepelerinden sabahlarını çaldılar, bak, fark eden yok. Bu vakur halk gecenin karanlığında şafak operasyonları için tırım tırım yola koyuluyor.

Ben olsam, bu sene dünya yaz saatine geçerken çaktırmadan herkesle beraber bir saat daha ileri alırım. Arabistan saati yeterli değil, Afganistan saati daha uygun bunlara. Hem yazın sabah namazı yine çok erkene kalmış oluyor. Kış gelince de sabah namazını kamusal alanda kılma baskısını daha rahat uygularlar. Bunu şaka sanıyorsunuz ama ola ki gerçek olsa, bir sabah televizyonlar gazeteler müjde diye haberini yapsalar, “uzman”lar bunun hikmetlerini günlerce tartışadursa, ertesi sene “hep böyleydi” diyeceklerin oranı yarıdan fazla.

Gerçi bunun kötü yanı, akşam üzerleri aydınlık olacak. Ama sanırım bizimkilerde şimdilik bu sorunu çözecek kapasite yok. Olmuş olsa, güneşten dağıtım bedeli almaya hazır vatansever, yiğit, yerli ve milli işadamlarımız vardır. Bedava güneş sizin neyinize. Eskiden de para alınıyordu diyecek düdükler de hemen türer zaten.

Bu arada, dünyada yaz saati uygulamayan ülkeler olduğu da doğru. Ama bu ülkelerin kullandıkları saat, bizdeki aptalların kış saati dedikleri saatleri olmasın sakın! Kendi topraklarından geçmeyen bir meridyenin saatini kullanan kaç ülke vardır, merak ediyorum.

Bu arada meridyen Allahın emri mi diyecek, kendi aptallığını sorgulamamak için geri kalan her şeyi sorgulayan parlak beyinler için de bir not yazayım: Meridyen gün ortası demek. Kavram şu yüzden çıkmış: Elindeki saati güneş tam tepedeyken 12’ye ayarlarsan o senin meridyen saatin oluyor. (Hatalı bir tabirle işte buna kış saati diyorlar) Bizim, saatimizi 12’ye ayarladığımız meridyen İzmit’ten geçiyor. Yani biz güneş İzmit’te tam tepedeyken olan saate 12 demişiz.

Aslında gördüğünüz gibi, geçen sene 11 liraya aldığınız peyniri bu sene 32,50’ye alıyorken buna gelen zammın %21’den fazla olduğunu anlamak kadar kolay bir iş bunu anlamak.

Yaz saati ne peki diye kilitlenenlere de şöyle diyeyim, işte bu saati bir saat ileri alıp meridyenini 15 derece doğuya kaydırınca o da yaz saati (DST) oluyor. Biz işte kış günü bunda kalınca sabahlar geceye döndü. Şimdi zor bir soru sorup yazımı bitirebilirim: Bakın bakalım İzmit’ten geçen meridyenin 15 derece doğusundaki meridyen nereden geçiyor? :)))))))

Bırakalım bu işleri artık

Bir şişe bira aldığımız zaman

4,42 TL ÖTV, 1,37 TL KDV ödüyoruz.

Yani, her şişe biranın parasının 5,79 TL’si doğrudan sizden alınan vergi.

Lafı uzatmayayım.. Kendinize bir şişe bira aldığınızda yaklaşık 2 şişe de devlete ısmarlıyorsunuz.

Bir şişe rakı aldığımız zaman durum biraz daha pornografik:

76,1 TL ÖTV, 17,3 TL KDV ödüyoruz.

Bir şişe standart yeni rakı almak gafletine düştüğünüzde sizden 93 TL para tahsil ediyorlar. Şunu yazarken bile işin tuhaflığına hayret ediyorum.

Devlete vergi ödemeyi aptallık olarak göstermeye çalışacak değilim. Sonuçta devlet hepimiz için var. Ve bu devletin işi yok gücü yok, mesleği yok. Nereden para kazanacak da itibarlı ve güçlü kalacak? Senden benden vergi toplayacak. Yalnız, o sen ben kısmı biraz karışık.

Devlete iş yapan, kârı devletin garantisinde iş yapan, finansmanını devletin garantisiyle sağlayan adamların yüz milyonlarca dolarlık vergi borçlarının sıfırlandığı bir ülkede…

Milyon liralık taksi plakası sahibinin asgari ücretlinin yarısı kadar gelir vergisi verdiği ülkede…

Sen de rakı masası kurup memleket kurtarmak için şişe başına 93 TL vergi veriyorsun işte. Vatan kurtarmak taksi plakası sahibi olmaktan daha basit bir iş mi?

Ben bu işin “günah” kısmına hiç girmek istemedim bu yazıyı yazarken. Ülkemizi epeydir yöneten insanların dünya görüşlerini az buçuk biliyoruz. İçki içen, hele ki şehirde sosyal hayatın içinde güzel mekanlarda içki içen insanlar bu iktidarın en makbul vatandaşları değiller ne yazık ki. Ama anlayabildiğim kadarıyla bu makbul olmayan vatandaşlar iktidarın en sağlam maddi destekçileri.

Geçen sene içki içen pis günahkarlar olarak yaklaşık 12,3 milyar lira ÖTV ödemişiz. Şimdi milleti ölümle tehdit eden müftüler bu paralarla maaş alıyorlar. Varlığına bir anlam dahi veremediğiniz o devasa Diyanetin o devasa bütçesini bu paralar karşılıyor. Sonu gelmeyen o çakarlı araba konvoylarının depolarını bu paralarla dolduruyorlar.

Durumdan memnunsak şerefe öyleyse! Yalnız şunu bilin, lafın gelişi “şeref” e.. Bence her yerde muhaliflik yapıp, gidişatın farkında olarak ya da olmayarak, içine düştüğümüz şu ümitsiz durumu eleştirip, hâlâ gidip en azından içki almaya devam edenler varsa bence şeref onların uğruna içebilecekleri bir şey değil.

Aşağıdaki gazete sayfasını bu yaz kaydetmiştim. Doların patladığı, şimdi en aptallarımızın bile iyice hissetmeye başladığı krizin üstümüze çöktüğü dönemdi. İnsanını nasıl güdeceğini iyi bilen iktidar, tatilleri uzatıp, birleştirip, karşısına aldığı %48’e son bir harcama seferberliği yaptırmıştı. Aşağıdaki “yandaş” manşeti durumu çok iyi özetliyor. Seneye yıl sonunda alkol ÖTV’sinden 25 milyar TL gelir elde edildiği haberini de bu başlıkla verebilirler bence.

İslami faşizm gelip hepimizi bir deliğe tıkana kadar onlara ihtiyaçları olan maddi desteği vermeye devam edelim. Arabik beğenilere göre yeniden dizayn edilmiş bön, gösterişli, çirkin tatil beldelerinde yüksek beyaz yakalı maaşlarımızdan artırdığımız paraları harcayalım.

İçki içme özgürlüğümüzü haramlık vergisini vererek yaşayalım. Yarın başka deliler, başka şeyh yalakaları, başka tarikat çocukları çıkıp insani değerlerimize küfretsinler. Twitter’da paylaşıp günah çıkarırız nasıl olsa..

10 senede bira fiyatını 2 liradan 11 liraya çıkaran ÖTV vergisini hunharca koymaktan çekinmeyen adamlar karşılarındaki tayfanın kişiliksizliğini mutlak siyasi iktidarlarını kurarken defalarca test ettiler zaten. Ben bu işi onlardan fazla bilmiyorum elbette. Hâlâ memleketin “kutsal” içkisinde %480 vergi yükü olabiliyorsa bir bildikleri vardır.

Ben kendi adıma konuşayım: Bu ülkenin gidişatından memnun değilim ve bu yüzden bundan sonra asla ama asla içkiye para vermem. En azından bunu tam yaparım. Ki zaten daha önceden almıştım bu kararı..

Gazete okumayı daha çocukluğunda alışkanlık edinmiş biri olduğum halde şu rezil medyayı takip etmeyi nasıl bıraktıysam içkiyi de böyle bıraktım.

Şu boktan futbol ligini takip etmeyi nasıl bıraktıysam, şu yandaş, yalaka, yavşak, omurgasız tipleri her gün ekrana çıkaran ciddi haber kanallarını izlemeyi nasıl bıraktıysam içkiyi de böyle bıraktım.

Hiçbir şeyi değiştirmeye gücü olmayan tek bir birey olabilirim. Ama en azından neye inanıp neye inanmayacağımı, neye bakıp neye bakmayacağımı seçebiliyorum. Siktir git diyebiliyorum önüme konana..

W5500 SPI Arayüzü

W5500 çipine erişmede kullandığım SPI modülü başka bir cihaza erişmek için de kullanılıyor olabilir. Benim örneğimde, PIC24E’nin SPI2 modülünü kullanıyorum ve bu modülü aynı zamanda EEPROM çipine erişmek için de kullanıyorum. Bu durumda SPI donanımı EEPROM’da veri yedeklemesi/yüklemesi yapan kod ve TCP server işlerini yöneten kodla ortaklaşa kullanılacak demektir.

Ayrıca, modülün paylaşımı ile yalnızca farklı harici aygıtlara erişmemizi anlamamak gerekir. W5500 üzerindeki farklı soketlere erişen, birbirinden bağımsız prosesler de farklı istemciler olarak düşünülmelidir. Çünkü bunlar her ne kadar aynı fiziksel hedefe erişiyor olasalar da ( W5500 ) zamanlama olarak birbirlerinden bağımsız olarak (asenkron) SPI erişimine ihtiyaç duyacaklar.

SPI modülünü belli bir anda hangi prosesin kullandığını belirleyen global bir değişkenim var.

Adı spi2_busy

extern unsigned int spi2_busy; 
#define SPI_OWNER_SYSTEM    1       // ana spi işlemi (setup, debug vb.)
#define SPI_OWNER_W5500     2       // spi kaynağını server ana task'leri kullanıyor (boot vs.)
#define SPI_OWNER_W5500_SRW 3       // spi kaynağını soket okuma / yazma task'leri kullanıyor
#define SPI_OWNER_W5500_IR  4       // interrupt flag'lerinin okunması task'i
#define SPI_OWNER_W5500_CI  5       // spi kaynağını soketin client info'sunu okuyan task kullanıyor
#define SPI_OWNER_EEPROM_1  6       // eeprom 1 erişimi
#define SPI_OWNER_EEPROM_2  7       // eeprom 2 erişimi

busy flag’i şu şekilde kullanıyorum:

Bir spi erişimi yapacağım zaman bu flag’in 0 olmasını bekliyorum. Eğer öyleyse, spi modülü artık meşgul değil demek. Bir işleme atlamadan önce bu bayrağı o işlemin tanımlayıcı sabitiyle yüklüyorum. SPI thread’i modülü boşa çıkarınca flag’i sıfırlıyor.

Yani spi2_busy istemci kod tarafından set edilen ve spi thread tarafından sıfırlanan bir flag.

W5500 SPI slave aygıtıdır. Master, tüm işlemler boyunca SCLK’ı üretmeli ve her işlemde önce erişilecek bellek bölgesini yazmalıdır. Yani, çipe her erişim işlemi bir adresleme yazması ile başlar. Bu yazma 3 byte’tır. (Ve ne yazık ki byte adeti tek sayı olduğu için PIC24’te 16 bit SPI erişimini kullanamıyorum.)

Wiznet çipin belleğini kısımlara ayrılmış. Hangi kısma erişilecekse onunla ilgili bir kontrol byte’ını belirlemek gerekiyor. Bu byte’taki bir bit, aynı zamanda işlemin yazma mı yoksa okuma mı olduğunu da belirliyor. Daha sonra bu kısım içindeki register adresi alışıldık spi erişimlerindeki gibi master tarafından tanımlanıyor.

W5500 spi framing

ADDRESS PHASE: Seçili kısım içerisinde tanımlı 16 bitlik başlangıç adresi. Gösterim big endian.
CONTROL PHASE: Erişilecek bellek kısımının adresi, okuma/yazma işlemi belirlemesi (RW) ve spi frame türü seçimi (OPMODE)yapılan byte..
DATA PHASE: Okunacak ya da yazılacak verinin aktarımı..

// COMMON REGISTER BLOCK için control phase:
	#define     COM_CFG_W       0x04        
	#define     COM_CFG_R       0x00	
// SOCKET REGISTER BLOCK için control phase:	
	const unsigned char SOCK_BLOCKSEL_REG_WR[8] = 
	{ 0x0C, 0x2C, 0x4C, 0x6C, 0x8C, 0xAC, 0xCC, 0xEC };
	const unsigned char SOCK_BLOCKSEL_REG_RD[8] = 
	{ 0x08, 0x28, 0x48, 0x68, 0x88, 0xA8, 0xC8, 0xE8 };	
// Soketlerin TX ve RX veri buffer'ları için control phase:	
	const unsigned char SOCK_BLOCKSEL_TXB_WR[8] = 
	{ 0x14, 0x34, 0x54, 0x74, 0x94, 0xB4, 0xD4, 0xF4 };
	const unsigned char SOCK_BLOCKSEL_TXB_RD[8] = 
	{ 0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0 };
	const unsigned char SOCK_BLOCKSEL_RXB_WR[8] = 
	{ 0x1C, 0x3C, 0x5C, 0x7C, 0x9C, 0xBC, 0xDC, 0xFC };
	const unsigned char SOCK_BLOCKSEL_RXB_RD[8] = 
	{ 0x18, 0x38, 0x58, 0x78, 0x98, 0xB8, 0xD8, 0xF8 };

EC_SPI_Thread( )

EC_SPI_Thread( ) fonksiyonu ana programda, her döngüde koşulsuz çalışan bir thread fonksiyonudur. SPI erişiminde kesme kullanmıyorum. Öte yandan bir veri yazma ya da okuma işleminin bitmesini çalışmayı bloklayarak da beklemiyorum. Bu yüzden en doğrusu, bu işlemleri ana program içinde sürekli çağrılan bir state machine olarak yürütmek. Bu yüzden buna thread diyorum.

W5500 erişimine ihtiyaç duyan bir kod SPI üzerinden iş yapmak için;

  • Öncelikle spi2_busy flag’in 0 olmasını beklemeli.
  • spi_handle handler değişkenini yapmak istediği işe göre ayarlamalı
  • spi2_busy flag’ine kendisini tanımlayan sabiti yazmalı (diğer proseslere kaynak bende demek için)
  • spi2_status = 1 yaparak thread’i etkinleştirmeli..

Daha önceki çalışmalarımdakinden farklı olarak artık SPI thread’ine komut yollamıyorum. Daha açık bir tabirle, artık okuma ve yazma için ayrı başlatmalar yok. Yukarıda da bahsettiğim gibi, data_phase içinde zaten işlemin okuma mı yazma mı olduğu tanımlanmış durumdadır.

Bu hikayede en önemli oyuncunun spi_handle olduğu açık. Onun tanımı şu şekildedir:

static struct 
{
    WORD            offset_address; 
    unsigned char   control_phase; 
    unsigned char   bytecount; 
    unsigned char   *ptr;
} spi_handle ;

spi_handle.bytecount : okunacak ya da yazılacak byte miktarı (data phase boyu)
spi_handle.control_phase : erişilecek blok ve yazma/okuma işlemine göre belirlenen sabit değer
spi_handle.offset_address : register adresi ( soketin tx ve rx buffer’ları için sabit adres değil pointer kullanılır )
spi_handle.ptr : okuma işleminde alınan verinin yazılacağı, yazma işleminde de kaynak verinin kopyalanacağı bellek adresi (bizim taraf)

 // ÖRNEK:
// MAC nr yazma işlemi:
spi_handle.bytecount = 6;                   // 6 byte yazma yapılacak
spi_handle.control_phase = COM_CFG_W;       // common reg. block'a yazma
spi_handle.offset_address.ui = COM_SHAR;    // source hw. address reg.
spi_handle.ptr = &mac_nr[0]; // bizim bir yerlerde mac nr değişkeni var tabi

FIFO Kullanımı:

Bu uygulamanın üzerinde çalıştığı PIC24E işlemcisinde SPI modülünde RX ve TX için ayrı ayrı 8’er elemanlı FIFO var. Her W5500 erişimi kesinlikle 3 byte’lık bir yazma ile başlayacağı için ben de işe bu 3 byte’ı peşpeşe tx fifo’ya yükleyerek başlıyorum ve sonraki aşamalara geçmek için önce bu adımın tamamlanmasını bekliyorum.

Daha sonra gidecek ya da okunacak veri miktarına bakıyorum: Aktarılacak byte sayısının 8’den büyük ya da eşit/küçük olma durumuna göre iki farklı algoritma yürütüyorum: Byte sayısı 8’den küçükse tek bir FIFO yüklemesi ile işlemleri halledebilirim demektir. Eğer byte sayısı 8’den büyükse biraz daha farklı bir yükleme döngüsü kullanmam gerek, bu durumda başka bir döngüye atlarım. Bu ayrımı donanımı yüksek performansla kullanmak için yapıyorum. Sonuçta bir taraftan kod işletimini bloklamamam lazım, diğer taraftan ise çok kısa bir sürede bitecek bir için denetimi ana programa geri verip sonra modülü boşta bekletmemem lazım. Umarım ne demek istediğimi anlamışsınızdır.

Eğer 8 byte’tan küçük bir veri yazma ya da okuma işim varsa denetimi bırakmadan, o state içinde sanki tek bir byte yüklemesi yapar gibi art arda tüm veriyi gönderirim (yazma için konuşuyor gibiyim ama sonuçta okuma için de SCLK üretmek zorunda olduğum için işlerin başı aynı).

8 byte’tan büyük bir veri yazma ya da okuma işim varsa önce fifo’da yer kalmayıncaya kadar yükleme yapıyor ve denetimi bırakıyorum. Sonra her çalışmada boş yer var mı diye bakıyorum ve hedef sayıma ulaştığımda buffer’ın tamamen boşalmasını (ya da dolmasını) bekliyorum.

8 byte’tan büyük erişimlerde FIFO’nun aslında bize bir performans katkısı yapmadığını sadece işleri 8 byte ötelediğini görmüşsünüzdür.

SPI erişim thread’inin tam kaynak kodunu aşağıda vereceğim. Burada çok ilginç bir şey yok. Yalnızca, donanımsal flag’lerden bahsetmek istiyorum. Ki başka bir işlemci kullanıyor olduğunuzda fark eden bunların adı olacak.

Genel olarak SPI modülünü kullanırken iki donanımsal bayrak yükleme / okuma için çok önemli:

Shift register’ın boş olduğunu anlamak : PIC24’te SPI2STAT.SRMPT = 1

RX FIFO’nun boşalması durumu: SPI2STAT.SRXMPT = 1

_SRXMPT=1 ise RX FIFO boş demektir.RX okumak için devam koşulu = 0 olması
_SRMPT=1 ise SPI shift register boştaDevam eden işlem var mı kontrol etmek için kullanıyorum.
_SPITBF=1 ise TX FIFO’da yer yok demektir.İşleme devam koşulu =0 olmasıdır (yer var)
SPI2BUFTX ve RX fifo son elemana erişim İşlemler buna yazma ile başlar. RX FIFO buradan okunur.

EC_SPI_Thread( ) kaynak kodu

Sıkıntı yok

Birkaç gün önce, şu cuma ve kandil mesajlarından illallah dediğim bir zamanda bir yazı yazmıştım. Özetle, hayırlı cumalar, hayırlı bilmemneler diye mesaj atacağınıza o hayırlı günde hayırlı bir şey yapın, en azından trafikte daha sakin olun. En azından o hayırlı gördüğünüz günde birbirinizin canına kast etmeyin, birbirinizin suratına nefretle bakmak yerine selam verin diye düşünmüştüm.

Tabi benimki sonucu bilinen bir temenniydi. Bu adamların daha da hayvan gibi davranmak için aslında o mesajları attıklarını da düşünüyordum. Birbirlerine olan iyilik borçlarını Allah üzerinden bir iki uyduruk temenni ile geçiştirip GERÇEK hayatta birbirlerinin kanını içmeye devam edeceklerini biliyordum.  Yazıyı kolaydan yazmak için bunun örneğini de trafikten vermiştim.

Genel olarak böyle bir ilişki hayatın her alanında var: Bir şeyler sembolleşmişse, kutsallara atıf yapılıyorsa, ritüeller varsa, o şeylerin değer kattığı iddia edilen şeylerin içi boşalmış demektir. İnsanların birbirlerine saygı göstermeleri ile bu kokuşmuş bayram kandil temennileri arasında da kesinlikle bir ilişki var. Bayramların bizi birbirimize yaklaştırması, Ramazan’ın paylaşmak, aile birliğini anlamak vs. anlamına gelmesi falan anca kola ve kredi kartı reklamları için ucuz birer malzemedir, başka da bir şey değil.

İşin aslı ise her gün gözümüzün içine sokulur aslında: Bayram dönüşü trafiğine karıştınız mı hiç? Acelesi olan şaşkalozların yaşamınıza kastetmelerinden kaçınmaya çalışırken bayramın insanları nasıl birleştirdiğini çok iyi deneyimlemişsinizdir.

Eğer her bayram bizi birbirimize yakınlaştırıyorsa, biz yakınlaşa yakınlaşa artık fizyolojik bir füzyona uğramışız, insan demeye dilim varmayacak başka bir canlı türüne evrilmişiz anlaşılan. Sonunda bu artık genetik bir miras gibi “bizden” olanların davranışlarının ayırt edici bir parçasına dönüşmüş. Nereye gidersek gidelim bu mirası da yanımızda götürüyoruz. Alın size bir örnek: Belçika’da otoyol kapatıp göbek atan gurbetçi kardeşlerimizin başına gelenleri duymuşsunuzdur. Bunların davasına bakan hakimin sözleri, insan olan birilerine söylense utanmaları için bir ömür boyu yetecek bir ders olduğu halde bizimkiler “SIKINTI yok, biz Türk’üz, yine olsa yine yaparız” diye cevap vermişler.

Tabi, yirmi kadar kişinin ceza aldığı söyleniyor. Bu kişilerin tamamının böyle konuşabildiğini zannetmiyorum. Ama genel tavrın bu olduğundan şüphemiz yok.

cezaların kesildiği düğün konvoyu

 


Belçika’da geçtiğimiz yıllarda büyük tartışma yaratan ve yargıya intikal eden “Türkiye usulü düğün konvoyu” Hollanda’nın Lahey kentinde de şikayet konusu oldu.
Polis, onlarca araçtan oluşan Türkiye kökenli çiftin düğün konvoyuna, değişik suçlardan binlerce euro trafik cezası kesti.
Hollanda’nın en sakin kentlerinden biri olan Lahey’deki Willem Witsenplein civarında oturanlar, pazar sabahı hiç alışkın olmadıkları klakson sesi ve Türkiye usulü düğün konvoyu ile güne başladılar.
Bir çok kişi 112’yi arayarak, “gürültü, trafik ihlali, pencereden sarkma ve gereksiz yere sol şeridi ihlal etme” gibi şikayetlerde bulundu.
Konvoyun en başındaki gelin arabasının önü, polis ekipleri tarafından Wassenaar kasabası yakınlarında kesildi. En az 15 araçtan oluşan konvoydaki bürün sürücülere, farklı suçlardan ayrı ayrı ayrı ceza kesildi.
Binlerce euro ceza
Yerel medyaya göre, zaten oldukça masraflı olan düğün, konvoydakilere yazılan binlerce euroluk cezalar nedeniyle daha da pahalıya geldi.
Hollanda’da, kırmızı ışıkta geçmenin cezası 230 euro. Öndeki aracı yakından takip etmek 280 euro, gereksiz yere sol şeridi ihlal etmek 140 euro, sağdan sollamak 230 euro, yayalara engel olmak 370, karşıdan helen araca yol vermemek de 270 euro cezaya tabii.
Lahey polisi tarafından yapılan açıklamada, insanların mutlu günlerinde güzel düğün fotoğrafı ve anısı elde etme çabalarını anlayışla karşıladıkları belirtilerek, “Ama bunu yaparken de trafik kurallarına uyulması gerektiğini unutmayın” dendi.

Ülkemizdeki Arapların sokaklarımızı, tatil beldelerimizi, şehirlerimizi, parklarımızı ne hale getirdiklerini gördükten sonra Lahey ahalisinin şu şaşaalı düğün konvoyuna hangi hislerle baktığını haberin naif dilinden sıyrılıp, gerçekten düşünebilmişizdir, umarım..

İnsanları, şu hareketleri bile “sıkıntı yok” diye savunmaya mahkum eden şeyler, üzerinde düşünülmeyi ve kaçak güreşmeden eleştirilmeyi hak eden şeyler.