Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Cas Terazi Veri gönderimi Delphi sürüm sorunu
#1
Cas Terazilere veri gönderip almak için bir dll dosyası var ve aynı zamanda bir Delphi 2005 de yapılmış örneği var. 

Bu örneği Delphi 10.3 sürümünde çalıştırdığım zaman sorunsuz çalışıyor fakat terazi ile iletişim kurmuyor. 
Bu arada iletişimi IP üzerinden sağlıyor. 

Aynı programı denemek için Delphi 2007 kurdum bilgisayara onda açınca program terazi ile iletişim kuruyor. 

Delphi 10.3 sürümünde sorunsuz çalışıyor bağlantı kur dediğimde teraziye bağlanamadı diyor bir hata da olmayınca neyi kontrol edeceğimi bilemedim. 

Sizce bu sorun neyden kaynaklanıyordur dostlar. 

İncelemek isteyen arkadaşlar için aynı zamanda bu SDK yada ihtiyacı olan arkadaşlar için linki bırakıyorum. 

https://panel.casturkey.com/images/uploa...090316.zip
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla
#2
Delphi 2007 ile 10.3 arasındaki en ciddi fark, Delphi 2009'la birlikte gelen unicode desteği.
Çok büyük ihtimalle sorununuz bundan kaynaklanıyordur.
There's no place like 127.0.0.1
WWW
Cevapla
#3
(09-06-2021, Saat: 21:34)SimaWB Adlı Kullanıcıdan Alıntı: Delphi 2007 ile 10.3 arasındaki en ciddi fark, Delphi 2009'la birlikte gelen unicode desteği.
Çok büyük ihtimalle sorununuz bundan kaynaklanıyordur.

Benimde başıma gelmişti. D7 ile RS232 üzerinden sorunsuz olarak veri gönderebilirken Delphi XE ile aynı kod hata verdirmişti. Sebebini bulmak için haberleştiği port'tan dinleme yapınca unicode'tan kaynaklandığını anladım. Eğer gönderdiğiniz veriler 255 byte'ı geçmiyorsa değişkenlerinizi ansi String olarak tanımlayın. Yada D7 ile deneyin.
Cevapla
#4
SimaWB nin de dediği gibi Unicode dan olduğu kesin daha öncede buna benzer başka bir projede başıma gelmişti yine aynı durum söz konusu. 

Biraz uğraştım unicode problemini aşabilirmiyim diye nafile.  Aşağıda bağlantı için kodlar var string değişkenleri ansistring olarak değiştirdim sonuç alamadım.
PChar da PWideChar olarak denedim yine sonuç alamadım. 

Bu code formun create durumunda çalışıyor.
var
 ret: Integer;
 version: TVersion;
 versionString: String;
begin
// Create Link Dlls
 ret := SetCommLibrary(1, 'CASTCPIP.DLL');
 ret := AddInterpreter(100, 5000, 'CLInterpreter.dll');
 ret := AddInterpreter(DF_SCALE_TYPE_LP, DF_SCALE_16, 'LPInterpreter.dll');

 version.btModule := 3;
    GetLibraryInfo(@version, '');
 versionString := Format('- %s Version %d.%d [%02d-%02d-%-02d]',
                         [DF_NAME_LIBTCPIP,
                          version.btMainVer,
                          version.btSubVer,
                          version.btModifyYear,
                          version.btModifyMonth,
                          version.btModifyDay] );
 self.AddStatus(versionString);




end;


Buda Teraziye bağlan butonunun kodu:
var
 ret: Integer;
 IP: String;
begin
//  CL Connect
 ret := InitCommLib();
 IP := Edit1.Text;
 ret := Connect(PChar(IP), -1);

 if (ret = 0) then
   self.AddStatus('- Fail Connect')
 else
   self.AddStatus('- Success Connect');
end;

Buda InitCommLib Fonksiyonu
function TForm1.InitCommLib(): Integer;
var
 res: Integer;
begin
    res := AddProcConnection(DF_COMMTYPE_TCPIP,    // Communication type
                               PChar(Edit1.Text),              // IP
                               StrToInt(Edit2.Text),                // Port
                               DF_SCALE_TYPE_LP,                      // Scale Type
                               DF_SCALE_CL5000,                             // Scale Model
                               StrToInt(Edit3.Text),                // Timeout
                               StrToInt(Edit4.Text),                // Retry count
                               DF_DATA_PLU_V02,                              // Data type
                               @OnDataReceived,                            // Receive proc
                               @OnNetworkState);                        // State proc

 result := res;
end;
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla
#5
(10-06-2021, Saat: 20:10)KUNTAY Adlı Kullanıcıdan Alıntı: SimaWB nin de dediği gibi Unicode dan olduğu kesin daha öncede buna benzer başka bir projede başıma gelmişti yine aynı durum söz konusu. 

