You are on page 1of 146

UKUROVA NVERSTES FEN BLMLER ENSTTS

YKSEK LSANS TEZ

Mehmet CER

BLGSAYAR KONTROLL, NTERNET DESTEKL SERA OTOMASYONU

TARIM MAKNALARI ANABLM DALI

ADANA, 2010

UKUROVA NVERSTES FEN BLMLER ENSTTS BLGSAYAR KONTROLL, NTERNET DESTEKL SERA OTOMASYONU Mehmet CER YKSEK LSANS TEZ TARIM MAKNALARI ANABLM DALI

Bu Tez 01/02/2010 Tarihinde Aadaki Oybirlii/Oyokluu ile Kabul Edilmitir.

Jri

yeleri

Tarafndan

... .

Prof. Dr. Ali BAETNELK Prof. Dr. lhami YENGL Do.Dr. H.Hseyin ZTRK Danman ye ye

Bu tez Enstitmz Tarm Makinalar Anabilim Dalnda hazrlanmtr. Kod No:

Prof. Dr. lhami YENGL Enstit Mdr

Not: Bu tezde kullanlan zgn ve baka kaynaktan yaplan bildirilerin, izelge ve fotoraflarn kaynak gsterilmeden kullanm, 5846 sayl Fikir ve Sanat Eserleri Kanunundaki hkmlere tabidir.

Z YKSEK LSANS TEZ BLGSAYAR KONTROLL, NTERNET DESTEKL SERA OTOMASYONU Mehmet CER UKUROVA NVERSTES FEN BLMLER ENSTTS TARIM MAKNALARI ANABLM DALI Danman Jri :Prof.Dr. Ali BAETNELK Yl: 2010, Sayfa:134 :Prof. Dr. Ali BAETNELK :Prof. Dr. lhami YENGL :Do. Dr. H.Hseyin ZTRK

Bu almada; seralarda kullanlmakta olan otomasyon sistemlerinde grlen eksikliklerin giderilmesi ile daha esnek, daha kullanl ve her trl ihtiyaca cevap verebilen bir otomasyon sistemi kurulmas amalanmtr. Serann; scaklk, bal nem ve k gibi iklim deerleri, otomatik ve uzaktan kontrol edilebilmektedir. Bu amala kullanlabilecek yazlm ve bilgisayar tarafndan kontrol edilebilen bir donanm tasarlanmtr. zerinde allan otomasyon sisteminde; her trl lme eleman (alglayc, dntrc) ve her trl kontrol eleman ile alabilecek program tasarlanmtr. Bunun iin; zerinde drt adet analog, bir adet saysal giri ve on adet de dijital k olacak ekilde ok amal elektronik bir kart tasarlanmtr. Kartn esnekliinin salanabilmesi iin, ierisine programlanabilir bir mikro denetleyici olan PIC16F873 eleman kullanlmtr. Kontrol program; tasarlanan elektronik kart ile haberleecek ekilde yazlmtr. Bylece; sisteme balanan tm kartlar bilgisayar tarafndan kontrol edilecektir. Herhangi bir lme elemannn istenilen analog girie ve herhangi bir kontrol elemannn istenilen ka balanabilmesine olanak salamak iin kontrol program ve elektronik kart esnek bir yapda tasarlanmtr. Kontrol program ile toplanan lme bilgileri bir veri tabannda depolanmaktadr. Ayrca, otomasyon sisteminin web ara yz sayesinde, lme bilgilerine internetten ulalabilmesi de mmkn olacaktr. Anahtar Kelimeler: Sera, otomasyon, alglayc, kontrol, PIC

ABSTRACT MSc THESIS COMPUTER CONTROLLED, INTERNET-AIDED GREENHOUSE AUTOMATION Mehmet CER DEPARTMENT OF AGRICULTURAL MACHINERY INSTITUTE OF NATURAL AND APPLIED SCIENCES UNIVERSITY OF CUKUROVA Supervisor Jury :Prof.Dr. Ali BAETNELK Year: 2010, Pages:134 :Prof. Dr. Ali BAETNELK :Prof. Dr. lhami YENGL :Assoc.Prof. Dr. H.Hseyin ZTRK

In the present study, it is aimed to build an automation system which is more flexible, useful and meeting every kind of requirements, by eliminating insufficiencies of automation systems using in greenhouses. Control of the environmental parameters such as temperature, humidity and light, of the greenhouse can be carried out automatically or remotely. Required software and computer controlled hardware are designed for this operations. The system being developed, is designed for working with any kind of measurement (sensors, converters) and control units. Therefore, a broad spectrum electronic card and four analog, one digital input and ten digital output are designed. To obtain the flexibility, PIC16F873, a programmable micro controller unit is used with card. Control software is writen by enabling communication with the designed electronic card. In this way, all cards connected to the system, will be controlled by software or in other words by computer. Controlling software and electronic card are designed flexible, thus it is possible that any measurement unit can be connected to any desired analog input and any controlling unit to output. Collected measurement data by the controlling software has been stored in a database. In addition, its possible to reach the measurement data through web interface of the automation system. Key Words: Greenhouse, automation, sensor, control, PIC

II

TEEKKR Seralar; bitkisel retimin iyiletirilmi evresel koullarda gerekletirildii, dier anlamda; d ortamn bitkilere olumsuz etkilerinin olabildiince snrland kontroll ortamlardr. Seralarn etkili ynetilebilmesi ve iletilebilmesi iin bilgisayar mikroilemci kontroll bilgi ileme ve otomasyon sistemlerine gereksinim duyulmaktadr. Serann deiken iklim deerlerinin (scaklk, bal nem ve k gibi) uzaktan veya otomatik kontroll olarak gerekletirilmesini salayan, bu sayede sistemin esnek, kullanl olmasn, maliyetlerin drlmesini amalayan bu almann, sera otomasyonu iin nemli bir rnek olmasn umuyorum. Serann otomasyon sistemi iin yaptm almalar arasnda, sera sistemleri, elektronik, donanm, programlama, haberleme teknikleri ve internet konularnda aratrma ve almalar yeralmaktadr. Tm bu konularda nceki deneyimlerimin byk faydas oldu. Sonuta her trl lme eleman (alglayc, dntrc) ve kontrol eleman ile alabilecek, yetitirilen rne ve alann byklne gerekli ayarlar yaplarak adapte olabilecek esnek ve kullanl bir alma ortaya kmtr. Bu almamda, bandan sonuna kadar desteini ve zamann esirgemeyen, her konuda almalarma yardmc olan ve ynlendiren, danman hocam Sayn Prof.Dr. Ali BAETNELKe; elektronik kart tasarm, pic programlama ve tm testlerde bandan sonuna kadar yanmda olan, Y.Mh. Ali Osman YALIOLUna; odasn benimle paylaan ve hatalarm grmemde bana yardmc olan Y.Mh. M.Ycel ZCANa ve almada emei geen herkese en iten teekkrlerimi sayglarmla sunarm.

III

NDEKLER

SAYFA

Z ............................................................................................................................... II ABSTRACT................................................................................................................ II TEEKKR............................................................................................................... III NDEKLER .......................................................................................................... IV ZELGELER DZN .............................................................................................VII EKLLER DZN................................................................................................. VIII 1.GR ........................................................................................................................ 1 1.1. Otomasyon ........................................................................................................ 2 1.2. Sera Otomasyonu .............................................................................................. 2 1.3. Otomasyonsuz Sera Sistemleri.......................................................................... 3 1.4. Yar Otomatik Sera Sistemleri .......................................................................... 3 1.5. Mikroilemci Kontroll (PLC) Sistemler.......................................................... 4 1.6. Mikrodenetleyicili Sistemler............................................................................. 5 1.7. Bilgisayar Kontroll Sistemler.......................................................................... 6 2. NCEK ALIMALAR........................................................................................ 7 3. METERYAL ve METOD ...................................................................................... 10 3.1. Alglayclar..................................................................................................... 11 3.1.1. Scaklk Alglayc................................................................................ 12 3.1.2. Ik Alglayc ....................................................................................... 12 3.1.3. Bal Nem Alglaycs......................................................................... 13 3.2. Kontrol Sistemleri ........................................................................................... 14 3.2.1. Rle ...................................................................................................... 14 3.2.2. Kontaktr.............................................................................................. 15 3.2.3. Valf....................................................................................................... 16 3.3. Sera Sistemleri ................................................................................................ 16 3.3.1. Sulama Sistemi..................................................................................... 16 3.3.2. Istma Sistemi ....................................................................................... 17 3.3.3. Havalandrma Sistemi .......................................................................... 18 3.3.4. Gbreleme Sistemi ............................................................................... 19

IV

3.3.5. Glgeleme Sistemi ............................................................................... 19 3.3.6. Soutma Sistemi................................................................................... 19 3.3.7. Alarm Sistemi....................................................................................... 20 3.4.1. Elektronik Kartta Kullanlan Entegreler .............................................. 21 3.4.1.1. PIC16F873 Entegresi .............................................................. 21 3.4.1.2. ki Girili AND Kaps Entegresi (4081) ................................ 25 3.4.1.3. Regle Entegresi (7805).......................................................... 26 3.4.1.4. max232 Seri letiim Entegresi ............................................... 27 3.5.1. Bilgisayar ............................................................................................. 29 3.5.2. Veri Taban........................................................................................... 29 3.5.3. Programlama Dili ................................................................................. 30 3.5.4. Otomasyon Program............................................................................ 30 3.5.6. Otomasyon Programnn Ak......................................................... 31 4. BULGULAR ve TARTIMA................................................................................ 33 4.1. Elektronik Kartn Tasarm ............................................................................. 33 4.2. Otomasyon Programnn Kullanm ................................................................ 36 4.2.1. Al Ekran (Ana Ekran).................................................................... 36 4.2.2. letiim Portu Tanmlama Ekran ......................................................... 37 4.2.3. lem Tanmlama Ekran ...................................................................... 39 4.2.4. Giri-k lemi Ekleme/Dzeltme Ekran........................................ 40 4.2.4.1. lme Eleman Tanmlama Ekran ......................................... 42 4.2.4.2. lme Eleman Karlk Tablosu Ekran................................. 43 4.2.5. Kart-Eleman Tanmlama Ekran .......................................................... 44 4.2.6. Kontrol lemleri .................................................................................. 47 4.2.6.1. Otomatik Kontrol Ekran......................................................... 49 4.2.6.2. Elle Kontrol Ekran ................................................................. 53 4.2.7. Grafik zleme Ekran ............................................................................ 55 4.2.8. Program Kapatma ve Hakkmzda Ekran............................................ 58 4.3. nternet Bilgi sistemi ....................................................................................... 58 5. SONULAR ve NERLER................................................................................. 60 KAYNAKLAR .......................................................................................................... 62

ZGEM ............................................................................................................... 64 EK 1. PIC PROGRAMININ KODLARI ................................................................... 65 EK 2. OTOMASYON PROGRAMININ KODLARI................................................ 73 Ana Ekran ....................................................................................................... 73 lem Tanm Ekran ......................................................................................... 85 lem Ekle/Dzelt Ekran................................................................................. 88 lme Eleman Tanm Ekran .......................................................................... 92 lme Eleman Ekle/Dzelt Ekran................................................................. 94 lm Karlk Ekran..................................................................................... 97 lm Karl Ekle/Dzelt Ekran................................................................ 99 Kart-Eleman Tanmlar Ekran ...................................................................... 101 Kart-Eleman Tanm Ekle/Dzelt Ekran ...................................................... 103 Otomatik Kontrol Tanmlar Ekran .............................................................. 110 Otomatik Kontrol Kurallar Ekle/Dzelt Ekran............................................ 115 Elle Kontrol Ekran........................................................................................ 119 Grafik Kriter Seim Ekran............................................................................ 125 EK 3. WEB PROGRAMI KODLARI ..................................................................... 127 global.php ...................................................................................................... 127 index.php ....................................................................................................... 127 okunanDegerleriDoldur.php .......................................................................... 132 sonDurumlariDoldur.php............................................................................... 133

VI

ZELGELER DZN

SAYFA

izelge 3.1. PIC16F873 teknikzellikleri.................................................................. 22 izelge 3.2. PIC16F873 bacak balant bilgileri ....................................................... 24 izelge 3.3. 4081 AND kaps alma gerilim deerleri .......................................... 25 izelge 3.4. 4081 AND kaps doruluk tablosu ....................................................... 25 izelge 3.5. 7805 regle entegresi elektriksel karakteristik tablosu.......................... 27

VII

EKLLER DZN

SAYFA

ekil 3.1. Otomasyon sistemi dzenei ..................................................................... 10 ekil 3.2. NTC s alglayc....................................................................................... 12 ekil 3.3. Foto diren (LDR)...................................................................................... 13 ekil 3.4. SHS-A3 RoHS nem alglayc ................................................................... 14 ekil 3.5. 12220 volt rle ......................................................................................... 15 ekil 3.6. fazl kontaktr ...................................................................................... 15 ekil 3.7. Rzgarsz ve rzgarl havalarda pencere pozisyonlar............................... 18 ekil 3.8. PIC16F873 bacak balantlar.................................................................... 22 ekil 3.9. PIC16F873 blok diyagram........................................................................ 23 ekil 3.10. 4081 AND kaps bacak balants ve i yaps ....................................... 25 ekil 3.11. 7805 regle entegresi ............................................................................... 26 ekil 3.12. 7805 regle entegresi blok diyagram...................................................... 26 ekil 3.13. max232 seri iletiim entegresi ................................................................. 28 ekil 3.14. max232 mantksal diyagram................................................................... 28 ekil 3.15. max232 tipik alma devresi .................................................................. 28 ekil 4.1. Elektronik kart emas ............................................................................... 34 ekil 4.2. Elektronik kart bask devre grn ........................................................ 35 ekil 4.3. Elektronik kart montajsz grn ........................................................... 35 ekil 4.4. Elektronik kart bitmi nrn .................................................................. 36 ekil 4.5. Al ekran ............................................................................................... 37 ekil 4.6. Seri iletiim portu tanmlama..................................................................... 38 ekil 4.7. Seri iletiim portunun varsaylan ayarlar .................................................. 38 ekil 4.8. lem tanmlama......................................................................................... 39 ekil 4.9. lem tanmlama ekran.............................................................................. 39 ekil 4.10. lem ekleme/dzeltme ekran ................................................................. 40 ekil 4.11. Giri ilemi ekleme/dzeltme ekran ....................................................... 41 ekil 4.12. Karakter elem tablosu............................................................................. 41 ekil 4.13. k ilemi ekleme/dzeltme ekran ....................................................... 41 ekil 4.14. lme eleman tanmlama ....................................................................... 42

VIII

ekil 4.15. lme eleman tanmlama ekran ............................................................ 42 ekil 4.16. lme eleman ekleme/dzeltme ekran.................................................. 43 ekil 4.17. lm karlk tanmlama ekranna giri................................................. 43 ekil 4.18. lme eleman karlk tanmlama ekran ............................................... 44 ekil 4.19. lme eleman karlk ekleme/dzeltme ekran..................................... 44 ekil 4.20. Kart-Eleman tanmlama ekranna giri .................................................... 45 ekil 4.21. Kart-Eleman ekleme/dzeltme ekran...................................................... 45 ekil 4.22. ON/OFF tipi k eleman kart ilikisi.................................................... 46 ekil 4.23. Kademeli tip k eleman kart ilikisi.................................................... 46 ekil 4.24.Giri eleman kart ilikisi .......................................................................... 47 ekil 4.25. k kontrol ilemleri.............................................................................. 48 ekil 4.26. Otomatik kontrol ilemine giri ............................................................... 48 ekil 4.27. Elle kontrol ilemine giri........................................................................ 49 ekil 4.28. Otomatik k kontrol ilemleri .............................................................. 50 ekil 4.29. Kural ekleme/dzeltme ekran ................................................................. 50 ekil 4.30. Kural ekleme/dzeltme ekrannda lm ilemi seimi .......................... 51 ekil 4.31. Kural ekleme/dzeltme ekrannda art seimi ......................................... 51 ekil 4.32. Kural ekleme/dzeltme birden fazla kstas belirleme .............................. 52 ekil 4.33. Kural ekleme/dzeltme ON/OFF tipi ilem hareket seenekleri ............. 52 ekil 4.34. Kural ekleme/dzeltme ON/OFF tipi ilem seilmi hareket .................. 52 ekil 4.35. Kural ekleme/dzeltme kademeli ilem tipi hareket seenekleri............. 53 ekil 4.36. Kural ekleme/dzeltme kademeli ilem tipi seilmi hareket.................. 53 ekil 4.37. Elle kontrol ekran ................................................................................... 54 ekil 4.38. ON/OFF tipi k ilemi seilmesi.......................................................... 54 ekil 4.39. ON/OFF tipi k ilemi hareket seenekleri.......................................... 55 ekil 4.40. Kademeli tip k ilemi seilmesi ......................................................... 55 ekil 4.41. Kademeli tip k ilemi hareket seenekleri.......................................... 55 ekil 4.42. Grafik izleme ekranna giri..................................................................... 56 ekil 4.43. Grafik kriterleri belirleme ekran ............................................................. 56 ekil 4.44. Grafik kriterleri ilem seimi ................................................................... 57 ekil 4.45. Grafik kriterleri balang ve biti tarihi belirleme.................................. 57

IX

ekil 4.46. Grafik izmeye balama........................................................................... 57 ekil 4.47. ncelenecek grafiksel gsterim ................................................................ 58 ekil 4.48. Kapatma onay ve program bilgisi ekran ................................................. 58 ekil 4.49. nternet bilgi sistemi ................................................................................ 59

1. GR

Mehmet CER

1.GR Otomasyon, bir imalat dizinini, her noktasnda insann ie karmasna gerek kalmakszn yapan, denetleyen ve zgn olarak negatif bir geri besleme sistemi kullanan kontrol sistemidir (Yule,1989). Otomasyon sistemleri, uzun aratrma ve tecrbeler sonucunda ortaya kt iin, zellikle kurulum maliyetleri, yksek sistemlerdir. Sera otomasyon sistemlerinin de kurulum maliyetinin ok yksek olmas nedeniyle, bu sistemler tarm sektrnde fazla kullanlmamaktadr. Ayrca; nceleri bu sistemlerin bilgisayar destekli almas durumunda; bu sistemleri kullanabilecek donanml kiilere ihtiya duyulmakta idi. Ancak gnmzde; hem bilgisayarlarn kullanmnn kolaylamas ve genilemesi, hem de otomasyonun kurulum maliyetinin seralarda ksa zamanda karlanyor olmas gibi sebeplerle bu sistemler yaygnlamaya balamaktadr. Gnlk hayatmzn hemen hemen her noktasnda kullandmz teknolojinin tarm iin de kullanlmas; zaman ve maliyet asndan kanlmaz bir durumdur. Teknolojinin bu kadar hzl ilerledii gnmzde; tarm alannda da teknolojik gelimeler kendini artan bir hzla gstermektedir. Bilgisayarl otomasyon sistemlerinin gelimesi ve yaylmasyla bu ilerlemelerin ok daha hzl bir ekilde olaca muhakkaktr. Tanabilir mikrobilgisayar kullanm ile verilerin depolanarak; bu verilerin BASIC programl bir bilgisayarda deerlendirmesinin yaplabilecei bildirilmektedir (Gilreath, 1985). Veri toplama; zaman alan ve bu esnada da hata orann arttran bir uygulamadr. Daha dk fiyatl, sonular tablolar halinde verebilen veri toplama ve analizinde tam otomasyonu salayacak bir aleti elde etme almalar sonulanm ve tanabilir mikrobilgisayar elde edilmitir. Tanabilir mikrobilgisayara eklenecek bir telefonla veya mikrobilgisayarn merkezi bilgisayara direk balantl hale getirilmesiyle verilerin annda merkeze ulamas salanr. Bu sayede saatler sren veri toplama ii, ksa zamanda halledilmi olur (Gilreath, 1985). Bu bilgiler nda; gnmzde iletiim ann cep telefonu ya da uydu telefonlar aracl ile tarmsal alanlarn hemen hemen tamamn kapsad dnlrse, byle bir sistemin kurulum

1. GR

Mehmet CER

ve kullanmnn daha rahat olaca grlmektedir. Hedef sadece veri toplama deil, ayn zamanda uzaktan lme ve kontrol sistemleridir. 1.1. Otomasyon Otomasyon, bir iin insan ile makina arasnda paylalmasdr. Toplam iin paylam yzdesi otomasyonun dzeyini belirler. nsan gcnn youn olduu otomasyon sitemleri yar otomasyon; makinann youn olduu sitemler de tam otomasyon olarak adlandrlrlar. Sanayi devriminin balangcnn aksine, yakn gemiimizde retim yapmak tek bana yeterli olmaktan uzaklamtr. Tm dnyann ak bir pazar haline geldii rekabeti koullarda retimi; hzl, standart, gvenli, nihayet verimli klmak, bir zorunluluk haline gelmitir. Endstride bu zorunluluun karl phesiz ki otomasyondur. Otomasyonun genel olarak; stnlkleri olduu gibi olumsuzluklar da bulunmaktadr. Otomasyonda retim standard ve maliyet d salanrken, isizlii krkledii de bir gerektir. Ayrca otomasyon ile yaplan retimlerde her eyin esnek ve kontrol edilebilir olmas, yneticinin iine gelmektedir. nk; bilgisayar ekrannda sisteminin ileyiini, eer varsa arzann yerini, retilen rn miktarn v.b. fabrikay ilgilendiren birok bilgilere eriim ve kontrol kolayl salar. Bu faydalar da iletmeye zaman, kalite, maliyet, hz ve kr olarak geri dnmektedir. Bu sistemlerin en byk olumsuzluu, ilk kurulumunun ok maliyetli oluudur. Bu maliyet de uzun vadede ou otomasyon sistemlerinde, kendini amorti etmektedir. Bir dier zarar ise; fabrikalara giren bu otomasyon sistemleri fabrika alanlarnn saysnda azalmaya sebep olmaktadr. 1.2. Sera Otomasyonu Alglayclardan gelen verilerin bilgisayarda ilendikten sonra, gerekli olan donanmn altrlmasna veya almamasna karar vermekten ibaret olan sera otomasyonu, dier otomasyonlardan farkllk gstermektir.

1. GR

Mehmet CER

Sera otomasyonu; donanm ve yazlm olarak iki ksmdan olumaktadr. Donanm ksm, bilgisayar, PLCli sistem veya mikrodenetleyicili bir sistem veya bunlarn karmndan oluan bir kontrol sistemi ile bunlarn kontrol ettii k elemanlarndan (rle, kontaktr vb.) oluur. Yazlm ksm ise, var olan donanmn kontroln ve veri alma grevini yerine getirerek, karar verme ilemini yapmaktadr. 1.3. Otomasyonsuz Sera Sistemleri Otomasyonsuz sera sistemleri; rn kalitesinin ve baar orannn sera sahibinin tecrbesine brakld scaklk veya nem lmek dnda herhangi bir elektronik aygtn kullanlmad sera sistemleridir. Bu tip seralarda elektronik sistem kullanlmad iin, maliyetler dk olmasna karn; radyo, televizyon vb. bilgi kaynaklarndan hava tahmin raporlarnn renilerek, nlem almak zere belirli zaman aralklarnda serann kontrol edilmesi ve belirli ilemlerin yaplmas gerekmektedir. Bu tr seralar genellikle, iklim deiimlerinden etkilenmeyen blgesel bitkiler yetitirmek iin kullanlmaktadr. 1.4. Yar Otomatik Sera Sistemleri Bu tr seralarda sera otomasyonunu oluturan elemanlar birbirinden bamsz almakta ve gerekli ilemler otomatik olarak gerekletirilmektedir. rnein; toprak neminin istenilen seviyenin altnda olmas durumunda, sulama sistemi devreye alnabilmekte; ancak sulamann havadaki nem ile toprak nemi balantl olarak yaplmas istendiinde, bu tr sistemler yetersiz kalmaktadr. Otomasyonla belirtilen sera sistemlerinin, belirtilen zamanlarda veya artlarda devreye girmesi salanabilmektedir. Yar otomatik sera sistemlerinde en ok zaman rleleri ve scaklk ayarl termostatlar kullanlmaktadr.

1. GR

Mehmet CER

1.5. Mikroilemci Kontroll (PLC) Sistemler Programlanabilir Lojik Kontrolr (PLC - Programmable Logic Controller) fabrikalardaki imalat hatlar veya makinalarn kontrol gibi ilemleri yapabilen, programlanma zellii olan giri ve k uclar nceden belirlenmi kontrol elemandr ki; bir nevi dk kapasiteli bilgisayar da denilebilir. Genel kullanml bilgisayarlarn aksine; PLC birok girii ve k olacak ekilde dzenlenir. Elektriksel grltlere, scaklk farklarna, mekanik darbe ve titreimlere kar daha dayankl tasarlanrlar. PLC'lere denetleyecei sistemin ileyiine uygun programlar yklenir. PLC programlar, giri bilgilerini milisaniyeler mertebesinde hzla tarayarak, buna uygun k bilgilerini gerek zamanlya yakn, cevap verecek ekilde alrlar. PLC, bir mikroilemcisi olup, karmak sistemlerin programlanmasnda kullanlabilir. PC'lerden en temel fark, sinyal girilerinin ve klarnn (Input/Output) alma ve ilenme eklinde ortaya kmaktadr. PLC'ler ilk olarak, karmak rle sistemlerinin ykn hafifletmek iin karlm basit mantksal (lojik) ilemleri yapan cihazlard. Gnmzde dier programlanabilir bilgisayarlarla arasndaki farkllklar giderek azalmaktadr. PLC bir bakma monitr ve klavyesi bulunmayan bir bilgisayar gibidir. Bir dier fark ise; iletilecek verilerin gerek ortamdan gelmesi ve sonularn yine gerek ortama analog veya saysal (dijital) olarak gnderilmesidir. Mikroilemcilerin maliyeti daha dk olmasna ramen, PLC'lerin tercih edilmelerinin sebebi; elektronik tasarm iin harcanacak zaman en aza indirmesidir. Ayn zamanda endstriyel ortamlarn sahip olduu zor koullardan (manyetik alan, byk scaklk farklar, toz vb.) etkilenmeden alabilen hazr zmler olmalardr. Bir fabrikann tm otomasyon ilerini yklenebilecek kadar giri/k saysna sahip PLC'ler bulunmaktadr. Gnmzde gelitirilen modler yapdaki PLC'lere gerektiinde ek giri-k modlleri, RS232, RS485, modem, ethernet gibi haberleme modlleri eklenebilmektedir. Bu gibi zelliklerle mevcut yap gelitirilebilmektedir. Ayrca, birok modelde sre kontrolne ynelik hazr ON-

