Autor Téma: Synapse - se.port  (Přečteno 846 krát)

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Synapse - se.port
« kdy: 07-05-2019, 14:34:43 »
Dobrý den.
Bych chtěl poprosít o radu.

Mame zařizení, ktere komunikuje po rs232.
U programu ser.monitor nastavím jako odesilana data hex a odešlu 52 0d 0a.
Zařizení mi odpoví.
http://img24.cz/images/09695816586221296492.png

Přes lazarus použivám komponentu LazSerial, která použivá unity od synapse.
https://github.com/zbyna/LazSerial
A takto to mám nastavene
http://img24.cz/images/92610896682762124028.png

LazSerial1.WriteData(#$52#$0d#$0a);
A zařizení mí odpoví.
http://img24.cz/images/90075107867364292179.png

V delphi přes synapse se připojím.
Kód: Delphi [Vybrat]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3. Ser := TBlockSerial.Create;
  4.  try
  5.    Ser.Connect(ComPort);
  6.    Ser.Config(9600, 8, 'N', 0, False, False);
  7.    Ser.Purge;
  8.    Ser.Flush;
  9.    if Ser.LastError = 0 then
  10.    begin
  11.          Memo1.Lines.Add('Připojen na ' + ComPort);
  12.  
  13.    end
  14.    else
  15.    begin
  16.      Memo1.Lines.Add('Nejde se připojit na ' + ComPort);
  17.    end;
  18.  finally
  19.  
  20.  end;

A odešlu  Ser.SendString(#$52#$0d#$0a);
Jde vidět že přes ser.port prošlo to same co u obou předešlých pokusu, ale zařizení neodpoví.
http://img24.cz/images/88743572129081087607.png

I takto jsem to zkusil  Ser.SendString('R'#13#10);
http://img24.cz/images/69954798179280965915.png


Kde by mohl být problem?
« Poslední změna: 07-05-2019, 15:00:37 od Leo.xxl »

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #1 kdy: 07-05-2019, 18:42:18 »
Hloupý dotaz... Snažíš se ta data nějak číst?

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #2 kdy: 07-05-2019, 18:46:56 »
Už jsem zjistil že mám problem se čtením.
Najdu někde na strankach synapse nějake demo, jak spravně na to?
Tu jsem toho o synapse a ser.portu našel spoustu, ale o čtení nic.
« Poslední změna: 07-05-2019, 18:49:15 od Leo.xxl »

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #3 kdy: 07-05-2019, 19:21:25 »
Replystring := Ser.recvstring(2000);

Což bude číst odpověď, dokud nenarazí na CRLF, a pak to stoupne do toho Replystringu. Pokud odpověď nepřijde do dvou vterin, to je ta hodnota 2000, tak to vrátí prázdný string a v ser.lasterror budeš mít chybu timeoutu.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #4 kdy: 07-05-2019, 19:23:40 »
Jinak ještě v tom tvém kódu bych po připojení na port nevolal tu purge a flush. Nevadí to, ale užitečné mi to tam taky nepřipadá.

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #5 kdy: 07-05-2019, 20:18:44 »
Co mám na tom špatně?
Vrací mi to mezera 9997 mezera 9997 atd.

Kód: Delphi [Vybrat]
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. var
  3. i:integer;
  4. Replystring:string;
  5. begin
  6.  
  7. if Ser.LastError = 0 then
  8.    begin
  9.         Ser.SendString(#$52#$0d#$0a);
  10.         Replystring := Ser.recvstring(2000);
  11.         Memo1.Lines.Add(Replystring);
  12.         Memo1.Lines.Add(IntToStr(Ser.LastError));
  13.         Ser.Purge;
  14.     end
  15.     else
  16.     begin
  17.         i:= Ser.LastError;
  18.         Memo1.Lines.Add('chyba'+ IntToStr(Ser.LastError));
  19.     end;
  20. end;
« Poslední změna: 07-05-2019, 20:28:30 od Leo.xxl »

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #6 kdy: 07-05-2019, 21:34:32 »
Purge tam voláš proč? V takovémto programu jej vůbec nepotřebuješ.

Zkus po te chybě timeoutu mrknout na obsah LineBuffer. (Ale nesmíš volat ten Purge) Pokud je prázdný, tak žádná data nepřichází. Jinak tam uvidíš co přišlo, a v čem nevidělo tu zakončovací sekvenci CRLF. Třeba je to z nějakého důvodu zakončené něčím jiným, což tímhle odhalis.

Pokud data nepřichází, zjistí ještě, jestli zařízení nevyžaduje dělat nějaké kejkle s RTS signálem. (Třeba když je tam převodník na rs485, atd.)

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #7 kdy: 08-05-2019, 07:06:13 »
Zkus po te chybě timeoutu mrknout na obsah LineBuffer. (Ale nesmíš volat ten Purge) Pokud je prázdný, tak žádná data nepřichází.

Ja mám furt puštěný ten Serial Port Monitor.
https://www.eltima.com/products/serial-port-monitor/

Nevím jestli ten programek znate.
Da se s nim připojít na port a komunikovat přes něj se zařizením, nebo ho odpojít a nechat jen naslouchat.
Pokud jen nasloucha, vidite celou komunikací, ktera na portu probiha, tam i zpět.
Takže pokud v něm nevidím že něco přišlo, tak v bufferu určitě nic nebude.

http://img24.cz/images/90075107867364292179.png
Toto je ten Serial Port Monitor ve stavu naslouchaní přes ten lazarus a tu komponentu LazSerial.

Když do usb strřím arduino, ktere odesila data přes ser.port, tak data normalně přichazejí a ten Timer1 je normalně vypisuje.

To zařizení je v prací takže zase až odpoledne.
Napadlo mně zkusit to ještě přes ten lazarus.
Odesilat ty data přes tu komponentu LazSerial ale přijimat data přes synapse.
Jestli to tak vubec pujde.
Tak bych měl zjistit, zda je problem v odesilaním, nebo čtením.

« Poslední změna: 08-05-2019, 07:17:33 od Leo.xxl »

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #8 kdy: 08-05-2019, 14:16:48 »
Koukám, že LazSerial je jen lehce obalený SynaSer, hlavně kvůli paralelnímu threadů, který periodicky čte data ze seriálu i ve chvíli, kdy žádná nechceš, a vyvolava event. To je trochu proti filozofii Synaseru, ale tady by to na funkci neměl mít žádný vliv. Pokud něco neupravili v samotném Synaseru. Takže otázka je, používáš tu jejich verzi, nebo tu moji poslední verzi přímo ze SVN?

Tu monitorovací aplikaci neznám, rozhodně bych to zkusil bez ní. Problém bude v nějaké naprosté blbine. Já vždycky začnu tím, že si zjistím přesně, jak to sériové rozhraní vypadá. Kolik drátů používá a případně na jaké signály jsou zapojené. To ti prozradi, jaké řidici signály se pouzivaji.

Každopádně bych se ani nesnažil o nějaké kombinování kódu, Tim si tam zaneses jen spousty dalších chyb. Já bych spíše krokoval dovnitř Synaseru a koukal bych se, co se deje?. A podle toho řešil spíše problém s hardwarem, připadne s nějakým neobslouzenym signalizačním drátem, když ti to s jiným zařízením veselé komunikuje.


Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #9 kdy: 08-05-2019, 14:56:17 »
Použivám tuto, takže Vaši.
https://sourceforge.net/p/synalist/code/HEAD/tarball

Je to divne že přes ten  LazSerial to v tom lazarusu chodi.
Ještě zkusím přejmenovat ty unity co použiva ten  LazSerial a nahradit za ty co jsou v synapse.
Pokud nepomuže zustanu i když nerad u toho lazarusu.
Jinak se jedna o toto ATEN USB to serial bridge převodník.
https://www.aten.com/global/en/products/usb-&-thunderbolt/usb-converters/uc232a/
http://img24.cz/images/84441709179719765124.png

Jiinak moc děkují za ochotu a pomoc.





Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #10 kdy: 08-05-2019, 15:47:46 »
S podobnými převodníky komunikuji naprosto běžně a bez problému. Někde bude fakt jen nějaká blbá chyba, ale takhle od stolu fakt těžko říct kde.

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #11 kdy: 08-05-2019, 16:36:45 »
Jsem si zkusil nainstalovat komponentu ZylSerialPort.
Vyhakuje hlašku, že je to demo, ale jinak plně funkční.
Tato komponenta komunikuje ale vrace se mi jen ERR04.
http://img24.cz/images/36519095380598940132.png

Takže mužu být rad, že mi to alespon přes ten lazarus chodí  ;)

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #12 kdy: 09-05-2019, 07:45:11 »
Jsem jen lama a umím jen to co se mi před mnoha lety snažili natlouct do hlavý ve škole.
Našel jsem k tomu heblu manual, kde je popsana i komunikace ale moc mi to neřika.

6. COMMUNICATION STRINGS
7. COMMUNICATION CONTROLS

In the serial controls and in the relative responsesnn                   
Address 485 of the instrument (2 characters) (only if communication mode 485 is activated
<CR>Terminator character ASCII 13 (0D) (1 character)
<LF>Terminator character ASCII 10 (0A) (1 character)

https://www.vetek.se/Dynamics/Documents/543cef61-c61d-4fdb-b350-f7d6b7fdb100/TECH_MAN_ENG_DFW_v4.pdf
Kdyby se tu našel náhodou nějaký profik a měl by čas u svačinky  ;)
Možna by přišel na to kde dělam kopanec, že se přes synapse v delphi nebaví.
« Poslední změna: 09-05-2019, 08:03:02 od Leo.xxl »

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 208
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synapse - se.port
« Odpověď #13 kdy: 09-05-2019, 09:38:40 »
A používáš ten režim rs485, nebo ne? Není někde za tím USB převodníkem skutečně rs485? To je totiž half-duplex, musíš jej přepínat z režimu vysílání do režimu přijímání. To se dá dělat několika způsoby, je třeba vědět který.

Offline Leo.xxl

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 0
Re:Synapse - se.port
« Odpověď #14 kdy: 09-05-2019, 09:56:05 »
Není tam rs485.
Jak jsem psal,jsem jen lama a toto je už mino me znalostí.
Proč ale komunikuje s tým programem serial monitor?
A proč mi to v tom lazarusu funguje?

V timeru mam  LazSerial1.WriteData(#$52#$0d#$0a); 

a čtu to
Kód: Delphi [Vybrat]
  1. procedure TForm1.LazSerial1RxData(Sender: TObject);
  2. var
  3.   RecvData: array[0..255] of char;
  4. begin
  5. LazSerial1.synser.RecvBufferEx(@RecvData,250,10);
  6. Memo1.Lines.AddText(RecvData);
  7. end;  
  8.