Biraz uğraştım unicode problemini aşabilirmiyim diye nafile.  Aşağıda bağlantı için kodlar var string değişkenleri ansistring olarak değiştirdim sonuç alamadım.
PChar da PWideChar olarak denedim yine sonuç alamadım. 

Bu code formun create durumunda çalışıyor.
var
 ret: Integer;
 version: TVersion;
 versionString: String;
begin
// Create Link Dlls
 ret := SetCommLibrary(1, 'CASTCPIP.DLL');
 ret := AddInterpreter(100, 5000, 'CLInterpreter.dll');
 ret := AddInterpreter(DF_SCALE_TYPE_LP, DF_SCALE_16, 'LPInterpreter.dll');

 version.btModule := 3;
    GetLibraryInfo(@version, '');
 versionString := Format('- %s Version %d.%d [%02d-%02d-%-02d]',
                         [DF_NAME_LIBTCPIP,
                          version.btMainVer,
                          version.btSubVer,
                          version.btModifyYear,
                          version.btModifyMonth,
                          version.btModifyDay] );
 self.AddStatus(versionString);




end;


Buda Teraziye bağlan butonunun kodu:
var
 ret: Integer;
 IP: String;
begin
//  CL Connect
 ret := InitCommLib();
 IP := Edit1.Text;
 ret := Connect(PChar(IP), -1);

 if (ret = 0) then
   self.AddStatus('- Fail Connect')
 else
   self.AddStatus('- Success Connect');
end;

Buda InitCommLib Fonksiyonu
function TForm1.InitCommLib(): Integer;
var
 res: Integer;
begin
    res := AddProcConnection(DF_COMMTYPE_TCPIP,    // Communication type
                               PChar(Edit1.Text),              // IP
                               StrToInt(Edit2.Text),                // Port
                               DF_SCALE_TYPE_LP,                      // Scale Type
                               DF_SCALE_CL5000,                             // Scale Model
                               StrToInt(Edit3.Text),                // Timeout
                               StrToInt(Edit4.Text),                // Retry count
                               DF_DATA_PLU_V02,                              // Data type
                               @OnDataReceived,                            // Receive proc
                               @OnNetworkState);                        // State proc

 result := res;
end;

Sevgili Kuntay, Bahsettiğin sorunla bende aylardır uğraşıyorum. Acaba bir çözüme varabildiniz mi?
Cevapla
#6
PChar yerine PAnsiChar denemek gerekiyor unicode sürüm delphilerde bu tip zaten PWideChar anlamına geliyordu. Hatta Char tiplerinin de AnsiChar olarak değiştirilmesi gerekiyor.
Cevapla
#7
(25-09-2021, Saat: 01:32)oarikmert@hotmail.com Adlı Kullanıcıdan Alıntı:
(10-06-2021, Saat: 20:10)KUNTAY Adlı Kullanıcıdan Alıntı: SimaWB nin de dediği gibi Unicode dan olduğu kesin daha öncede buna benzer başka bir projede başıma gelmişti yine aynı durum söz konusu. 

Biraz uğraştım unicode problemini aşabilirmiyim diye nafile.  Aşağıda bağlantı için kodlar var string değişkenleri ansistring olarak değiştirdim sonuç alamadım.
PChar da PWideChar olarak denedim yine sonuç alamadım. 

Bu code formun create durumunda çalışıyor.
var
 ret: Integer;
 version: TVersion;
 versionString: String;
begin
// Create Link Dlls
 ret := SetCommLibrary(1, 'CASTCPIP.DLL');
 ret := AddInterpreter(100, 5000, 'CLInterpreter.dll');
 ret := AddInterpreter(DF_SCALE_TYPE_LP, DF_SCALE_16, 'LPInterpreter.dll');

 version.btModule := 3;
    GetLibraryInfo(@version, '');
 versionString := Format('- %s Version %d.%d [%02d-%02d-%-02d]',
                         [DF_NAME_LIBTCPIP,
                          version.btMainVer,
                          version.btSubVer,
                          version.btModifyYear,
                          version.btModifyMonth,
                          version.btModifyDay] );
 self.AddStatus(versionString);




end;


Buda Teraziye bağlan butonunun kodu:
var
 ret: Integer;
 IP: String;
begin
//  CL Connect
 ret := InitCommLib();
 IP := Edit1.Text;
 ret := Connect(PChar(IP), -1);

 if (ret = 0) then
   self.AddStatus('- Fail Connect')
 else
   self.AddStatus('- Success Connect');
end;

Buda InitCommLib Fonksiyonu
function TForm1.InitCommLib(): Integer;
var
 res: Integer;
begin
    res := AddProcConnection(DF_COMMTYPE_TCPIP,    // Communication type
                               PChar(Edit1.Text),              // IP
                               StrToInt(Edit2.Text),                // Port
                               DF_SCALE_TYPE_LP,                      // Scale Type
                               DF_SCALE_CL5000,                             // Scale Model
                               StrToInt(Edit3.Text),                // Timeout
                               StrToInt(Edit4.Text),                // Retry count
                               DF_DATA_PLU_V02,                              // Data type
                               @OnDataReceived,                            // Receive proc
                               @OnNetworkState);                        // State proc

 result := res;