1. GR

Mehmet CER

OFF (A-KAPA), PID, Fuzzy (Bulank) vb. tiplerdeki kontrolrler standart olarak bulunmaktadr. Yukarda anlatld gibi; olduka yetenekli olmalarna karn, yaptklar ie gre maliyetleri gz nne alndnda pahal sistemlerdir. Bu nedenle, gnmzde bu sorunu amak iin daha ucuz, daha az enerji ile i grebilen mikrodenetleyicili sistemler, otomasyonda PLClerin yerini almaktadr. 1.6. Mikrodenetleyicili Sistemler Temel olarak bir mikrodenetleyici, ierisinde mikroilemcisi olan, hafzas olan ve giri-k uclar olan bir entegredir. Bu manada PLC ile arasndaki tek fark, klarnn saysal elektronik mant ile tasarlanm olmasdr. Bir dier bakla da; kk kapasiteli bir bilgisayardr. Gnmzde imalat teknolojileri hzla gelien ve ucuzlayan mikrodenetleyiciler, zerlerindeki analog digital dntrcler, seri iletiim uclar ve benzeri ilaveleriyle yetenek olarak PLClerin ilerisine gemi bulunmaktadrlar. Bu sebepledir ki; otomasyonlar artk PLC ile deil mikrodenetleyicilerle yaplmaktadr. Ancak; endstride olduka fazla kullanm alan olan mikrodenetleyicilerin ve PLC'lerin hafzalar ve ilem kapasiteleri karmak sreler karsnda yetersiz kalabilmekte, bu yzden de gelien teknoloji ile birlikte daha gl yapya sahip endstriyel PC'lere gei sz konusu olmaktadr.

1. GR

Mehmet CER

1.7. Bilgisayar Kontroll Sistemler Mikrodenetleyicili ve PLCli sistemlerin gelimii olan bilgisayar kontroll sistemler iinde gelimi mikroilemciler barndrmaktadr. Yazlm iin bellek sorunu bulunmadndan ok daha gelimi yazlmlar ile sistem kontrolleri ve istatistiksel veriler elde etmek, gemie dnk verilere ulamak ok daha kolay olmaktadr. Buradaki tek sknt, alma alannn fiziki koullar olmaktadr. Yani bilgisayarn nemli, tozlu ve kimyasal maddelerin bulunduu alanlarda mrlerinin ok ksa olmas sebebiyle, bilgisayar alan sistemin biraz darsna almak gerekmektedir. Bilgisayar ile otomasyon gerekletirmek iin, sera sistemlerinden bilgi almay veya bu sistemlere bilgi gndermeyi salamak amacyla, bazen bilgisayar zerine takl veya ounlukla dardan balantl bir I/O giri/k kart veya bir kontrol kart bulunmaktadr. zerinde allan otomasyon sisteminin, Kolay kurulabilir, esnek yapl, bilgisayar programnn kolay kullanlr olmasnn yannda, uygulanabilir ve maliyetinin dk olmas, Seralarn, scaklk, bal nem vb. evresel faktrleri; bilgisayar kontroll olarak dzenlenerek, her trl sera kontrol sistemine uyum gsterecek donanm ve yazlmla tasarlanmas, Sistemin tek bir sera ya da sera ierisinde tek bir rn eidi iin deil; sera ierisindeki tm rnlerin deimesi halinde bile sistemin yeniden ayarlanmasyla yeni rnlere adaptasyonu yaplabilmesi, Serann ilk kurulduu ekliyle deil; gelecekte yaplacak iyiletirmelerde de sorunsuz bir ekilde uyum gsterebilmesi, Sera sisteminin uzaktan ynetilmesi iin gerekli veri tabanlar hazrlanarak; dnyann her hangi bir yerinden sisteme balanarak; sistemin anlk deiim bilgilerine eriilebilmesi amalanmtr.

2. NCEK ALIMALAR

Mehmet CER

2. NCEK ALIMALAR Konu ile ilgili yaplm almalarn bazlarn yle sralamak mmkndr: Funt ve ark, "Market Model" adnda bir donanm ve karar verme yntemi gelitirildiini bildiriyor. Amac yetitiricinin kendi iftlii hakknda daha fazla bilgiye sahip olmasdr. Bu programla yetitirici 50 farkl rnn fiyat belirlemesini yapabilmektedir. Fakl yllarla karlatrma yapabilmekte ve belli yllarn verilerini gz nne alarak retim planlamas yapabilmektedir. Bu ilemler tamamen donamma yerletirilen verilerle mmkn olabilmektedir. Bu veriler iinde farkl yllarda rn fiyatlarndan, gbreye, depolaycya denen crete kadar birok veri vardr (Funt ve ark, 1989). Lent ve ark, iki temel bilgisayar program modeli ile sebze ve meyve yetitiriciliinde retim planlamas yaplabileceini bildirmilerdir. Bitki iin zel olarak seilen yetitirme ortam ve vejetasyon periyodu boyunca bitkinin ihtiya duyduu optimal artlarn salanmasnda bilgisayar sistemlerinden yararlanmlardr (Lent ve ark. 1989). Yapt bir almada sera sebzeciliinde en ok karlalan sorunlardan fide harc seimi, hastalklarn tehisi ve mcadele nerisi ile bitki besin elementi ihtiyac ve gbreleme programnn belirlenmesine yardmc olmak amacyla BASIC dilini kullanarak bir uzman sistem hazrlamtr (Tuncay, 1990). Kuzey Karolina Eyalet niversitesinde (North Carolina State UniversityUSA) doktora almas sresince, toprak frezesi ba kullanarak topran mekanik direncinin belirlenebilmesi amacyla bilgisayar destekli elektronik bir alglayc tasarlanmtr (Okursoy,1991). Otomasyon konusunda, mikroilemci kullanlarak da almalar yaplmtr. Cam seralara uygun mekanik bir doal havalandrma projesinde, mikroilemci tabanl scaklk kontrol yaplmtr (Okursoy, 1993). Seralarda enerji dengesi, bitki enerji dengesi, sera havalandrmasnn bilgisayar simlasyonu yardm ile analizi ve sera dizaynnn optimizasyonu, sera bitkilerinin geliiminin grnt ileme teknii kullanlarak belirlenmesi, seralarda

2. NCEK ALIMALAR

Mehmet CER

otomasyon bilgisayar kullanm ile otomatik veri alnmas ve lm cihazlarnn kontrol grnt ileme teknii uygulamalar konularnda almtr (Kara, 1997). Sleyman Demirel niversitesi, Fen Bilimleri Enstitsnde yksek lisans tezi olarak meyve fidan oaltlmasnda kullanlan kklendirme seralarnn otomasyonu tasarlanmtr. Yaplan bu almada, meyve fidan yetitirmek amal, kklendirme seralarnda kullanlmak zere otomasyon sistemi oluturulmutur. Otomasyonda internet ve internet haberleme teknikleri kullanlmtr. zerinde allan otomasyon sisteminin uygulanabilir olmas ve maliyetinin dk olmas amalanmtr. Kklendirme serasnn, scaklk ve bal nem gibi evresel faktrleri bilgisayar kontroll olarak dzenlenmitir (nan, 2002). A.A.Yelken tarafndan seralarda iklim kontrolne ynelik bir bilgisayar program gelitirilmitir. Programn hazrlanmasnda Visual Basic programlama dili kullanlm olup gelitirilen programda seralarda iklim kontrol iin, i ve d ortamdaki; scaklk, bal nem, CO2, gne nm ve hava hz gibi evresel etmenler llmektedir. Sera i ortamnda llen deerler bitkinin en uygun koullarda gelimesi iin programa girilen evresel etmen deerleriyle karlatrlr. Karlatrma sonucunda, kontrol edilmesi gereken iklim etmenine bal olarak stma, havalandrma, nemlendirme, aydnlatma gibi gerekli iklimlendirme ilemi gerekletirilmektedir (Yelken, 2003). Krkl A. ve alayan N., sera otomasyon sistemlerinin gelitirilmesine ynelik bir alma yaynlamtr. Bu almada seralarda kullanlan otomasyon sistemleri, iklim ve sulama-gbreleme sistemleri eklinde genel olarak incelenmi, lkemizdeki seralarn teknolojik seviyelerinin ve reticinin konfor seviyesinin ykseltilmesine katk salayabilecek laboratuar bazl bir iklim kontrol almasnn sonular verilmitir. Seralarda kullanlan otomasyon sistemleri genellikle ya geri beslemeli (feed-backward) veya ileri beslemeli (feed-forward) kontrol yntemlerini kapsayan uzman sistemlerini (expert systems) iermektedir. Geri beslemeli sistemlerde, deikenin alglanmasndan sonra kontrol sistemi devreye girerken, ileri beslemeli sistemlerde deikenin deiim eilimi nceden tahmin edilerek, kontrol sisteminin gerekli tepkiyi vermesi salanmaktadr. Scaklk, bal nem, k, rzgr, yamur gibi bitki yetitiriciliinde nemli parametrelerin kontrol ve tehlike

2. NCEK ALIMALAR

Mehmet CER

snrlarnda uyar amal geri beslemeli bir otomasyon sistemi laboratuar ortamnda bir sera maketi zerinde yaplm ve denenmitir. Sera maketi zerine bal scaklk, bal nem, rzgar, yamur ve k alglayclarndan alnan analog sinyaller bir ADC (analogue to digital convertor) kart kullanlarak saysal sinyallere dntrlmtr. Bu saysal sinyaller ayn zamanda bir gsterge vastasyla grntlenmitir. Serann kontrol daha nceden girilen ayar deerlerine gre otomatik olarak salanabildii gibi, bir bilgisayar tarafndan da izlenebilmektedir (Krkl ve alayan, 2005).

3. MATERYAL ve METOD

Mehmet CER

3. MATERYAL ve METOD Otomasyon sistemi, iklimsel byklkleri, uygun alglama sistemleri ile alglayarak, saysal veriye dntrr ve bilgisayara depolar. Kalibre edilmi verileri ayn zamanda internet zerinden eriime sunar. Bilgisayarn ve zerine kaytl yazlmn dier grevi ise, nceden belirtilmi artlar ile verileri karlatrarak gerekli kontrol sinyallerini oluturmak ve ilgili sistemin otomatik olarak devreye girmesini ya da devreden kmasn salamaktr. Aada byle bir sistemin ematik resmi grlmektedir (ekil 3.1).

ekil 3.1. Otomasyon sistemi dzenei

10

3. MATERYAL ve METOD

Mehmet CER

3.1. Alglayclar Sera ierisindeki fiziksel byklkleri alglamak ve bu fiziksel byklkleri kontrol edebilmek amacyla gerekli verileri salamak iin alglayclar kullanlr. Bu elemanlardan alnan analog ya da saysal bilgiler ise; otomasyonu salayan sisteme aktarlr. Alglayclar ile sera ierisindeki; scaklk, bal nem, basn, toprak nemi, yaprak nemi, rzgar hz llebilmektedir. Alglayclardan alnan verilerin ou analog veriler olduundan, verilerin saysal sistemler tarafndan kullanlabilir hale getirilmesi iin dntrcler kullanlr. Otomatik kontrol sistemlerinin almasndaki ilk aama; kontrole taban oluturacak temel verilerin elde edilebilmesidir. Otomasyon uygulamalarnda genel olarak; elektriksel byklkler ya dorudan llerek ya da fiziksel byklklerden dntrcler yardmyla dntrlerek elde edilebilmektedir. Alglayclar ile dntrcler, ou zaman iie bir yap oluturmakla beraber, ayr ayr yaplar iinde de bulunabilmektedir. Dntrcler, ilevsel zelliklerine gre genellikle transmitter, alglayc, detektr, cell, gaugar, toplayc ve prob olarak ifade edilebildii gibi, baz byklklerin nne "ler" ifadesi getirilerek; ivme ler, debi ler ve hz ler (takometre) gibi adlarla da bildirilebilmektedir. Alglayclar scaklk, basn, uzaklk, hz, ivme, sv ak, k younluu, gerilim, akm, diren, kuvvet ve tork gibi deerlerin llmesini salayacak elektriksel davran deiikliklerini gsteren elemanlardr. Yapsal zelliklerine de bal olarak; dntrclerin verdikleri sinyaller, analog, dijital veya kodlanm dijital sinyal karakterinde olabilmektedir. Sera otomasyon sistemi iin; scaklk, k ve bal nem gibi evresel faktrlerin alglanmas yannda, toprak nemi, rzgar hz, sera d scakl, sera i scakl, toprak scakl, k iddeti, toprak slakl ve yaprak slaklnn da llmesi gerekebilir. llmek istenilen deerler iin alglayc saysn arttrmak mmkndr.

11

3. MATERYAL ve METOD

Mehmet CER

3.1.1. Scaklk Alglayc Sera ii iklim kontrolnde en nemli etkenlerden biri, scaklk olduundan en sk llen byklk olmutur. Hemen hemen her kimyasal, biyolojik ilem ve reaksiyonlar scakla bal olduundan, scaklk deerinin kritik olduu durumlarda, uygun olmayan scaklklardan sonulanan nemli hasarlar meydana gelmektedir. Bu durumlar gz nne alnarak, metal ve yar iletkenlerin scaklk karsnda diren deitirmeleri prensibine dayanarak, termorezistif dntrcler imal edilmitir. Termistrler iki tiptir; birincisi negatif scaklk katsayl NTC termistr, dieri ise pozitif scaklk katsayl PTC termistrdr. NTCler olduka byk bir negatif scaklk katsaylarna sahip direnlerdir. Demir grubu oksitlerinden imal edilen NTClerin direnleri metallerin aksine artan scaklkla ok byk bir azalma gsterirler. Direncin scakla byle byk lde bal olmas sayesinde, bu elemanlardan scakln elektriksel olarak llmesinde yararlanlmaktadr (ekil 3.2). PTCler, scakln artmasyla byyen elektriksel bir direntirler. Diren scaklk karakteristiinin hzla ykselmesi, bu elemann scaklk lme eleman olarak kullanlmasna imkn salar. Bylece, bu elemanlar az bir zahmetle lme ve kontrol uygulamalar iin kullanlmaktadrlar.

ekil 3.2. NTC s alglayc 3.1.2. Ik Alglayc Seralar iin k gereksinimi bitkiye gre deiim gsterebildii gibi, bir bitkinin a olan gereksinimi de farkl zamanlarda yine farkl dzeylerde olabilmektedir. Bitkiler gelime dnemlerinde bol a, buna karlk dinlenme

12

3. MATERYAL ve METOD

Mehmet CER

dnemleri sresince daha az a gereksinim duyarlar. Sera ierisindeki k miktarn lmek, uygun ekilde ayarlamak ve veri taban dosyas olarak kaydetmek seralarda yetitirilen rnlere ait olan aratrmalarda ok faydal olacaktr. Bu sebeple sera ierisindeki k iddetini lmek iin; sera ierisine elektriksel karakteristii k ile deien foto direnler yerletirilir. Yaplan kk bir devre ile alglayc olarak bu direnler kullanlarak sera ierisindeki k ve buna bal olarak dalga boyu gibi veriler alglanmaktadr (ekil 3.3).

ekil 3.3. Foto diren (LDR) 3.1.3. Bal Nem Alglayc Bal nem oran, bitki yapraklar ve ortam havas arasndaki buhar basnc farkn etkilediinden, terleme ilemi iin nemli olmaktadr (Baetinelik ve ztrk, 1998). Sera ierisindeki bal nemi veya toprak nemini lmek iin nem alglayclar kullanlr. Havadaki nemi lmek iin basit bir kapasitif devre kullanlmaktadr. Bu devrenin alma mant, havadaki nem miktar ile birlikte, devrenin kapasitif deerinin deimesini salayan iki metal levha arasna havann nemini tutacak bir madde yerletirilmesidir. Bu deiim ADC devre ile saysal deerlere dntrlp, gerekli olan ilemler gerekletirilir. Toprak nemi iin ise; toprak ierisine belirli aralklarla daldrlan metal problarn kapasitif deiimi lmesi salanr (ekil 3.4).

13

3. MATERYAL ve METOD

Mehmet CER

ekil 3.4. SHS-A3 RoHS nem alglayc 3.2. Kontrol Sistemleri Bilgisayarn ve kendisine bal olan elektronik sistemin dk gerilim ile almas ve sera sisteminin yksek gerilim veya faza ihtiya duymas sebebiyle, bilgisayar sistemi ile sera sistemlerinin kontrol edilmesinde, yksek gerilim ya da akmda alabilen kontrol elemanlar gereklidir. Bu kontrol elemanlar sera sistemi ile bilgisayar sistemi arasnda gei eleman olarak grlr ki; bunlara src devre elemanlar denir. Kontrol sistemi, sera otomasyon sisteminin kas sistemini oluturduundan, gerekletirilen otomasyon sisteminin her serada almasn salamak amacyla; src elemanlarn tamamn kontrol edebilecek ekilde rlelerden oluan bir devre grubu tasarlanmtr. Bu rle grubu, srlmesi olas devre elemanlarnn (motor, fan ve valflarn) almasn salayacak ekilde tasarlanmtr. 3.2.1. Rle Rle, ierisinde bobin ve yumuak demir gbekten oluan elektromekanik bir paradr ve dk gerilim ile yk kontrol yapld durumlarda kullanlmaktadrlar. Bilgisayar ve elektronik sistem, standart olarak 5 volt ile 24 volt arasnda doru akm ile almakta, ancak kontrol yaplacak ou cihaz 220 volt alternatif akm ile altndan, otomasyon sistemi iinde rle ve benzeri elemanlarn kullanlmas

14

3. MATERYAL ve METOD

Mehmet CER

gereklidir. Kullanlacak olan rlelerin seiminde rlenin bobin akm ve gerilimi ile kontak akm ve gerilim deerleri gz nnde bulundurulmaldr (ekil 3.5).

ekil 3.5. 12220 volt rle 3.2.2. Kontaktr Rlelerin kontak akmnn, geriliminin ya da kontak adedinin yetersiz kald durumlarda, kullanlan kontaktrlerin alma prensipleri rleler ile ayndr. Kontaktrler zellikle 3 faz ayn anda ap-kapatma zelliine sahip olmalar ve kontak akmlarnn yksek olmas sebebiyle tercih edilirler. Tek faz ile alan sistemler, ok fazla akm ekiyorsa, ektii akm miktarna gre kontaktr seimi yaplmaldr (ekil 3.6).

ekil 3.6. fazl kontaktr

15

3. MATERYAL ve METOD

Mehmet CER

3.2.3. Valf Sera sulama sisteminde ve stma sisteminde svlarn aknn kontrol edilmesinde kullanlan valfler, 220 volt alternatif akm ve 24 volt doru ve alternatif akm ile alan modelleri olan elektromekanik paralardr. 3.3. Sera Sistemleri Bitkilerin ihtiyac olan maddelerin bitkilere verilmesi ve gerekli olan iklim ortamnn oluturulabilmesi iin; sera otomasyon sistemlerine ihtiya vardr. Elektrik enerjisi ile almas veya elektrik enerjisi ile kontrol edilmesi gereken sistem; scaklk, bal nem, k gibi parametrik deerleri bitkinin ihtiya duyduu ekilde ayarlar. 3.3.1. Sulama Sistemi Sera iindeki bitkilerin su ihtiyalarn karlamak amacyla kurulan sulama sistemi; bikinin su ihtiyac olup olmadn, alglayclardan gelen bilgiler dorultusunda tespit ederek; sulama ilemini otomatik olarak balatr veya sona erdirir. Otomatik kontroll sulama sistemlerinde veri kazanm nitesiyle topraktan, bitkiden veya evreden elde edilen bilgiler mikroilemcilerde ilenmekte ve yorumlanmaktadr. Mikroilemciden kan sulama kararna gre de sulama ilemi gerekletirilir. Sulamada mikroilemcilerle yksek kullanm etkinlii salayan alglayclar ve btnleik otomatik kontroll sulama uygulamalar

balatlmasyla, sulama ynnden bitki-su-toprak ls arasnda kararl bir denge oluturulmutur. Bylece, sulama kararlarnn alnmasna kaynak salayacak eitli deikenler, etkin biimde ve ksa srede alglanarak, sulamann otomatik olarak yaplmas salanr.

16

3. MATERYAL ve METOD

Mehmet CER

Sera sulama sistemi, sulama suyunun bitki kklerinden veya bitki zerinden dolatrlmak suretiyle oluturulur. Buna gre; sulama sistemi, damlama sulama ya da yamurlama sistemlerinin biri ya da bitki trne gre her ikisinden de oluabilir. Sulama suyunun otomatik olarak alp kapanabilmesi iin elektrik ile alan valf kullanlr. Sulama valfinin almas ile birlikte, basnl su sistemde belirtilen sre boyunca sulama ilemini gerekletirir. 3.3.2. Istma Sistemi Istma sistemi zellikle k aylarnda byk nem kazanmaktadr. Farkl trlerde olabilecek olan stma sistemlerinde, genellikle su stmal sistemler kullanlmaktadr. Seralarda kullanlan stc yzeyleri oluturan borular yetitirme masalarnn altna, toprak altna, sera tabanna, yan duvarlar boyunca ve tabana yakn, sera duvarlar boyunca da taban ve tavana yakn yerletirilirler (Titiz, 2004). Toprak scakl, toprak scaklk probu kullanlarak llr ve scaklk istenen deere ulat zaman stma sistemi devre d braklr. Istma sistemi, scak su tankna en direkt olarak balanr. Scaklk yeterli dzeye ulamayacak olursa, devreye elektrikli stc girerek, istenen scaklk seviyesine ulancaya kadar altrlr. Tm bu ilemler; otomasyon programndaki parametrik deerler erevesinde gerekletirilebilir. Tm sistemi dolaan scak su, scakln seraya ya da bitki kklerine aktardktan sonra; stc kazan ierisine tekrar geri dnmektedir. Istma sistemlerinde elektrikli stc dnda, kmr, doalgaz, gne enerjisi ve dier alternatif stma kaynaklarnn, programa tantlmas ile kullanmak mmkn olmaktadr. Istma sistemi yetitirilen bitkiye gre farkl ekillerde tasarlanabilir. Istma sisteminin devreye girebilmesi iin d scakln, i scakln ve toprak scaklnn belirtilen deer dna km olmas gerekmektedir.

17

3. MATERYAL ve METOD

Mehmet CER

3.3.3. Havalandrma Sistemi Sera ierisindeki scakln veya bal nemin istenen deerden yksek olmas durumunda, soutma sistemi devreye girmeden nce veya havalandrlmann serada yaplacak almalar iin gerekli grld hallerde, havalandrma kapaklarnn almas suretiyle ierideki scaklk veya bal nem miktarnn drlmesi veya gerek anlamda havalandrmann yaplmas salanm olur (Baetinelik ve ztrk, 1997). Havalandrma sistemi, her serada farkl ekillerde tasarlanabilir. Havalandrma yaplmas dnlen sera iin, havalandrma kapaklar mekanik bir sistem tarafndan alp-kapatlabilecek ekilde tasarlanmaldr. Bylece kapaklar ap kapatacak mekanik sisteme elektrikle veya hava ile alan bir kontrol sistemi ile etki edilebilecektir. Tasarlanan kart zerinde yer alan elektronik sistem tarafndan kontrol edilebilen elektrik motoru veya hidrolik bir sistem mekanik sistemi kontrol edecektir. Havalandrma kapaklar yzdelik deerliklerle alp-kapatlabilmektedir. Kapaklarn tam olarak ak veya kapal olma durumlarn kontrol eden snr anahtarlar konularak, havalandrma sistemi ama ya da kapatma annda sistemin snrlarn dna kmas veya mekanik zorlama yapmas engellenecektir. Kapaklarn, rzgr hznn yksek olduu durumlarda, sistem tarafndan otomatik olarak kapatlmas gerekeceinden, programda izin verilmi olmasna ramen, kapak kontrollerinin uzun sreli el ile kontrol eklinde tutulmas tavsiye edilmez (ekil 3.7).

ekil 3.7. Rzgarsz ve rzgarl havalarda pencere pozisyonlar (Hakgren ve Krkl, 2007)

18

3. MATERYAL ve METOD

Mehmet CER

3.3.4. Gbreleme Sistemi Sera ierisinde gbreleme ilemlerinin otomatik olarak yaplmas da mmkndr. Bu ilem iin uygulanacak yntemlerden birisi, bitkiye verilecek gbrenin ya da ilacn, eer bitkinin kkne ya da topraa verilmesi gerekiyor ise, homojen dalm salanarak damlack sulama sistemiyle birlikte bitkiye verilmesidir. Dier yol ise, eer gbre ya da ila bitkinin yapraklarna verilecek ise; yine homojen dalm salanarak fskiyelerle sulama sistemi ile bitkiye verilebilir. Her iki durumda da sistem, sulama sistemiyle birlikte dnlmeli ve homojenliin salanabilmesi iin gerekli hazrlama tanklar sisteme eklenmelidir. Burada kullanlacak malzemeler sulama sisteminde tkanmaya sebep olabilecek ise, bunun iinde az miktarda baz ac malzemelerle sistemdeki tkanmalarn engellenmesi salanmaldr. 3.3.5. Glgeleme Sistemi Seralardaki scakl dorudan etkileyen k miktar, zellikle scak yaz aylarnda, glgeleme sistemi ile kontrol altna alnabilir. Glgeleme sistemi, basit bir mekanik dzenek ve elektrik motorlar ile gerekletirilerek, seradaki snn soutma sistemi devreye girmeden nce azaltlmasn salamaktadr. Bu sistem, k miktar ve scaklk parametreleri kontrol edilerek, otomasyon sistemi tarafndan kontrol edilir. 3.3.6. Soutma Sistemi Sera iindeki scakln belirtilen deerlerden yksek olmas durumunda, soutma ilemini gerekletirecek olan sistemdir. Genel olarak suyun younlamas yntemiyle alan bu sistem, slak pad ve havalandrma fanndan oluur. Soutma sistemi devreye girmeden nce, d ortam scakl ve rzgr hz kontrol edilir. nce

19

3. MATERYAL ve METOD

Mehmet CER

