2 Mart 2017 Perşembe

Delphide uygulamanın veya dll in path ın bulunması


function GetAppFilePathAndName: string;
var
  pName: PChar;
  pName2: PChar;
  index: integer;
begin
  GetMem(pName, 200);
  Windows.GetModuleFileName(HInstance, pName, 200);
  result := string(pName);
  index := Pos(':', result);
  if index > 1 then
  begin
    pName2 := @pName[index - 2];
    result := string(pName2);
  end
  else
    result := string(pName);

  FreeMem(pName);
end;

Delphi Indy TCP componentini kullanarak data gönderip alma

function TcpClientWriteThenRead(inIP: String; inPort: U32; inTimeout: U32; txData: P_Char; txDataLen: U32; RxData: P_Char;
  var RxDataIndex: U32; inIdSSLOpenSSL: TIdSSLIOHandlerSocketOpenSSL = nil): TReturn;
var
  IdTCPClient: TIdTCPClient;
  RxBuf: TIdBytes;
  KeepAlife: TDateTime;
  RxDataLen, Maxbuffer: U32;
  idTXData: TIdBytes;
begin
  IdTCPClient := TIdTCPClient.Create;

  if Assigned(inIdSSLOpenSSL) then
  Begin
    IdTCPClient.IOHandler := inIdSSLOpenSSL;
  End;
  result.Init;
  try
    Maxbuffer := RxDataIndex;
    RxDataIndex := 0;
    IdTCPClient.Host := inIP;
    IdTCPClient.Port := inPort;
    IdTCPClient.ConnectTimeout := inTimeout;
    result.SetDurum(4, 'Connecting...');

    IdTCPClient.Connect;
    // if not IdTCPClient.Connected then IdTCPClient.Connect;
    if IdTCPClient.Connected then
    begin

      result.SetDurum(2, 'Connected after send data');
      SetLength(idTXData, txDataLen);
      memcpy(@idTXData[0], txData, txDataLen);
      IdTCPClient.Socket.UseNagle := false;
      IdTCPClient.Socket.write(idTXData);
      SetLength(idTXData, 0);
      idTXData := nil;
      // IdTCPClient.Socket.Write(TIdBytes(txData),txDataLen);
      RxBuf := nil;
      KeepAlife := IncMilliSecond(now, inTimeout);
      while (IdTCPClient.Connected) do
        with IdTCPClient.IOHandler do
        begin
          if not InputBufferIsEmpty then
          begin
            result.SetOk('Receiver Data');
            KeepAlife := IncMilliSecond(now, 200);
            InputBuffer.ExtractToBytes(RxBuf);
            RxDataLen := length(RxBuf);
            memcpy(@RxData[RxDataIndex], @RxBuf[0], RxDataLen);
            RxDataIndex := RxDataIndex + RxDataLen;
            /// Debug('%d/%d',[RxDataIndex ,RxDataLen]);
            CheckForDataOnSource(1);
            RxBuf := nil;
            if RxDataIndex > Maxbuffer then
              IdTCPClient.Disconnect;
          end
          else
          begin
            if (KeepAlife <= now) then
            begin
              IdTCPClient.Disconnect;
            end;
          end;
        end;
      if RxDataIndex = 0 then
        result.SetDurum(-4, 'No Receiver data');
    end
    else
      result.SetDurum(-1, 'not Connect');
  except
    on e: exception do
      result.SetDurum(-2, 'TCP Err:' + e.Message);
  end;
  try
    if Assigned(IdTCPClient) then
      FreeAndNil(IdTCPClient);
  except
  end;

end;

Bilgisayar Mühendisliği Yüksek Lisans Tezimin bir parcası "Mobil cihazlar için araç kaza önleme asistan uygulaması"

  


1.      GİRİŞ:

