NULL CHAR RS232 delphi

C,C++,C#

Moderátori: psichac, Moderátori

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

NULL CHAR RS232 delphi

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

Caute

Nevie niekto skúsenejší ako poslať nulový znak (NULL CHAR) cez externú knižnicu rs232 v DELPHI?
Pomocou externe volanej funkcie dokážem odoslať alebo prijať jedine celé znaky alebo jeden znak, teda "string". Mám problém pretože potrebujem poslať \x00. Delphi mi vytvorí z hex string ale nevie urobiť z 00 niečo čo by sa na druhej strane prenieslo ako 00000000b. Skúšal som:

PChar = ^@; #0; ^@ a iné ale nechce to preniesť ani len previesť ten tvar do stringu.

Ďakuejm za každú pomoc, verím že je tu kopa skúsených programátorov :)
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 » 11 Feb 2014, 20:18

ci nieje problem v tom, ze #0 { char(0) } sa vyuziva ako ukoncovaci znak retazca. tzn. ze ak das len #0 pokusas sa odoslat prazdny retazec, co je nezmysel. ak das "cokolvek " + #0, retazec bude iba "cokolvek". nemozes to odosielat ako string. nepoznam moznosti tej ext. kniznice, ale snad ma aj nejake ine :)
0

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa djwiktor » 11 Feb 2014, 20:44

Problem je so samotnym PChar , kedze je to null terminated.
Co ma v rychlosti napada, nemozes to poslat ako serial.sendbytes(); ? Samozrejme pre 0x00 si najskor zisti hodnotu bytes cez GetBytes(0x00);
Ak ani to nepomoze, nezabudaj ze default serial port komunikuje ako ASCII - teda vsetko co je nad hodnotou 127 berie ako #63 tusim.
Preto budes musiet najskor zmenit encoding --> SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28605)

Potom by to mohlo pretlacit aj 0x00.
Ak nie, skus este poslat na vystup 'NUL' .
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

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

Re: NULL CHAR RS232 delphi

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

petersno
Ono to nefunguje ani pri tom ked to je na konci ani medzi ani na začiatku.

Ja to samozrejme potrebujem aby to bolo na začiatku a niekde v strede.
Príklad správy čo potrebujem odoslať:
\x00\x14\x40\xAD\x7F\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09
WriteString('string');

djwiktor:
Nedá sa send.bytes pretože taká funkcia v tej knižnici ani nie je. Nedá sa mi z prijímaného zariadenia nič vyslať do PC. Ono dokáže len čítať a niečo nastavovať podľa toho. Jedine by som to skúsil preprogramovať to picko aby niečo ako 0x00 skúsilo odoslať.
V podstate sa mi nedá na tom sérovom porte nič zmeniť okrem základného nastavenia v systéme.

Jedno viem ale určite že to tá knižnica dokáže lebo ju využíva aj iná exe aplikácia a tá to bez problémov 0x00 odošle. Je ale kodena v c a zdroják samozrejme nemám.
0

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa djwiktor » 11 Feb 2014, 21:26

Takze ak som to teraz dobre pochopil, PIcko ti posiela hentaku spravu,, ako si napisal... takze ty v delphi potrebujes tu spravu celu prijat ?
Lebo z uvodneho zadania som si myslel, ze tu spravu posielas z pc tomu picku.

Skus to PIc prepalit aby miesto 0x00 skusilo poslat napriklad NUL, reps NIL string.

BTW, co je to za serial interface v tom delphi ? Je mi divne ze nevie pracovat s bytes.
Postni sem cast kodu, ktoru pouzivas na citanie portu.
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

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 » 11 Feb 2014, 21:28

Pouzi Synapse kniznicu tam urcite ide poslat nullchar ak ides 8bit mode
ak kniznica ktoru pouzivas pouziva nullchar ako terminator stringu tak urcite bude mat
aj funkciu ktora dovoli poslat nullchar cize pozri dokumentaciu

Ja to Synapse pouzivam sice nie Delphi ale Lazaruse ale api je rovnake len kompilator iny :)
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 » 11 Feb 2014, 21:34

síce delphi som nikdy neprogramoval, ale google na všetko. Niečo čo sa na tvoje najviac podobá som v rýchlosti našiel toto:
http://www.delphi-central.com/serial.aspx
konkrétne to rieši WriteFile funkcia z windows API (ak teda ide o win aplikáciu). Ako parameter čo poslať tam môže byť pole bytov, miesto string. Do toho poľa si dáš čo chceš (aj hodnotu 0) a potom len zavoláš WriteFile.
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
balki
Ultimate člen
Ultimate člen
Príspevky: 1548
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

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

Ja potrebujem ako som napísal poslať ten hexa tvar \x00......\x09 do picka on niečo vykoná. Ale už neodpovedá do PC nie je to potreba.

Akurát pozerám tú knižnicu a je tam aj niečo také ako write:
.
.
.
// *********************************************************************//
// Interface: IAsyncMessage
// Flags: (256) OleAutomation
// GUID: {DB8CBF06-D6D3-11D4-AA51-00A024EE30BD}
// *********************************************************************//
IAsyncMessage = interface(IBaseMessage)
['{DB8CBF06-D6D3-11D4-AA51-00A024EE30BD}']
function Read(count: Integer; out pJobId: Integer): HResult; stdcall;
function Write(var buffer: PSafeArray; count: Integer; out pJobId: Integer): HResult; stdcall;
function WriteString(const buffer: WideString; out pJobId: Integer): HResult; stdcall;
function Terminate(jobId: Integer): HResult; stdcall;
end;
.
.