havalandrma kapaklar alarak sera ierisi soutulmaya balanr. Eer yeterli soutma ilemi yaplamyorsa, soutma sistemi devreye girmelidir. 3.3.7. Alarm Sistemi Sera sistemlerinin tam olarak almamas durumunda, alarm sistemi devreye girmektedir. Alarm sistemi, sesli uyar vermek, program zerinden bilgi vermek veya belirtilecek farkl ilemleri de gerekletirebilmesi iin tasarlanmtr. Alarm sisteminin etkin bir ekilde almas, sera sistemlerinin tasarlanmasna ve sistemlerden bilgi alnmasna baldr. Bu durum, otomasyon sisteminin verimliliini arttrmaktadr. Salkl bir bilgi ak ile sera sistemi arzalarnn bulunmas ve giderilmesi daha kolay olur. Alarm sistemi sera ierisindeki gvenliin salanmas amacyla da kullanr. Bu sistem sayesinde, belirtilen saatler dnda sera ierisine girilmesi durumunda, sistem otomatik olarak devreye girerek, sesli uyar veya dier uyarma yntemleri etkin duruma getirilebilir. 3.4. Elektronik Kart ve PIC Program Sistem iin hazrlanan elektronik kartn temelde iki ilevi vardr. Birinci ilevi, alglayclardan elde edilen bilginin bilgisayara ulatrlmasdr. Burada bilgi ak saysal olduundan, eer alglayc analog ise bilgi saysala dntrlerek aktarlr. kinci ilevi ise; bilgisayardan gelen kontrol sinyallerine uygun olarak, k cihazlarnn alp-kapanmalar iin gerekli kontrol sinyallerini salamaktr. Elektronik kart birinci ilevi olan lme deerlerlerini bilgisayara gnderirken, ncelikle bu istein bilgisayardan gelmesini bekler. Ana programda kart ile elemanlar arasndaki balant ilikisi tantlrken, elemanlarn ne kadar sre aralklarla okunaca programda belirtilir. Buna gre de bilgisayar bir adresleme mant yardmyla (ka numaral kartn, ka numaral ucu) o anda lm deerini bilmek istedii alglaycnn bilgisini iletiim hattna verir. Sistemde birden fazla kart varsa, bu istek tm kartlara iletilir. Karttaki program, kodu zerek mesajn kendisi

20

3. MATERYAL ve METOD

Mehmet CER

ile ilgili olup olmadn anlar. Eer bilgi kendisi iin ise, ilgili portun zerindeki bilgiyi okur. Bu okuma esnasnda alglayc analog bile olsa, bilgi saysala dnm olur. Bu srada bilgisayar, gnderdii bilginin cevabn almak iin beklemektedir. Basit bir network eklinde tasarlanm olan iletiim hattna okunan bilgi verilir. Hattn kar tarafndaki bilgisayar da bu bilgiyi okuyarak istedii veriyi alm olur. Bu haberleme de cevap, belirlenen srede gelmezse bilgisayar tekrar ayn istei yineler ve 3 kez eriilemez durumu oluursa da mesajla hata bilgisini verir. Elektronik kart, ikinci ilevi olan kontrol sinyallerini bilgisayardan alp kontrol aletlerine aktarrken, ncelikle bu ynde bir bilginin bilgisayardan gelmesini bekler. Ana programda k elemanlarnn yapaca iler tasarlanrken, ama kapama ya da belirli alarda ak kalma artlar verilmitir. Bu yaplandrma da bilgisayar kartlardaki alglayclardan bilgiler aldktan sonra, bu artlar kontrol eder. Bu kontrol sonucunda pozisyonu deimesi gereken k eleman belirlenirse, bu elamanla ilgili ama ya da kapatma komut bilgisi iletiim hattna verilir. Bu bilginin yaps yine alglayclardaki adres mantna benzer (ka numaral kartn, ka numaral ucu, ON ya da OFF pozisyonu) ekildedir. Sistemde birden fazla kart varsa bile bu komut tm kartlara iletilir. Karttaki program kodu zerek, mesajn kendisi ile ilgili olup olmadn anlar. Eer, bilgi kendisi iin ise; gelen komutu istenilen port ucuna uygular. Bylece, ilgili k eleman alarak ya da kapatlarak zaman fonksiyonunun da yardmyla on/off ya da yzdelikli ama salanm olur. 3.4.1. Elektronik Kartta Kullanlan Entegreler 3.4.1.1. PIC16F873 Entegresi Elektronik kartn en nemli eleman, mikrodenetleyici olan PIC16F873 entegresidir. Kontrol ve kumandalar iin gerekli PIC yazlm yklenerek alglayc ve kumandalarn ynetimini gerekletirir.

21

3. MATERYAL ve METOD

Mehmet CER

ekil 3.8. PIC16F873 bacak balantlar izelge 3.1. PIC16F873 teknik zellikleri
Teknik zelliler alma Frekans RESET FLASH Hafza Kapasitesi (14-bit) RAM Hafza Kapasitesi (byte) EEPROM Hafza Kapasitesi (byte) Kesme adedi I/O Portlar Timer Darbe Genilii Modlasyonu (PWM) Seri letiim 10-bit Analog-Digital Dntrc Analog Karlatrc Komut Seti Paket tipi PIC16F873 iin deeri DC - 20 MHz POR, BOR (PWRT, OST) 4K 192 128 14 Ports A,B,C 3 2 MSSP, USART 5 giri kanal 2 35 komut 28-pin PDIP 28-pin SOIC 28-pin SSOP 28-pin QFN

PIC16F873 entegresinin bacak balantlar (ekil 3.8), teknik zellikleri (izelge 3.1), blok diyagram (ekil 3.9) ve bacak balant bilgileri (izelge 3.2) ayrntl olarak verilmitir.

22

3. MATERYAL ve METOD

Mehmet CER

ekil 3.9. PIC16F873 blok diyagram

23

3. MATERYAL ve METOD

Mehmet CER

izelge 3.2. PIC16F873 bacak balant bilgileri


Pin Ad OSC1/CLKIN OSC2/CLKOUT MCLR/VPP Pin Num. 9 10 1 I/O/P Tipi I O I/P Tampon Tipi ST/CMOS(3) ST Tarif Dahili osilatr kristal girii ve harici osilatr girii Dahili kristal osilatr girii ve osc1 deki clock sinyalinin oran ile k (komut peryodu k) Ana RESET ucu PORTA iki ynl GR/IKI portudur. RA0, ayrca analog input AN0 olarak kullanlabilir. RA1, ayrca analog input AN1 olarak kullanlabilir RA2, ayrca analog input AN2 olarak kullanlabilir. Extra olarak negatif analog gerilim referans girii olarak kullanlabilir. RA3, ayrca analog input AN3 olarak kullanlabilir. Extra olarak pozitif analog gerilim referans girii olarak kullanlabilir. RA4 Open Drain balantldr. Ayrca timer0 clock girii olarak kullanlabilir. RA5, ayrca analog input AN5 olarak kullanlabilir. RA5 ayn zamanda slave moda senkron iletiim seme ucudur. PORTB iki ynl GR/IKI portudur ayrca tm uclar dahili PULL-UP yapsndadr. RB0 ayn zamanda kesme ucu olarak kullanlabilir.

RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/VREF+ RA4/T0CKI RA5/SS/AN4

2 3 4 5 6 7

I/O I/O I/O I/O I/O I/O

TTL TTL TTL TTL ST TTL

RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1C KI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT VSS VDD

21 22 23 24 25 26 27 28

I/O I/O I/O I/O I/O I/O I/O I/O

TTL/ST(1) TTL TTL TTL TTL TTL TTL/ST(2) TTL/ST(2)

RB3 alak gerilim programlama ucu olarak kullanlabilir. Sinyal deiim kesmesi olarak kullanlabilir. Sinyal deiim kesmesi olarak kullanlabilir. Sinyal deiim kesmesi olarak kullanlabilir. Ayrca seri programalama clock ucudur. Sinyal deiim kesmesi olarak kullanlabilir. Ayrca seri programalama data ucudur. PORTC iki ynl GR/IKI portudur. RC0 ayn zamanda timer1 osilatr ucu olarak kullanlabilir. RC1 ayn zamanda timer1 osilatr giri ucu, capture2 giri ucu, PWM2 k ucu olarak kullanlabilir. RC2 ucu capture giri, karlatrc k, PWM1 k ucu olarak kullanlabilir. RC3 senkron seri iletiim clock ucu . RC4, SPI moda data giri ucu. RC5, SPI moda data k ucu. RC6 , seri asenkron haberlemede gnderme ucu RC7 , seri asenkron haberlemede alma ucu - Besleme balants + Besleme balants

11 12 13 14 15 16 17 18 8, 19 20

I/O I/O I/O I/O I/O I/O I/O I/O P P

ST ST ST ST ST ST ST ST

24

3. MATERYAL ve METOD

Mehmet CER

3.4.1.2. ki Girili AND Kaps Entegresi (4081) Sistemde kullanlan seri iletiim modeli bir ring a gibi almaktadr. AND kapsnn (ekil 3.10) buradaki grevi, kartlarn k ucundan farkl zamanlarda gelecek olan seri bilgilerin tek hat zerinden bilgisayara gnderilmesinin salanmasdr. Bu ilem iin AND kapsnn girilerinden bir uc 1 iken, dier uctan gelecek bilgininin aynen ka ulamas mant kullanlmtr (izelge 3.4). ki girili 4081 entegresinin alma gerilimleri izelge 3.3te verilmitir.

ekil 3.10. 4081 AND kaps bacak balants ve i yaps izelge 3.3. 4081 AND kaps alma gerilim deerleri alma gerilimi Maksimum 0 gerilimi 3V ile 15V arasnda 1.5V @ alma gerilimi 5V ise 2.7V @ alma gerilimi 9V ise 3.6V @ alma gerilimi 12V ise 4.0V @ alma gerilimi 15V ise 3.5V @ alma gerilimi 5V ise 6.3V @ alma gerilimi 9V ise 8.4V @ alma gerilimi 12V ise 11.0V @ alma gerilimi 15V ise

Minimum 1 gerilimi

izelge 3.4. 4081 AND kaps doruluk tablosu

25

3. MATERYAL ve METOD

Mehmet CER

3.4.1.3. Regle Entegresi (7805) Giriten gelen DC gerilimi elektronik kartn alma gerilimi olan DC 5Va evirmek iin kullanlmtr (ekil 3.11). 7805 entegresinin blok diyagram ekil 3.12de gsterilmektedir. Bu entegre regle entegresi olduundan, alma aralklar ve elektriksel karakteristiklerinin bilinmesi ayrca nem kazanmaktadr. izelge 3.5te elektriksel karakteristik tablosu ayrntl bir ekilde grlmektedir.

ekil 3.11. 7805 regle entegresi

ekil 3.12. 7805 regle entegresi blok diyagram

26

3. MATERYAL ve METOD

Mehmet CER

izelge 3.5. 7805 regle entegresi elektriksel karakteristik tablosu


Parametre artlar TJ =+25 oC k Gerilimi Bota Reglasyon Ykte Reglasyon Sukunet Akm Sukunet Akm Deiimi k Gerilim Grlts Parazit Bastrma Kesimde k Gerilimi k Direnci Ksa Devre Akm Tepe Akm 5.0mA Io 1.0A, PO 15W VI = 7V to 20V TJ=+25 oC TJ=+25 oC TJ =+25 oC IO = 5mA to 1.0A VI= 7V to 25V f = 10Hz to 100KHz, TA=+25 oC f = 120Hz VO = 8V to 18V IO = 1A, TJ =+25 oC f = 1KHz VI = 35V, TA =+25 oC TJ =+25 oC VO = 7V to 25V VI = 8V to 12V IO = 5.0mA to1.5A IO =250mA to 750mA Durum Min. 4.8 4.75 62 Typ. 5.0 5.0 4.0 1.6 9 4 5.0 0.03 0.3 42 73 2 15 230 2.2 Max 5.2 5.25 100 50 100 50 8.0 0.5 1.3 mV mA mA V/VO dB V m mA A V Birim

mV

3.4.1.4. max232 Seri letiim Entegresi Serann byklne bal olarak sistemde birden fazla elektronik kart kullanlmas mmkndr. Sera bykl gz nne alnarak, iletiim protokol olarak seilen seri iletiim elektronik kartta max232 entegresi (ekil 3.13) ile salanmtr. Bu entegre, seri 0-5 volt aralnda olan seri iletiim sinyallerini 12 volt, +12 volt ekline dntrerek bilginin daha uzaklara ve hatasz iletimini salar. Ayrca 0-5 volt olan pic16f873 seri iletiimini bilgisayardaki +12 volt, 12 volt sistemine dntrm olur. max232 entegresinin alma yaplrken mantksal yapsnn bilinmesi gerekmektedir. (ekil 3.14). almas ile ilgili en genel kullanm ekil 3.15te gsterilmitir.

27

3. MATERYAL ve METOD

Mehmet CER

ekil 3.13. max232 seri iletiim entegresi

ekil 3.14. max232 mantksal diyagram

ekil 3.15. max232 tipik alma devresi

28

3. MATERYAL ve METOD

Mehmet CER

3.5. Bilgisayar ve Otomasyon Program 3.5.1. Bilgisayar Sistemin kontrol ve karar vermesini salayacak en nemli blm bilgisayardr. Bilgisayar, sera sistemini tm gn boyunca takip edecek ve gerekli kararlar vererek, kontrol sistemlerinin devreye girmesi iin gerekli sinyalleri retecektir. Bilgisayarn 7/24 alaca dnlnde, donanmsal olarak bir kiisel bilgisayar yerine, sunucu zellikli bir bilgisayar seilmesi isabet olacaktr. Sunucular, 7/24 allaca varsaym zerine (hi kapanmayacak gibi) tasarlanm dayankl bilgisayarlardr. Seilecek sunucumuzun Windows iletim sistemi altrlabilecek herhangi bir sunucu olmas yeterli olacaktr. letim sisteminin Windows olarak belirlenmesi, kullanmnn kolay olmas ve gnmzde en yaygn ekilde kullanlan iletim sistemi olmasdr. Sunucu ile elektronik kart arasnda iletiim seri iletiim portu ile yapldndan, sunucu zerinde seri iletiim portunun (COM) olmas tercih nedeni olabilir. Seri iletiim portu olmayan bir sunucuda ise ise mutlaka USB portu bulunmaldr. USB portunu COM porta evirebilen dntrcler ile kullanabileceimiz seri iletiim portu elde etmek mmkn olacaktr. 3.5.2. Veri Taban Veri taban; sistemin ierisinde oluan tm hareketlerin depoland gerektiinde tekrar arlarak, bu veriler zerinde inceleme olana salayan disk alanlardr. Gelitirdiimiz otomasyon sisteminde veri taban olarak MySQL kullanlmtr. MySQL veri taban cretsiz bir veri taban olmasnn yannda, bir veri tabanndan beklenilen temel ilemleri yeri getirmedeki hz ile de n plana kmaktadr. Ayrca, uygulamann web ile balantl olmas da MySQL veri taban kullanlmasnda etkili olmutur.

29

3. MATERYAL ve METOD

Mehmet CER

3.5.3. Programlama Dili Otomasyon programnn yazmnda grsel bir programlama dili olan Delphi kullanlmtr. Dilin seiminde; iletiim portlarnda sorunsuz alan aralarnn bulunmas, grafik ekrandaki yazm kolayl ve veri tabanyla sorunsuz almas gz nnde bulundurulmutur. 3.5.4. Otomasyon Program Otomasyonun beyni olan yazlm bilgisayar ile elektronik kart arasndaki kpr olarak nitelendirebiliriz. Yazlm, tanm, kontrol ve kumanda olmak zere 3 blmden olumaktadr. Tanmlamalar Bu blmde otomasyon ierisinde uygulanacak olan giri ve k ilemleri ile bu ilemlerin elektronik kartla olan balantlar belirlenir. rnein scaklk alglama ilemi tanmlanm ise, bu scaklk alglama ilemini hangi eleman ile llecei, bu elemandan gelen verilerin hangi scaklk deerine e deer olaca gibi belirlemelerden sonra, bu elemann ka numaral elektronik kartn, hangi portuna bal olduunun yazlma tantlmas ilemleri bu blmde yaplmaktadr. Bu tantm ilemleri doru yaplmadnda yazlm, gelen deerleri doru ekilde deerlendiremeyecektir. lem ve elemanlarn yazlma tantlma ilemlerinden sonra, yaplmas gereken son tanmlar otomatik kontroln nasl olmas ile ilgili artlarn belirlenmesidir. Bu artlar, serada yetitirilmek istenilen rne gre deiim gstereceinden, rnler belirlenirken mutlaka ziraat mhendisinden destek alnmal ve onun gzetiminde yaplmaldr. Kontrol lemler, ilem elemanlar ve artlarn oluturulmasyla otomasyon yazlm almaya balayacaktr. Yazlm, tm tanml alglama elemanlarndan periyodik olarak bilgi istemekte, alglayclardan gelen deerleri bal bulunduu veri tabanna kayt etmektedir.

30

3. MATERYAL ve METOD

Mehmet CER

Kayt edilen bu veriler ile serann olmas gereken deerleri (oluturulmu artlara gre) kontrol sistemi her defasnda karlatrr. Karlatrma sonucunu kumanda sistemine aktarr. Kumanda Kontrol ileminde varlan sonular neticesinde, almas ya da kapanmas gereken kumanda elemanlar, bu blm vastasyla harekete geirilir. Bu blm sayesinde, tm kumanda elemanlar ak ya da kapal kalmalar gerektii kadar kalrlar. 3.5.6. Otomasyon Programnn Ak Program, alta halen var olan veri tabanndaki durumu grntler. Burada ilk kez kullanlyor ise, tm alanlar bo olacaktr. Birinci yaplmas gereken i, seraya yerletirilen kartlar ve bu kartlara bal elemanlarn programa tantlmasdr. Bu tantm yaplrken; alglayclar iin okuma zaman aralklar, lm elemannn tipi seilmeli ya da girilmelidir. Daha nce hi kullanlmam bir lm eleman kullanlyor ise, bu eleman iin lm-deer karl deerlerinin (bir tr kalibrasyon) girilmesi de gerekir. Bu tanmlamalarda hem giri hem de k elemanlar tantlr. Eleman tantmnn ardndan sera kontrol artlarnn sisteme girilmesi ilemi yaplr. Programn asl ilevi buradadr. Buras her trl kontrol artn girmeye ynelik olacak ekilde ve olduka esnek tanmlanmtr. Buradaki tanmlamalar rnein; scaklk 25 oCnin zerinde ise birinci havalandrma penceresini a gibi olacaktr. Esnek yaps sebebiyle bitki trne ve her trl evre artlarna gre art oluturmaya izin verir. Kumanda artlarnn oluturulmasnn ardndan, program alma aamalar iler ve srasyla alglayclardan bilgi okuma, okunan bilgileri istenilen birimlere dntrme, elde edilen verileri otomasyon artlar ile karlatrma, karlatrma sonucunda k elemanlarnn nceki durumlarn deitirecek bir sonu olup olmadnn tespiti ve son olarak konumu deiecek k elemanna gerekli kontrol sinyalinin gnderilmesi dngsn altrr. Ayn zamanda sistem, elde ettii veriler

31

3. MATERYAL ve METOD

Mehmet CER

ile kontrol klarn bilgi ekran zerinden verir. Bu bilgi ekran ayrca yazlan web yazlm sayesinde internet zerinden izlenebilir. Dier taraftan program; el ile kontroln bilgisayar zerinden yaplmasna da imkn verir. Program zerinde elle kontrol seenei seilerek ve istenilen k cihazna direk bilgi gnderilerek, ama-kapama ilemleri yaplabilir. Bu sayede de serann ierisine girmeksizin yaplmas gereken ilemler varsa; bu ilemlerin bilgisayar zerinden yaplmas salanm olur.

32

4. BULGULAR ve TARTIMA

Mehmet CER

4. BULGULAR ve TARTIMA Bir sera ierisinde yaplabilecek otomatik kontroller iin tasarlanacak sistemde, iletiimin nasl yaplaca, hangi fiziksel byklklerin llebilecei ve bunlara karlk hangi cihazlarn, nasl kontrol edilebilecei konularnda allmtr. Bu alma neticesinde, mesafe ve fiziksel alann olabilecek iklim durumlar da gz nne alndnda, seri iletiimle haberleen bir sistem tasarlanmasna karar verilmitir. Sistemin ve merkezinde hemde bir bilgisayar konularak kolay hem esnek programlanabilmesi internet balantsnn yaplabilmesi

zelliklerinden faydalanlmtr. A yapsnda tasarlanan ve eklenebilir zellikli olan sistemin zerinde, programlanabilen cihazlar kullanlarak, sistemin esnek ve modler olmas program ve elektronik kart yardmyla salanmtr. 4.1. Elektronik Kartn Tasarm Ortam ierisindeki deerlerin bilgisayara aktarlmas ve bilgisayardan gelen isteklerin de kumanda sistemlerine aktarlmasn iin hazrlanan elektronik kartn emas (ekil 4.1) incelendiinde; temelde 5 blmden olutuu grlecektir. Ana ksm pic16f873 mikrodenetleyici entegresinin olduu ksmdr ki; gerekli yazlm buraya kaydedilmektedir. kinci ksm, ledlerden oluan ve sistemde nerenin aktif olduunun grlmesi iin tasarlanm bir ksmdr. nc ksm, basit bir besleme devresidir. Burada gerekli olan 5 voltun retilmesi salanmaktadr. Drdnc ksm, max232 entegresi ile oluturulmu seri iletiim ksmdr. Sonuncu ksm ise, rlelerden oluan k elemanlarn kontrol ksmdr. Sistemin asl ksm pic16f873 ierisindeki assembler ile yazlm programdr. Bu programda aada verilmi olup, blm balarnda ya da aklayc olaca dnlen blmlerde aklama satrlar eklenmitir.

33

4. BULGULAR ve TARTIMA

Mehmet CER

J3
SIL-100-02

J10
SIL-100-02

J11
SIL-100-02

J12
SIL-100-02

J13
SIL-100-02

J14
SIL-100-02

J15
SIL-100-02

J16
SIL-100-02

J17
SIL-100-02

J18
SIL-100-02

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

RL1
OMIH-SH-112D

RL2
OMIH-SH-112D

RL3
OMIH-SH-112D

RL4
OMIH-SH-112D

RL5
OMIH-SH-112D

RL6
OMIH-SH-112D

RL7
OMIH-SH-112D

RL8
OMIH-SH-112D

RL9
OMIH-SH-112D

RL10
OMIH-SH-112D

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

VCC

D9
1N4148

D11
1N4148

D13
1N4148

D15
1N4148

D17
1N4148

D19
1N4148

D21
1N4148

D23
1N4148

D25
1N4148

D27
1N4148

Q1
BD139

Q2
BD139

Q3
BD139

Q4
BD139

Q5
BD139

Q6
BD139

Q7
BD139

Q8
BD139

Q9
BD139

D10
1N4001

D12
1N4001

D14
1N4001

D16
1N4001

D18
1N4001

D20
1N4001

D22
1N4001

D24
1N4001

D26
1N4001

1 2

Q10
BD139

D28
1N4001

R6
470

R8
470

R18
470

R19
470

R20
470

R21
470

R22
470

R23
470

R24
470

R25
470

D29
LED

R26
330 VDD

D30
LED

R27
330

R29
10k

U4:A
1 3 2 4081

D4
LED

R13
330

D31
LED

D3
LED

R12
330

C5 R2
330

D2
LED

R11
330

R28
10k

D1
LED

R10
330

13 KART2 TX
C1+ 11 12 10 9 T1IN R1OUT T2IN R2OUT C1T1OUT R1IN T2OUT R2IN VS+ VSC2+ 4 C214 13 7 8 2 6 1 2 7 pc PC TX ORTAK rx 1 2

VDD

1uF

U3

C3
100nF 3

D5
LED

R14
330

U2

LED

330

VDD

D6

R15 R16
330

1uF

SIL-100-02

VO

C8

GND MAX232

D7
LED

C6
1uF

D8
LED

R17
330 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

VI

C7

1uF

C4
VCC

7805

100uF RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD

U1
PIC16F873

R3
10k VDD

R5
10k

R7
10k

R9
10k

R1
10k

BR1

OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV

VSS

VDD 2 1 2 1 2 1 2 1 2 1 2W005G

J4
SIL-100-02

J5
SIL-100-02

J6
SIL-100-02

J7
SIL-100-02

J1
SIL-100-02 2 1 2 1 2 1

9 10 1

C2
33pF

X1 C1
33pF CRYSTAL 4mhz

2 3 4 5 6 7

VCC1
SIL-100-02

VCC2 J2
SIL-100-02 SIL-100-02

R4
10k VDD

PIC16F873 LE SERA KONTROL KARTI

ekil 4.1. Elektronik kart emas Kartn yapmnda ncelikle; devrenin emasnn bakr plaket zerine yerletirilebilmesi iin, bask devresi tasarlanmtr (ekil 4.2). Bask devresi tasarlanan kartn stten grnen montajsz hali ekil 4.3te verilmitir. Tasarm t metoduyla plakete aktarlmtr. Tuz ruhu ve perhidrol karmndan oluan asit yardmyla, fazla bakr kartlarak bask devre elde edilmitir. Elektronik kartn montaj edilmi nrn ekil 4.3te grlmektedir.

34

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.2. Elektronik kart bask devre grn

ekil 4.3. Elektronik kart montajsz grn

35

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.4. Elektronik kart bitmi nrn 4.2. Otomasyon Programnn Kullanm Bu blmde, kapal devre sera otomasyon sisteminin kontrol ve ayarlamalarnn yapld programn kullanm anlatlmaktadr. Program altrldktan sonra ilk al ekran ekil 4.5de verilmitir. 4.2.1. Al Ekran (Ana Ekran) Al ekrannn en stnde programn menleri bulunmaktadr. Menlerin altnda ise, bu menlere ait ksa yol tular yer almaktadr. Al ekrannn ieriinde lme elemanlarna ait baz bilgiler grlebilmektedir. Bunlar; lme ileminin ad, en dk, en yksek ve ortalama lme deerleri ve lme ileminin en son yapld zaman bilgisi bulunmaktadr.

36

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.5. Al ekran Al ekrannn dier bir ierii de k elemanlarnn durum bilgileridir. Burada da ilgili k elemanlarnn hangi durumda olduu ve bu duruma ne zaman getirildii bilgisi grlebilmektedir. Al ekran ieriinin sa tarafnda sistemin alma durumu, sistemin tarih ve saati, daha kolay anlalabilmesi iin de rzgr yn ve iddeti ekstra olarak gsterilmektedir. 4.2.2. letiim Portu Tanmlama Ekran Otomasyon sisteminde kullanlan elektronik kartlar ile bilgisayar arasndaki haberlemede seri iletiim portu (COM) kullanlmtr. Varsaylan ayarlarn dnda bir ayarlama yaplacaksa Tanmlar mensnden Port Tanmla seenei (ekil 4.6) seilmelidir.

37

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.6. Seri iletiim portu tanmlama Seri iletiim portunun varsaylan ayarlar ekil 4.7de grlmektedir. Bu ayarlar sistemin normalde almas gereken ayarlardr. Ancak bilgisayarlardaki port durumlarna gre deikenlik gsterebilir.