Yaşadığımız ülkede her yıl meydana gelen trafik kazalarında birçok insan yaralanmakta ve hayatını kaybetmektedir aynı zamanda büyük maddi zararı da oluşmaktadır. 2015 yılında Türkiye genelinde meydana gelen 1 313 359 trafik kazalarında 7 530 kişi yaşamını yitirirken 304 421 kişi de yaralanmıştır.[1]
Bilinçli sürücüler edindikleri tecrübeleri ve kullandıkları çeşitli teknolojik mobil akıllı cihazlarla hem kendi güvenliklerini hem de çevre güvenliklerini artırarak, yaranmalı ve ölümlü kazaları azaltmaktadır. Günümüzde çeşitli teknolojilerde mobil akıllı yön bulma sistemleri ve mobil teknolojilerle birçok çalışma gerçekleştirilmiştir.
Şimşek ve çalışma arkadaşları tarafından gerçekleştirilen çalışmada android tabanlı konum tespiti ve konum bilgisinin SMS yoluyla ilgili numaraya gönderilmesi sağlanmıştır [2].
Sivri ve çalışma arkadaşı Sayar tarafından yapılan çalışmada ise kayıp kişilerin yerlerinin tespiti ve bulunması hedeflenmiştir. Kaybolan kişi telefonunda bulunan mobil uygulama ile konum bilgisini çağrı merkezine mail olarak göndermektedir [3].
Kaya okay ve çalışma arkadaşı Müngen tarafından gerçekleştirilen çalışmada ise işyerinde çalışan bir kişinin şirket cep telefonunun iş amaçlı kullanıldığı süre zarfında konum bilgisinin alınıp kaydedilmesi sağlanmıştır. Çalışmada kişilerin hangi konumda ne kadar zaman harcadıkları belirlenerek iş verimliliğinin artırılması hedeflenmektedir [4].
2013 yılında Demircan ve çalışma arkadaşları tarafından gerçekleştirilen çalışmada trafik kazaları için acil yardım çağrı sistemi tasarlanmıştır. Gerçekleştirdikleri çalışmada GPS(Global Positioning System) modülü kullanılarak konum bilgisi belirlenmiş ve GSM(Global System for Mobile Communications) modül kullanılarak konum bilgisi sağlık ekiplerine ulaştırılmıştır [5].




2.      Problem Durumu

Trafik kazalarındaki en büyük sorun yorgun, uykusuz ve seyahat ettikleri güzergahta tahmin edilemez yol durumundan dolayı araç kullanım şeklidir. İnsanların seyahat ettikleri güzergahlarda mevsimsel ve yol bakım zamanlarına göre araç sürüşü hayati risk taşımaktadır. Bazı bölgelerde kış mevsimlerinde yollarda don olayları, yağmurlu hava şartlarda kaygan yol durumları, fabrika atıklarından veya hava şartlarından dolayı sisli hava durumların ani değişimlerinden dolayı insanların seyahat durumlarında kendini ve çevredeki insanları yaralanmalı ve ölüm riskine sokmaktadır. [1]
Günümüzde insanlar seyahat etmeden önce hava durumu, yol durumunu televizyonlar ve internet kullanan cihazlardan öğrenmektedir fakat seyahat esnasında güzergahlarında anlık hava şartlarındaki değişimleri ve plansız yol arıza ve bakım bilememektedir. Burada çözümü sürekli internete bağlı ve konum verilerini alan mobil cihazlarla bulmaktadır.

3.      Kavramsal Çerçeve

3.1.Kullanılan Teknolojiler

Mobil uygulamada Android developer studio, web servis(SOAP) ve merkez sunucu ms sql kullanılmıştır.

3.1.1.      Android developer studio

