RFID Bileklikler

20 Tem 2009 In: .net

Şu sıralarda sürekli kulak aşinası oldugumuz temazsız kartlar işte bu teknoloji ile çalışmakta. Aslında uzun zamandır hayatımızda bu teknoloji,  PDKS sistemlerinde de sürekli yaka kartı veya otoparklarda kullanılmakta idi. Hastanemizde yatan hastaların medikal işlemlerini takip etmek amacıyla satın aldıgımız cihazlar üzerinde RFID aparatı bulunmakta. O yüzden yaptıgımız çalışmayı özetlemek istiyorum.

Radyo Frekansı ile Tanımlama (RFID) teknolojisi, radyo frekansı kullanarak nesneleri tekil ve otomatik olarak tanıma yöntemidir (bkz Otomatik Tanıma ve Veri Toplama). RFID, temel olarak bir etiket ve okuyucudan meydana gelir. RFID etiketleri yerleştirilen nesne ile ilgili bilgilerini almak, saklamak ve göndermek için programlanabilirler. Nesne üzerine yerleştirilen etiketlerin okuyucu tarafından okunmasıyla tedarik zinciri yönetimi veya HBYS g,b, otomasyon sistemlerine bilgileri otomatik olarak kaydedilebilir veya değiştirilebilir.

RFID etiketi, radyo frekansı ile yapılan sorguları almaya ve cevaplamaya olanak tanıyan bir silikon yonga, anten ve kaplamadan meydana gelir. Yonga, etiketin üzerinde bulunduğu nesne ile ilgili bilgileri saklar. Anten, radyo frekansı kullanarak nesne bilgilerini okuyucuya iletir. Kaplama ise etiketin bir nesne üzerine yerleştirilebilmesi için yonga ve anteni çevreler. Pasif olanları hiç bir enerji kaynagı barındırmazlar, okuyucunun gücüyle çalışırlar.

RFID, düşük frekans (LF) 125–134 kHz, yüksek frekans (HF) 13.56 MHz, ultra yüksek frekans (UHF) 860–960 MHz, 2.45 GHz ve süper yüksek frekans (SHF) 5.8 GHz frekanslarında kullanılabilmektedir.

Bizdeki çözüm 2 şekilde mümkündü : 

1- Tek kullanımlık RFID etiketli ürünler aşagıdaki gibi 

 
2 - Çok kullanımlık sterilazasyon işleminden geçebilen şu bileklikler


Bu tarz pasif RFID tagları 3-5 cm mesafeden okuma yapabilmektedir.

Cihazımız Intel® Mobile Clinical Assistant (MCA) platformunda oldugu için HealthCare donanım ve SDK larını ile uygulamamızı geliştirdik.

Visual Studio ile yaptıgımız projeye "Add Reference" ile "Intel.Healthcare.dll" projeye eklenmesi ve MCA nın SDKsı kurulu olması gerekiyor. Development yapılan makinada ve MCA cihazda ayrı ayrı kurulması gerekiyor. Ben 2.0.0.25057" versiyonunu kullanıyorum.
 
.Net platformunda C# ile RFID, barkod ve kamera üzerinden verileri ala bilmekteyiz. 

RFID tagları okumak için :

RfidReader RFokuyucu= new RfidReader();
ASCIIEncodingencode = new ASCIIEncoding();
RfidTagokunanTAG = null;
Buttonsbtn;
EventHandler<RfidEventArgs>RfidEtiketOkundu = null;

 

Okuma işlemi gerçekleştiginde aşagıdaki event tetiklenir ve

        public void RfidEtiketOkundu (objectsender, RfidEventArgs args)
                {
                    try
                    {
                        //Okundu
                        txt_or_protokolno.Text= encode.GetString(args.RfidReader.RfidTags[0].Data).Trim(); //RFID etiketin içindeki bilgi yi alıyoruz
                        txt_or_protokolno.Text =txt_or_protokolno.Text.Trim(); //Array oldugu için ihtiyacımız olmadıgı alanlara 0x20 yazmıştık onlardan kurtuluyoruz
                        getir(); //gerekli işlemler veritabanından getirilir
                        args.RfidReader.ReleaseDevice(); //Cihazı okuma modundan çıkartıyoruz, sonraki okumalar için hazır
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.Message,"Hata", MessageBoxButtons.OK,MessageBoxIcon.Error);
                    }

                } 

 

 