ekil 4.7. Seri iletiim portunun varsaylan ayarlar

38

4. BULGULAR ve TARTIMA

Mehmet CER

4.2.3. lem Tanmlama Ekran Sistemde var olmas istenen lme ilemlerinin tanmlanabilmesi iin al ekranndaki ksa yol tularndan lem (ekil 4.8) ya da Tanmlar mensnden lem Tanmla (ekil 4.6) seenei kullanlabilir.

ekil 4.8. lem tanmlama lem tanmlama ekrannda, tm tanmlama ekranlarnda olduu gibi, Yeni, Dzelt, Sil butonlarnn yan sra sadece giri elemanlarna ait olarak .Eleman (lme Elaman Tanmlama) butonu da bulunur (ekil 4.9).

ekil 4.9. lem tanmlama ekran

39

4. BULGULAR ve TARTIMA

Mehmet CER

4.2.4. Giri-k lemi Ekleme/Dzeltme Ekran Yeni bir ilem tanmlarken (ekil 4.10) ilem ad, giri (In) ilemi mi, k (Out) ilemi mi olaca, k ilemi ise ne tr bir k ilemi olaca, giri ilemi ise llen deerin birimi ve kontrol aralklar; dakika, gn ya da saat olarak belirlenmelidir. Bir ilem tanmlandktan sonra; sistem ierisinde kullanlmak istenmedii ya da ihtiya kalmad durumlarda silmek yerine pasif yaplabilmesi iin aktifliinin de belirlenmesi gerekmektedir. Kaydet butonuyla yaplan deiiklik ya da tanmlar hafzada saklanr. Vazge butonu da yaplan ilemi iptal ederek bir nceki ekrana dner.

ekil 4.10. lem ekleme/dzeltme ekran Aada bir giri ileminin tanmlanmasna rnek verilmitir. (ekil 4.11). Burada ek olarak, lme birimi belirlenirken yardmc olmas asndan, gerektiinde kullanlmak zere karakter elem tablosu da birim alannn sana yerletirilmitir. Bu butona basldnda ekil 4.12de grlen karakter elem tablosu alr. Buradan istenilen karakter seilerek birim alannda kullanlabilir. ekil 4.13da da bir k ilemi tanmlanmasna ait rnek grlmektedir.

40

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.11. Giri ilemi ekleme/dzeltme ekran

ekil 4.12. Karakter elem tablosu

ekil 4.13. k ilemi ekleme/dzeltme ekran

41

4. BULGULAR ve TARTIMA

Mehmet CER

4.2.4.1. lme Eleman Tanmlama Ekran Bir giri ileminin lmlerde kullanlabilmesi iin; bu giri ilemine ait lme eleman ya da elemanlarnn belirlemesi gerekir. lem tanmlama ekrannda ilgili giri ilemi seilip .Eleman (lme Eleman) butonuna (ekil 4.14) basldnda, seili giri ilemi iin kullanlabilecek lme elemanlar tanmlama ekran gelir (ekil 4.15).

ekil 4.14. lme eleman tanmlama Burada da Yeni, Dzelt, Sil butonlarna ek olarak ilgili elemann kalibrasyon tablosunun oluturulabilecei lm Karl butonu bulunmaktadr.

ekil 4.15. lme eleman tanmlama ekran

42

4. BULGULAR ve TARTIMA

Mehmet CER

lme eleman eklenirken ya da dzenlenirken eleman tantc bir isim, eleman ile ilgili aklamalar ve de elemann resmi istenildiinde sisteme kayt edilebilmektedir (ekil 4.16).

ekil 4.16. lme eleman ekleme/dzeltme ekran 4.2.4.2. lme Eleman Karlk Tablosu Ekran lme eleman eklendikten sonra yaplacak i; lme eleman ile ilgili kalibrasyon tablosunun oluturulmasdr. Kalibrasyon tablosu oluturulurken, lme eleman tanmlama ekrannda bulunan lm Karl butonu kullanlarak (ekil 4.17) karlk tanmlama ekranna geilir.

ekil 4.17. lm karlk tanmlama ekranna giri

43

4. BULGULAR ve TARTIMA

Mehmet CER

Bu ekranda seilmi lme elemannn ad, resmi ve elemana yaplm olan aklama otomatik olarak gelir. Burada bu elemann alabilecei her bir deer iin, kalibrasyon karlklar girilir (ekil 4.18). ekil 4.19de karlklarn eklenip dzenlenmesi grlmektedir.

ekil 4.18. lme eleman karlk tanmlama ekran

ekil 4.19. lme eleman karlk ekleme/dzeltme ekran 4.2.5. Kart-Eleman Tanmlama Ekran lem tanmlamalar yapldktan sonraki aama, her bir elemann ka numaral kart zerinde takl olduunun sisteme tantlmasdr. Bunun iin al ekrannda bulunan Kart-Eleman butonu (ekil 4.20) seilmeli ya da Tanmlar mensnden Kart-Eleman likisi seenei (ekil 4.6) seilmelidir.

44

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.20. Kart-Eleman tanmlama ekranna giri Bu ekranda her bir elemann ka numaral kartn ka numaral portuna ilikilendirilecei belirlenir. Kartn zerinde 4 adet analog giri (1..4 portlar) 1 adet saysal giri (5 nolu port) bulunduundan, analog girilere istenilen analog elemanlar ilikilendirilebilir. Tek saysal giri ise, rzgr hz lm iin ayrlm durumdadr. Kart zerinde 10 adet de analog k tasarlanmtr (6..15 portlar).

ekil 4.21. Kart-Eleman ekleme/dzeltme ekran

45

4. BULGULAR ve TARTIMA

Mehmet CER

rnek olarak; bir k eleman seilmi olsun. Bu k eleman da ON/OFF tipi bir k kontrol eleman olsun. Bununla ilgili olarak ayarlarnn nasl yaplaca ekil 4.22de gsterilmitir.

ekil 4.22. ON/OFF tipi k eleman kart ilikisi Eer kademeli bir k eleman seilmi ise, bu eleman iin gerekli olan kart ve port tanm ile bu elemann maksimum kapanmas ya da almas iin gerekli sre saniye cinsinden belirtilmelidir (ekil 4.23).

ekil 4.23. Kademeli tip k eleman kart ilikisi Eer ilem bir giri ilemi ise; kart ve port tanmlarna ek olarak girite kullanlan lme elemannn da belirlenmesi gerekmektedir (ekil 4.24). lme

46

4. BULGULAR ve TARTIMA

Mehmet CER

eleman seildiinde seilen elemana ait aklamalar ve elemann resmi otomatik olarak gelmektedir.

ekil 4.24. Giri eleman kart ilikisi 4.2.6. Kontrol lemleri Eleman tanmlamalarndan sonraki aama ise; serann ve bu sera ierisindeki ortama gre kontrol elemanlarnn koordinasyonunun belirlenmesidir. Bunun iin al ekrannda Kontrol mens (ekil 4.25) kullanlr. Kumanda elemanlarn sistemimizde; otomatik ve elle olmak zere iki ekilde kontrol etmek mmkndr. Eer, kumanda edilmek istenilen eleman bilgisayar tarafndan alnan ortam artlarna gre kontrol edilsin isteniliyorsa, al ekrannda bulunan Otomatik K. (Otomatik Kontrol) butonu (ekil 4.26) kullanlmal ya da Kontrol mensnden Otomatik (ekil 4.25) seenei seilmelidir. Kumanda ilemi elle kontrol edilmek isteniyorsa, al ekrannda bulunan Elle K. (Elle Kontrol) butonu (ekil 4.28) kullanlmal ya da Kontrol mensnden Elle (ekil 4.25) seenei seilmelidir.

47

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.25. k kontrol ilemleri

ekil 4.26. Otomatik kontrol ilemine giri

48

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.27. Elle kontrol ilemine giri 4.2.6.1. Otomatik Kontrol Ekran Otomatik k kontrol ilemleri ekrannn ieriinde, tm aktif kurallarn bir listesi grlr. Ayrca, tm tanmlama ekranlarmzda olduu gibi, otomatik kontrol ekrannda da Yeni, Dzelt, Sil butonlar bulunmaktadr. Ekleme ve dzeltme ilemlerinin yaplabilmesi iin, Listelenen k lemi Kural olarak, belirtilmi listeden ilgili k ilemi seilmelidir (ekil 4.28).

49

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.28. Otomatik k kontrol ilemleri

ekil 4.29. Kural ekleme/dzeltme ekran Kural ekleme/dzeltme ekrannda, eklenecek kuraln tanm ile lme ileminin (ekil 4.30) deerinin herhangi bir arta (ekil 4.31) bal olup olmayaca belirlenebilir. Bu ilem ve artlar, 1 ile 5 tane ayn ilem ya da ayr ilem olmak zere, duruma gre (rnein, scaklk lm 10 C ile 20 C arasnda ve hava bal nemi %50 RH ise gibi.) bir kural yazlabilmektedir. Bunun iin bir art belirlendikten sonra, eer devamna bir art daha yazlmak isteniliyorsa, o artn altnda bulunan Ve iaret kutusu iaretlenmelidir. aretlenen her Ve kutusu ile altndaki art

50

4. BULGULAR ve TARTIMA

Mehmet CER

yazma kutular aktif hale gelecektir (ekil 4.32). Ayrca bu ekranda, k elemanna yaptrlmak istenilen hareket ile oluturulmu bu kuraln uygulanp uygulanmayaca belirlenebilmektedir. ekil 4.33de ON/OFF tipi k ilemine ait seilebilecek ve ekil 4.34de seilmi hareket grlmektedir. Ayn ekilde ekil 4.35de kademeli tip k elemanna ait seilebilecek ve ekil 4.36da seilmi hareket grlmektedir.

ekil 4.30. Kural ekleme/dzeltme ekrannda lm ilemi seimi

ekil 4.31. Kural ekleme/dzeltme ekrannda art seimi

51

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.32. Kural ekleme/dzeltme birden fazla kstas belirleme

ekil 4.33. Kural ekleme/dzeltme ON/OFF tipi ilem hareket seenekleri

ekil 4.34. Kural ekleme/dzeltme ON/OFF tipi ilem seilmi hareket

52

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.35. Kural ekleme/dzeltme kademeli ilem tipi hareket seenekleri

ekil 4.36. Kural ekleme/dzeltme kademeli ilem tipi seilmi hareket 4.2.6.2. Elle Kontrol Ekran Elle k kontrol ilemleri ekrannn ieriinde, k ileminin seilebilecei seim listesi ile yaplmas istenilen hareketin seilebilecei seim listesi bulunmaktadr (ekil 4.37). Bu seimler yapldktan sonra, istenilen hareketin yaplabilmesi iin; Uygula butonu kullanlmaldr. Seilen ilem ve hareket uygulandktan sonra Oto Kontrol Aktif butonu pasif durumdan aktif duruma gelir.

53

4. BULGULAR ve TARTIMA

Mehmet CER

(lemin yeniden otomatik kontrole geirilebilmesi iin) lgili k ileminin kontrol yeniden otomatik olarak yaptrlmak istenildiinde Oto Kontrol Aktif butonu kullanlmaldr. Bu buton kullanlmad takdirde, ilgili k ilemi hibir ekilde otomatik olarak kontrol ettirilemeyecektir. Herhangi bir k ilemi seildiinde, yaplacak hareket listesi ilemin ON/OFF (ekil 4.38) veya kademeli tip (ekil 4.40) k ilemi olmasna gre deiecektir. (ekil 4.39. ve 4.41). Ayrca k ilemi seildiinde ieriin en altnda seilmi ilemin durumu ve bu duruma ne ekilde (Otomatik, elle) geldii bilgisi grlecektir.

ekil 4.37. Elle kontrol ekran

ekil 4.38. ON/OFF tipi k ilemi seilmesi

54

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.39. ON/OFF tipi k ilemi hareket seenekleri

ekil 4.40. Kademeli tip k ilemi seilmesi

ekil 4.41. Kademeli tip k ilemi hareket seenekleri 4.2.7. Grafik zleme Ekran Sistemdeki iklimsel artlarn zamana gre deiimlerinin grafiksel olarak izlenebilecei ekrana giri yapabilmek iin; al ekrannda bulunan Grafik butonu (ekil 4.42) ya da Ekstralar mensnden Grafik seenei seilmelidir.

55

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.42. Grafik izleme ekranna giri Grafik izleme ekranna giri yapldktan sonra, karmza grafik izleme kriterlerinizi belirleyebileceimiz ekran gelmektedir (ekil 4.43).

ekil 4.43. Grafik kriterleri belirleme ekran Grafik kritelerinde; ilk nce incelenecek giri ilemi seilir (ekil 4.44). Daha sonra ilemin incelenecei tarih ve/veya saat (ekil 4.45) aral belirlenir. Grafiin izdirilebilmesi iin Gster butonuna (ekil 4.46) baslr.

56

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.44. Grafik kriterleri ilem seimi

ekil 4.45. Grafik kriterleri balang ve biti tarihi belirleme

ekil 4.46. Grafik izmeye balama stenilen kriterlere gre belirlenmi grafik incelenmek zere ekrana gelir (ekil 4.47).

57

4. BULGULAR ve TARTIMA

Mehmet CER

ekil 4.47. ncelenecek grafiksel gsterim 4.2.8. Program Kapatma ve Hakkmzda Ekran Program kapatlrken karmza her defasnda programn kapatlp

kapatlmayacana dair bir sorgu ekran gelir (ekil 4.48). Burada programn yazar ve iletiim bilgisi de yer almaktadr. Eer program kapatlmak isteniyorsa, Kapat butonu, programn almasna devam edilmek isteniyorsa Devam Et butonu kullanlmaldr.

ekil 4.48. Kapatma onay ve program bilgisi ekran 4.3. nternet Bilgi sistemi Otomasyon program, alglayclardan gelen bilgiler ile kumanda sistemlerini harekete geirir. Otomasyon program zerinden yaplan tm ilemler anlk olarak veri tabannda saklanr. Veri tabannda saklanan bu veriler; ayn anda internette

58

4. BULGULAR ve TARTIMA

Mehmet CER

yaynlamak zere internet bilgi sistemine aktarlr. nternet bilgi sistemine belirlenecek bir web adresi ya da kontrol bilgisayarnn IP adresini yazarak ulamak mmkndr. Sisteme ulaan kullanclarn bilgilere eriebilmesi iin, kullanc ad ve ifrelerinin olmas gereklidir. nternet bilgi sistemine her internet kullancs eriim yapabilir. En son llm olan iklim verileri ile kumanda sistemlerinin en son durumlar grlebilir (ekil 4.49).

ekil 4.49. nternet bilgi sistem

59

5. SONULAR ve NERLER

Mehmet CER

5. SONULAR ve NERLER Otomasyon sistemlerinin ok yksek maliyetli olmas ve kullanmndaki teknik eleman ihtiyac, tarmsal alanda otomasyon kullanlmas nndeki en byk engelleri oluturmaktadr. Gelitirilen otomasyon sistemi, hem dk maliyeti, hem de kullanc dostu yazlm ile tarm alannda ekonomik kurulum yaplarak uzun vadede yaplabilecek yenilemelere uyumlu olabilecektir. Kullanc dostu yazlm sayesinde de bran dnda, herhangi bir teknik elemana ihtiya duyulmamas salanmtr. rn iin gerekli iklim artlarnn verileri tantldnda, sistem rne uygun otomasyon ilemlerini gerekletirecektir. Yaplan almalar gstermitir ki; seralar iin sistem tasarlamak, ncelikle seraclk hakknda yeterli bilgi sahibi olmak gerekliliini ortaya koymutur. Bu aamada halen var olan sistemlerin incelenmesi de sistemin nelerden olumas gerektii ve gelecekte sisteme nelerin eklenebilecei konularnda fikir vermesi asndan nemlidir. Ancak; bu konuda baz kurulularn kurulu sistemlerini aratrmaclara incelettirmek istemedikleri gerei ile kar karya kalnmtr. Gelitirilen elektronik kartn tasarm aamasnda tek bana elektronik devre elemanlarnn ideal ve tm sistemlere uyumlu olamayaca anlalmtr. Tm sistemlerle uyumlu olabilmesi iin, kartn gelen verileri, doru bir ekilde ynlendirmesi, beklemesi ve zamannda ilemleri yerine getirmesi gerekmektedir. Tasarm aamasnda sistemin ucuz, ok bulunan, arza halinde tamiri mmkn ve kolay olacak ekilde tasarlanmasna allm; ancak burada programlanabilen para kullanlmadnda sistemin karmak ve skntl olaca grlmtr. Bu sebeple tasarlanan kartta bir mikrodenetleyici kullanlarak, sistemin kalan ksmnn hem efektif hem de ok bulunan ve ucuz malzemelerden olumas salanmtr. Sistem tasarmndaki en byk sknt ise; alglayclarn aldklar bilgileri istenilen bykle dntrrken yaanlan kalibrasyon problemleridir. Bu problemin temeli ise, elektronik malzeme satclarnn sattklar paralarda ucuzluk konusunu n plana karmalar sebebiyle, standart d ya da katalogu mevcut

60

5. SONULAR ve NERLER

Mehmet CER

olmayan malzeme satmalardr. Katalog deerleri olan malzemeler iin bu ilem sknt olmaktan kacaktr. Otomasyon sisteminin bilgi deposu olarak kullanlabilecek veri taban ile ilikisi, sera ile ilgili tm bilgilerin toplanabileceini gstermitir. yi tasarlanm bir veri taban ile gemie ynelik almalar yaplarak, gelecekte yaplmas gerekenler ve alnmas gereken kararlar, ok daha kolaylkla verilebilecektir. Veri tabannda biriken bilgiler ile ok daha farkl uygulamalar tasarlayabilmek mmkn olduundan, bu uygulamalarn ne ekilde olabilecei seralarn imknlar lsnde sistemin hayata geirilmesini mmkn klmaktadr. stenilen bilgilere hzl ve zamannda eriilebilmesini otomasyonun ayrlmaz bir paras olarak grmekteyiz. Sistemin tasarlanmasnda gnmz teknolojilerinden en iyi ekilde faydalanmak suretiyle, ilerin daha hzl, doru ve verimli hale getirecei dnlmtr. Bu sebeple sistemin internet balants iin, serann corafi artlarnn bir sknt oluturmamas amacyla kablolu yerine kablosuz ya da uydu balantl eriimler kullanlabilir. Ayrca sisteme internet zerinden elle kontrol da eklenerek seraya gelmeden baz kontrollerin uzaktan yaplmas salanabilir. Yine seraya uygun noktalara kameralar yerletirilerek hem bitkilerin geliiminin ve sera ii artlarnn izlenmesi, hem de gvenliinin salanmas konusunda yardm olacaktr. Bir dier husus ise; bitkilerin manyetik alandan etkilenmeleri ile ilgili aratrmalardan faydalanarak, eer sorun kmayacaksa, alglayclar, kontrol kartlar, kameralar gibi yan aparatlarn tamam kablosuz alr hale getirilerek, sistem kurulumu ok pratik hale dntrlebilir.

61

KAYNAKLAR BAETNELK, A., ZTRK H.H. 1997. Seralarda Ortam Kontrol, 2. Seraclk Sempozyumu, Simav, Ktahya. BAETNELK, A., ZTRK, H. H., 1998. Kontroll Ortamlarda Yaplan Bitki Denemeleri in klim Etmenlerinin llmesi. 2. Sebze Tarm Sempozyumu 28-30 Eyll 1998 Bildiri Kitab, Gaziosmanpaa . Ziraat Fakltesi Bahe Bitkileri Blm, S: 349-354, Tokat. DADEMR Y., 2002, Veritabanlar ve SQL, Delphi ile Veritaban Uygulamalar Gelitirme, Trkmen Kitabevi, stanbul FUNT, R, 1989, Management Decision Making Software, Marked, Model International Society For Horticultural Science Apr., 51-56 GILREATH, J., 1985, Description of a Basic Program For Data Collection Using a Protable Microcomputer, American Society For Horticural Science Apr, 301 NAN, S.A., 2002, Meyve Fidan oaltlmasnda Kullanlan Kklendirme Seralarnn Otomasyonu, Yksek Lisans Tezi, SD, Bahe Bitkileri Anabilim Dal, Isparta. KAIRA, M., SHORT, T. H., STOWELL, R.R., 1997. Modeling Natural Ventilation Designs for Greenhouses in Mediterranean Climates. Presented at the ISHS Symposium, Antalya, Turkey. KARAGLLE ., PALA Z., 2001, Borland Delphi 5, Trkmen Kitabevi, stanbul. KRKL A, ALAYAN N. 2005. Sera Otomasyon Sistemlerinin Gelitirilmesine Ynelik Bir alma, Akdeniz niversitesi Ziraat Fakltesi Dergisi, 2005, 18(1), 25-34, Antalya HAKGREN F., KRKL A. 2007. Sera Planlamas, Akdeniz niversitesi Ziraat Fakltesi, S: 89, Antalya MICROCHIP, 2001, PIC16F87X Data Sheet 28/40-Pin 8-Bit CMOS FLASH Microcontrollers OKURSOY, R. 1993. Design of a Microprocessor Based Temperature Control System. Doa-Tr. Journal of Agricultural and Forestry. Say: 17. Sayfa : 977985. Tbitak, Ankara.

62

PHP DOCUMENTATION GROUP, 2009, PHP Klavuzu SUN MICROSYSTEMS, 2008, MySQL 5.1 Referans Klavuzu TTZ, S., 2004. Modern Seraclk Yatrmcya Yol Haritas, Antalya Sanayici ve adamlar Dernei (ANSAD) yaynlar, Antalya, S:21 TUNCAY, , 1990, Sera Sebze Yetitiriciliinde Karlalan Baz Sorunlarn zmne Ynelik Bir Bilgisayar Program, Yksek Lisans Tezi, E., Bahe Bitkileri Anabilim Dal, Bornova YELKEN, A.A., 2003, Seralarda klim Kontrolne Ynelik Bir Bilgisayar Program, Yksek Lisans Tezi, , Tarm Makinalar Anabilim Dal, Adana YULE, D., 1989, Temel Bilim Ansiklopedisi, Milliyet, stanbul, 313, 314

63

ZGEM 1977 ylnda Adanada dodu. lkokul, Ortaokul ve Lise renimini Adanada tamamlad. 1996 ylnda, Mersin niversitesi, Erdemli Meslek Yksek okuluna balad, 1998 ylnda mezun oldu. Ayn yl Mersin niversitesi, Bilgisayar Mhendislii Blmne dikey gei yoluyla kabul edildi. Mhendislik fakltesinden 2001 ylnda mezun oldu. Mezun olduu yl Mersin niversitesinde Uzman kadrosunda greve balad. Halen Mersin niversitesinde Mhendis kadrosunda almaktadr. 2003 ylnda ukurova niversitesi Fen Bilimleri Enstits Tarm Makinalar Anabilim Dalnda yksek lisans eitimime balad. Ailevi nedenlerden dolay tez aamasnda brakmak zorunda kald. Yksek lisans eitimini tamamlamak amacyla 2009 ylnda af kapsamndan yeniden balad.

64

EK 1. PIC PROGRAMININ KODLARI


; Sera kontrol kart program. 300 baud da seri haberleme yapar. ; Veri 8 bitlik data eklinde olacak. ; bit7:0 off ya da giri, 1:on ; bit 654: kartno ; bit 3210: eleman(port) no ; port no da: 1234 analog giri, 5 giri yeloler, 6-15 k ; yel olcme altprogram aktif list #include p=16f873 "P16F873.INC"

; Deiskenler cblock 0x20 geldat1,geldat11,analog,eee,zd1,zd2,zd3,zd4,kartno,say,sure,bitti,datx; endc ; Balang vektrleri tarifi. org 0h goto start org goto 4h saydir

; Ana Program balang ayarlar ksm start BCF STATUS, RP0 ; BCF STATUS, RP1 ; Bank0 clrw ; Clear W. movwf PORTA ; PORTA zero movwf PORTB ; PORTB zero movwf PORTC ; PORTC zero . ; Port Setup ksm: bcf STATUS,RP0 ; Select Bank 0 bsf RCSTA,SPEN ; Enable USART. bsf RCSTA,CREN ; Enable Receeive bsf STATUS,RP0 movlw 0x06 movwf ADCON1 movlw 0x3F movwf TRISA CLRF TRISB ;seri iletisim ayarlar ksm: movlw 0xCF movwf SPBRG movlw 0xA0 Speed) movwf TXSTA ; Select Bank 1