Android uygulamalarda çoğunlukla java dilinde geliştirilmektedir, Platform olarak java da popüler bir IDE olan Android developer studio  (şekil 3.1) platformu tercih edilmiştir.
Mobil cihaz dünyası, iki işletim sisteminin elinde Android ve iOS. Her konuda ciddi bir çekişme içinde olan bu iki platform, uygulama konusunda da geliştiricileri ikiye bölmeyi başarmakta. Kimi geliştiriciler sadece iOS uygulamaları üzerinde çalışmakta. Bazı geliştiriciler ise tercihlerini Android'ten yana kullanmaktadır.
Android üzerine yeni API lar ve modüller eklenerek mobil cihaz uygulama gelişmiş teknoloji ile imkan veren Android developer studio en çok tercih edilen IDE lerden birisidir, daha önceden Eclipse tercih edilirdi. Fakat Google 2014 yılında android uygulamalarında bu platformu geliştiricilere sunmuş ve desteğini de Android develeport studio platformunda devem ettirmiştir[6].



Şekil 3.1

3.1.2.      Web servis(SOAP)

Mobil uygulamanın merkez ile haberleşeceği birimdir.
Web servis(Şekil 3.2) web üzerinden http protokolü ile hizmet veren program parçasıdır.
Bir web servisten veri okuyup, veri almak istediğinizde bilgisayarınızda veri transferinin gerçekleşmesi için bir TCP port açılır ve bu portan veri okunup veri gönderilir gönderim işlemi tamamlandıktan sonra port kapatılır.
Bir kullanıcının HTTP üzerinden bir web servisi kullanmasına RPC(Remote Procedure Call) denmektedir HTPP üzerinden yapılan bu çağrımlara karşı SOAP(Simple Obect Access Protocol) dediğimiz protokol XML çıktıları üretir. Veri transferi bu XML çıktıları sayesinde yapıldığı için platform bağımsız bir yapısı vardır. Web servisi kullanmak istediğiniz program parçasının hangi dilde yazıldığının pek bir önemi yoktur. Çünkü sonuçta Web servisten alacağınız veri tipi XML text dir.[7]
SOAP(tr: Basit Nesne Erişim Protokolu) en temel anlamda, internet üzerinden küçük miktarda bilgileri ya da mesajları aktarma protokoludur. SOAP mesajları XML formatındadırlar ve genellikle HTTP(Hyper Text Transfer Protocol) protokolu(bazende TCP/IP) kullanılarak gönderilirler. Burada dikkat edilmesi gereken en önemli durumlardan biri SOAP bizi XML tabanlı kullanıma mecbur bırakır. Bu konuda esnek değildir.


Şekil 3.2


3.1.3.      MS SQL

Mobil uygulamanın merkez ile haberleşeceği birimin kullanacağı MSSQL (şekil 3.3)veri tabanıdır.
Veritabanı düzenli birçok verilerin toplandığı bir yapıdır. Daha geniş anlamda birbirleri ile bir şekilde ilişkili olan verilerin (tekrarsız olmak şartıyla) birçok amaç dahilinde depolanmasına imkan veren yapılara biz veritabanı diyoruz. MSSQL Microsoft firmasının oluşturduğu bilgi yönetimi ve depolama amacıyla kullanılan bir veritabanı türüdür.
SQL; “Relational Database Management System” (RDMS)‘dir. Türkçe’ye “İlişkisel veritabanı yönetim sistemi” olarak çevrilmektedir. İlişkisel veritabanı yönetim sistemi kelimesini irdelediğimizde iki sonuç çıkartabiliriz. Birincisi SQL Server içinde depolanan veri birbirleri ile ilişkili veritabanları içinde saklanır. İkincisi ise SQL Server bir yönetim sistemi değil “veritabanıdır”. SQL’in açılımı ise Structed Query Language – Yapılandırılmış Sorgu Dili’dir. Veritabanı bu yazılım dili ile yönetilir.


Şekil 3.3

4.      Yöntem

4.1.Gerçekleştirilen uygulamanın akış şeması


Şekil 4.1

4.2.Senaryo

