NULL CHAR RS232 delphi

C,C++,C#

Moderátori: psichac, Moderátori

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 13 Feb 2014, 10:55

pekne ti toposlalo.. Teraz to skus bez toho WriteString, teda len write

Používateľov profilový obrázok
balki
Ultimate člen
Ultimate člen
Príspevky: 1553
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

Príspevok od používateľa balki » 13 Feb 2014, 11:05

Preložil som tento kód:

Kód: Vybrať všetko

retCount:=8;
  Data := VarArrayCreate([0, 1, 0, 2], VT_VARIANT);
Data[0,0] := #255;
Data[0,1] := '2';
Data[0,2] := '3';
Data[1,0] := '4';
Data[1,1] := '5';
Data[1,2] := '6';
   SafeArray := PSafeArray(TVarData(Data).VArray);
   io.Write(SafeArray,retCount,retCount);
Ale nič to na ten port nepošle. Možno je niečo zle zadefinované alebo niečo podobné ale preložil to kompilátor tak by nemalo.
0

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 13 Feb 2014, 11:16

skus napisat tym stylom:

Kód: Vybrať všetko

Var:
 Buf : Array [0..1023] of char;
 BufSend : Word;
 BufSended : Word;

 Buf [0] := #1;
 Buf [1] := #0;
 Buf [2] := #255;
 
 BufSend := 3;

 io.Write (Buf, BufSend, BufSended);



Používateľov profilový obrázok
balki
Ultimate člen
Ultimate člen
Príspevky: 1553
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

Príspevok od používateľa balki » 13 Feb 2014, 11:32

Vypisuje to chybu o nesprávnom aktuálnom parametri :
[Error] Unit1.pas(110): Types of actual and formal var parameters must be identical
Tá funkcia má parametre nasledovné:
Prílohy
write.PNG
0

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: NULL CHAR RS232 delphi

Príspevok od používateľa petersno » 13 Feb 2014, 11:45

pochopitelne, pretoze

Kód: Vybrať všetko

BufSend : Word;
BufSended : Word;

a

BufSend : integer;
BufSended : integer;

nieje to same :D
0

Používateľov profilový obrázok
balki
Ultimate člen
Ultimate člen
Príspevky: 1553
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

Príspevok od používateľa balki » 13 Feb 2014, 12:21

Ono má problém s poľom Buf. Tá funkcia chce typ PsafeArray.
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 13 Feb 2014, 12:35

idem na obed ale na odpich nieco o tom divnom type PSafeArray

Kód: Vybrať všetko

 PSafeArray = ^TSafeArray;
  {$EXTERNALSYM tagSAFEARRAY}
  tagSAFEARRAY = record
    cDims: Word;
    fFeatures: Word;
    cbElements: Longint;
    cLocks: Longint;
    pvData: Pointer;
    rgsabound: array[0..0] of TSafeArrayBound;
  end;
  TSafeArray = tagSAFEARRAY;
  {$EXTERNALSYM SAFEARRAY}
  SAFEARRAY = TSafeArray;
Cize je to pointer na record v ktorom je pointer na datovy buffer cize spravit new a nastavit do premenej : PsafeArray
potom do premmenej^.pvData := @buff? (toto si uz nepamatam ;)

Este nejaky kod na odpich mozno wwlado bude mudrejsi ja ked som hladny na to nemam :D

Kód: Vybrať všetko

var
  Bounds: array[0..0] of TSafeArrayBound;
  SafeArray: PSafeArray;
begin
  Bounds[0].lLbound   := 0;
  Bounds[0].cElements := 100;
  SafeArray := SafeArrayCreate(VT_I1, 1, Bounds);
  SafeArrayDestroy(SafeArray);
end;
a idem obedovat

Kód: Vybrať všetko

var
  Bounds: array[0..0] of TSafeArrayBound;
  SafeArray: PSafeArray;
begin
  Bounds[0].lLbound   := 0; // neviem ci tu nema byt 1tka zalezi od buff ci je array alebo string.
  Bounds[0].cElements := 10; alebo iny pocet kolko bude paket teraz je 11 prvkov
  SafeArray := SafeArrayCreate(varByte,1,Bounds);
  SafeArray^.pvData := @buff; // ?
  ib.Write(SafeArray,  Bounds[0].cElements,recCount);
  SafeArrayDestroy(SafeArray);
end
no mudrejsi a viacej pracujuci v pascale ma opravte :)
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 13 Feb 2014, 13:04

dxr.. Gugel, gugel.. :)