Myslíte že by to cez to šlo? Ja nie som nejak dobrý programátor a typ PSafeArray som ešte nikdy nevidel.
0

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

Re: NULL CHAR RS232 delphi

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

peterple dik za odkaz určite to vyskúšam niekedy, ale ja potrebujem rozbehať tú knižnicu čo mám lebo s ňou obsluhujem aj zariadenia ktoré by som sotva dokázal obslúžiť ak by som si to mal celé nakodiť.
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 » 11 Feb 2014, 21:40

Co keby si hodil kniznicu nech sa clovek moze pozret ako spracovava data a kam to posiela?
aspon nazov tej kniznice domovsku stranku a podobne
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: 1548
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

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

Jedná sa o VISA knižnicu od firmy Agilent. Nič som v nej neupravoval je v pôvodnej podobe.
Je tam toho dosť husto popísané, ale priznám sa nie som programátor ktorý by tomu hned pochopil, skúste sa teda vy na to mrknúť :)
Prílohy
VisaComLib_TLB.zip
Knižnica do delphi pre prístup na ASRL, BPIB, a pod.
(7.81 KiB) 43 stiahnutí
0

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: NULL CHAR RS232 delphi

Príspevok od používateľa djwiktor » 11 Feb 2014, 21:52

PSafeArray som sice este nepouzival, ale co pozeram jeho definicie, viacmenej sa s nim pracuje ako s beznym array, s priamou podporou napriklad floating point.

Skus ho normalne nadefinovat cez premennu - napriklad si daj buffer ako array, a do neho potom zapis premenne

napriklad takto :

var
Data: Variant;
SafeArray: PSafeArray;
begin
Data := VarArrayCreate([0, 1, 0, 2], VT_VARIANT);
Data[0,0] := 'x00';
Data[0,1] := 'x09'';
Data[0,2] := 'x01';
Data[1,0] := 'x00';
Data[1,1] := 'x00';
Data[1,2] := 'x04';
SafeArray := PSafeArray(TVarData(Data).VArray);
end;

Tym by si mal mat v SafeArray ulozene vsetky hodnoty - a tie skus poslat pomocou prikazu Write(SafeArray,.... ); inak uz fakt neviem.
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

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

Re: NULL CHAR RS232 delphi

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

Dik skúsim to tak urobiť a dám vedieť ako to pracuje ale až zajtra v práci nakoľko tu neám potrebný hardvér :)
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 » 11 Feb 2014, 21:56

Kód: Vybrať všetko

    function Get_TerminationCharacter(out pVal: Byte): HResult; stdcall;
    function Set_TerminationCharacter(pVal: Byte): HResult; stdcall;
toto ti co vrati ? neda sa nastavit iny znak a potom poslat nullchar? chr(0)/#0 ?
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: 1548
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

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

Priznám sa neštudoval som celú tú knižnicu (nie som programátor len delphi personal :) ) a netuším ako by som to mal zapísať.
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 » 11 Feb 2014, 22:02

prave som chcel navrhnut pouzit tu Write funkciu a vidim, ze uz ma djwiktor predbehol :wink:
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 » 11 Feb 2014, 22:05

balki napísal:Priznám sa neštudoval som celú tú knižnicu (nie som programátor len delphi personal :) ) a netuším ako by som to mal zapísať.
ze by nejako

Kód: Vybrať všetko

var 
  terminator : char;
  text : string
begin
   //
   //
  Get_TerminationCharacter(terminator);
  Str(terminator, text);
  memo1.lines.append('Znak je '+text); // ak mas  na Tform1 nejaku memo1 componentu
  // alebo showmessage('Znak je '+text);
// alebo hocico ine na vystup
end
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: 1548
Dátum registrácie: 09 Jan 2007, 00:00
Bydlisko: Bratislava

Re: NULL CHAR RS232 delphi

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

djwiktor
ten write(..) som skúsil ale nič mi to neodosiela. použiol som tento zápis:

Kód: Vybrať všetko

retCount:=6;
  Data := VarArrayCreate([0, 1, 0, 2], VT_VARIANT);
Data[0,0] := '1';
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);

dxr
skúsil som aj prevod pomocou STR(); ale do tej funkcie musím dať číslo a ja to deklarované ako char.
a dalej funkcia Get_TerminationCharacter píše, že má nejaké nesprávne deklarované alebo použité typy.

Kód: Vybrať všetko

  terminator:=#0;
  ib.Get_TerminationCharacter(terminator);
    Str(terminator, text);
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 » 12 Feb 2014, 13:23

tak to pretypuj alebo proste to co ti vrati GetTerminator praskni to byte alebo integeru no ...

Kód: Vybrať všetko

var
  terminator : byte ; 
  abystrnepindal : integer;
  text : string[20];

begin
  abystrnepindal :=  0;
  terminator := #65 ; // dame si tam Acko nech vieme ci ho prepisalo :)
  ib.GetTerminator(terminator); // ib. je co objekt / instancia triedy? asi ano
  // toto by ti malo vratit nie nastavit terminator chceme vediet aky je ci je #0
  abystrnepindal := terminator; // nazvi si to ako chces :)
  str(abystrnepidal,text);
// vypis to niekde na vystup messagedialog alebo ina GUI komponenta
...
 ShowMessage('GetTerminatorCharacter nam vratil : '+text);
end;

Tu mas ako sa pracuje so STR funkciou
0
Naposledy upravil/-a dxr v 12 Feb 2014, 13:40, upravené celkom 4 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

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 » 12 Feb 2014, 13:32

Err : HResult;

Err := io.Write(SafeArray,retCount,retCount);

nech vies navratovu hodnotu. mas ten port vobec otvoreny ?
0

Napísať odpoveď