Mobil uygulama android cihaza kurulduktan sonra cihaz üzerindeki GSM ve GPS modüllerini kullanarak uygulamaya internet ve konum bilgisini kabiliyeti sağlamış olur (Şekil 4.1) offline modda yüklenen güzergah ve bölgesel istatistik üzerinden kullanıcıyı seyahat güzergahında nereleri ne kadar tehlikeli olduğunu belirten ve çevredeki restoran, eczane, hastane, petrol istasyon verileri ile kullanıcıyı uyarır ve böylelikle kullanıcıya daha güvenli sürüş için bilgi verir.

4.3.Offline Mode

Mobil android uygulama daha önceden tahmin edilen güzergah göre, android uygulamaya gömülmüş İstatiksel ve önemli noktaların kullanarak sistemi demo hazırlandı.

4.4.Anlık Koordinat ile istatistik bilgilerin yakınlık hesabı (Great Circle):

Büyük daire(Great circle) hesabı; mobil android cihazın anlık bulunduğu koordinat ile istatistiksel verilerin koordinatlarını karşılaştır en yakın olan istatistik veriyi bularak kullanıcıya bilgi verir.
Dünya gibi küre yüzeyinde ölçülen iki nokta arasındaki en kısa mesafeyi bulur,  öklid uzayında iki nokta arasındaki mesafe düz çizi gibidir ancak kürede düz çizgi yoktur Öklid olmayan geometride düz çizgiler jeodezi ile değişir, küredeki jeodeziler büyük dairelerdir.
Şekil 4.2 ki kürede P ve Q üzerindeki iki nokta arasındaki büyük daire mesafesidir.[8]

Şekil 4.2

Şekil 4.3
Şekil 4.3. de  bir koordinat(enlem, boylam) ve  diğer (enlem, boylam) koordinat bilgileridir(P,Q noktaları) bu koordinatların arasındaki mesafeyi büyük daire hesabına göre formüllü.[9]
r=dünyanın yarıçapıdır. Bütün koordinatlar bilgileri radyan olarak alınmalıdır.


=Q ve P nin arasındaki metre cinsinden mesafedir[10]
Burada istatistik bölgesel veriler ile şuan ki bulunduğumuz koordinat düzleminin arasındaki mesafeyi(d) averaj mesafesinden kısa ise o noktanın çok yakınından geçmektedir ve ilgili mesajın 3-5 sn arasında cihazda ekranında ikaz olarak göstermektedir




4.5.Uygulama çıktısı ve verdiği mesajlar:


Seyahat esnasında uygulama cihaz üzerinde aşağıdaki mesajları verir;
1.      Ölüm tehlikesini uyarı veren dikkat mesajı; hem android toast hem de bilgi mesajı olarak ekrana yansır, aynı zamanda sesli, ve cihaz LED ini kullanarak ikazda bulunur.

2.      Güzergah üzerinde önemli noktalardan geçerken örneğin yakındaki eczaneyi ismini bilgi mesajı olarak ekrana yansır, aynı zamanda sesli, ve cihaz LED ini kullanarak ikazda bulunur.

3.       viraj ve kavşakta daha dikkatli olmasını gerektiğini veren bilgi mesajı olarak ekrana yansır, aynı zamanda sesli, ve cihaz LED ini kullanarak ikazda bulunur.



5.      Sonuç