ETA muhasebe programında her şirket için SQL server da ETA_FIRMAISMI_2009 gibi açılmakta. Eger ETA ya entegrasyon yapmak istiyorsanız. Cari kartlarla ilgili CARKART tablosundaki CARKOD alanı carilerin kodunu, CARHAR ve CARFIS ilede cari hareketlerin dökümünü alabilirsiniz.

SELECT CARKART.CARKOD, CARKART.CARUNVAN, CARHAR.CARHARTAR, CARHAR.CARHARREFNO, CARHAR.CARHARTIPI, CARHAR.CARHARCARKOD,CARHAR.CARHARTUTAR
FROM CARHAR INNERJOIN CARKART ON CARHAR.CARHARCARKOD= CARKART.CARKOD
WHERE CARKART.CARKOD='DNM003'


gibi hareket ekstresi alınabilir.

Muhasebe hesaplarındaki (120,157,100 gibi) hareketleri ( mahsup , tahsilat ve tediye fişi gibi) hareketleri görüntülemek için :

SELECT     MUHFIS.MUHFISNO, MUHFIS.MUHFISTAR, MUHFIS.MUHFISCINSI, MUHHAR.MUHHARSIRANO, MUHHAR.MUHHARMUHKOD, MUHHAR.MUHHARACIKLAMA,

                      MUHHAR.MUHHARBATIPI, MUHHAR.MUHHARTUTAR,MUHFISTIP.MUHFTKOD

FROM         MUHHAR INNERJOIN

                      MUHFIS ON MUHHAR.MUHHARREFNO= MUHFIS.MUHFISREFNOINNER JOIN

                      MUHFISTIP ON MUHFIS.MUHFISCINSI= MUHFISTIP.MUHFTNO


