Tanıtım ve Teknik Özellikler

Transkript

Tanıtım ve Teknik Özellikler
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
ACD BİLGİ İŞLEM
URT-V2 KABLOSUZ VERİ TOPLAMA TERMİNALİ
AİLE HEKİMLİĞİ KİOSK
ÇÖZÜM ORTAĞI TEKNİK BELGESİ
DLL Kütüphanesi İle URT-V2 Ve URT-V3 Kontrolü
URTV2.DLL İçeriği
1
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
DLL Kütüphanesi İle URT-V2 Ve URT-V3 Kontrolü
DLL Kütüphaneleri
Acd Veri Toplama Sisteminde 3 adet DLL bulunmaktadır.
 URTV2.DLL
 VERI.DLL
 MENU.DLL
URTV2.DLL
Terminalleri yönetmede kullanılan çekirdek fonksiyonlardan
oluşmaktadır. Aynı zamanda veri toplama merkezi ile sunucu arasında köprü
görevi görür. Üretimde kullanılan modeli ile tek farkı veritabanından bağımsız
çalışıyor olmasıdır.
2
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
DLL Kütüphanelerinin Kurulumu
.NET projemizde ilk yapılacak iş DLL leri referans olarak eklemek olacaktır.
Sonrasında ise aşağıdaki şekilde kütüphaneleri projemize ekleyeceğiz.
using URTV2;
Kütüphanerimizi ekledikten sonra projenin ilk yüklendiği (Load)
bölümüne aşağıdaki satırları ekleyelim.
Load()
URTV2.URTV2Control Cihaz = new URTV2Control();
URTV2 .DLL in çalışması için gerekli şifreyi girelim
Load()
Cihaz.DLL_Sifre = "www.acd.com.tr/cihaz";
Merkezden gelen veri yakalamak için aşağıdaki olayı oluşturalım.
Load()
this.Cihaz.OnURTV2VeriAktif +=
new URTV2.URTV2Control.URTV2VeriAktifEventHandler(this.URTV2GelenVeri);
Merkeze seri port vasıtasıyla bağlanmak için aşağıdaki kodları yazalım.
Load()
if(!Cihaz.CihazPortAç("COM1"))
{
MessageBox.Show("Com1 Yok Yada Kullanımda","Bağlantı Hatası");
}
else
{
Cihaz.CihazData.SonrakiKomutIzin=false;
Cihaz.CihazData.KomutTekrarIzin=true;
}
3
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
DLL Kütüphanelerinin Kurulumu
Merkezden veri yakalamak için oluşturduğumuz olayın işaret ettiği
fonksiyonu oluşturalım.
private void URTV2GelenVeri(System.Object o, EventArgs e)
{
//Terminallerden gelen verinin işlememiz için geldiği yer burası
Cihaz.SeriPortAlmaAktif=false;//seri port alma işlemi duraklatıldı
Cihaz.CihazKontrol.LCD[0] = "TEMİNALE";
Cihaz.CihazKontrol.LCD[1] = "CEVAP GÖNDERİLDİ";
Cihaz.CihazVeriHata(Cihaz.CihazData.CihazIsim);
Cihaz.CihazKonumVeriSaklama();
Cihaz.SeriPortAlmaAktif=true;//seri port alma işlemi devam ettiriliyor
}
Basit anlamda yazdığımız bu programda terminallerden gelen her türlü
komuta programımız aşağıdaki uyarıyı verecektir.
TEMİNALE
CEVAP GÖNDERİLDİ
4
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
URTV2.DLL DEGİŞKENLERİ
Genel Değişkenler
public
Byte[] data ; //Cihazdan gelen ham data
public
Byte[] tampon ; //Cihaza giden ham data
public short[] CihazListe; //istenilen guruba göre cihaz listesi
public String
Admin;//Cihaz programlama için admin şifresi
public String
CihazConnectionString; //Veri tabanı için bağlantı cümlesi
public String
DLL_Sifre; //Genel Kullanım Şifresi
public bool SeriPortAlmaAktif;//Seri port alma kontrolü
public bool EternetDataAktif;//Eternet alma kontrolü
public bool DemoAktif;//Seri port alma kontrolü
CihazData Değişkenleri
public ref struct CihazData_ {
public int
CihazTur;
public Short
CihazIsim;//iki karakter cihaz ismi
public int
CihazGrup;//cihaz grup
public int
CihazID;//Cihazın veri tabanındaki kayıt no su
public int
CihazGelenKomutID;//gelen komutun veri tabanındaki kayıt no su
public String
CihazGelenKomut;//cihazdan gelen komut
public String
CihazGelenKomutIsmi;//Komut ismi
public int
CihazKomutAnaGrup;//komutun ana türü (üretim, arıza durus v.s.)
public int
CihazKomutAltGrup;//komutun işlevi (başlama bitiş müdehale v.s)
public int
CihazDegiskenHaritasi;;//32 bit değişken haritası.
//Her bit bir değişkeni ifade eder. Bit true ise değişken alınmıştır.
public Short
CihazAnalog1;//Terminalin AN1 portundan okunan analog deger
public Short
CihazAnalog2; // Terminalin AN2 portundan okunan analog deger
public String[] DegiskenVeri; // 32 adet değişkenin alınacağı String dizi
public
public int
5
bool[] GelenDegisken; //CihazDegiskenHaritasi nın bit'lere ayrılmış dizisi
CihazOncekiKomutID; //Terminal için bir önceki işlenmiş KomutID
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public int
CihazOncekiKomutAnaGrup;
//Terminal için bir önceki işlenmiş KomutAnaGrup
public int
CihazOncekiKomutAltGrup;
KomutAltGrup
//Terminal için bir önceki işlenmiş
public bool
KomutOncekiAnaGrupGenelIzin;
KomutAnaGrupGenelIzin
public DateTime
CihazSonVeriZamani;
public bool
KomutTekrarIzin;
gönderilememesi
//Terminal için bir önceki işlenmiş
//Terminalden Son Gelen Veri Zamanı
//Cihazdan alınan komuta karşılık cevabın
//durumunda terar işlem yapmayı engeller son gönderilen cevabı yeniden gönderir.
public bool
SonrakiKomutIzin;
//menü dizaynındaki senaryoyu kontrol eder.
//senaryo dışına çıkılmış ise yeniden kalınan yere döndürür.
public bool
KomutAnaGrupGenelIzin;
/*Ana Grubun Genel bir yapıya sahip olduğunu belirtir.. Ana grup işlemi tamamlanmadan
aynı özelliğe sahip başka bir ana grup işlemi yapılamaz.
Mesela bir üretim ve arıza diye iki ana grup tanımlayıp bu özelliği false yaparsak
üretim yaptığımız bir terminalde üretimi bitirmeden arıza ana grubuna geçiş yapamayız.
Eğer duruş diye bir ana grup tanımlar ve bu özelliği true yaparsak hem üretim hemde
arıza içinde duruş ana grubunu kullanabiliriz.
Bu tanımlama “komut ana grup” ( tblKomutAnaGrup) Ekranında yapılır.
public bool
KomutGrupTekrarIzin;
/* Bu deger gelen komutun KomutAltGrup özellğidir. KomutAnaGrup içinde tekrar iznini
verir. Mesela üretim ana grubu altında iş bitimi tekrar edemez şartı istenecektir.
Çünkü iş bitimi üretimi bitirir.
public bool
KomutGrupIciIzin;
/* Bu deger gelen komutun KomutAltGrup özellğidir. KomutAnaGrup içinde gelen komutun
çalışma iznidir. Mesela başlamış olan bir üretimde yeniden üretim başlatılamaz ise
“Komut ana grup” ekranında başlama özelliğinin KomutGrupIciIzin’i kapalı olmalıdır.
public int
KomutDurumID;
//Komutun müdahale açısından durumunu belirtir
// Genel,Mudahale,bildirim,Toplu bitiş vs...
public int
CihazCevapKomutID;//gelen komuta verilen olumlu cevap
public Byte[] CihazKomutCevap;// Cihaza gönderilmek için hazırlanmış olumlu cevap
public Byte[] CihazOncekiKomutCevap;// Cihaza gönderilmek için hazırlanmış son olumlu
cevap
}
CihazData_ CihazData;
6
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
CihazKontrol Değişkenleri
public ref struct CihazKontrol_ {
public String[] LCD; // LCD tampon
public
public
public
public
Byte[] ByteData; // RS232 byte datası
String StringData; // RS232 string data
Byte shortCihazKontrol; // 16 adet Cihaz Kontrol Bitleri
Byte oncekiCihazKontrol; // 16 adet bir önceki Cihaz Kontrol Bitleri
}
CihazKontrol_ CihazKontrol;
CihazCevap Değişkenleri
public ref struct CihazCevap_ {
// tblKomutCevap (Menü dizayn da Cevap Komutlar Ekranı) parametrelerini getirir
short CihazCevapFonksiyonID; // tblKomutCevapFonksiyon ile ilişkili
//Cevap fonksiyonlarının parametreleri
// Bu parametrelerCihazCevapFonksiyonID deki fonksiyon içine atılır
//örneğin CihazMenuHareket secilmişse
// CihazMenuHareket(short CihazIsim,int AnaMenuNo,int MenuNo)
// CihazFonksiyonParametre1-> AnaMenuNo
// CihazFonksiyonParametre2-> MenuNo
// şeklinde tablodan alınarak fonksiyona girilir
int CihazFonksiyonParametre1;
int CihazFonksiyonParametre2;
int CihazFonksiyonParametre3;
int CihazBilgiFonksiyonID; //tblBilgiFonksiyon ile lişkili
String CihazBilgiFonksiyon; //tblBilgiFonksiyon tablosundaki BF_FonksiyonIsim alani
};
7
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
URTV2 DLL Fonksiyonları
public Boolean CihazPortAc(String port)
/*
Com portunu açmak için kullanılır. COM 1 den COM 8 e kadar secim yapılabilir.
Com port problemsiz olarak açıldığında fonksiyon true döndürür.
Com port herhangi bir nedenden açılamamış ise fonksiyon false döndürecektir.
Örnek
CihazPortAc("COM1");
*/
public Boolean CihazPortKapat()
/*
Kullanılan Com portu kapatmak için kullanılır. Com port problemsiz olarak kapandığında
fonksiyon true döndürür.
Com port herhangi bir nedenden kapanmamış ise fonksiyon false döndürecektir.
*/
public Boolean DurumYaz(int Tur,String DurumKonum,String Durum)
/*
DurumYaz Fonksiyonu DLL işleyişindeki olayları kaydetmek için kullanılmaktadır.
Tur kullanıcının isteğine baglı bir degerdir. örnek verilecek olursa hata için 0 ,
uyarı için 1, bilgilendirme için 2 gibi...DurumKonum durumun oluştuğu fonksiyonun ismi buraya
girilmelidir.Durum Oluşan durumla ilgili detayları içerir.
//////////////
Örnek :
ayarlanmadı.");
DurumYaz(0,"CihazUretimBaslama","Nesne başvurusu bir nesnenin örneğine
tblDurum tablosuna atılan veri
645
0
23.04.2009 161905
örneğine ayarlanmadı.
CihazUretimBaslama
Nesne başvurusu bir nesnenin
*/
public Boolean CihazKanalDegistir(short CihazIsim,Byte Kanal)
/*
CihazKanalDegistir fonsiyonu URT-V2 Terminallerinin Radyo Frekans yayın kanalını
değiştirir.
CihazIsim cihazın 16 bitlik ismidir.
Kanal 0...127 arasında istenilen kanal tercih edilebilir.
Teminal kanalı istenildiği taktirde terminalden de değiştirilebilir.
*/
8
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean MerkezKanalDegistir(Byte Kanal)
/*
MerkezKanalDegistir fonksiyonu merkez cihazın Radyo Frekans yayın kanalını değiştirir.
Kanal 0...127 arasında istenilen kanal tercih edilebilir.
Dikkat edilmesi gereken husus merkez ve terminalerin konuşabilmesi için aynı kanalı
kullanmalır gerekmektedir.
*/
public Boolean CihazKonumVeriSaklama()
/*
CihazKonumVeriSaklama Fonksiyonu
tblMakineOzellik Tablosundaki
MO_KomutAnaGrup,MO_KomutAltGrup,MO_OncekiAnaGrup,MO_OncekiAltGrup,MO_OncekiKomutAnaGrup
GenelIzin,MO_KomutID
son gelen veriyle günceller. Bu Terminal cihaz en son hangi işlemi gerçekleştirdiğini
bulmamızı sağlar.
Programcı veri işlenip cevap gönderildikten sonra bu fonksiyonun çalıştırmalıdır.
*/
public Boolean CihazSonCevapSaklama()
/*
CihazSonCevapSaklama fonksiyonu Veri gelen terminale gönderilen son cevabı saklamakta
kullanılır.
Bu fonksiyonun amacı merkezden gnderilen cevabın terminale ulaşmaması dururmunda
terminal veriyi
tekrar göndereceğinden aynı veriyi defalarca işlemektense kaydedilen hazır cevabın
gönderilmesidir.
Anlatılan işlemler dll tarından yapılmaktadır. Programcı veri işlenip cevap
gönderildikten sonra
bu fonksiyonun çalıştırmalıdır.
*/
public Boolean CihazVeriAlindi(short CihazIsim)
/*
CihazVeriAlindi fonsiyonu teminalin veri göndermesini durdurur. Terminal veri
göndermeden önceki konumda kalır.
CihazIsim cihazın 16 bitlik ismidir.
*/
9
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazOlumluCevapGonder(short CihazIsim)
/*
CihazOlumluCevapGonder fonksiyonu terminale senaryoda belirtilen cevabı gönderir.
CihazIsim cihazın 16 bitlik ismidir.
*/
public Boolean CihazVeriHata(short CihazIsim)
/*
CihazVeriHata Fonksiyonu terminaldeki operatore uyarı görüntülemeye yarar.
CihazIsim cihazın 16 bitlik ismidir.
CihazKontrol.LCD[0...3] dizisine girilen 4 satır 20 şer karakter uyarı metni fonksiyon
çağrılmadan
önce girilmiş olmalıdır.
Örnek
Cihaz.CihazKontrol.LCD[0]="SİSTEM HATASI";
Cihaz.CihazVeriHata(Cihaz.CihazData.CihazIsim);
*/
public Boolean CihazVeriHata(short CihazIsim, unsigned char sure )
/*
Boolean CihazVeriHata(short CihazIsim) fonksiyonundan farkı uyarının ne kadar zaman
gösterileceğini
sure değişkeniyle belirleyebilmemizdir.
Örnek
Cihaz.CihazKontrol.LCD[0]="DİKKAT";
Cihaz.CihazKontrol.LCD[1]="SİSTEM HATASI";
Cihaz.CihazVeriHata(Cihaz.CihazData.CihazIsim,10);
Mesaj 10 saniye süreyle gösterilip kaldığı menüye geri dönecektir.
*/
10
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazBilgiGoster(short CihazIsim,int Sayfa,bool ilkGonderim)
/*
Bu fonksiyon ile 80 karakterden uzun metinler sayfa sayfa gösterilir. Tam metin
Cihaz.CihazKontrol.LCD[0] a atılır.
Sonrasında CihazBilgiGoster fonksiyonu çalıştırlır.
CihazIsim cihazın 16 bitlik ismidir.
Sayfa ilk gösterilecek sayfa numarası
ilkGonderim bu deger true olarak kullanılacaktır. false degeri dll tarafından sayfa
değiştirmede kullanılır.
Örnek
Cihaz.CihazKontrol.LCD[0]="Asılsız dedikodulara dayandırılarak masa başında
üretilen ve yalnızca sansasyon yaratma amacını taşıdığını düşündüğümüz bu tarz haberlere
itibar edilmemesi gerektiğini hatırlatır, bu çarpık habercilik anlayışından kulübümüzü yasal
yollara başvurmak zorunda bırakmadan vazgeçilmesini dileriz.";
Cihaz.CihazBilgiGoster(9729,1,true);
Sayfa değiştirmek için alt ve üst tuşlar kullanılır.
*/
public Boolean CihazDegiskenHata(short CihazIsim,int Degisken)
/*
CihazDegiskenHata fonksiyonu ile hata tespit ettiğimiz değişkenin hata mesajını
terminal kullanıcısına bildiririz.
CihazIsim cihazın 16 bitlik ismidir.
Degisken Değişkenin veritabanındaki ID si
Örnek
0 ID'li değişkenin SİCİL NO olduğunu varsayalım.
Cihaz.CihazDegiskenHata(9729,0);
Ekran
SİCİL NO
HATALI GİRİŞ
*/
11
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazMenuHareket(short CihazIsim,int AnaMenuNo,int MenuNo)
/*
CihazMenuHareket fonksiyonu menüler arası hareketi sağlar.
CihazIsim
cihazın 16 bitlik ismidir.
AnaMenuNo
gidilecek Ana Menü numarasıdır. 0...15 arasında bir değerdir.
MenuNo
bu değer 0 ise menü aktif değildir. 1...15 arasında menu aktifdir.
*/
public Boolean CihazGenelMesajGoster(short CihazIsim,int MesajNo1,int MesajNo2)
/*
CihazGenelMesajGoster fonksiyonu cihazın bellğine yazılmış olan mesajları sadece mesaj
numarasını
girerek göstermemizi sağlar
CihazIsim
cihazın 16 bitlik ismidir.
MesajNo Mesajın ID numarası
Örnek
Cihaz.CihazGenelMesajGoster(9729,0,1);
Ekran
ACD BİLGİ İŞLEM
www.acd.com.tr
*/
12
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazGirisFonksiyonu(short CihazIsim,int MesajNo1,int MesajNo2)
/*
CihazGirisFonksiyonu ekrana mesaj yazdırdıktan sonra kullanıcının
beklenir ve sonrasında
giriş tuşuna basması
otomatik olarak sisteme giriş yapıldı bilgisi gelir.
CihazIsim
cihazın 16 bitlik ismidir.
MesajNo Mesajın ID numarası
Örnek
Cihaz.CihazGirisFonksiyonu(9729,0,1);
Ekran
ACD BİLGİ İŞLEM
www.acd.com.tr
giriş tuşuna basana kadar bu ekran açık kalır.
*/
public Boolean CihazOnayFonksiyonu(short CihazIsim)
/*
CihazOnayFonksiyonu ekrana yazılan 3 satır verinin onaylanması ya da ret edilmesi için
yazılmış fonksiyondur.
CihazIsim
cihazın 16 bitlik ismidir.
Örnek
Cihaz.CihazKontrol.LCD[0]="SİCİL NO 000001";
Cihaz.CihazKontrol.LCD[1]="IŞ EMRİ
09000016";
Cihaz.CihazKontrol.LCD[2]="URETİM ADEDİ=1000";
Cihaz.CihazOnayFonksiyonu(9729);
Ekran
SİCİL NO 000001
IŞ EMRİ
09000016
URETİM ADEDİ=1000
F1 ONAY F2 RET
*/
13
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazSecimFonksiyonu(short CihazIsim,int SecimAdet)
/*
CihazSecimFonksiyonu ekrana yazılan 4 satır verinin seçilmesi için yazılmış
fonksiyondur.
CihazIsim
cihazın 16 bitlik ismidir.
Örnek
Cihaz.CihazKontrol.LCD[0]="F1 ÜRETİM";
Cihaz.CihazKontrol.LCD[1]="F2 DURUŞ";
Cihaz.CihazKontrol.LCD[2]="F3 BAKIM";
Cihaz.CihazKontrol.LCD[3]="F4 ARIZA";
Cihaz.CihazOnayFonksiyonu(9729);
*/
public Boolean CihazListeGuncelle(int Grup)
/*
CihazListeGuncelle CihazListe
dizisi içine gruba ait tüm terminalleri atar.
Grup Grup numarası.
*/
public Boolean CihazGrupSayacGetir(int Grup)
/*
CihazGrupSayacGetir fonksiyonu girilen gruba ait olan tüm terminallerden üretim
bilgisini ister.
Grup Grup numarası.
*/
public Boolean CihazSayacIste(short CihazNo)
/*
CihazSayacIste fonksiyonu gruba bakılmaksızın terminalden üretim bilgisini almakta
kullanılır.
CihazIsim
cihazın 16 bitlik ismidir.
Örnek : Cihaz.CihazSayacIste(9729);
*/
14
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
URTV2.DLL İçeriği
public Boolean CihazDegiskenIste(short CihazIsim,int komutNo1,int komutNo2,int
DegiskenHaritasi)
/*
CihazDegiskenIste istenilen zamanda terminalden değişkenleri istemede kullanılır.
CihazIsim
cihazın 16 bitlik ismidir.
komutNo1 ve komutNo2 dönüş komutunun son iki hanesini belirler.
DegiskenHaritasi istenecek değişkenlerin girildiği değerdir.
Örnek
Örnek olarak Terminalden 0 ve 2 ID li değişlkenleri istetelim
DegiskenHaritasi
2^0 + 2^2
-> 5
olacaktır.
Cihaz.CihazDegiskenIste(9729,1,2,5);
Teminalin döndüğü cevap
Cihaz.CihazData.CihazGelenKomut="D12" olacaktır
Gelen değişkenler ise
Cihaz.CihazData.DegiskenVeri[0]
Cihaz.CihazData.DegiskenVeri[2]
de bulunmaktadır.
*
15
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
Belgeler
16
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
Referanslar
17
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.
ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ
İletişim
www.acd.com.tr
[email protected]
ACD Bilgi İşlem LTD ŞTİ
Eskişehir Teknoloji Geliştirme Bölgesi
Piramit 1
Organize Sanayi Bölgesi
Eskişehir
Tel : 0 222 236 20 10
Fax: 0 222 236 20 11
18
Sürüm 1.0
© 2009 ACD Bilgi İşlem LTD. STİ.

Benzer belgeler