Trafik kazalarındaki en büyük sorun yorgun, uykusuz ve güzergahta tahmin edilemez yol durumundan dolayı araç kullanım şeklidir. Seyahat esnasındaki dikkatsizlik durumlarında yol ikaz tabelalarında her zaman görülememekte ya da ikazları dikkat edilememektedir. Bu nedenlerden dolayı araç kullananlar yol yardım için çeşitli teknolojilerde cihaz ve uygulama kullanmaktadır. Bu uygulamalar GPS(Global Positioning System) den aldıkları konum bilgisi ile kendi hafızasındaki harita ve yol hız limitleri ile kullanıcıyı uyarmaktadır.
İlerleyen aşamalarda devletin sağladığı bir kaza istatistik konum bilgisi ile ya da kullanıcıların yaşadıkları çevrelerinde gördükleri, kullandıkları yolların konum bilgilerini kullanıcı görüş ve tehlike bilgilerinin girişi sağlayarak bir veri sistemi oluşturulabilir. Böylelikle bu verilerle mobil cihazlarda kullanılan kaza önleme sistemleri kullanıcıyı uyararak kaza yapmasını engelleyebilir hata da daha ileri giderek araç üreticiler bu verileri kullanarak araçların belirli bölgelerde belirli süre üstünde hız limitini aşmamasını ve sürüş güvenliğini sağlayabilir.





6.      Kaynaklar

[1]  URL:http://www.trafik.gov.tr/Sayfalar/Istatistikler/Genel-Kaza.aspx (Erişim tarihi: Şubat 2017)
[2] Şimşek, M.A., Erdemli, T., Taşdelen, K., “Android Cihazlarda Konum Tespiti ve Aktarılması”, Akademik Bilişim 2013, Akdeniz Üniversitesi.
[3] Sivri, E., Sayar, A., “A Web-based System for Locating Missing Persons through Mobile Tools and GPS”, International Science and Technology Conference (ISTEC), 7-9 December, İstanbul,Turkey,
[4] Kaya okay, S., Müngen, A. A., “Bireysel GPS İzlemeli, İşVerimi Arttırma Yöntemi”, Mühendislik ve Teknoloji Sempozyumu”, 15-16 Mayıs 2014, An1k1ara.
[5] Demircan, T., Yıldırım, S., Yıldız, M., Ekşi, Z., Çakıroğlu, M., “Trafik Kazaları İçin Bir Acil Yardım Çağrı Sistemi Tasarımı”, Sakarya Üniversitesi Fen Bilimleri Enstitüsü Dergisi
[6]Android developer studio   URL:  https://dl.google.com/dl/android/studio/install/2.2.2.0/android-studio-bundle-145.3360264-windows.exe (Erişim tarihi : şubat 2017)
[7] Understanding Web services XML,WSDL,SOAP and UDDI Eric Newcomer
[8] Great-circle distance URL:https://en.wikipedia.org/wiki/Great-circle_distance (Erişim tarihi: şubat 2017)
[9]Wolfram Mathworld  URL:http://mathworld.wolfram.com/GreatCircle.html (Erişim tarihi:Şubat 2017)
[10] The Stationery Office, 1987, p. 10, ISBN 9780117728806, The errors introduced by assuming a spherical Earth based on the international nautical mile are not more than 0.5% for latitude, 0.2% for longitude.

ev sigorta kutusuna ray tipi elektrik volt akım watt ölcer.


merhaba
evedeki sigorta kutusuna ray tipi elektrik volt akım watt ölcer taktım , görünüş olarak cok güzel ve kullanımı pratik.

volt,, akım ve watt ölcmektedir ayrıca üzerinde bir buton bulunmakta cos değerini de vermektedir.

evinizde herhangi bir noktada aşırı güc tüketen veya sızıntı görmektesiniz.



ucuza 0-31V, 0-16A laboratuar tipi güc kaynağı yapımı

merhaba, 
bende gecen sene yaptım 0-31V, 0-16A 

aynı senin kine benzer bir kutu ve göstergede 2 çıkışlı. 

birinci çıkışı normal PC ATX power kullandım, bunu modfiy edip ayarlı hale çevirdim.(0-31V 16~20A) 

ikinci çıkış için ise bir notebook(19V 5A) ve 12 volt 5A smps adaptörünü seri bağlayıp (19+12=31volt 5A Dc) çıkışına ayarlı switch down regülatör bağladım, max voltta yani 31 voltta 5 amper veriyor, 5Voltta ise 10A i geciyor. 

