Delphi Comport onrxchar-on belül textfileba írás
2020-03-28T21:47:10+01:00
2020-03-29T14:21:40+02:00
2022-08-11T18:55:31+02:00
vandammee
Sziasztok!

Egy mikrovezérlőről küldök virtuális soros porton keresztül adatokat a számítógépen futó delphi programnak. Az adatokat a Delphi Comport komponens onrxchar metódusán belül fogadom és dolgozom fel. Remekül működik ez a rész. 
Most viszont annyit akartam ebbe az onrxchar procedure-ba beírni, hogy a fogadott adatokat egy textfile-ba is mindig írja bele. 
Viszont most ez valahogy összeakadhat a soros portos programrésszel, mert amikor egy, a formon levő button nyomógomb megnyomásával engedélyezem a soros porton fogadott adatok textfájlba írását, egyrészt nem íródik be semmilyen adat a fájlba, másrészt lefagy a soros portos adatforgalmam, nem érzékel a program újabb bejövő adatokat.
Valaki tudja mi lehet a probléma?
Mutasd a teljes hozzászólást!
Kiderült mi a probléma. Sajnos én voltam béna, és írásra nem megnyitott textfile-ba akartam a write-tal írni. Mondjuk a program valami I/O error hibaüzenetet adhatott volna.

Mindenesetre köszönöm a segítséget.
Mutasd a teljes hozzászólást!

  • Csak egy tipp: én a soros kommunikációt úgy szoktam alkalmazni, hogy mindig van a soros porton bejövő adatcsomag végén egy  csomag vége jel. Ezt állítom be a Comport komponensben EventChar-ként. Az OnRxChar eseményben a beérkező adatot még nem dolgozom fel, csak egy pufferbe gyűjtöm. A teljes adatcsomag végén levő csomag vége jel beérkezésekor kiváltott OnRxFlag eseményben dolgozom fel a pufferbe összegyűjtött teljes beérkező adatot.
    (Persze ha az nem oldható meg, hogy a küldött adatcsomag végén legyen egy csomag vége jel, akkor ez nem működik...)
    Mutasd a teljes hozzászólást!
  • Kedves Trap!

    Köszönöm válaszod! Viszont nekem nem a soros kommunikációval van a problémám, az jól ment mindaddig, míg az OnRxChar eseményen belül be nem írtam a 
    writeln(g_outputfile, InttoStr(fordulatszam)); 
    sort, hogy a soros porton rendszeresen bejövő adatot beleírjam egy textfájlba, hogy le legyen mentve.
    Sőt már arra is gondoltam, hogy az OnRxChar eljáráson belül a program azt hiszi, hogy a comport-os writeln fgv-t akarom használni, így megpróbáltam úgy is, hogy
    System.writeln(g_outputfile, inttostr(fordulatszam));
    De így is amint beérkezik az első adat, egyrészt a program nem jelez ki új beérkező adatot, meg a fájlba sem íródik ki semmi.
    Mutasd a teljes hozzászólást!
  • Ezért javasoltam azt az ötletet, hogy ne az adat beérkezése közben az OnRxChar eseménybe kellene rakni a fájl írást, hanem abban csak gyűjteni a bejövő adatot és az EventChar csomag záró jel beérkezésekor kellene az addig összegyűjtött beérkező adatot fájlba írni.
    (Lehet hogy az rxchar esemény és a fájl írása akad össze esetleg...)
    Mutasd a teljes hozzászólást!
  • Értem. Hát a soros portos kommunikáció protokollját már nem szeretném átvariálni, hátha van egyszerűbb megoldás, ráadásul az OnRxFlag ugyanúgy a comport osztály metódusa, mint az OnRxFlag, szóval  ilyen szempontból szerintem nem lesz különbség, viszont ha nem jön más válasz, akkor lehet kénytelen leszek átírni a kommunikáció protokollját, és ezt kipróbálni.
    Mutasd a teljes hozzászólást!
  • Kiderült mi a probléma. Sajnos én voltam béna, és írásra nem megnyitott textfile-ba akartam a write-tal írni. Mondjuk a program valami I/O error hibaüzenetet adhatott volna.

    Mindenesetre köszönöm a segítséget.
    Mutasd a teljes hozzászólást!
abcd