end;

Sevgili Kuntay, Bahsettiğin sorunla bende aylardır uğraşıyorum. Acaba bir çözüme varabildiniz mi?

Şöyle bir çözüm buldum, Delphi 2005 kullandım orada sorunsuz çalışıyor.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla
#8
Delphi 2005'de sorunsuz çalışıyor demişsiniz ya, bunu fırsat bilip teraziye giden ve gelen içeriği Delphi 10.3 vb de giden ile karşılaştırmak isterseniz buraya ikisini de yazın dönüşüm konusunda yardımcı olalım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#9
UniCode olan Delphi 10.3 sürümü için bir de şunu deneyebilir misiniz?

1 - CASPRTC.pas dosyasında Ctrl+R ile "replace" penceresinde "Char" aratıp "AnsiChar" ile değiştirin. Bu hem Char tiplerini AnsiChar yapacak hem de PChar tiplerini PAnsiChar yapacaktır. Kısacası bu unit (CASPRTC.pas) içinde hiç Char ya da PChar tipinde değişken tanımı bırakmamış olmak gerekiyor.

2 - Unit1.pas dosyasında ise
function StrToPAnsiChar(const S: string): PAnsiChar;
var
  asVal: AnsiString;
begin
  asVal := AnsiString(S);
  Result := PAnsiChar(asVal);
end;
şeklinde bir fonksiyon tanımlayın ve tüm "PChar(" ile yapılan dönüşümleri "StrToPAnsiChar(" olarak değiştirin. Bu unit (Unit1.pas) içinde de hiç PChar(..) şeklinde tip dönüşümü bırakmamış olmak gerekmektedir.

Test etme imkanı bulamadım ama bu iki adımlı değişiklikten sonra delphi 10.3 üzerinden de çalışması gerekiyor gibi duruyor Smile .
Cevapla
#10
(09-12-2021, Saat: 11:35)mrmarman Adlı Kullanıcıdan Alıntı: Delphi 2005'de sorunsuz çalışıyor demişsiniz ya, bunu fırsat bilip teraziye giden ve gelen içeriği Delphi 10.3 vb de giden ile karşılaştırmak isterseniz buraya ikisini de yazın dönüşüm konusunda yardımcı olalım.

Projeyi 2005 ile bitirdiğim için hiç kurcalamamıştım ama galiba başka arkadaşlarında işine yarayabilir düşüncesi ile dediğinizi yapıp içeriği buraya yazim sizinde yardımınızla herkesin yararlanmasını sağlarız.

(11-12-2021, Saat: 12:28)sabanakman Adlı Kullanıcıdan Alıntı: UniCode olan Delphi 10.3 sürümü için bir de şunu deneyebilir misiniz?

1 - CASPRTC.pas dosyasında Ctrl+R ile "replace" penceresinde "Char" aratıp "AnsiChar" ile değiştirin. Bu hem Char tiplerini AnsiChar yapacak hem de PChar tiplerini PAnsiChar yapacaktır. Kısacası bu unit (CASPRTC.pas) içinde hiç Char ya da PChar tipinde değişken tanımı bırakmamış olmak gerekiyor.

2 - Unit1.pas dosyasında ise
function StrToPAnsiChar(const S: string): PAnsiChar;
var
  asVal: AnsiString;
begin
  asVal := AnsiString(S);
  Result := PAnsiChar(asVal);
end;
şeklinde bir fonksiyon tanımlayın ve tüm "PChar(" ile yapılan dönüşümleri "StrToPAnsiChar(" olarak değiştirin. Bu unit (Unit1.pas) içinde de hiç PChar(..) şeklinde tip dönüşümü bırakmamış olmak gerekmektedir.

Test etme imkanı bulamadım ama bu iki adımlı değişiklikten sonra delphi 10.3 üzerinden de çalışması gerekiyor gibi duruyor Smile .

Bu hafta sonuna kadar terazi üzerinde canlı bir test yapıp sonucu burdan yazarım sonuç olumlu olursa düzenlediğim paketi internette bir alana yükler linkini paylaşırım.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  delphi yeniden kurulum. shooterman 17 141 2 saat önce
Son Yorum: nguzeller
  Database bağlantı sorunu Tevet 5 141 9 saat önce
Son Yorum: ihalilcoban
  Delphi içinden TSQl Scripti çaıştırmak Bay_Y 0 36 11 saat önce
Son Yorum: Bay_Y
  Delphi Ide Kod Tamamlama Yavaşlık Sorunsalı Mesut 12 418 31-12-2021, Saat: 18:18
Son Yorum: mrmarman
  Firebird Kayıt Sorunu Mikdad 2 117 27-12-2021, Saat: 20:19
Son Yorum: COMMANDX



Konuyu Okuyanlar: 1 Ziyaretçi