; porta giri ; portb k ; BRG deeri 300 baud @ 4MHz ; Write it to register. ; CSRC/TXEN (Internal clock, 8 bit mode, Async operation, High ; Write to TX control register.

65

bcf bcf call

STATUS,RP0 STATUS,RP1 swait

; Select Bank 0 ; Select Bank 0

;adc ayarlar ksm: bcf STATUS,RP1 bsf STATUS,RP0 movlw movwf movlw movwf bcf bsf bcf bsf bcf 0xFF TRISA 0x0 TRISA STATUS,RP0 PORTA,0x0 PORTA,0x0 PORTA,0x0 PORTA,0x0

; ; Select Bank 1

bsf STATUS,RP0 movlw 0xFF movwf TRISA movlw 0xF0 movwf TRISC movlw b'00000111' ;dahili sinyal 1/2 oran movwf OPTION_REG ; yelolcer zaman icin timer0 ayar movlw movwf bcf bcf 0x02 ADCON1 STATUS,RP0 STATUS,RP1

; Select Bank 0

movlw 0x01 movwf datx BASLA movlw movwf CLRF BSF bcf BAS1 10h kartno PORTB PORTC,2 PIR1,RCIF ;Kart no 1 ; test iin kart alyor anlamnda ; Clear the interrupt flag ;gelen datay oku

call getc movwf geldat1 call swait movf andlw subwf btfss goto bsf geldat1,w h'70' kartno,w STATUS,2 BAS1 PORTB,5

;test iin data alnd m

66

movf geldat1,w andlw 0Fh movwf geldat11 intest test1 nop movf sublw btfss goto call goto movf sublw btfss goto call goto movf sublw btfss goto call goto movf sublw btfss goto call goto geldat11,w 0x1 STATUS,2 test2 do_conv1 gonder geldat11,w 0x2 STATUS,2 test3 do_conv2 gonder geldat11,w 0x3 STATUS,2 test4 do_conv3 gonder geldat11,w 0x4 STATUS,2 testyel do_conv5 gonder geldat11,w 0x5 STATUS,2 out1 yeloku ;giri elemanlar deeri mi

test2

test3

test4

testyel movf sublw btfss goto goto

;**************RUZGAR HIZI OLCME KISMI********************* yeloku clrf bitti ;MOVLW 0XFE ;MOVWF TMR0 clrf TMR0 ;Timer 0 balang says 00 movlw b'10100000' ;interruptlar ak, Timer 0 interrupt aktif ;Timer 0 zaman am 0 movwf INTCON clrf analog movlw .7 movwf sure clkkon btfss PORTC,5

67

goto goto clkkon1 btfss goto goto clkkon2 call btfss goto brr brr1 brr2 btfsC goto goto btfss goto goto call btfsC goto incf btfss goto goto

clkkon1 clkkon2 bitti,1 clkkon yelbitti bekle PORTC,5 clkkon PORTC,5 brr1 brr2 bitti,1 brr yelbitti bekle PORTC,5 brr analog,f bitti,1 clkkon yelbitti INTCON,7 gonder INTCON,T0IF datx,f PORTB sure,f saydev2 saydev1 ;Timer 0 zaman amn tekrar 0 yap ;deilse tekrar int alt pr. alr

yelbitti bcf goto saydir bcf rlf movwf decfsz goto goto saydev2

;MOVLW 0XFE ;MOVWF TMR0 clrf TMR0 retfie saydev1 clrf bsf clrf retfie TMR0 bitti,1 PORTB

;************ADC OLCME KISMI************* do_conv1 movlw 0xC1 movwf ADCON0 goto adc_olc do_conv2 movlw 0xC9 movwf ADCON0 goto adc_olc do_conv3 movlw 0xD1

68

movwf ADCON0 goto adc_olc ;do_conv4 ; movlw ; movwf ; goto BSF PORTB,4 0xD9 ADCON0 adc_olc

do_conv5 movlw 0xE1 movwf ADCON0 goto adc_olc adc_olc call bsf wait_eoc goto swait ADCON0,0x2 btfsc ADCON0,0x2 wait_eoc

movf ADRESH,W movwf analog return ;*************CIKIS KONTROL KISMI************ out1 o1_t6 nop geldat11,w 06h STATUS,2 o1_t7 geldat1,7 o1_t60 PORTB,0 BAS1 PORTB,0 BAS1 geldat11,w 07h STATUS,2 o1_t8 geldat1,7 o1_t70 PORTB,1 BAS1 PORTB,1 BAS1 geldat11,w 08h STATUS,2 o1_t9 geldat1,7

movf sublw btfss goto btfss goto bsf goto o1_t60 bcf goto o1_t7 movf sublw btfss goto btfss goto bsf goto o1_t70 bcf goto o1_t8 movf sublw btfss goto btfss

69

goto bsf goto o1_t80 bcf goto o1_t9 movf sublw btfss goto btfss goto bsf goto o1_t90 bcf goto o1_ta movf sublw btfss goto btfss goto bsf goto o1_ta0 bcf goto o1_tb movf sublw btfss goto btfss goto bsf goto o1_tb0 bcf goto o1_tc movf sublw btfss goto btfss goto bsf goto o1_tc0 bcf goto o1_td movf sublw btfss goto btfss

o1_t80 PORTB,2 BAS1 PORTB,2 BAS1 geldat11,w 09h STATUS,2 o1_ta geldat1,7 o1_t90 PORTB,3 BAS1 PORTB,3 BAS1 geldat11,w 0Ah STATUS,2 o1_tb geldat1,7 o1_ta0 PORTB,4 BAS1 PORTB,4 BAS1 geldat11,w 0Bh STATUS,2 o1_tc geldat1,7 o1_tb0 PORTB,5 BAS1 PORTB,5 BAS1 geldat11,w 0Ch STATUS,2 o1_td geldat1,7 o1_tc0 PORTB,6 BAS1 PORTB,6 BAS1 geldat11,w 0Dh STATUS,2 o1_te geldat1,7

70

goto bsf goto o1_td0 bcf goto o1_te movf sublw btfss goto btfss goto bsf goto o1_te0 bcf goto o1_tf movf sublw btfss goto btfss goto bsf goto o1_tf0 bcf goto y_durum

o1_td0 PORTB,7 BAS1 PORTB,7 BAS1 geldat11,w 0Eh STATUS,2 o1_tf geldat1,7 o1_te0 PORTC,0 BAS1 PORTC,0 BAS1 geldat11,w 0Fh STATUS,2 BAS1 geldat1,7 o1_tf0 PORTC,1 BAS1 PORTC,1 BAS1 GOTO BAS1

;************* SERI GONDER VE AL ALTPROGRAMLARI************ ;********SERI DATA GONDERME KISMI*********** gonder movf call call goto analog,w putc swait BAS1

;W ye yuklenmis bir byte seri porttan gonderme altprogrami ;W = character putc bcf STATUS,RP0 movwf TXREG bsf PORTC,5 bsf movf btfss goto bcf bcf return STATUS,RP0 TXSTA,W TXSTA,1 putc1 STATUS,RP0 PORTC,5 ; Select Bank 0. ; Write it! ; Select Bank 1 ; Peek transmit STATUS ; Skip if TXbuffer empty ; Try again ; Select Bank 0.

putc1

71

;********SERI DATA OKUMA KISMI*********** ;Seri porttan bir byte seri veri okuma altprogrami ;Okunan data W registerine aliniyor getc getc1 bcf btfss goto movf bcf return STATUS,RP0 PIR1,RCIF getc1 RCREG,W PIR1,RCIF ; Select Bank 0. ; Skip if RC int flag set ; Try again ; Read the geldat1acter ; Clear the interrupt flag ; Clear WDT in case it is enabled.

hang

clrwdt goto hang

;BEKLEME PROGRAMI 1 swait movlw 0xFF movwf zd1 sw2 movlw 0xFF movwf zd2 sw3 nop decfsz zd2,f goto sw3 decfsz zd1,f goto sw2 return ;BEKLEME PROGRAMI 2 bekle bek1 movlw movwf nop decfsz goto return end .60 zd1 zd1,f bek1

72

EK 2. OTOMASYON PROGRAMININ KODLARI Ana Ekran:


unit anaFormFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, CPort, Menus, StdCtrls, Grids, DBGrids, Mask, RzEdit, RzButton, jpeg, RzLabel, _GClass, AbCompas, RXClock, RzPanel, dxCntner, dxEditor, dxExEdtr, dxEdLib, ToolEdit; type TanaForm = class(TForm) MainMenu1: TMainMenu; Tanmlar1: TMenuItem; KartElemanTanmla1: TMenuItem; PortTanmla1: TMenuItem; ComPort: TComPort; GroupBox1: TGroupBox; ElemanTanmla1: TMenuItem; Timer1: TTimer; beklemeSuresi: TTimer; lmElemanTanmla1: TMenuItem; ruzgarYonu: TAbCompass; portGosterge: TPanel; GroupBox3: TGroupBox; GroupBox2: TGroupBox; cikiselemanList: TDBGrid; testBilgi: TGroupBox; olcumElemanList: TDBGrid; sysZaman: TRxClock; Label1: TLabel; Label2: TLabel; RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; RzToolButton3: TRzToolButton; RzToolButton4: TRzToolButton; ruzgarHizi: TLabel; sysTarih: TPanel; Ekstralar1: TMenuItem; Grafik1: TMenuItem; Hakknda1: TMenuItem; Hakknda2: TMenuItem; Kontrol1: TMenuItem; ElleKontrol1: TMenuItem; RzToolButton5: TRzToolButton; procedure ComPortStatus; procedure FormActivate(Sender: TObject); procedure ComPortAfterClose(Sender: TObject); procedure ComPortAfterOpen(Sender: TObject);

73

procedure PortTanmla1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure KartElemanTanmla1Click(Sender: TObject); procedure ComPortRxChar(Sender: TObject; Count: Integer); procedure ElemanTanmla1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); function TarihToMySql(tarih:string): string; procedure olcumDegerleriniYaz; procedure lmElemanTanmla1Click(Sender: TObject); procedure cikiselemanListDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure RzToolButton4Click(Sender: TObject); procedure olcumElemanListDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure Hakknda2Click(Sender: TObject); procedure ElleKontrol1Click(Sender: TObject); private { Private declarations } public { Public declarations } comPortOkunan:Integer; simdi:TDateTime; end; var anaForm: TanaForm; implementation uses dataModul, elemanTanimFrm, kartElemanTanimFrm, olcumElemaniTanimFrm, cikisTanimFrm, grafikFrm, grafikSecFrm, about, elleKontrolFrm, bekleFrm; {$R *.DFM} procedure TanaForm.olcumDegerleriniYaz; begin ShowMessage (inttostr(comPortOkunan)); if comPortOkunan<> -1 then begin with d.Query2 do begin close; sql.Clear; sql.Add('insert into olcumdegerleri set tanimliElamanID='+d.Query1.FieldByName('id').AsString+', olcumDegeri='+inttostr(comPortOkunan)+', olcumZamani='''+TarihToMySql(datetimetostr(simdi))+''''); ExecSQL; end; d.Query1.Next; end; end;

74

function TanaForm.TarihToMySql(tarih:string):string; begin TarihToMySql := copy(tarih,7,4)+'-'+copy(tarih,4,2)+'-'+copy(tarih,1,2)+' '+trim(copy(tarih,11,9)); end; procedure TanaForm.ComPortStatus; begin if ComPort.Connected then begin portGosterge.Color := clLime; portGosterge.BevelInner := bvRaised; portGosterge.Caption := 'lem Yaplyor'; end else begin portGosterge.Color := clInfoBk; portGosterge.BevelInner := bvLowered; portGosterge.Caption := 'lem Bekleniyor'; end; end; procedure TanaForm.FormActivate(Sender: TObject); begin sysTarih.Caption := datetostr(date); ComPortStatus; end; procedure TanaForm.ComPortAfterClose(Sender: TObject); begin ComPortStatus; end; procedure TanaForm.ComPortAfterOpen(Sender: TObject); begin ComPortStatus; end; procedure TanaForm.PortTanmla1Click(Sender: TObject); begin ComPort.ShowSetupDialog; try ComPort.Open; except ComPort.Close; end; if ComPort.Connected then ComPort.Connected := false; ComPortStatus; end; procedure TanaForm.FormClose(Sender: TObject; var Action: TCloseAction); begin aboutform.ShowModal; Action := canone; end;

75

procedure TanaForm.KartElemanTanmla1Click(Sender: TObject); begin d.kartelemanDQ.open; kartelemanTanim.ShowModal; d.kartelemanDQ.close; end; procedure TanaForm.ComPortRxChar(Sender: TObject; Count: Integer); var Okunan:string; begin ComPort.ReadStr(Okunan,Count); comPortOkunan := ord(Okunan[1]); end; procedure TanaForm.ElemanTanmla1Click(Sender: TObject); begin d.elemanDQ.open; elemanTanim.ShowModal; d.elemanDQ.close; end; procedure TanaForm.Timer1Timer(Sender: TObject); var sayac,hesaplananOlcumDegeri,donguSayisi,kuralID:Integer; islemID,query:string; okumaTamam:bool; beklemeZamani:real; begin Timer1.Enabled:=false; sayac := 0; if ComPort.Connected then begin while (sayac<30000) do begin Application.ProcessMessages; Sleep(20); sayac := sayac+1; if not anaForm.ComPort.Connected then begin anaForm.ComPort.Connected := true; anaForm.Timer1.Enabled := false; Break; end; end; end else begin anaForm.ComPort.Connected := true; anaForm.Timer1.Enabled := false; end; if (sayac>0) and (ComPort.Connected) then begin Timer1.Enabled:=true; exit; end;

76

simdi := Now; with d.timerQuery do begin close; sql.Clear; sql.Add('select et.*, e.adi, DATE_ADD(e.sonkontrol,INTERVAL (e.kontrolAraligi) MINUTE ) AS okumaZamani from elemantanim et,eleman e where et.elemanID=e.id and e.inOu=''0'' and e.aktif=''1'''); open; try if ComPort.Connected then begin islemID :=''; while not eof do begin if (simdi>=FieldByName('okumaZamani').AsDateTime) or (FieldByName('okumaZamani').AsString='') then begin if islemID=FieldByName('id').AsString then donguSayisi := donguSayisi+1 else begin donguSayisi := 1; islemID:=FieldByName('id').AsString; comPortOkunan := -1; ComPort.WriteStr(chr(FieldByName('cNo').AsInteger)); sayac := 0; while (comPortOkunan=-1) and (sayac<15) do begin Application.ProcessMessages; Sleep(200); sayac:=sayac+1; end; end; if donguSayisi>5 then begin donguSayisi := 0; Next; end; if comPortOkunan<> -1 then begin hesaplananOlcumDegeri := comPortOkunan; with d.timerUpdate do begin close; sql.Clear; sql.Add('select * from olcumkarsilik k, elemantanim e WHERE e.id='+d.timerQuery.FieldByName('id').AsString+' and k.olcumElemanID=e.olcumElemanID and k.olculenDeger='+inttostr(hesaplananOlcumDegeri)); open; if d.timerUpdate.RecordCount > 0 then hesaplananOlcumDegeri := d.timerUpdate.FieldByName('olcumKarsiligi').AsInteger; close; sql.Clear; sql.Add('insert into olcumdegerleri set tanimliElemanID='+d.timerQuery.FieldByName('id').AsString+',

77

olcumDegeri='+inttostr(hesaplananOlcumDegeri)+', olcumZamani='''+TarihToMySql(datetimetostr(simdi))+''''); ExecSQL; close; sql.Clear; sql.Add('UPDATE eleman SET sonKontrol='''+TarihToMySql(datetimetostr(simdi))+''' WHERE id='+d.timerQuery.FieldByName('elemanID').AsString); ExecSQL; end; d.timerQuery.Next; end; end else d.timerQuery.Next; end; close; sql.Clear; islemID :='select e.id,e.adi,Min(od.olcumDegeri) as ''enDusuk'',Max(od.olcumDegeri) as ''enYuksek'',round(sum(od.olcumDegeri)/count(od.olcumDegeri)) as ''ortalama'' from elemantanim et '+ ' inner join eleman e ON et.elemanID=e.id and e.inOu=''0'' and e.aktif=''1'''+ ' inner join olcumdegerleri od ON od.tanimliElemanID=et.id and od.olcumZamani='''+TarihToMySql(datetimetostr(simdi))+''''+ ' group by e.id'; sql.Add(islemID); open; while not eof do begin with d.timerUpdate do begin close; sql.Clear; islemID := 'INSERT INTO elemanortalama SET '+ 'eleman='+d.timerQuery.FieldByName('id').AsString+ ', olcumZamani='''+TarihToMySql(datetimetostr(simdi))+''''+ ', enYuksek='+d.timerQuery.FieldByName('enYuksek').AsString+ ', enDusuk='+d.timerQuery.FieldByName('enDusuk').AsString+ ', ortalama='+d.timerQuery.FieldByName('ortalama').AsString; sql.Add(islemID); ExecSQL; end; Next; end; d.sonOlcumler.Refresh; Close; sql.clear; islemID := 'select e.id,e.adi,eo.ortalama as ortalama,e.birimi as birimi, eo.olcumZamani as olcumZamani from eleman e '+ 'inner join elemanortalama eo ON eo.eleman=e.id and eo.id=(select max(id) from elemanortalama where eleman=e.id) '+ 'where e.aktif=''1'' and (e.id=1 or e.id=2) '+ 'group by eo.eleman'; SQL.Add(islemID);

78

open; while not eof do begin if FieldByName('id').AsInteger=1 then ruzgarHizi.Caption := FieldByName('ortalama').AsString + ' '+FieldByName('birimi').AsString; if FieldByName('id').AsInteger=2 then ruzgarYonu.ValueShould := FieldByName('ortalama').AsInteger; next; end; // Kural Kontolleri Balangc Close; sql.clear; SQL.Add('SELECT * from cikiskurallari WHERE aktif=''1'''); open; while not Eof do begin query := 'SELECT '+ 'o1.eleman as eId_1'+ ', o1.ortalama as d_1'+ ',e.*'; for sayac:=2 to 5 do begin if FieldByName('elemanID'+inttostr(sayac)).Text <>'' then begin query := query + ', o'+inttostr(sayac)+'.eleman as eId_'+inttostr(sayac)+ ', o'+inttostr(sayac)+'.ortalama as d_'+inttostr(sayac); end; end; query := query + ' from '+ ' elemanortalama as o1'+ ',elemantanim as e'; for sayac:=2 to 5 do begin if FieldByName('elemanID'+inttostr(sayac)).Text <>'' then begin query := query + ', elemanortalama as o'+inttostr(sayac); end; end; query := query + ' WHERE '+ 'o1.eleman='+FieldByName('elemanID1').Text+' and '+ 'o1.id=(select max(id) as id from elemanortalama WHERE eleman='+FieldByName('elemanID1').Text+') and '+ 'o1.ortalama'+FieldByName('sart1').Text+FieldByName('deger1').Text+ ' and e.id='+FieldByName('cikisElemanID').Text;

for sayac:=2 to 5 do begin if FieldByName('elemanID'+inttostr(sayac)).Text <>'' then begin query := query +

79

' and o'+inttostr(sayac)+'.eleman='+FieldByName('elemanID'+inttostr(sayac)).Text+' and '+ 'o'+inttostr(sayac)+'.id=(select max(id) as id from elemanortalama WHERE eleman='+FieldByName('elemanID'+inttostr(sayac)).Text+') and '+ 'o'+inttostr(sayac)+'.ortalama'+FieldByName('sart'+inttostr(sayac)).Text+FieldByName('deger'+inttost r(sayac)).Text; end; end; with d.timerUpdate do begin close; sql.Clear; sql.Add(query); open; if d.timerUpdate.RecordCount >0 then begin while not Eof do begin with d.timerUpdate2 do begin close; sql.Clear; sql.Add('select * from cikisDurum WHERE kuralID=0 and tanimliElemanID='+d.timerUpdate.FieldByName('id').AsString+' and id=(select max(id) from cikisDurum WHERE tanimliElemanID='+d.timerUpdate.FieldByName('id').AsString+')' ); open; kuralID :=1; if d.timerUpdate2.RecordCount = 0 then begin close; sql.Clear; query := 'SELECT max(islemZamani) as islemZamani FROM cikisDurum WHERE tanimliElemanID='+d.timerUpdate.FieldByName('id').AsString+' and cikisData='+d.timerQuery.FieldByName('cikisData').AsString+' and id=(select max(id) from cikisDurum WHERE tanimliElemanID='+d.timerUpdate.FieldByName('id').AsString+')'; sql.Add(query); open; end else kuralID := 0; end; if (kuralID>0) and (d.timerUpdate2.FieldByName('islemZamani').Text ='') then begin comPortOkunan := -1; if d.timerQuery.FieldByName('cikisData').AsInteger=1 then begin ComPort.WriteStr(chr(FieldByName('cNo').AsInteger)); end else if d.timerQuery.FieldByName('cikisData').AsInteger=2 then begin ComPort.WriteStr(chr(FieldByName('cNo').AsInteger+128)); end else if d.timerQuery.FieldByName('cikisData').AsInteger=3 then begin ComPort.WriteStr(chr(FieldByName('cNoKapat').AsInteger+128)); sayac :=0; while (sayac<100) do begin Application.ProcessMessages; Sleep(10*FieldByName('maxKapanmaSuresi').AsInteger); sayac:=sayac+1; end; ComPort.WriteStr(chr(FieldByName('cNoKapat').AsInteger)); end else if d.timerQuery.FieldByName('cikisData').AsInteger>3 then begin

80

ComPort.WriteStr(chr(FieldByName('cNoKapat').AsInteger+128)); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep(10*FieldByName('maxKapanmaSuresi').AsInteger); sayac:=sayac+1; end; ComPort.WriteStr(chr(FieldByName('cNoKapat').AsInteger)); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep(10); sayac:=sayac+1; end; ComPort.WriteStr(chr(FieldByName('cNo').AsInteger+128)); sayac:=FieldByName('maxKapanmaSuresi').AsInteger; beklemeZamani := round((sayac-3)*10/100*10); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep( round(beklemeZamani)) ; sayac:=sayac+1; end; ComPort.WriteStr(chr(FieldByName('cNo').AsInteger)); end; sayac :=0; while (sayac<150) do begin Application.ProcessMessages; Sleep(20); sayac := sayac+1; end; with d.timerUpdate2 do begin close; sql.Clear; query := 'insert into cikisDurum set tanimliElemanID='+d.timerUpdate.FieldByName('id').AsString+', cikisData='+d.timerQuery.FieldByName('cikisData').AsString+', kuralID='+d.timerQuery.FieldByName('id').AsString+', islemZamani='''+TarihToMySql(datetimetostr(simdi))+''''; sql.Add(query); ExecSQL; end; end; Next; end; end; end; Next; end; //Kural KOntolleri Bitisi

81

d.sonDurumlar.Refresh; Timer1.Enabled:=true; if ComPort.Connected then ComPort.Connected := false; end; except ShowMessage('Port Alamad'); Timer1.Enabled:=true; end; end; end; procedure TanaForm.lmElemanTanmla1Click(Sender: TObject); begin with d.Query2 do begin close; sql.Clear; sql.Add('select et.*,e.adi from eleman e '+ 'inner join elemantanim et ON e.id = et.elemanID '+ 'WHERE inOu=''1'' and aktif=''1'' order by e.adi,et.kartNo,et.portNo'); open; cikisKuralTanim.elemanID.items.Clear; cikisKuralTanim.elemanID.Values.Clear; cikisKuralTanim.elemanID.AddItemValue('Tm Aktif Kurallar','-1'); cikisKuralTanim.elemanID.AddItemValue('Tm Pasif Kurallar','-2'); cikisKuralTanim.elemanID.AddItemValue('Tm Kurallar','-3'); while not Eof do begin cikisKuralTanim.elemanID.AddItemValue(fieldbyname('adi').Text+ ' ('+'KartNo:'+fieldbyname('kartNo').Text+'-PortNo:'+fieldbyname('portNo').Text+') Kurallar',fieldbyname('id').Text); Next; end; end; cikisKuralTanim.elemanID.ItemIndex := 0; cikisKuralTanim.elemanID.OnChange(Sender); d.cikisKurallariDQ.open; cikisKuralTanim.ShowModal; d.cikisKurallariDQ.close; end; procedure TanaForm.cikiselemanListDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var deger :string; begin deger :=''; if datacol=2 then begin if Column.Field.AsString='0' then deger:='Giri Eleman'

82

else if Column.Field.AsString='1' then deger:='Kapal' else if Column.Field.AsString='2' then deger:='Ak' else if Column.Field.AsString='3' then deger:='Tam Kapal' else if Column.Field.AsString='4' then deger:='%10 Ak' else if Column.Field.AsString='5' then deger:='%20 Ak' else if Column.Field.AsString='6' then deger:='%30 Ak' else if Column.Field.AsString='7' then deger:='%40 Ak' else if Column.Field.AsString='8' then deger:='%50 Ak' else if Column.Field.AsString='9' then deger:='%60 Ak' else if Column.Field.AsString='10' then deger:='%70 Ak' else if Column.Field.AsString='11' then deger:='%80 Ak' else if Column.Field.AsString='12' then deger:='%90 Ak' else if Column.Field.AsString='13' then deger:='Tam Ak' else deger:='Tanmsz'; cikiselemanList.Canvas.TextRect(Rect,Rect.Left+4,Rect.top+2,deger); end; end; procedure TanaForm.RzToolButton4Click(Sender: TObject); begin grafikSec.basTarih.DateTime := date; grafikSec.bitTarih.DateTime := date; grafikSec.basZaman.Time := StrToTime('00:00'); grafikSec.bitZaman.Time := StrToTime('23:59'); with d.Query2 do begin close; sql.clear; sql.add('select * from eleman WHERE inOu=''0'''); open; grafikSec.elemanID.items.Clear; grafikSec.elemanID.Values.Clear; First; while not Eof do begin grafikSec.elemanID.AddItemValue(fieldbyname('adi').Text,fieldbyname('id').Text); Next; end; end; grafikSec.showmodal; end;

83

procedure TanaForm.olcumElemanListDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (datacol>0) and (datacol<4) then begin if Column.Field.AsString='' then olcumElemanList.Canvas.TextRect(Rect,Rect.Left+4,Rect.top+2,'-'); end; if datacol=4 then begin if Column.Field.AsString='' then olcumElemanList.Canvas.TextRect(Rect,Rect.Left+4,Rect.top+2,'Hi lm Yok'); end; if datacol=3 then begin if d.sonOlcumler.fieldbyname('id').AsInteger = 1 then ruzgarHizi.Caption := Column.Field.AsString; if d.sonOlcumler.fieldbyname('id').AsInteger = 2 then ruzgarYonu.ValueShould := d.sonOlcumler.fieldbyname('ort').AsInteger; end; end; procedure TanaForm.Hakknda2Click(Sender: TObject); begin aboutform.ShowModal; end; procedure TanaForm.ElleKontrol1Click(Sender: TObject); begin with d.Query2 do begin close; sql.Clear; sql.Add('select et.*,e.adi from eleman e '+ 'inner join elemantanim et ON e.id = et.elemanID '+ 'WHERE inOu=''1'' and aktif=''1'' order by e.adi,et.kartNo,et.portNo'); open; elleKontrol.elemanID.items.Clear; elleKontrol.elemanID.Values.Clear; while not Eof do begin elleKontrol.elemanID.AddItemValue(fieldbyname('adi').Text+ ' ('+'KartNo:'+fieldbyname('kartNo').Text+'PortNo:'+fieldbyname('portNo').Text+')',fieldbyname('id').Text); Next; end; end; elleKontrol.elemanID.ItemIndex := -1; elleKontrol.cikisData.ItemIndex := -1; elleKontrol.elemanBilgi.Caption :=''; elleKontrol.otoKontrol.Enabled :=false; elleKontrol.ShowModal; end; end.

84

lem Tanm Ekran


unit elemanTanimFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RzPanel, RzButton, ExtCtrls, Grids, DBGrids; type TelemanTanim = class(TForm) DBGrid1: TDBGrid; RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; RzToolButton3: TRzToolButton; PlugInsaaaa: TRzToolButton; procedure RzToolButton1Click(Sender: TObject); procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton3Click(Sender: TObject); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure PlugInsaaaaClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var elemanTanim: TelemanTanim; implementation uses elemanEkleFrm, dataModul, olcumElemaniTanimFrm; {$R *.DFM} procedure TelemanTanim.RzToolButton1Click(Sender: TObject); begin elemanEkle.adi.Text := ''; elemanEkle.inOut.ItemIndex :=0; elemanEkle.ekleDuzelt.Caption :='ekle'; elemanEkle.aktif.ItemIndex :=0; elemanEkle.birimi.Text :=''; elemanEkle.inOut.OnChange(Sender); elemanEkle.showmodal; end; procedure TelemanTanim.RzToolButton2Click(Sender: TObject); begin elemanEkle.adi.Text := d.elemanDQ.fieldbyname('adi').Text; elemanEkle.inOut.ItemIndex :=d.elemanDQ.fieldbyname('inOu').AsInteger; elemanEkle.birimi.Text :=d.elemanDQ.fieldbyname('birimi').text;