ayrıca sabit 5v 5A veren telefon vs şarj için 3. çıkışta mevcut. 

volt ve amper hasas ayar için ise çokturlu potlar pahalı olduğundan trimpottan kendim yaptım 
bir önceki paylaşımımda mevcut (https://ercantopuzoglu.blogspot.com.tr/2017/03/ucuza-cok-turlu-hassas-potansiyometre.html)


Voltaj ayarı var(CC, CV), trimpot 20 tur biraz zor oluyor zıplamak bir turda nerdeyse 1 volt ayarlanıyor. 

ATX power modify ettiğim için cok ucuz oluyor ikinci el 300-400Watt power 10TL gibi aldım gerci 2-3 tanesini bozarak öğrendim o başa :) 

lab tipi adaptörde yukarıda bahsetiğim gibi 3 adet power kullandım ikisi seri bağlı (laptop adaptörü) diğeri atx power. 

ATX Power: 
http://www.chirio.com/s...ing_power_supply_atx.htm 
http://www.chirio.com/I...x_schema_30v_2008_01.jpg 

seri bağlı diğer power ise regülatör kullandım onuda ebaydan aldım(temsili): 
http://www.ebay.com/itm...e68f5:g:~MIAAOSwLVZVxbOW 
 

resimde ve linkte dikkat ettiyseniz hem volt hem akım ayarlı, DC CC-CV 


Yukarıda bahsettiğim gibi, bütün kaynakları bağımsız yaptım yani şaseleri/toprakları ortak değil, bu nedenden seride bağlanabiliyorlar. 





 



 
 
 

delphide BCD Stringi numaraya cevirme veya Numarayı BCD ye ceviren kod

Delphide
BCD Stringi numaraya cevirme veya Numarayı BCD ye ceviren kod

...
..

function NumStringToBCD(const inStr: AnsiString): AnsiString;

  function Pack(ch1, ch2: AnsiChar): AnsiChar;
  begin
    Assert((ch1 >= '0') and (ch1 <= '9'));
    Assert((ch2 >= '0') and (ch2 <= '9'));
    { Ord('0') is $30, so we can just use the low nybble of the character
      as value. }
    result := AnsiChar((Ord(ch2) and $F) or ((Ord(ch1) and $F) shl 4))
  end;

var
  i: Integer;
begin
  if Odd(length(inStr)) then
    result := NumStringToBCD('0' + inStr)
  else
  begin
    SetLength(result, length(inStr) div 2);
    for i := 1 to length(result) do
      result[i] := Pack(inStr[2 * i - 1], inStr[2 * i]);
  end;
end;

// -------------------
function BCDToNumString(const inStr: AnsiString): AnsiString;

  procedure UnPack(Ch: AnsiChar; var ch1, ch2: AnsiChar);
  begin
    ch2 := AnsiChar((Ord(Ch) and $F) + $30);
    ch1 := AnsiChar(((Ord(Ch) shr 4) and $F) + $30);
    Assert((ch1 >= '0') and (ch1 <= '9'));
    Assert((ch2 >= '0') and (ch2 <= '9'));
  end;

var
  i: Integer;
begin
  SetLength(result, length(inStr) * 2);
  for i := 1 to length(inStr) do
    UnPack(inStr[i], result[2 * i - 1], result[2 * i]);
end;

Delphide GUID üretimi


Delphide GUID üretimi

36 karaketer unique GUID


uses SysUtils;
....
..

Function GenerateGUID(): String;
var
  GUID: TGUID;
begin
  try
    // GUID.NewGuid();
    CreateGUID(GUID);
  except
    on e: exception do // hata oluşabilir
      Debug('GuiID err:' + e.Message + ' U:' + GUID.ToString);
  end;

  result := GUIDToString(GUID);
  result := StringReplace(result, '{', '', [rfReplaceAll]);
  result := StringReplace(result, '}', '', [rfReplaceAll]);
end;