Tu chlapci ja koncim. TSafeArray som este nikdy pred tym nevidel. Je dobre sa nieco nove naucit.

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 13 Feb 2014, 13:45

CO s gogolom :) ja som sa tam inspiroval a ako to dopadlo teraz to chalan musi skompilovat a povedat co je zle :)
nemam Delphi a ani neviem ci Lazar ma tento typ a ci sa mi ho chce portovat (nechce) prejedol som sa :D

ale ten posledny moj code by nemusel byt daleko - opravit nejake syntax chybicky a zistit ako to spravova
to posle pomocou tych bounds. Inak chapem preco pouzivaju tento typ lebo nesie informaciu co nesie.
akurat sa to dost zle pouziva v C by stacilo tomu lahsie vnutit byte pole tu vypnut TYPE CHECKING ale to si uz nepamatam ako
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 13 Feb 2014, 14:11

Tolko parametrov okolo jedneho bufra. To je plitvanie pamatovym miestom. Retazec "ahoj", zabera v pameti 10 nasobok. Vi zera to horsie ako hlavicka programoveho prefixu. :lol:
Tiez mam FPC/Lazarus, tak sito nedokazem odsusat. Ale ved kniznica Serial.pas v delphi: http://code.google.com/p/emir/source/br ... .pas?r=141

Hlavicka:

Kód: Vybrať všetko

unit Serial;

interface

uses
Windows;

function OpenCom(Com: string; BaudRate: Integer): Boolean;
procedure CloseCom;
function WriteCom(const Buffer; Length: Word): Boolean;
function ReadCom(var Buffer; Length: Word): Boolean;
function WaitingOnCom: Integer;
procedure FlushInputCom;

A jake pak sraniiii.... :lol:

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 13 Feb 2014, 14:17

Ten typ je pre OLE proste API tam totiz hovoris ci posielas byte integer word a pod
okrem toho tu vies povedat ci to pole je viac rozmerne ak tomu spravne rozumiem
proste je to takto mozno aj kvoli checkingkom pri kompilacii dava pozor na zleho programatora :)

Ako ta struktura je easy len neviem najst ako sa definuju bounds a uvidime co mu to spravi mozno reboot :)

A dalsi dovod preco sa mi stym nechce paprat je ze svk:usa 1:1 ani sa tu neda
no a pri 4:1 som radsej prestal ten hokej sledovat :D

Kód: Vybrať všetko


procedure PosliData(s: string);
var
  recCount : integer;
  Bounds: array[0..0] of TSafeArrayBound;
  SafeArray: PSafeArray;
  i : integer
  ind: array [0..0] of Integer;
  result : PVarArray; // alebo pointer?


begin
  Bounds[0].lLbound   := 1;
  // neviem ci tu nema byt 1tka zalezi od buff ci je array alebo string.
  Bounds[0].cElements := length(s); 
  // alebo iny pocet kolko bude paket teraz je 11 prvkov

  SafeArray := SafeArrayCreate(varByte,1,Bounds);
  for I := 1 to Bounds[0].cElements do 
  begin
     ind[0] := I;
     SafeArrayPutElement(SafeArray, @ind, s[i]);
  end;
  ib.Write(SafeArray,  Bounds[0].cElements,recCount); // toto treba este pozret
  SafeArrayDestroy(SafeArray); // uvolnime dyn alokovany zdroj.
end;

0
Naposledy upravil/-a dxr v 13 Feb 2014, 15:07, upravené celkom 6 krát.
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 13 Feb 2014, 14:26

Vysktla sa vynimka na adrese 0x...... :lol:

ked som este Delphi_oval, tak som samozrejme nacital vsetky OLE co vo windovse boli. dobludu patrametre, myslim "variant", ale nechcem kecat. Nieco som aj porozbiehal. MediaPlayer, Spravcu systemu, nieco z office.. Ale to som bol ete na strednej, tak ma to zaujimalo. Teraz Paskalujem, uz iba ak mi treba. Takze prehlad o novych veciach uz nejak nemam. A najme som presiel na FPC a pod Linuxom sa zrazu otvoria uplne ine dvere.

Takze Balky, prepac, ak som ti velmi nepomohol..

Používateľov profilový obrázok
balki
Ultimate člen
Ultimate člen
Príspevky: 1553
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

Príspevok od používateľa balki » 14 Feb 2014, 11:12

Nemám už veľa času na skúšanie, možno sa na to ešte niekedy pozriem.Musím ju využiť tak ako je.

