NULL CHAR RS232 delphi
Moderátori: psichac, Moderátori
Re: NULL CHAR RS232 delphi
pekne ti toposlalo.. Teraz to skus bez toho WriteString, teda len write
Re: NULL CHAR RS232 delphi
Preložil som tento kód:
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.
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);
0
Re: NULL CHAR RS232 delphi
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);
Re: NULL CHAR RS232 delphi
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é:
[Error] Unit1.pas(110): Types of actual and formal var parameters must be identical
Tá funkcia má parametre nasledovné:
0
Re: NULL CHAR RS232 delphi
pochopitelne, pretoze
nieje to same
Kód: Vybrať všetko
BufSend : Word;
BufSended : Word;
a
BufSend : integer;
BufSended : integer;
0
- dxr
- 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
idem na obed ale na odpich nieco o tom divnom type PSafeArray
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
a idem obedovat
no mudrejsi a viacej pracujuci v pascale ma opravte
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;
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
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;
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
0
Re: NULL CHAR RS232 delphi
dxr.. Gugel, gugel..
Tu chlapci ja koncim. TSafeArray som este nikdy pred tym nevidel. Je dobre sa nieco nove naucit.
Tu chlapci ja koncim. TSafeArray som este nikdy pred tym nevidel. Je dobre sa nieco nove naucit.
- dxr
- 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
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
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
nemam Delphi a ani neviem ci Lazar ma tento typ a ci sa mi ho chce portovat (nechce) prejedol som sa
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
Re: NULL CHAR RS232 delphi
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.
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:
A jake pak sraniiii....
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;
- dxr
- 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
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
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
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.
Re: NULL CHAR RS232 delphi
Vysktla sa vynimka na adrese 0x......
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..
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..
Re: NULL CHAR RS232 delphi
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
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"
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;
0
- dxr
- 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
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
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
Re: NULL CHAR RS232 delphi
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
Re: NULL CHAR RS232 delphi
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.
- dxr
- 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
Ja som to pochopil inak ze on nieco poslal a teraz asi caka to volanie na odpoved toho jeho superpetersno 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
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
-
- 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
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 funkciubalki 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.
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í.
- dxr
- 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
ten buffer je defakto hotovy vid horsie len on to asi vzdal alebo sa mu nechce skusat a zvolil lahsiu cestu
0