Aktarım yapmak için ilk olarak hareketin MUHFIS tablosuna insert edilecek daha sonrada aşagıda fonksiyonla MUHHAR a kaydedilecek


        
public static boolETAyaDTYEkle(DateTime ftar, int muhrefno, intsira, string muhhod, stringaciklama, int batipi,decimaltutar, string muhharno)

        {
            try
            {
                baglans();
                SqlCommand selcom = new SqlCommand(@"InsertInto MUHHAR
(MUHHARTAR,MUHHARREFNO,MUHHARSIRANO,MUHHARMUHKOD,MUHHARACIKLAMA, MUHHARBATIPI,MUHHARTUTAR,MUHHARNO,MUHHARCINSI,MUHHARKAYITONC, MUHHARKAYNAK,MUHHARMATATEFLAG )

VALUES

(@mft,@mfrn,@mfsn,@muhhd,@mhacik,@mhbatipi,@mhtutar,@mhno,1,4,4,1)", conns);

                selcom.Parameters.Add("mft", SqlDbType.DateTime).Value= ftar;//fistarihi

                selcom.Parameters.Add("mfrn", SqlDbType.NVarChar).Value= muhrefno;//fiş nosu MA-0001

                selcom.Parameters.Add("mfsn", SqlDbType.Int).Value= sira;//otomatik artacak

                selcom.Parameters.Add("muhhd", SqlDbType.NVarChar).Value= muhhod;//borc toplam

                selcom.Parameters.Add("mhacik", SqlDbType.NVarChar).Value= aciklama;//alacak toplam

                selcom.Parameters.Add("mhbatipi", SqlDbType.Int).Value= batipi;

                    selcom.Parameters.Add("mhtutar", SqlDbType.Decimal).Value= tutar;

                        selcom.Parameters.Add("mhno", SqlDbType.NVarChar).Value= muhharno;

                selcom.ExecuteNonQuery();
                conns.Close();
                selcom.Dispose();
                returntrue;
            }
            catch(Exception ex)
            {
                Cursor.Current= Cursors.Default;
                MessageBox.Show(ex.Message);
                return false;
            }
        }

XtraGrid üzerine bir DataSoruce Bind ettiniz ve kullanıcı MultiSelect özelligi ile grid üzerinde işlem yapmak istedigi satırları seçti, 
Normalde gridView1.GetSelectedRows() size seçili olan satırların Row Handles larını veriyor. Ama gruplanmış verilerde bazı negatif degerlerle ugraşmanız gerekmekte.

Onun yerine aşagıdaki method size parametre olarak gönderdigini GridView in içinde seçili olan satırları aynen bind ettiginiz verileri ile DataTable olarak bütün kolonları ile getirmekte.


        private DataTable SecilenlerinListesi2(DevExpress.XtraGrid.Views.Grid.GridView view)
        {
            DataTable sonucTb = new DataTable();
            if(view.DataSource is DataView)
            {
                DataTable kaynakTb = ((DataView)view.DataSource).Table;
                sonucTb = kaynakTb.Clone();
                foreach(int rowHandle in view.GetSelectedRows())
                {
                    DataRowrow = view.GetDataRow(rowHandle);
                    sonucTb.Rows.Add(row.ItemArray);
                }
                sonucTb.AcceptChanges();
            }
            return sonucTb;
        }

GM862 ile Telemetri

15 Tem 2009 In: .net, .Net Micro Framework

Nihayet elime bugün ulaştı cihaz. Biliyorsunuz Telit GM862, bir SIM kartı ile size GPS, GSM ve GPRS gibi nimetlerden faydalanma ımkanı sağlıyor. Lakin bir sorundan bahsetmek istiyorum size, GM862'nin giriş ve çıkış pinleri erkek bir molex konnektörle saglanıyor. Cüzi bir ücret karşılıgı Molexin karşı konnektörünü temin etmek mümkün ama bu işinize yaramayacaktır, bunun için bir PCB board imal etmelisiniz. Gaziantep'de nasıl temin etmek mümkün bilmedigim için (maliyetide yüksek olacagının tahmin ettigim) kartı biraz araştırınca şu alternatifleri buldum:

 

 
 

 
Birisi SparkFun a ait $29 digeri ise MikroElektronika $24. Bu kartları kullanarak Seri baglantı kurmak mümkün ama voltaj ve TTL level sorunu yaşamamak içten bile degil. Birde bunun için devre hazırlamak gerekecek.

Bu alternatiflerin dışında GM862 için hazır RS232 çıkışlı interface kartlarda mevcut, mesela SparkFan a ait bu kart gibi 
 
 
Bu cihazla tek yapmanız gereken GM862 modülünü MOLEX konnektörüne yerleştirmek ve 9 V elektrikle beslemek. Seri port üzerinden haberleşmeye hazır. Lakin benim kullandıgım interface biraz farklı. Ben şimdi ilk olarak C# ile bir kaç uygulama geliştirip daha sonrada .Net Micro Framework için bir uyarlayıp TahoeII üzerinde koşturmak istiyorum.

Bu sayede sahadan veya otomasyondan verileri toplayıp GPRS üzerinden veya SMS ile sunucuya bildirecek bir uygulamalar geliştirmeyi planlıyoruz. İşte benim modül ve interface
 
 
 


Gelişmelerden sizide haberdar etcem tabii ki.

Hoşgeldin Kıvanç...

4 Tem 2009 In: hoş
Dün saat 19 sularında dünyaya gözlerini açtı ailemizin yeni ferdi. Dogarken cigerlerimize birazcıkın su kaçırmışız o yüzden küvezdeyiz hala. İnşallah 1-2 gün içerisinde kucagımıza alabilirirz. Tekrardan hoş geldin oglum.

Ömür boyu sağlıklı ve başarılı olman Allah tan tek dilegim...

Ben Kimim ?

Celiker BahceciMerhabalar, ben Çeliker BAHÇECİ. 2004 den beri özel sektörde bilgisayar mühendisligi ve egitmenlik yapıyorum. Yine aynı yılın Ekim ayından beri sitemde .Net ile programlama ve hayat görüşüm ile ilgili makalelerimi yayınlıyorum. Blogum dışında Yazgelistir.com, mobilnedir.com gibi ineta kapsamındaki bir çok siteye Microsoft teknolojileri ile ilgili yazılar yazmaktayım.
Bu site ile sizinde hayatınızı anlamlandırmanızda bir parça katkımın olması dilegiyle...