Mám ešte jeden problém, pre odborníkov zrejme maličkosť:
Pri komunikácií alebo pri čakaní na vykonanie nejakej úlohy čo hardvér musí poslať nejaký výsledok, je aplikácia "zamrznutá" tz. že sa nedá hýbať oknami a pod. Bežný jav, pri ktorom sa využíva funkcia

Kód: Vybrať všetko

application.ProcessMessages;
vloží sa napríklad do cyklu a pod tam kde sa akurát program nachádza. No ale mne to nejak nepomohlo pretože ja tam cyklus mám ale i tak delphi čaká na tú knižnici čo odpovie. Nedalo by sa to nejak inak naprogramovať aby sa mi dalo s aplikáciou pracovať i keď čaká na oddpoved z knižnice. pretože je to také neohrabané aby sa mi nedalo hýbať s oknami a stláčať tlačidlá najmä tlačítko "STOP COMMUNICATION" :)
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 14 Feb 2014, 13:13

Odbornik ti na to povie tolko ze ak je to co si myslim tak nastuduj si Thread-y klasicky
problem spustis to dalsom threade/vlakne a Aplikacia bezi v svojom a toto nieje trivialne :) na forum
proste Aplikacia bezi a kontroluje si ci uz tvoje ine vlakno uz skoncilo a ked skonci zoberie si data

Ak ta blokuje kniznica nic stym asi nespravis :) bud to prepises ze ti vrati kontrolu alebo thread alebo ina libka :)
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Používateľov profilový obrázok
balki
Ultimate člen
Ultimate člen
Príspevky: 1553
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

Príspevok od používateľa balki » 14 Feb 2014, 13:22

dxr nepotešil si ma. Ale dalo sa to čakať. Prepisovať knižnicu určite nebudem, necítim sa byť až taký programátor akých majú v Agilente :)
0

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: NULL CHAR RS232 delphi

Príspevok od používateľa petersno » 14 Feb 2014, 14:58

nerozumiem, preco by nejaky write par bytov na port mal zdrzovat thread tak, aby si to uzivatel vobec vsimol. to bude nejaka haluz
0
Naposledy upravil/-a petersno v 14 Feb 2014, 16:06, upravené celkom 1 krát.

wwlado

Re: NULL CHAR RS232 delphi

Príspevok od používateľa wwlado » 14 Feb 2014, 15:48

Alebo este cez event OnIdle nejak skusit.

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 14 Feb 2014, 16:42

petersno napísal:nerozumiem, preco by nejaky write par bytov na port mal zdrzovat thread tak, aby si to uzivatel vobec vsimol. to bude nejaka haluz
Ja som to pochopil inak ze on nieco poslal a teraz asi caka to volanie na odpoved toho jeho super
zariadenia ovladane tou libkou tou HL metodou a ked mu to zariadenie nedpoveda tak mu GUI vytuhne
a kedze to volanie je blokacne tak proste nemoze ani tuknut kym to nevyskoci odtial
Lazar ma tiez takto stavy pri TCP/blokacnom vtedy nejde ani klinut na tlacitko kym to nevytimeoutuje :)
a preto to nepouzivam vtom rezime :) ale on asi nema navyber
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa peterple » 14 Feb 2014, 17:32

balki napísal: Pri komunikácií alebo pri čakaní na vykonanie nejakej úlohy čo hardvér musí poslať nejaký výsledok, je aplikácia "zamrznutá" tz. že sa nedá hýbať oknami a pod.
z toho čo píšeš si myslím že ťa blokuje funkcia Read alebo ReadString, keďže je to vtedy keď čakáš odpoveď na niečo. Našiel som tam takúto funkciu
function Get_BytesAvailable(out pVal: Integer): HResult; stdcall;

Tipujem že by mala vrátiť počet byte ktoré čakajú vo vstupnej fronte. Takže pokiaľ je hodnota z tejto funkcie 0 tak toč tú tvoju application.ProcessMessages
ak nejaké data čakajú vyčítaj a spracuj. Len pozor na to že nemusia prísť všetky a preto musíš počkať dokiaľ nebudeš mať komplet správu.

K tomu posielaniu, funkcia Write je správna cesta. Len treba prísť na to ako je to s tým prešpekulovaným bufferom.

Hodila by sa nejaká dokumentácia k tej knižnici. Neverím že to používaš iba podľa tých pár info z toho deklaračného súboru. Ja čo som používal KI-VISA tak to malo popis každej metódy, každej premennej. A príklady ako to použiť.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa dxr » 14 Feb 2014, 17:35

ten buffer je defakto hotovy vid horsie len on to asi vzdal alebo sa mu nechce skusat a zvolil lahsiu cestu :)
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Napísať odpoveď