85

if elemanEkle.inOut.ItemIndex = 0 then begin if (d.elemanDQ.fieldbyname('kontrolAraligi').AsInteger mod (60*24)) = 0 then begin elemanEkle.zaman.ItemIndex := 2; elemanEkle.kontrolAraligi.Value := d.elemanDQ.fieldbyname('kontrolAraligi').AsInteger/(60*24); end else if (d.elemanDQ.fieldbyname('kontrolAraligi').AsInteger mod 60) = 0 then begin elemanEkle.zaman.ItemIndex := 1; elemanEkle.kontrolAraligi.Value := d.elemanDQ.fieldbyname('kontrolAraligi').AsInteger/60; end else begin elemanEkle.zaman.ItemIndex := 0; elemanEkle.kontrolAraligi.Value := d.elemanDQ.fieldbyname('kontrolAraligi').AsInteger; end; end else begin elemanEkle.kontrolAraligi.Text :=''; elemanEkle.zaman.ItemIndex := -1; end; if d.elemanDQ.fieldbyname('aktif').AsString ='1' then elemanEkle.aktif.ItemIndex :=0 else elemanEkle.aktif.ItemIndex :=1; elemanEkle.inOut.OnChange(Sender); elemanEkle.ekleDuzelt.Caption :='duzelt'; elemanEkle.showmodal; end; procedure TelemanTanim.RzToolButton3Click(Sender: TObject); begin if d.elemanDQ.RecordCount = 0 then exit; with d.Query1 do begin close; sql.Clear; sql.Add('select * from elemantanim where elemanID='+d.elemanDQ.fieldbyname('id').AsString); open; if d.Query1.RecordCount > 0 then begin ShowMessage('Bu ilemin Kart Elaman tanm yaplm olduundan Silinemez'+#13#10+'ncelikle tanmlardan silinmeli'+'!!!'); exit; end; close; sql.Clear; sql.Add('select * from cikiskurallari where elemanID1='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID2='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID3='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID4='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID5='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'cikisElemanID='+d.elemanDQ.fieldbyname('id').AsString); open;

86

if d.Query1.RecordCount > 0 then begin ShowMessage('Bu ilem k Elemanlar Kurallarnda kullanlm olduundan Silinemez'+#13#10+'ncelikle kurallardan silinmeli'+'!!!'); exit; end; if (MessageDlg('Seili ilemi Sistem d Brakmak istediinizden emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then exit; close; sql.Clear; sql.Add('DELETE FROM elemanortalama WHERE eleman='+d.elemanDQ.fieldbyname('id').AsString); ExecSQL; close; sql.Clear; sql.Add('select * FROM olcumelemani WHERE elemanID='+d.elemanDQ.fieldbyname('id').AsString); open; while not Eof do begin with d.Query2 do begin close; sql.Clear; sql.Add('DELETE FROM olcumkarsilik WHERE olcumElemanID='+d.Query1.fieldbyname('id').AsString); ExecSQL; end; Next; end; close; sql.Clear; sql.Add('DELETE FROM olcumelemani WHERE elemanID='+d.elemanDQ.fieldbyname('id').AsString); ExecSQL; close; sql.Clear; sql.Add('DELETE FROM eleman WHERE id='+d.elemanDQ.fieldbyname('id').AsString); ExecSQL; end; d.elemanDQ.Refresh; end; procedure TelemanTanim.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var deger :string; begin deger :=''; if datacol=1 then begin

87

if Column.Field.AsString='0' then deger:='Giri' else if Column.Field.AsString='1' then deger:='k'; DBGrid1.Canvas.TextRect(Rect,Rect.Left+4,Rect.top+2,deger); end; end; procedure TelemanTanim.PlugInsaaaaClick(Sender: TObject); begin if d.elemanDQ.FieldByName('inOu').AsInteger = 1 then begin ShowMessage ('k Eleman Seilmi'); exit; end; with d.olcumElemanDQ do begin close; sql.Clear; sql.add('select *,e.birimi from olcumelemani o, eleman e WHERE e.id=o.elemanID and elemanID='+d.elemanDQ.fieldbyname('id').Text+' order by o.elemanBilgi'); open; olcumElemanTanim.ShowModal; d.olcumElemanDQ.close; end; end; end.

lem Ekle/Dzelt Ekran


unit elemanEkleFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RzCmboBx, Mask, RzEdit, RzPanel, RzButton, ExtCtrls,shellapi; type TelemanEkle = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; pnlArama: TRzPanel; Label2: TLabel; Label3: TLabel; inOut: TRzComboBox; ekleDuzelt: TLabel; adi: TRzEdit; Label1: TLabel; kontrolAraligi: TRzNumericEdit; zaman: TRzComboBox; Label4: TLabel; aktif: TRzComboBox;

88

olcumElemanLbl: TLabel; Label5: TLabel; birimi: TRzEdit; charMap: TRzBitBtn; hareketDurumu: TRzComboBox; procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure adiKeyPress(Sender: TObject; var Key: Char); procedure inOutChange(Sender: TObject); procedure charMapClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var elemanEkle: TelemanEkle; implementation uses dataModul; {$R *.DFM} procedure TelemanEkle.RzToolButton2Click(Sender: TObject); begin close; end; procedure TelemanEkle.RzToolButton1Click(Sender: TObject); var query,aktiflik:string; hesaplananZaman:real; begin if (ekleDuzelt.Caption <>'ekle') and ( ((d.elemanDQ.fieldbyname('inOu').AsInteger=0) and (inOut.ItemIndex=1)) or ((d.elemanDQ.fieldbyname('inOu').AsInteger=1) and (inOut.ItemIndex=0)) ) then begin ShowMessage('Giri ilemi k, k ilemi Giri olarak deitirilemez!!!'); inOut.SetFocus; exit; end; if adi.Text = '' then begin ShowMessage ('lem Ad Belirtilmemi!'); adi.SetFocus; exit; end; if hareketDurumu.ItemIndex < 0 then begin ShowMessage ('Hareket Durumu Belirtilmemi!'); hareketDurumu.SetFocus; exit; end;

89

if inOut.ItemIndex = 0 then begin if birimi.Text = '' then begin ShowMessage ('Birimi Belirtilmemi!'); birimi.SetFocus; exit; end; if kontrolAraligi.Value = 0 then begin ShowMessage ('Kontrol Aral Belirtilmemi!'); kontrolAraligi.SetFocus; exit; end; if zaman.ItemIndex < 0 then begin ShowMessage ('Kontrol Aral Belirtilmemi!'); zaman.SetFocus; exit; end; end; with d.Query1 do begin if (ekleDuzelt.Caption <>'ekle') and (aktif.Value='0') and (d.elemanDQ.fieldbyname('inOu').AsInteger=0) then begin close; sql.Clear; sql.Add('select * from cikiskurallari where elemanID1='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID2='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID3='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID4='+d.elemanDQ.fieldbyname('id').AsString+' or '+ 'elemanID5='+d.elemanDQ.fieldbyname('id').AsString); open; if d.Query1.RecordCount > 0 then begin ShowMessage('Bu ilem k Elemanlar Kurallarnda kullanlm olduundan Pasif Yaplamaz!!!'); aktif.SetFocus; exit; end; end; if (ekleDuzelt.Caption <>'ekle') and (aktif.Value='0') and (d.elemanDQ.fieldbyname('inOu').AsInteger=1) then begin close; sql.Clear; sql.Add('select * from cikiskurallari where cikisElemanID='+d.elemanDQ.fieldbyname('id').AsString); open; if d.Query1.RecordCount > 0 then begin ShowMessage('Bu ilem k Elemanlar Kurallarnda kullanlm olduundan Pasif Yaplamaz!!!'); aktif.SetFocus; exit;

90

end; end; close; sql.Clear; if ekleDuzelt.Caption ='ekle' then query := 'INSERT INTO eleman SET ' else query := 'UPDATE eleman SET '; if inOut.ItemIndex = 0 then begin hesaplananZaman := kontrolAraligi.Value; if zaman.ItemIndex = 1 then hesaplananZaman := kontrolAraligi.Value*60 else if zaman.ItemIndex = 2 then hesaplananZaman := kontrolAraligi.Value*60*24; end else begin hesaplananZaman := 0; birimi.Text := ''; end; if aktif.ItemIndex = 0 then aktiflik := '1' else aktiflik := '0'; query := query +' adi='''+adi.Text+''', inOu='''+inttostr(inOut.ItemIndex)+''', hareketDurumu='''+hareketDurumu.Value+''', birimi='''+birimi.Text+''', aktif='''+aktiflik+''', kontrolAraligi='+floattostr(hesaplananZaman); if ekleDuzelt.Caption ='duzelt' then query := query +' WHERE id='+d.elemanDQ.fieldbyname('id').AsString; SQL.Add(query); ExecSQL; end; d.elemanDQ.Refresh; close; end; procedure TelemanEkle.adiKeyPress(Sender: TObject; var Key: Char); begin if (Key='i') or (Key='') then Key := ''; if (Key='') or (Key='I') then Key := 'I'; end; procedure TelemanEkle.inOutChange(Sender: TObject); begin hareketDurumu.items.Clear; hareketDurumu.Values.Clear; if inOut.ItemIndex = 0 then begin hareketDurumu.AddItemValue('Giri','0'); hareketDurumu.ItemIndex := 0; birimi.Enabled := True;

91

charMap.Enabled := True; kontrolAraligi.Enabled := True; zaman.Enabled := True; end else begin hareketDurumu.AddItemValue('On/Off','1'); hareketDurumu.AddItemValue('Kademeli','2'); birimi.Enabled := False; charMap.Enabled := False; kontrolAraligi.Enabled := False; zaman.Enabled := False; try hareketDurumu.ItemIndex := d.elemanDQ.fieldbyname('hareketDurumu').AsInteger -1; except hareketDurumu.ItemIndex := -1; end; end; end; procedure TelemanEkle.charMapClick(Sender: TObject); var Dosya:string; begin Dosya :=ExtractFilePath(Application.ExeName)+'charmap.exe'; ShellExecute(elemanEkle.Handle, nil, PChar(Dosya), nil, nil, SW_SHOWNORMAL); end; end.

lme Eleman Tanm Ekran


unit olcumElemaniTanimFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, RzButton, ExtCtrls, RzPanel; type TolcumElemanTanim = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; RzToolButton3: TRzToolButton; DBGrid1: TDBGrid; RzToolButton4: TRzToolButton; procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure RzToolButton4Click(Sender: TObject); procedure RzToolButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

92

var olcumElemanTanim: TolcumElemanTanim; implementation uses dataModul, olcumElemaniEkleFrm, olcumKarsilikFrm; {$R *.DFM} procedure TolcumElemanTanim.RzToolButton2Click(Sender: TObject); begin olcumElemaniEkle.elemanBilgi.Text := d.olcumElemanDQelemanBilgi.Text; olcumElemaniEkle.aciklama.Text := d.olcumElemanDQaciklama.Text; if FileExists(d.olcumElemanDQresim.Text) then begin olcumElemaniEkle.olcumElemanResmi.Picture.LoadFromFile(d.olcumElemanDQresim.Text); olcumElemaniEkle.resimYolu.Caption := d.olcumElemanDQresim.Text; end else begin olcumElemaniEkle.olcumElemanResmi.Picture := nil; olcumElemaniEkle.resimPaneli.Caption := 'Resim Yok'; olcumElemaniEkle.resimYolu.Caption := ''; end; olcumElemaniEkle.ekleDuzelt.Caption :='duzelt'; olcumElemaniEkle.showmodal; end; procedure TolcumElemanTanim.RzToolButton1Click(Sender: TObject); begin olcumElemaniEkle.elemanBilgi.Text := ''; olcumElemaniEkle.aciklama.Text := ''; olcumElemaniEkle.olcumElemanResmi.Picture := nil; olcumElemaniEkle.resimPaneli.Caption := 'Resim Yok'; olcumElemaniEkle.ekleDuzelt.Caption :='ekle'; olcumElemaniEkle.showmodal; end; procedure TolcumElemanTanim.RzToolButton4Click(Sender: TObject); begin if d.olcumElemanDQ.RecordCount >0 then begin olcumKarsilik.elemanBilgi.Caption := d.olcumElemanDQelemanBilgi.Text; olcumKarsilik.aciklama.Text := d.olcumElemanDQaciklama.Text; if FileExists(d.olcumElemanDQresim.Text) then begin olcumKarsilik.olcumElemanResmi.Picture.LoadFromFile(d.olcumElemanDQresim.Text); end else begin olcumKarsilik.olcumElemanResmi.Picture := nil; olcumKarsilik.resimPaneli.Caption := 'Resim Yok'; end; olcumKarsilik.DBGrid1.Columns[1].Title.Caption := 'Karl ('+ d.olcumElemanDQbirimi.Text+')'; with d.olcumKarsilikDQ do begin

93

close; sql.Clear; sql.Add('select * from olcumkarsilik WHERE olcumElemanID='+d.olcumElemanDQ.fieldbyname('id').AsString+' order by olculenDeger'); open; olcumKarsilik.ShowModal; close; end; end; end; procedure TolcumElemanTanim.RzToolButton3Click(Sender: TObject); begin if d.olcumElemanDQ.RecordCount = 0 then exit; with d.Query1 do begin close; sql.Clear; sql.Add('select * FROM elemantanim WHERE olcumElemanID='+d.olcumElemanDQ.fieldbyname('id').AsString); open; if d.Query1.RecordCount > 0 then begin ShowMessage('Bu lm Eleman Kart-Eleman Tanmlarnda Kullanldndan Silinemez!'); exit; end; if (MessageDlg('lm Elaman karlklaryla birlikte silinecektir.'+#13#10+'Yine de silmek istediinizden emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then exit; close; sql.Clear; sql.Add('DELETE from olcumkarsilik WHERE olcumElemanID='+d.olcumElemanDQ.FieldByName('id').AsString); ExecSQL; close; sql.Clear; sql.Add('DELETE from olcumelemani WHERE id='+d.olcumElemanDQ.FieldByName('id').AsString); ExecSQL; end; d.olcumElemanDQ.Refresh; end; end.

lme Eleman Ekle/Dzelt Ekran


unit olcumElemaniEkleFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RzButton, RzShellDialogs, Mask, RzEdit, StdCtrls, ExtCtrls, RzPanel,shellapi, jpeg;

94

type TolcumElemaniEkle = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; pnlArama: TRzPanel; Label4: TLabel; aciklama: TRzMemo; Label5: TLabel; elemanBilgi: TRzEdit; OpenDialog1: TRzOpenDialog; RzBitBtn1: TRzBitBtn; RzBitBtn2: TRzBitBtn; ekleDuzelt: TLabel; resimPaneli: TPanel; olcumElemanResmi: TImage; resimYolu: TLabel; procedure RzBitBtn1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure RzBitBtn2Click(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure RzToolButton2Click(Sender: TObject); procedure elemanBilgiKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var olcumElemaniEkle: TolcumElemaniEkle; implementation uses dataModul; {$R *.DFM} procedure TolcumElemaniEkle.RzBitBtn1Click(Sender: TObject); var Kaynak,Hedef:String; begin OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName)+'Resimler\'; if not OpenDialog1.Execute then exit; Kaynak := OpenDialog1.FileName; Hedef := ExtractFilePath(Application.ExeName)+'Resimler\'+ExtractFileName(Kaynak); if Hedef<>Kaynak then begin if FileExists(Hedef) then begin ShowMessage('Ayn isimle baka bir dosyanz Mevcut'); exit; end;

95

CopyFile(PChar(Kaynak),PChar(Hedef),false); end; olcumElemanResmi.Picture.LoadFromFile(hedef); resimYolu.Caption := Hedef; end; procedure TolcumElemaniEkle.FormActivate(Sender: TObject); begin if (resimYolu.Caption = '') then resimPaneli.Caption := 'Resim Yok' else resimPaneli.Caption := ''; end; procedure TolcumElemaniEkle.RzBitBtn2Click(Sender: TObject); begin if resimPaneli.Caption = 'Resim Yok' then exit; if MessageDlg('Resmi kaldrmak istediinizden emin misiniz?',mtconfirmation,[mbyes,mbno],0) = mrno then exit; olcumElemanResmi.Picture := nil; resimYolu.Caption := ''; resimPaneli.Caption := 'Resim Yok'; end; procedure TolcumElemaniEkle.RzToolButton1Click(Sender: TObject); var query,Harf,mysqlResimYolu:string; sayac:integer; begin if elemanBilgi.Text = '' then begin ShowMessage ('lm Eleman Belirtilmemi!'); elemanBilgi.SetFocus; exit; end; mysqlResimYolu := ''; for sayac:=1 to length(resimYolu.Caption) do begin Harf := copy(resimYolu.Caption,sayac,1); if Harf ='\' then mysqlResimYolu := mysqlResimYolu+'\'; mysqlResimYolu := mysqlResimYolu+Harf; end; with d.Query1 do begin close; sql.Clear; if ekleDuzelt.Caption ='ekle' then

96

query := 'INSERT INTO olcumelemani SET ' else query := 'UPDATE olcumelemani SET '; query := query +' elemanID='+d.elemanDQ.fieldbyname('id').Text+', elemanBilgi='''+elemanBilgi.Text+''',aciklama='''+aciklama.Text+''' , resim='''+mysqlResimYolu+''''; if ekleDuzelt.Caption ='duzelt' then query := query +' WHERE id='+d.olcumElemanDQ.fieldbyname('id').AsString; SQL.Add(query); ExecSQL; end; d.olcumElemanDQ.Refresh; close; end; procedure TolcumElemaniEkle.RzToolButton2Click(Sender: TObject); begin close; end; procedure TolcumElemaniEkle.elemanBilgiKeyPress(Sender: TObject; var Key: Char); begin if (Key='i') or (Key='') then Key := ''; if (Key='') or (Key='I') then Key := 'I'; end; end.

lm Karlk Ekran
unit olcumKarsilikFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, Mask, RzEdit, StdCtrls, RzPanel, RzButton; type TolcumKarsilik = class(TForm) RzToolbar1: TRzToolbar; pnlArama: TRzPanel; aciklama: TRzMemo; resimPaneli: TPanel; olcumElemanResmi: TImage; DBGrid1: TDBGrid; RzToolButton3: TRzToolButton; RzToolButton4: TRzToolButton; RzToolButton5: TRzToolButton; elemanBilgi: TLabel; procedure RzToolButton2Click(Sender: TObject);

97

procedure RzToolButton3Click(Sender: TObject); procedure RzToolButton5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var olcumKarsilik: TolcumKarsilik; implementation uses dataModul, olcumKarsilikEkleFrm; {$R *.DFM} procedure TolcumKarsilik.RzToolButton2Click(Sender: TObject); begin if d.olcumKarsilikDQ.RecordCount >0 then begin olcumKarsilikEkle.olculenDeger.Text := d.olcumKarsilikDQolculenDeger.Text; olcumKarsilikEkle.olcumKarsiligi.Text := d.olcumKarsilikDQolcumKarsiligi.Text; olcumKarsilikEkle.ekleDuzelt.Caption :='duzelt'; olcumKarsilikEkle.ShowModal; end; end; procedure TolcumKarsilik.RzToolButton3Click(Sender: TObject); begin olcumKarsilikEkle.olculenDeger.Text := ''; olcumKarsilikEkle.olcumKarsiligi.Text := ''; olcumKarsilikEkle.ekleDuzelt.Caption :='ekle'; olcumKarsilikEkle.ShowModal; end; procedure TolcumKarsilik.RzToolButton5Click(Sender: TObject); begin if d.olcumKarsilikDQ.RecordCount = 0 then exit; if (MessageDlg('Seili Karl silmek istediinizden emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then exit; with d.Query1 do begin close; sql.Clear; sql.Add('DELETE FROM olcumkarsilik WHERE id='+d.olcumKarsilikDQ.fieldbyname('id').AsString); ExecSQL; end; d.olcumKarsilikDQ.Refresh; end; end.

98

lm Karl Ekle/Dzelt Ekran


unit olcumKarsilikEkleFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, RzEdit, RzPanel, RzButton, ExtCtrls; type TolcumKarsilikEkle = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; pnlArama: TRzPanel; Label5: TLabel; ekleDuzelt: TLabel; Label1: TLabel; olculenDeger: TRzEdit; olcumKarsiligi: TRzEdit; procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure olculenDegerKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var olcumKarsilikEkle: TolcumKarsilikEkle; implementation uses dataModul; {$R *.DFM} procedure TolcumKarsilikEkle.RzToolButton2Click(Sender: TObject); begin close; end; procedure TolcumKarsilikEkle.RzToolButton1Click(Sender: TObject); var query:string; begin if olculenDeger.Text = '' then begin ShowMessage ('llen Deer Belirtilmemi!'); olculenDeger.SetFocus; exit; end;

99

if olcumKarsiligi.Text = '' then begin ShowMessage ('lm Karl Belirtilmemi!'); olcumKarsiligi.SetFocus; exit; end; with d.Query2 do begin close; sql.Clear; if ekleDuzelt.Caption ='ekle' then query := 'select * from olcumkarsilik where olcumElemanID='+d.olcumElemanDQ.fieldbyname('id').AsString+' and olculenDeger='+olculenDeger.Text else query := 'select * from olcumkarsilik where id<>'+d.olcumKarsilikDQ.fieldbyname('id').AsString+' and olcumElemanID='+d.olcumElemanDQ.fieldbyname('id').AsString+' and olculenDeger='+olculenDeger.Text; sql.Add(query); open; if RecordCount > 0 then begin ShowMessage (olculenDeger.Text+' Karl daha nceden belirlenmi!!!'); olculenDeger.SetFocus; exit; end; close; sql.Clear; if ekleDuzelt.Caption ='ekle' then query := 'INSERT INTO olcumkarsilik SET ' else query := 'UPDATE olcumkarsilik SET '; query := query +' olcumElemanID='+d.olcumElemanDQ.fieldbyname('id').AsString+', olculenDeger='+olculenDeger.Text+', olcumKarsiligi='+olcumKarsiligi.Text; if ekleDuzelt.Caption ='duzelt' then query := query +' WHERE id='+d.olcumKarsilikDQ.fieldbyname('id').AsString; SQL.Add(query); ExecSQL; end; d.olcumKarsilikDQ.Refresh; close; end; procedure TolcumKarsilikEkle.olculenDegerKeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8, '0'..'9']) then Key := #0; end; procedure TolcumKarsilikEkle.FormActivate(Sender: TObject); begin olculenDeger.SetFocus; end; end.

100

Kart-Eleman Tanmlar Ekran


unit kartElemanTanimFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RzCmboBx, RzPanel, RzButton, ExtCtrls, Grids, DBGrids; type TkartElemanTanim = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; RzToolButton3: TRzToolButton; DBGrid1: TDBGrid; procedure RzToolButton1Click(Sender: TObject); procedure elemanDoldur; procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var kartElemanTanim: TkartElemanTanim; implementation uses dataModul, elemanEkleFrm, kartElemanEkleFrm; {$R *.DFM} procedure TkartElemanTanim.elemanDoldur; begin with d.elemanDQ do begin if not Active then open; kartElemanEkle.elemanID.items.Clear; kartElemanEkle.elemanID.Values.Clear; First; while not Eof do begin kartElemanEkle.elemanID.AddItemValue(fieldbyname('adi').Text,fieldbyname('id').Text); Next; end; end; end;

101

procedure TkartElemanTanim.RzToolButton1Click(Sender: TObject); begin kartElemanEkle.kartNo.Text :=''; kartElemanEkle.portNo.Text :=''; kartElemanEkle.aciklama.Text :=''; elemanDoldur; kartElemanEkle.elemanID.Text :=''; kartElemanEkle.maxKapanmaSuresi.Text :=''; kartElemanEkle.ekleDuzelt.Caption :='ekle'; kartElemanEkle.elemanID.OnChange (Sender); kartElemanEkle.showmodal; end; procedure TkartElemanTanim.RzToolButton2Click(Sender: TObject); begin kartElemanEkle.kartNo.ItemIndex :=d.kartElemanDQ.fieldbyname('kartNo').AsInteger-1; kartElemanEkle.portNo.ItemIndex :=d.kartElemanDQ.fieldbyname('portNo').AsInteger-1; kartElemanEkle.aciklama.Text :=d.kartElemanDQ.fieldbyname('aciklama').Text; kartElemanEkle.maxKapanmaSuresi.Text :=d.kartElemanDQ.fieldbyname('maxKapanmaSuresi').Text; kartElemanEkle.kartNoKapat.ItemIndex :=d.kartElemanDQ.fieldbyname('kartNoKapat').AsInteger1; kartElemanEkle.portNoKapat.ItemIndex :=d.kartElemanDQ.fieldbyname('portNoKapat').AsInteger1; elemanDoldur; kartElemanEkle.elemanID.ItemIndex := kartElemanEkle.elemanID.Items.IndexOf(kartElemanTanim.DBGrid1.Columns[2].Field.Text); kartElemanEkle.elemanID.OnChange (Sender); kartElemanEkle.ekleDuzelt.Caption :='duzelt'; kartElemanEkle.showmodal; end; procedure TkartElemanTanim.RzToolButton3Click(Sender: TObject); begin with d.Query1 do begin if d.kartElemanDQ.FieldByName('hareketDurumu').AsInteger=0 then begin close; sql.Clear; sql.Add('select * from elemantanim WHERE elemanID='+d.kartElemanDQ.FieldByName('elemanID').AsString+' and id!='+d.kartElemanDQ.FieldByName('id').AsString); open; if d.Query1.RecordCount = 0 then begin close; sql.Clear; sql.Add('select * from cikiskurallari where elemanID1='+d.kartElemanDQ.FieldByName('elemanID').AsString+' or '+ 'elemanID2='+d.kartElemanDQ.FieldByName('elemanID').AsString+' or '+ 'elemanID3='+d.kartElemanDQ.FieldByName('elemanID').AsString+' or '+ 'elemanID4='+d.kartElemanDQ.FieldByName('elemanID').AsString+' or '+ 'elemanID5='+d.kartElemanDQ.FieldByName('elemanID').AsString);

102

open; if d.Query1.RecordCount > 0 then begin ShowMessage('Bu eleman k Elemanlar Kurallarnda kullanlm olduundan Silinemez'+#13#10+'ncelikle kurallardan silinmeli'+'!!!'); exit; end; end; end else begin close; sql.Clear; sql.Add('select * from cikiskurallari WHERE cikisElemanID='+d.kartElemanDQ.FieldByName('id').AsString); open; if d.Query1.RecordCount > 0 then begin ShowMessage ('Bu eleman k Kurallarnda kullanldndan silinemez'+#13#10+'ncelikle kurallardan silinmeli'+'!'); exit; end; end; if (MessageDlg('Tanml Eleman silmek istediinizden emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then exit; close; sql.Clear; sql.Add('DELETE from elemantanim WHERE id='+d.kartElemanDQ.FieldByName('id').AsString); ExecSQL; end; d.kartElemanDQ.Refresh; end; end.

Kart-Eleman Tanm Ekle/Dzelt Ekran


unit kartElemanEkleFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RzCmboBx, RzPanel, RzButton, ExtCtrls, RzEdit, jpeg, Mask; type TkartElemanEkle = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; pnlArama: TRzPanel; Label2: TLabel; Label1: TLabel; Label3: TLabel; ekleDuzelt: TLabel;

103

elemanID: TRzComboBox; portNo: TRzComboBox; kartNo: TRzComboBox; Label4: TLabel; aciklama: TRzMemo; olcumElemanLbl: TLabel; olcumElemanID: TRzComboBox; olcumElemanResmi: TImage; olcumElemaniAciklama: TRzMemo; maxKapanmaSuresi: TRzEdit; sn: TLabel; maxKapanmaSuresiLbl: TLabel; kartNoLbl: TLabel; portNoLbl: TLabel; portNoKapat: TRzComboBox; kartNoKapat: TRzComboBox; procedure RzToolButton1Click(Sender: TObject); procedure RzToolButton2Click(Sender: TObject); procedure elemanIDChange(Sender: TObject); procedure olcumElemanIDChange(Sender: TObject); procedure maxKapanmaSuresiKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var kartElemanEkle: TkartElemanEkle; implementation uses dataModul, kartElemanTanimFrm; {$R *.DFM} procedure TkartElemanEkle.RzToolButton1Click(Sender: TObject); var query,cikisDurumu,kartNoOff,portNoOff,cport,cportOff:string; begin if (kartNo.ItemIndex<0) then begin ShowMessage('Kart No Belirtilmeli'); kartNo.SetFocus; exit; end; if (portNo.ItemIndex<0) then begin ShowMessage('Port No Belirtilmeli'); portNo.SetFocus; exit; end; if (elemanID.ItemIndex<0) then begin ShowMessage('Eleman Belirtilmeli'); elemanID.SetFocus;

104

exit; end; if (elemanID.Value='1') and (portNo.Text<>'5') then begin ShowMessage('Rzgar Hz in Yanlzca 5 Numaral Port Kullanlabilir'); portNo.SetFocus; exit; end; cport := inttostr((kartNo.ItemIndex+1)*16); cport := inttostr(strtoint(cport)+portNo.ItemIndex+1); cikisDurumu := '0'; kartNoOff:=''; portNoOff:=''; cportOff :=''; with d.Query1 do begin close; sql.Clear; sql.Add('select hareketDurumu,inOu from eleman WHERE id='+elemanID.Value); Open; if d.Query1.RecordCount > 0 then begin if (fieldbyname('inOu').AsInteger = 0) and (portNo.Text>'5') then begin ShowMessage('Giri iin yanlzca 1-5 Numaral Portlar Kullanlabilir'); portNo.SetFocus; exit; end; if (fieldbyname('inOu').AsInteger = 1) and (portNo.Text<'6') then begin ShowMessage('k iin yanlzca 6-15 Numaral Portlar Kullanlabilir'); portNo.SetFocus; exit; end; With d.Query2 do begin close; sql.Clear; query := 'SELECT * FROM elemantanim WHERE '+ '((kartNo='+kartNo.Text+' and portNo='+portNo.Text+') or '+ '(kartNoKapat='+kartNo.Text+' and portNoKapat='+portNo.Text+')) '; if ekleDuzelt.Caption <>'ekle' then query := query +' and id<>'+d.kartElemanDQ.fieldbyname('id').Text; sql.Add(query); open; if d.Query2.RecordCount > 0 then begin ShowMessage(kartNo.Text+' nolu Kartn '+portNo.Text+' nolu Portu Daha Once Kullanlm'); portNo.SetFocus; exit; end; end;

105

if (fieldbyname('inOu').AsInteger = 1) then begin if (fieldbyname('hareketDurumu').AsInteger=2) then begin if (fieldbyname('inOu').AsInteger = 0) and (portNoKapat.Text>'5') then begin ShowMessage('Giri iin yanlzca 1-5 Numaral Portlar Kullanlabilir'); portNoKapat.SetFocus; exit; end; if (fieldbyname('inOu').AsInteger = 1) and (portNoKapat.Text<'6') then begin ShowMessage('k iin yanlzca 6-15 Numaral Portlar Kullanlabilir'); portNoKapat.SetFocus; exit; end; if (kartNo.Text=kartNoKapat.Text) and (portNo.Text=portNoKapat.Text) then begin ShowMessage('Ama ve Kapatma Portlar Ayn Olamaz'); portNoKapat.SetFocus; exit; end; kartNoOff := kartNoKapat.Text; portNoOff := portNoKapat.Text; cportOff := inttostr((kartNoKapat.ItemIndex+1)*16); cportOff := inttostr(strtoint(cportOff)+portNoKapat.ItemIndex+1); With d.Query2 do begin close; sql.Clear; query := 'SELECT * FROM elemantanim WHERE '+ '((kartNo='+kartNoKapat.Text+' and portNo='+portNoKapat.Text+') or '+ '(kartNoKapat='+kartNoKapat.Text+' and portNoKapat='+portNoKapat.Text+')) '; if ekleDuzelt.Caption <>'ekle' then query := query +' and id<>'+d.kartElemanDQ.fieldbyname('id').Text; sql.Add(query); open; if d.Query2.RecordCount > 0 then begin ShowMessage(kartNoKapat.Text+' nolu Kartn '+portNoKapat.Text+' nolu Portu Daha Once Kullanlm'); portNoKapat.SetFocus; exit; end; end; end; end; cikisDurumu := fieldbyname('hareketDurumu').AsString; end else begin if (olcumElemanID.ItemIndex<0) then begin ShowMessage('lm Eleman Belirtilmeli'); olcumElemanID.SetFocus; exit; end; end;

106

close; sql.Clear; if ekleDuzelt.Caption ='ekle' then query := 'INSERT INTO elemanTanim SET ' else query := 'UPDATE elemanTanim SET '; query := query +' kartNo='+kartNo.Text+',portNo='+portNo.Text+', maxKapanmaSuresi='''+maxKapanmaSuresi.Text+''', hareketDurumu='''+cikisDurumu+''',kartNoKapat='''+kartNoOff+''',portNoKapat='''+portNoOff+''',cNo Kapat='''+cportOff+''' ,cNo='+cport+', elemanID='''+elemanID.Value+''', olcumElemanID='''+olcumElemanID.Value+''', aciklama='''+aciklama.Text+''''; if ekleDuzelt.Caption ='duzelt' then query := query +' WHERE id='+d.kartElemanDQ.fieldbyname('id').AsString; SQL.Add(query); ExecSQL; end; d.kartElemanDQ.close; d.kartElemanDQ.open; close; end; procedure TkartElemanEkle.RzToolButton2Click(Sender: TObject); begin close; end; procedure TkartElemanEkle.elemanIDChange(Sender: TObject); var secilenIndex,indexSay,hareketDurumu:integer; elemanTipi,olcumElemani,Query:String; begin if kartElemanEkle.elemanID.ItemIndex < 0 then begin maxKapanmaSuresi.Visible := false; maxKapanmaSuresiLbl.Visible := false; sn.Visible := false; portNoKapat.Visible := false; portNoLbl.Visible := false; kartNoKapat.Visible := false; kartNoLbl.Visible := false; kartElemanEkle.olcumElemanID.Visible := false; kartElemanEkle.olcumElemanLbl.Visible := false; kartElemanEkle.Height := 180; exit; end; if (kartElemanEkle.kartNo.ItemIndex < 0) or (kartElemanEkle.portNo.ItemIndex < 0) then begin ShowMessage('ncelikle Kart ve Port Numaras Seilmeli'); elemanID.ItemIndex := -1; kartNo.SetFocus; exit;

107

end; secilenIndex := -1; with d.Query2 do begin close; SQL.Clear; sql.Add('select * from eleman e WHERE e.id='+kartElemanEkle.elemanID.Value+' limit 0,1'); open; elemanTipi := d.Query2.fieldbyname('inOu').Text; try hareketDurumu := d.Query2.fieldbyname('hareketDurumu').AsInteger; except end; kartElemanEkle.olcumElemanID.items.Clear; kartElemanEkle.olcumElemanID.Values.Clear; close; SQL.Clear; Query :='select e.adi,e.inOu,t.* from eleman e '+ ' LEFT JOIN elemantanim t ON e.id=t.elemanID'+ ' WHERE e.id='+kartElemanEkle.elemanID.Value+' and t.kartNo='+kartElemanEkle.kartNo.Value+ ' and t.portNo='+kartElemanEkle.portNo.Value; sql.Add(Query); open; olcumElemani := fieldbyname('olcumElemanID').Text; try secilenIndex := fieldbyname('hareketDurumu').AsInteger; except secilenIndex := -1; end; if (elemanTipi = '0') then begin kartElemanEkle.olcumElemanID.Visible := true; kartElemanEkle.olcumElemanLbl.Visible := true; kartElemanEkle.Height := 265; maxKapanmaSuresi.Visible := false; maxKapanmaSuresiLbl.Visible := false; sn.Visible := false; portNoKapat.Visible := false; portNoLbl.Visible := false; kartNoKapat.Visible := false; kartNoLbl.Visible := false; close; SQL.Clear; Query :='select *,e.birimi from olcumelemani o, eleman e WHERE e.id=o.elemanID and elemanID='+kartElemanEkle.elemanID.Value+' order by elemanBilgi'; sql.Add(Query); open; First; indexSay := -1; while not Eof do begin indexSay := indexSay + 1;

108

if (olcumElemani = d.Query2.fieldbyname('id').Text) then secilenIndex := indexSay; kartElemanEkle.olcumElemanID.AddItemValue(fieldbyname('elemanBilgi').Text,fieldbyname('id').T ext); Next; end; kartElemanEkle.olcumElemanID.ItemIndex := secilenIndex; end else begin kartElemanEkle.olcumElemanLbl.Visible := false; kartElemanEkle.olcumElemanID.Visible := false; if hareketDurumu > 1 then begin maxKapanmaSuresi.Visible := true; maxKapanmaSuresiLbl.Visible := true; sn.Visible := true; portNoKapat.Visible := true; portNoLbl.Visible := true; kartNoKapat.Visible := true; kartNoLbl.Visible := true; kartElemanEkle.Height := 250; end else begin maxKapanmaSuresi.Visible := false; maxKapanmaSuresiLbl.Visible := false; sn.Visible := false; portNoKapat.Visible := false; portNoLbl.Visible := false; kartNoKapat.Visible := false; kartNoLbl.Visible := false; kartElemanEkle.Height := 180; end; end; kartElemanEkle.olcumElemanID.OnChange(Sender); end; end; procedure TkartElemanEkle.olcumElemanIDChange(Sender: TObject); begin if olcumElemanID.Value<>'' then begin kartElemanEkle.olcumElemanResmi.Visible := true; kartElemanEkle.olcumElemaniAciklama.Visible := true; kartElemanEkle.olcumElemanLbl.Visible := true; with d.Query2 do begin close; SQL.Clear; sql.Add('select * from olcumelemani WHERE id='+olcumElemanID.Value+' limit 0,1'); open; olcumElemaniAciklama.Text:=fieldbyname('aciklama').Text; if fieldbyname('resim').Text<>'' then begin if FileExists(fieldbyname('resim').Text) then olcumElemanResmi.Picture.LoadFromFile(fieldbyname('resim').Text); end else kartElemanEkle.olcumElemanResmi.Picture := nil;

109

end; end else begin kartElemanEkle.olcumElemanResmi.Visible := false; kartElemanEkle.olcumElemanResmi.Picture := nil; kartElemanEkle.olcumElemaniAciklama.Visible := false; kartElemanEkle.olcumElemaniAciklama.Text := ''; end; end; procedure TkartElemanEkle.maxKapanmaSuresiKeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8, '0'..'9']) then Key := #0; end; end.

Otomatik Kontrol Tanmlar Ekran


unit cikisTanimFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, RzButton, ExtCtrls, RzPanel, StdCtrls, RzCmboBx, Mask, RzEdit, RzRadChk; type TcikisKuralTanim = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; RzToolButton3: TRzToolButton; DBGrid1: TDBGrid; Panel1: TPanel; elemanID: TRzComboBox; Label2: TLabel; procedure RzToolButton1Click(Sender: TObject); procedure olcumElemanDoldur; procedure RzToolButton2Click(Sender: TObject); function isaretSartKarsiligi(gelenSart:string):integer; procedure elemanIDChange(Sender: TObject); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure RzToolButton3Click(Sender: TObject); private { Private declarations } public

110

{ Public declarations } end; var cikisKuralTanim: TcikisKuralTanim; implementation uses dataModul, cikisKuralEkleFrm; {$R *.DFM} function TcikisKuralTanim.isaretSartKarsiligi(gelenSart:string):integer; begin if gelenSart='=' then Result := 0; if gelenSart='!=' then Result := 1; if gelenSart='>' then Result := 2; if gelenSart='>=' then Result := 3; if gelenSart='<' then Result := 4; if gelenSart='<=' then Result := 5; end; procedure TcikisKuralTanim.olcumElemanDoldur; var sayac:integer; begin with d.Query2 do begin close; sql.Clear; sql.Add('select * from eleman WHERE inOu=''0'' and aktif=''1'' '); open; for sayac := 1 to 5 do begin TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))).items.Clear; TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))).Values.Clear; end; while not Eof do begin for sayac := 1 to 5 do begin TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))).AddItemValue(fieldbyn ame('adi').Text,fieldbyname('id').Text); end; Next; end; close; sql.Clear; sql.Add('select * from elemantanim WHERE id='+cikisKuralTanim.elemanID.Value); open; if d.Query2.RecordCount > 0 then begin cikisKuralEkle.cikisData.items.Clear; cikisKuralEkle.cikisData.Values.Clear; if (FieldByName('hareketDurumu').AsInteger=1) then begin cikisKuralEkle.cikisData.AddItemValue('Kapat','1');

111

cikisKuralEkle.cikisData.AddItemValue('A','2'); end else begin cikisKuralEkle.cikisData.AddItemValue('Tam Kapat','3'); cikisKuralEkle.cikisData.AddItemValue('%10 A','4'); cikisKuralEkle.cikisData.AddItemValue('%20 A','5'); cikisKuralEkle.cikisData.AddItemValue('%30 A','6'); cikisKuralEkle.cikisData.AddItemValue('%40 A','7'); cikisKuralEkle.cikisData.AddItemValue('%50 A','8'); cikisKuralEkle.cikisData.AddItemValue('%60 A','9'); cikisKuralEkle.cikisData.AddItemValue('%70 A','10'); cikisKuralEkle.cikisData.AddItemValue('%80 A','11'); cikisKuralEkle.cikisData.AddItemValue('%90 A','12'); cikisKuralEkle.cikisData.AddItemValue('Tam A','13'); end; end; end; end; procedure TcikisKuralTanim.RzToolButton1Click(Sender: TObject); var sayac:integer; begin if elemanID.Value<'0' then begin ShowMessage('Kural Ekleyebilmek iim ncelikle bir k Eleman Kural Semelisiniz'); elemanID.SetFocus; exit; end; cikisKuralEkle.kuralAdi.Text := ''; for sayac:=1 to 5 do begin TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))).ItemIndex := -1; TRzComboBox(cikisKuralEkle.FindComponent('sart'+inttostr(sayac))).ItemIndex := 0; TRzEdit(cikisKuralEkle.FindComponent('deger'+inttostr(sayac))).Text := ''; TLabel(cikisKuralEkle.FindComponent('birimi'+inttostr(sayac))).Caption :=''; end; cikisKuralEkle.ve1.Checked :=false; cikisKuralEkle.cikisData.ItemIndex := -1; cikisKuralEkle.aktif.ItemIndex := 0; cikisKuralEkle.elemanBilgi.Caption := elemanID.Text; cikisKuralEkle.ekleDuzelt.Caption := 'ekle'; cikisKuralEkle.cikisElemanID.Caption := elemanID.Value; olcumElemanDoldur; cikisKuralEkle.ShowModal; end; procedure TcikisKuralTanim.RzToolButton2Click(Sender: TObject); var sayac,itemSay:integer; secElemanID,secSart:TRzComboBox; secDeger:TRzEdit; secVe : TRzCheckBox; begin

112

if d.cikisKurallariDQ.RecordCount = 0 then exit; if elemanID.Value<'0' then begin ShowMessage('Kural Dzenliyebilmek iim ncelikle bir k Eleman Kural Semelisiniz'); elemanID.SetFocus; exit; end; olcumElemanDoldur; cikisKuralEkle.ve1.Checked := false; for sayac:=1 to 5 do begin TLabel(cikisKuralEkle.FindComponent('birimi'+inttostr(sayac))).Caption:=''; TRzEdit(cikisKuralEkle.FindComponent('deger'+inttostr(sayac))).Text :=''; end; with d.cikisKurallariDQ do begin cikisKuralEkle.kuralAdi.Text := fieldByName('kuralAdi').Text; for sayac:=1 to 5 do begin secElemanID :=TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))); secSart := TRzComboBox(cikisKuralEkle.FindComponent('sart'+inttostr(sayac))); secDeger := TRzEdit(cikisKuralEkle.FindComponent('deger'+inttostr(sayac))); secVe := TRzCheckBox(cikisKuralEkle.FindComponent('ve'+inttostr(sayac-1))); if fieldByName('elemanID'+inttostr(sayac)).Text<>'' then begin if sayac>1 then begin secVe.Enabled := true; secVe.checked := true; end; for itemSay:=0 to secElemanID.Count do begin secElemanID.ItemIndex := itemSay; if secElemanID.Value = fieldByName('elemanID'+inttostr(sayac)).Text then Break; end; with d.query1 do begin close; sql.clear; sql.add('select birimi from eleman WHERE id='+d.cikisKurallariDQ.fieldByName('elemanID'+inttostr(sayac)).text); open; TLabel(cikisKuralEkle.FindComponent('birimi'+inttostr(sayac))).Caption:=fieldbyname('birimi').Text ; end; end else secElemanID.ItemIndex := -1; if fieldByName('sart'+inttostr(sayac)).Text<>'' then secSart.ItemIndex := isaretSartKarsiligi(fieldByName('sart'+inttostr(sayac)).text);

113

if fieldByName('deger'+inttostr(sayac)).Text<>'' then secDeger.Text := fieldByName('deger'+inttostr(sayac)).Text; end; if fieldByName('cikisData').AsInteger <3 then cikisKuralEkle.cikisData.ItemIndex := fieldByName('cikisData').AsInteger-1 else cikisKuralEkle.cikisData.ItemIndex := fieldByName('cikisData').AsInteger-3; cikisKuralEkle.elemanBilgi.Caption := elemanID.Text; cikisKuralEkle.ekleDuzelt.Caption := 'duzelt'; cikisKuralEkle.cikisElemanID.Caption := elemanID.Value; if fieldbyname('aktif').AsString ='1' then cikisKuralEkle.aktif.ItemIndex :=0 else cikisKuralEkle.aktif.ItemIndex :=1; end; cikisKuralEkle.ShowModal; end; procedure TcikisKuralTanim.elemanIDChange(Sender: TObject); begin with d.cikisKurallariDQ do begin close; sql.Clear; if elemanID.Value = '-1' then sql.Add('select * from cikiskurallari WHERE aktif=''1''') else if elemanID.Value = '-2' then sql.Add('select * from cikiskurallari WHERE aktif=''0''') else if elemanID.Value = '-3' then sql.Add('select * from cikiskurallari') else sql.Add('select * from cikiskurallari WHERE cikisElemanID='''+elemanID.Value+''''); open; end; end; procedure TcikisKuralTanim.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var deger :string; begin deger :=''; if datacol=1 then begin if Column.Field.AsString='0' then deger:='Pasif' else if Column.Field.AsString='1' then deger:='Aktif'; DBGrid1.Canvas.TextRect(Rect,Rect.Left+4,Rect.top+2,deger);

114

end; end; procedure TcikisKuralTanim.RzToolButton3Click(Sender: TObject); begin if d.cikisKurallariDQ.RecordCount = 0 then exit; if (MessageDlg('Seili Kural Silmek istediinizden emin misiniz?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then exit; with d.Query1 do begin close; sql.Clear; sql.Add('DELETE FROM cikiskurallari WHERE id='+d.cikisKurallariDQ.fieldbyname('id').AsString); ExecSQL; end; d.cikisKurallariDQ.Refresh; end; end.

Otomatik Kontrol Kurallar Ekle/Dzelt Ekran


unit cikisKuralEkleFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RzButton, RzEdit, StdCtrls, Mask, RzCmboBx, RzPanel, ExtCtrls, RzRadChk, RzBckgnd, RzLabel, dxCntner, dxEditor, dxExEdtr, dxEdLib; type TcikisKuralEkle = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; pnlArama: TRzPanel; Label2: TLabel; ekleDuzelt: TLabel; Label4: TLabel; kuralAdi: TRzEdit; aktif: TRzComboBox; elemanBilgi: TLabel; elemanID1: TRzComboBox; sart1: TRzComboBox; Label1: TLabel; Label3: TLabel; Label5: TLabel; RzSeparator1: TRzSeparator; ve1: TRzCheckBox; elemanID2: TRzComboBox; sart2: TRzComboBox; RzSeparator2: TRzSeparator;

115

ve2: TRzCheckBox; elemanID3: TRzComboBox; sart3: TRzComboBox; RzSeparator3: TRzSeparator; ve3: TRzCheckBox; RzSeparator4: TRzSeparator; birimi1: TLabel; birimi2: TLabel; birimi3: TLabel; birimi4: TLabel; birimi5: TLabel; cikisData: TRzComboBox; Label6: TLabel; deger1: TRzEdit; deger2: TRzEdit; deger3: TRzEdit; deger4: TRzEdit; deger5: TRzEdit; elemanID5: TRzComboBox; sart5: TRzComboBox; ve4: TRzCheckBox; sart4: TRzComboBox; elemanID4: TRzComboBox; cikisElemanID: TLabel; procedure ve1Click(Sender: TObject); procedure elemanID1Change(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure deger1KeyPress(Sender: TObject; var Key: Char); procedure RzToolButton2Click(Sender: TObject); function sartIsaretKarsiligi(gelenSart:string):String; procedure kuralAdiKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var cikisKuralEkle: TcikisKuralEkle; implementation uses dataModul, cikisTanimFrm; {$R *.DFM} function TcikisKuralEkle.sartIsaretKarsiligi(gelenSart:string):String; begin if gelenSart='eittir' then Result := '='; if gelenSart='eit deildir' then Result := '!='; if gelenSart='byktr' then Result := '>'; if gelenSart='byk veya eittir' then Result := '>='; if gelenSart='kktr' then Result := '<'; if gelenSart='kk veya eittir' then Result := '<='; end;

116

procedure TcikisKuralEkle.ve1Click(Sender: TObject); var sayac:integer; begin if TRzCheckBox(FindComponent(TRzCheckBox(Sender).name)).Checked then begin TRzComboBox(FindComponent('elemanID'+inttostr(TRzCheckBox(Sender).Tag+1))).Enabled := true; TRzComboBox(FindComponent('sart'+inttostr(TRzCheckBox(Sender).Tag+1))).Enabled := true; TRzEdit(FindComponent('deger'+inttostr(TRzCheckBox(Sender).Tag+1))).Enabled := true; if FindComponent('ve'+inttostr(TRzCheckBox(Sender).Tag+1))<>nil then TRzCheckBox(FindComponent('ve'+inttostr(TRzCheckBox(Sender).Tag+1))).Enabled := true; end else begin for sayac:= TRzCheckBox(Sender).Tag+1 to 5 do begin TRzComboBox(FindComponent('elemanID'+inttostr(sayac))).Enabled := false; TRzComboBox(FindComponent('sart'+inttostr(sayac))).Enabled := false; TRzEdit(FindComponent('deger'+inttostr(sayac))).Enabled := false; if FindComponent('ve'+inttostr(sayac))<>nil then begin TRzCheckBox(FindComponent('ve'+inttostr(sayac))).Enabled := false; TRzCheckBox(FindComponent('ve'+inttostr(sayac))).Checked := false; end; end; end; end; procedure TcikisKuralEkle.elemanID1Change(Sender: TObject); var query:string; birimLabel : TLabel; begin birimLabel := TLabel( FindComponent( 'birimi'+inttostr(TRzComboBox(Sender).Tag) ) ); with d.query1 do begin close; sql.clear; query := 'select birimi from eleman WHERE id='+TRzComboBox(Sender).value; sql.add(query); open; birimLabel.Caption:=fieldbyname('birimi').Text; end; end; procedure TcikisKuralEkle.RzToolButton1Click(Sender: TObject); var sayac:integer; query:String; secilenEleman,secilenSart:TRzComboBox; secileninDeger:TRzEdit; begin if kuralAdi.Text = '' then begin ShowMessage ('Kural Ad Belirtilmemi!'); kuralAdi.SetFocus; exit;

117

end; with d.Query1 do begin close; sql.Clear; if ekleDuzelt.Caption ='ekle' then query := 'INSERT INTO cikiskurallari SET' else query := 'UPDATE cikiskurallari SET'; query := query+' kuralAdi='''+kuralAdi.Text+''''; for sayac:= 1 to 5 do begin secilenEleman := TRzComboBox(cikisKuralEkle.FindComponent('elemanID'+inttostr(sayac))); secilenSart := TRzComboBox(cikisKuralEkle.FindComponent('sart'+inttostr(sayac))); secileninDeger := TRzEdit(cikisKuralEkle.FindComponent('deger'+inttostr(sayac))); if secilenEleman.Enabled then begin if secilenEleman.ItemIndex < 0 then begin ShowMessage ('lm eleman belirtilmemi!'); secilenEleman.SetFocus; exit; end; if secileninDeger.Text = '' then begin ShowMessage ('lm deeri belirtilmemi!'); secileninDeger.SetFocus; exit; end; query := query + ', elemanID'+IntToStr(sayac)+'='+secilenEleman.Value+', sart'+IntToStr(sayac)+'='''+sartIsaretKarsiligi(secilenSart.Text)+''', deger'+IntToStr(sayac)+'='+secileninDeger.Text; end else query := query + ', elemanID'+IntToStr(sayac)+'=null, sart'+IntToStr(sayac)+'=null, deger'+IntToStr(sayac)+'=null'; end; query := query+', cikisElemanID='''+cikisElemanID.Caption+''''; if cikisData.ItemIndex < 0 then begin ShowMessage ('Yaplacak Hareket Belirtilmemi!'); cikisData.SetFocus; exit; end; query := query+', cikisData='''+cikisData.Value+''''; query := query+', aktif='''+aktif.Value+''''; if ekleDuzelt.Caption ='duzelt' then query := query +' WHERE id='+d.cikisKurallariDQ.fieldbyname('id').AsString; sql.Add (query); ExecSQL; end; d.cikisKurallariDQ.Refresh; close; end; procedure TcikisKuralEkle.deger1KeyPress(Sender: TObject; var Key: Char);

118

begin if not (Key in [#8, '0'..'9', DecimalSeparator]) then Key := #0; end; procedure TcikisKuralEkle.RzToolButton2Click(Sender: TObject); begin close; end; procedure TcikisKuralEkle.kuralAdiKeyPress(Sender: TObject; var Key: Char); begin if (Key='i') or (Key='') then Key := ''; if (Key='') or (Key='I') then Key := 'I'; end; end.

Elle Kontrol Ekran


unit elleKontrolFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RzCmboBx, RzPanel, RzButton, ExtCtrls; type TelleKontrol = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; otoKontrol: TRzToolButton; pnlArama: TRzPanel; Label6: TLabel; cikisData: TRzComboBox; elemanID: TRzComboBox; Label1: TLabel; elemanBilgi: TLabel; RzToolButton3: TRzToolButton; cNo: TLabel; cNoKapat: TLabel; maxKapanmaSuresi: TLabel; procedure RzToolButton3Click(Sender: TObject); procedure elemanIDChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); procedure otoKontrolClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var elleKontrol: TelleKontrol;

119

implementation uses dataModul, anaFormFrm, bekleFrm; {$R *.DFM} procedure TelleKontrol.RzToolButton3Click(Sender: TObject); begin close; end; procedure TelleKontrol.elemanIDChange(Sender: TObject); var deger:string; begin with d.Query2 do begin close; sql.Clear; sql.Add('select * from elemantanim WHERE id='+elleKontrol.elemanID.Value); open; if d.Query2.RecordCount > 0 then begin cNo.Caption := FieldByName('cNo').AsString; cNoKapat.Caption := FieldByName('cNoKapat').AsString; maxKapanmaSuresi.Caption := FieldByName('maxKapanmaSuresi').AsString; elleKontrol.cikisData.items.Clear; elleKontrol.cikisData.Values.Clear; if (FieldByName('hareketDurumu').AsInteger=1) then begin elleKontrol.cikisData.AddItemValue('Kapat','1'); elleKontrol.cikisData.AddItemValue('A','2'); end else begin elleKontrol.cikisData.AddItemValue('Tam Kapat','3'); elleKontrol.cikisData.AddItemValue('%10 A','4'); elleKontrol.cikisData.AddItemValue('%20 A','5'); elleKontrol.cikisData.AddItemValue('%30 A','6'); elleKontrol.cikisData.AddItemValue('%40 A','7'); elleKontrol.cikisData.AddItemValue('%50 A','8'); elleKontrol.cikisData.AddItemValue('%60 A','9'); elleKontrol.cikisData.AddItemValue('%70 A','10'); elleKontrol.cikisData.AddItemValue('%80 A','11'); elleKontrol.cikisData.AddItemValue('%90 A','12'); elleKontrol.cikisData.AddItemValue('Tam A','13'); end; end; close; sql.Clear; sql.Add('select * from cikisDurum WHERE tanimliElemanID='+elemanID.Value+' and id=(select max(id) from cikisDurum WHERE tanimliElemanID='+elemanID.Value+')' ); open; elemanBilgi.Caption := ''; if d.Query2.RecordCount > 0 then begin

120

deger :=''; if FieldByName('cikisData').AsString='0' then deger:='Giri Eleman' else if FieldByName('cikisData').AsString='1' then deger:='Kapal' else if FieldByName('cikisData').AsString='2' then deger:='Ak' else if FieldByName('cikisData').AsString='3' then deger:='Tam Kapal' else if FieldByName('cikisData').AsString='4' then deger:='%10 Ak' else if FieldByName('cikisData').AsString='5' then deger:='%20 Ak' else if FieldByName('cikisData').AsString='6' then deger:='%30 Ak' else if FieldByName('cikisData').AsString='7' then deger:='%40 Ak' else if FieldByName('cikisData').AsString='8' then deger:='%50 Ak' else if FieldByName('cikisData').AsString='9' then deger:='%60 Ak' else if FieldByName('cikisData').AsString='10' then deger:='%70 Ak' else if FieldByName('cikisData').AsString='11' then deger:='%80 Ak' else if FieldByName('cikisData').AsString='12' then deger:='%90 Ak' else if FieldByName('cikisData').AsString='13' then deger:='Tam Ak' else deger:='Tanmsz'; elemanBilgi.Caption := 'Durumu: '+deger; if FieldByName('kuralID').AsInteger > 0 then begin elemanBilgi.Caption := elemanBilgi.Caption + ' (Otomatik)'; otoKontrol.Enabled := false; end else begin elemanBilgi.Caption := elemanBilgi.Caption + ' (Elle)'; if FieldByName('kuralID').AsInteger = 0 then otoKontrol.Enabled := true; end; end; end; end; procedure TelleKontrol.FormActivate(Sender: TObject); begin elleKontrol.elemanID.SetFocus; end; procedure TelleKontrol.RzToolButton1Click(Sender: TObject); var query:string; sayac:integer;

121

beklemeZamani:real; begin if elemanID.ItemIndex < 0 then begin ShowMessage ('k lemi Seilmemi!'); elemanID.SetFocus; exit; end; if cikisData.ItemIndex < 0 then begin ShowMessage ('Yaplacak Hareket Belirtilmemi!'); cikisData.SetFocus; exit; end; with application do if findcomponent('bekleForm')=NIL then CreateForm(TbekleForm,bekleForm); bekleForm.Show; bekleForm.Update; if anaForm.ComPort.Connected then begin sayac :=0; while (sayac<3000) do begin Application.ProcessMessages; Sleep(20); sayac := sayac+1; if not anaForm.ComPort.Connected then begin anaForm.ComPort.Connected := true; anaForm.Timer1.Enabled := false; Break; end; end; end else begin anaForm.ComPort.Connected := true; anaForm.Timer1.Enabled := false; end; if not anaForm.ComPort.Connected then begin bekleForm.Hide; bekleForm.free; ShowMessage ('Seri letiim Portu Megul Olduundan leminiz Yaplamad!'); exit; end; with d.Query2 do begin close; sql.Clear; query := 'SELECT max(islemZamani) as islemZamani FROM cikisDurum WHERE tanimliElemanID='+elemanID.Value+' and cikisData='+cikisData.Value+' and id=(select max(id) from cikisDurum WHERE tanimliElemanID='+elemanID.Value+')'; sql.Add(query); open; end; if d.Query2.FieldByName('islemZamani').Text ='' then begin

122

anaForm.comPortOkunan := -1; if cikisData.Value='1' then begin anaForm.ComPort.WriteStr(cNo.Caption); end else if cikisData.Value='2' then begin anaForm.ComPort.WriteStr(chr(strtoint(cNo.Caption)+128)); end else if cikisData.Value='3' then begin anaForm.ComPort.WriteStr(chr(strtoint(cNoKapat.Caption)+128)); sayac :=0; while (sayac<100) do begin Application.ProcessMessages; Sleep(10*strtoint(maxKapanmaSuresi.Caption)); sayac:=sayac+1; end; anaForm.ComPort.WriteStr(cNoKapat.Caption); end else if cikisData.Value>'3' then begin anaForm.ComPort.WriteStr(chr(strtoint(cNoKapat.Caption)+128)); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep(10*strtoint(maxKapanmaSuresi.Caption)); sayac:=sayac+1; end; anaForm.ComPort.WriteStr(cNoKapat.Caption); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep(10); sayac:=sayac+1; end; anaForm.ComPort.WriteStr(chr(strtoint(cNo.Caption)+128)); sayac:=strtoint(maxKapanmaSuresi.Caption); beklemeZamani := round((sayac-3)*10/100*10); sayac :=0; while (sayac<100)do begin Application.ProcessMessages; Sleep( round(beklemeZamani)) ; sayac:=sayac+1; end; anaForm.ComPort.WriteStr(cNo.Caption); end; sayac :=0; while (sayac<150) do begin Application.ProcessMessages; Sleep(20); sayac := sayac+1; end; end; with d.Query2 do begin close; sql.Clear;

123

query := 'insert into cikisDurum set tanimliElemanID='+elemanID.Value+', cikisData='+cikisData.Value+', kuralID=0, islemZamani='''+anaForm.TarihToMySql(datetimetostr(anaForm.simdi))+''''; sql.Add(query); ExecSQL; end; elemanID.OnChange(Sender); bekleForm.Hide; bekleForm.free; anaForm.ComPort.Connected := false; d.sonDurumlar.Refresh; anaForm.Timer1.Enabled := true; close; end; procedure TelleKontrol.otoKontrolClick(Sender: TObject); var query,sonCikisData:string; begin with d.Query2 do begin close; sql.Clear; sql.Add('select * from cikisDurum WHERE kuralID=0 and tanimliElemanID='+elemanID.Value+' and id=(select max(id) from cikisDurum WHERE tanimliElemanID='+elemanID.Value+')' ); open; if d.Query2.RecordCount > 0 then begin sonCikisData := fieldByName('cikisData').AsString; close; sql.Clear; query := 'insert into cikisDurum set tanimliElemanID='+elemanID.Value+', cikisData='+sonCikisData+', kuralID=-1, islemZamani='''+anaForm.TarihToMySql(datetimetostr(anaForm.simdi))+''''; sql.Add(query); ExecSQL; end; end; otoKontrol.Enabled := false; close; end; end.

124

Grafik Kriter Seim Ekran


unit grafikSecFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, RzEdit, RzCmboBx, RzButton, ExtCtrls, RzPanel, dxExEdtr, dxEdLib, dxCntner, dxEditor, ToolEdit, ComCtrls; type TgrafikSec = class(TForm) RzToolbar1: TRzToolbar; RzToolButton1: TRzToolButton; RzToolButton2: TRzToolButton; GroupBox1: TGroupBox; Label3: TLabel; elemanID: TRzComboBox; basZaman: TdxTimeEdit; bitZaman: TdxTimeEdit; basTarih: TDateTimePicker; bitTarih: TDateTimePicker; Label1: TLabel; Label2: TLabel; procedure RzToolButton2Click(Sender: TObject); procedure RzToolButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var grafikSec: TgrafikSec; implementation uses dataModul, grafikFrm; {$R *.DFM} procedure TgrafikSec.RzToolButton2Click(Sender: TObject); begin close; end; procedure TgrafikSec.RzToolButton1Click(Sender: TObject); begin if elemanID.ItemIndex < 0 then begin ShowMessage('Ltfen ncelenecek Eleman Seiniz'); elemanID.SetFocus; exit; end;

125

with d.grafikDQ do begin close; sql.clear; sql.add(' select olcumZamani as Zaman, ortalama as Deger from elemanortalama where eleman='+elemanID.Value); open; end; grafikForm.grafikTitle.Caption := elemanID.text+' '+datetostr(basTarih.DateTime)+' '+FormatDateTime('hh:mm',basZaman.time)+' - '+datetostr(bitTarih.DateTime)+' '+FormatDateTime('hh:mm',bitZaman.time)+' Aras Verileri'; grafikForm.showmodal; end; end.

126

EK 3. WEB PROGRAMI KODLARI global.php:


<?php $hostname = "localhost"; $username = "sera"; $password = "sifresera"; $dbName = "seraotomasyonu"; @MYSQL_CONNECT($hostname,$username,$password) OR DIE("<br><center><strong>!!! Database Balants Kurulamad !!!</strong></center>"); @mysql_select_db($dbName) or DIE("<br><center><strong>!!! Database Balants Kurulamad !!!</strong></center>"); ?>

index.php:
<?php include ("global.php"); function authenticate() { header('WWW-Authenticate: Basic realm="Test Authentication System"'); header('HTTP/1.0 401 Unauthorized'); echo "Giri ptal Edildi\n"; exit; } if ( ($_SERVER['PHP_AUTH_USER']!='admin') or (MD5($_SERVER['PHP_AUTH_PW'])!='8f10d078b2799206cfe914b32cc6a5e9')){ authenticate(); } ?> <html> <head> <link rel="stylesheet" type="text/css" href="styles.css" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> <script type="text/javascript" language="JavaScript1.2" src="js/jquery.js"></script> <script type="text/javascript" language="JavaScript1.2" src="js/jquery.fastserialize.js"></script> </head> <body background="images/bg.png" > <center> <table width="700" border="0" background="images/tablobg.png"> <tr height="100"> <td colspan="2" >&nbsp;

127

</td> </tr > <tr> <td valign="top"> <table width="100%" id="okunanDeger" border="0" cellspacing="0" cellpadding="0" > <tbody id="okunanBalk"> <tr > <td colspan="5" class="Bold cizSag cizSol cizUst cizAlt ">&nbsp;Son lme lemleri</td> </tr> <tr > <td class="etiket cizSol cizSag cizAlt">&nbsp;lme lemi</td> <td class="etiket cizSag cizAlt">&nbsp;Max</td> <td class="etiket cizSag cizAlt">&nbsp;Min</td> <td class="etiket cizSag cizAlt">&nbsp;lm</td> <td class="etiket cizSag cizAlt">&nbsp;Son lm</td> </tr> </tbody> <tbody id="okunanDegerler"> </tbody> <tbody id="okunanDegerlerYukleniyor" style="display:none"> <tr bgcolor="#DDDDDD" height="100"> <th >Ykleniyor<br><img src="images/yukleniyor.gif"></th> </tr> </tbody> <tbody id="okunanDegerlerTaslak" style="display:none"> <tr height="18" > <td class="baslik cizSol cizSag cizAlt">&nbsp;</td> <td class="kucukYazi cizSag cizAlt">&nbsp;</td> <td class="kucukYazi cizSag cizAlt">&nbsp;</td> <td class="kucukYazi cizSag cizAlt Bold">&nbsp;</td> <td class="kucukYazi cizSag cizAlt">&nbsp;</td> </tr> </tbody> </table> <br> <table width="100%" id="sonDurum" border="0" cellspacing="0" cellpadding="0" > <tbody id="sonDurumBaslik"> <tr height="18" > <td colspan="4" class="Bold cizSag cizSol cizUst cizAlt ">&nbsp;k lemleri Durumu</td> </tr> <tr height="18" > <td class="etiket cizSag cizSol cizAlt ">&nbsp;k lemi</td> <td class="etiket cizSag cizAlt">&nbsp;lem Zaman</td> <td class="etiket cizSag cizAlt">&nbsp;Durumu</td> <td class="etiket cizSag cizAlt">&nbsp;Kontrol</td> </tr> </tbody> <tbody id="sonDurumlar"> </tbody> <tbody id="sonDurumlarYukleniyor" style="display:none">

128

<tr bgcolor="#DDDDDD" height="100"> <th >Ykleniyor<br><img src="images/yukleniyor.gif"></th> </tr> </tbody> <tbody id="sonDurumlarTaslak" style="display:none"> <tr height="18" > <td class="baslik cizSol cizSag cizAlt">&nbsp;</td> <td class="kucukYazi cizSag cizAlt">&nbsp;</td> <td class="kucukYazi cizSag cizAlt Bold">&nbsp;</td> <td class="kucukYazi cizSag cizAlt">&nbsp;</td> </tr> </tbody> </table> </td> <td rosspan="2" valign="top"> <table> <tr height="18"> <td align="center" class="Bold"> Sistem Zaman<br> <span id="sistemZamani" class="kucukYazi Bold"></span><br> <br> <br> </td> </tr > </table> <table cellpadding="0" cellspacing="0" border="0"> <tr height="161"> <td height="161" width="161" background="images/pusula.gif" > <div id="tasiyici" style="display: block; width:161px; height:161px; overflow:hidden;"> <img name="yonGoster" id="yonGoster" src="images/yonGoster.gif" width="161" height="161"> </div> </td> </tr > <tr height="18"> <td align="center"> <span id="ruzgarHizi" class="etiket Bold"></span> </td> </tr > </table> </td></tr></table> </center> <script language="javascript" type="text/javascript"> var aci, w, h, $resim; $( function() { aci=0; $resim=$("#yonGoster").css("display","block"); h=$resim.height();

129

w=$resim.width(); } ); function rotateElement(element,angle) { // Rotating the element, depending on the browser: var rotate = 'rotate('+angle+'deg)'; if(element.css('MozTransform')!=undefined) element.css('MozTransform',rotate); else if(element.css('WebkitTransform')!=undefined) element.css('WebkitTransform',rotate); // A version for internet explorer using filters, works but is a bit buggy (no surprise here): else if(element.css("filter")!=undefined) { var cos = Math.cos(Math.PI * 2 / 360 * angle); var sin = Math.sin(Math.PI * 2 / 360 * angle); sin1=-1*sin; element.css("filter","progid:DXImageTransform.Microsoft.Matrix(M11="+cos+",M12="+sin 1+",M21="+sin+",M22="+cos+",SizingMethod='auto expand',FilterType='nearest neighbor')"); element.css("marginLeft",-Math.floor((element.width()-w)/2)); element.css("marginTop",-Math.floor((element.height()-h)/2)); } } var okunanDegerleriCagir=function () { $("#okunanDegerlerYukleniyor").show(); $("#okunanDegerler").hide(); $("#okunanDegerler").html(""); $.getJSON("okunanDegerleriDoldur.php", { istekZamani: new Date().getTime() }, function(gelenBilgi){ if (gelenBilgi) { if (gelenBilgi.kayitSayisi>0){ $(gelenBilgi.satirlar).each( function(){ $("#okunanDegerlerTaslak * TD:nthchild(1)").html('&nbsp;'+this.elemanAdi); $("#okunanDegerlerTaslak * TD:nthchild(2)").html('&nbsp;'+this.enYuksek); $("#okunanDegerlerTaslak * TD:nthchild(3)").html('&nbsp;'+this.enDusuk); $("#okunanDegerlerTaslak * TD:nthchild(4)").html('&nbsp;'+this.ortalama); $("#okunanDegerlerTaslak * TD:nthchild(5)").html('&nbsp;'+this.olcumZamani); $("#okunanDegerler").append( $("#okunanDegerlerTaslak").html() ); if (this.elemanID==1) { $("#ruzgarHizi").html(this.ortalama); }

130

if (this.elemanID==2) { rotateElement( $resim, this.elemanOrt ); } }); $("#okunanDegerlerYukleniyor").hide(); $("#okunanDegerler").show(); } } }); }; var sonDurumlariCagir=function () { $("#sonDurumlarYukleniyor").show(); $("#sonDurumlar").hide(); $("#sonDurumlar").html(""); $.getJSON("sonDurumlariDoldur.php", { istekZamani: new Date().getTime() }, function(gelenBilgi){ if (gelenBilgi) { if (gelenBilgi.kayitSayisi>0){ $(gelenBilgi.satirlar).each( function(){ $("#sonDurumlarTaslak * TD:nthchild(1)").html('&nbsp;'+this.elemanAdi); $("#sonDurumlarTaslak * TD:nthchild(2)").html('&nbsp;'+this.islemZamani); $("#sonDurumlarTaslak * TD:nthchild(3)").html('&nbsp;'+this.cikisData); $("#sonDurumlarTaslak * TD:nthchild(4)").html('&nbsp;'+this.islemiYapan); $("#sonDurumlar").append( $("#sonDurumlarTaslak").html() ); }); $("#sonDurumlarYukleniyor").hide(); $("#sonDurumlar").show(); } } }); }; var timer=setInterval("sistemKontrol()",10000); var timer2=setInterval("sistemZamaniYaz()",1000); function sistemKontrol(){ okunanDegerleriCagir(); sonDurumlariCagir(); } function sistemZamaniYaz(){ var currentTime = new Date() var month = currentTime.getMonth() + 1 var day = currentTime.getDate() var year = currentTime.getFullYear() var hour=currentTime.getHours(); var min=currentTime.getMinutes(); var sec=currentTime.getSeconds(); if (day<=9) { day="0"+day; } if (month<=9) { month="0"+month; }

131

if (hour<=9) { hour="0"+hour; } if (min<=9) { min="0"+min; } if (sec<=9) { sec="0"+sec; } $("#sistemZamani").html(day + "/" + month + "/" + year + " "+hour+":"+min+":"+sec); } okunanDegerleriCagir(); sonDurumlariCagir(); sistemZamaniYaz(); </script> </body> </html>

okunanDegerleriDoldur.php:
<?php header("Content-Type: text/javascript; charset=iso-8859-9"); function authenticate() { header('WWW-Authenticate: Basic realm="Test Authentication System"'); header('HTTP/1.0 401 Unauthorized'); echo "Giri ptal Edildi\n"; exit; } if ( ($_SERVER['PHP_AUTH_USER']!='admin') or (MD5($_SERVER['PHP_AUTH_PW'])!='8f10d078b2799206cfe914b32cc6a5e9')){ authenticate(); } include ("global.php"); $sql="select e.id as elemanID,e.adi,CONCAT(eo.enYuksek,' ',e.birimi) as enYuksek,CONCAT(eo.enDusuk,' ',e.birimi) as enDusuk,CONCAT(eo.ortalama,' ',e.birimi) as ortalama, eo.olcumZamani as olcumZamani,eo.ortalama as ort from eleman e left join elemanortalama eo ON eo.eleman=e.id and eo.id=(select max(id) from elemanortalama where eleman=e.id) where e.aktif='1' and inOu='0' group by e.id "; $olcumGelen=mysql_query($sql); @$olcumSay=mysql_num_rows($olcumGelen); echo "{"; echo "\"kayitSayisi\":'$olcumSay',"; $ilkSatirGecildi=false; echo "\"satirlar\":["; while ($olcum=@mysql_fetch_array($olcumGelen)) { if ($ilkSatirGecildi) echo ","; else $ilkSatirGecildi =true; echo "{"; echo "\"elemanAdi\":\"".($olcum["adi"])."\","; echo "\"elemanID\":\"".($olcum["elemanID"])."\","; echo "\"elemanOrt\":\"".($olcum["ort"])."\",";

132

echo "\"enYuksek\":\"".(($olcum["enYuksek"])?$olcum["enYuksek"]:"<center>-</center>")."\","; echo "\"enDusuk\":\"".( ($olcum["enDusuk"])?$olcum["enDusuk"]:"<center>-</center>")."\","; echo "\"ortalama\":\"".( ($olcum["ortalama"])?$olcum["ortalama"]:"<center>-</center>")."\","; echo "\"olcumZamani\":\"".(($olcum["olcumZamani"]) ? (substr($olcum["olcumZamani"],8,2)."/".substr($olcum["olcumZamani"],5,2)."/".substr($olcum["olcu mZamani"],0,4)." ".substr($olcum["olcumZamani"],11)):"<center>-</center>")."\""; echo "}"; } echo "]"; echo "}"; ?>

sonDurumlariDoldur.php:
<?php header("Content-Type: text/javascript; charset=iso-8859-9"); function authenticate() { header('WWW-Authenticate: Basic realm="Test Authentication System"'); header('HTTP/1.0 401 Unauthorized'); echo "Giri ptal Edildi\n"; exit; } if ( ($_SERVER['PHP_AUTH_USER']!='admin') or (MD5($_SERVER['PHP_AUTH_PW'])!='8f10d078b2799206cfe914b32cc6a5e9')){ authenticate(); } include ("global.php"); $sql="select e.adi, cd.islemZamani as 'islemZamani',cikisData,IF(kuralID is null,'', IF (kuralID>0, 'Otomatik' ,'Elle') ) as 'islemiYapan' from eleman e left join elemantanim et ON et.elemanID=e.id left join cikisdurum cd ON cd.tanimliElemanID=et.id and cd.id=(select max(id) from cikisdurum where tanimliElemanID=et.id) WHERE e.inOu='1' and e.aktif='1' "; $sonDurumGelen=mysql_query($sql); @$sonDurumSay=mysql_num_rows($sonDurumGelen); echo "{"; echo "\"kayitSayisi\":'$sonDurumSay',"; $ilkSatirGecildi=false; echo "\"satirlar\":["; while ($sonDurum=@mysql_fetch_array($sonDurumGelen)) { if ($ilkSatirGecildi) echo ","; else $ilkSatirGecildi =true; echo "{"; echo "\"elemanAdi\":\"".($sonDurum["adi"])."\","; echo "\"islemiYapan\":\"".($sonDurum["islemiYapan"])."\",";

133

echo "\"islemZamani\":\"".(($sonDurum["islemZamani"]) ? (substr($sonDurum["islemZamani"],8,2)."/".substr($sonDurum["islemZamani"],5,2)."/".substr($sonD urum["islemZamani"],0,4)." ".substr($sonDurum["islemZamani"],11)):"<center>-</center>")."\","; echo "\"cikisData\":\"".( durumGetir($sonDurum["cikisData"]) )."\""; echo "}"; } echo "]"; echo "}"; function durumGetir($gelenCikisData){ $donusBilgi=""; // (is_numeric($gelenCikisData))? $gelenCikisData=$gelenCikisData:$gelenCikisData=""; switch ($gelenCikisData) { case "0": $donusBilgi = "Giri Eleman";break; case "1": $donusBilgi = "Kapal";break; case "2": $donusBilgi = "Ak";break; case "3": $donusBilgi = "Tam Kapal";break; case "4": $donusBilgi = "%10 Ak";break; case "5": $donusBilgi = "%20 Ak";break; case "6": $donusBilgi = "%30 Ak";break; case "7": $donusBilgi = "%40 Ak";break; case "8": $donusBilgi = "%50 Ak";break; case "9": $donusBilgi = "%60 Ak";break; case "10": $donusBilgi = "%70 Ak";break; case "11": $donusBilgi = "%80 Ak";break; case "12": $donusBilgi = "%90 Ak";break; case "13": $donusBilgi = "Tam Ak";break; default: $donusBilgi = "Tanmsz"; } return $donusBilgi; } ?>

134

You might also like