Fórum témák
» Több friss téma |
Szia!
Most nincs előtten a kód... Annyira emlékszen, hogy minden beállítás egy neki megfelelő felsorolásos típusbeli értékkel állítható. Nézd meg a TComPort property -eit a beállító ablakban. A soros paraméterek beállítására van a csomagban egy ablak is, ha a felhasználó által kiválasztandó beállítás a cél, akkor érdemes azt az ablakot megjeleníteni. D7 -tel voltak problémáim az újrafordítással, de pár perc alatt leküzdhetők voltak.
Szia. A tcomport-ban nem vagyok otthon, de mellékelek egy delphi7-s alap progit, amit összedobtam. Remélem ez is segítség. Talán segít. Próbáltam rendesen felkommentezni. Szerintem szög egyszerű és rövid kód. Azt elfelejtettem, hogy ehhez nem kell komponens,
API-val megy. Úgyhogy a komponens macera elmarad. A hozzászólás módosítva: Feb 20, 2013
Szia !
Az Object Inspector-ban nézd meg a properties fülön található adatokat. pl. a BaudRate-nek br1200-at adhatsz meg így ComPort1.BaudRate:=br1200. De ahogy Hp41C is írta egyszerűbb a ComPort1.ShowSetupDialog; eljárást meghívni ekkor egy ablakban ki lehet mindent választani, amit akarsz. A ComPort Library mellett vannak példák, ezeket érdemes átnézni, mert innen könnyebb megérteni a működést.. Itt egy kis kód is :
A hozzászólás módosítva: Feb 20, 2013
Szia!
Bár még nem próbáltam ki élesben, de jól néz ki ez a program! Főleg hogy alapból megy, komponens nélkül, direkt az oprendszert használva. Bár gondolom ha komponenst használok, fordítás után gondolom az is az oprendszert használja, nem kerüli meg 86ezer DLL-el, de majd megnézem.
Jól látod. Annak idején én is próbálgattam a comport komponenst de nem vált be.
Inkább neki ültem, és utána jártam ennek (itt és itt). Elég egyszer megírni és utána copy-paste aztán annyi. Valóban fordítás után nyugodtan elengedheted a programod 'kezét', mert nem kell dll és semmi más. Az is lényeges, hogy nem függsz annyira attól, hogy melyik Delphi verziót használod és melyik windows-t. Ez tényleg csak egy egyszerű port kezelés. Rajtad áll, hogy milyen komolyan akarod kezelni a portot. Ez szerintem feladat függő. Amit leírtál ahhoz ez szerintem majdnem elég.
Köszi a linkeket!
Most gyorsan belenézve az általam használt komponensbe, úgy néz ki, ez is az oprendszert használja, kb. ugyanazzal az eléréssel, mint a linken leírt módszer, szóval nem kell neki külön dll, vagy bármi más. A "DLL Export Viewer" program sem lát semmilyen extra dll-t, amit meghívna a Delphis program (tudom ajánlani ezt a viewer programot, hasznos tud lenni ) Viszont ez megnyugtató, mert akkor a komponens nem bonyolítja meg a port elérést. Ennek ellenére ha lesz időm, beleásom magam az alapokba. Végülis régóta foglalkozok már ilyennel, csak abba még nem ástam bele magam, hogy az operációs rendszer hogy kezeli le.
Szívesen. A komponens ugyanezeket használja, valóban. Az ajánlott progit én is ismerem köszi.
Sok sikert
Sziasztok.
Köszönöm a segitséget, hozzászólásokat. Mindegyikből tanultam, valamit. Elkezdtem összerakni egy kis programot, de hibaüzenetet kaptam. De miért????( Button1) Más megirt példaprogram-ban tökéletesen münködik. Csak ebben nem.( Count -érték) Valami kis hiba lehet csak. De még nem találtam meg, hogy mi lehet az. A progi tömören. 1. port megnyitása 1/1 port meglétének ellenőrzése---- ezt késöbb beleirom 2. adatküldés a port-ra 3. adatok fogadása----------a hiba innentől kezdve 3/1 amig adatforgalom van, nem megy tovább a progi----------ezt késöbb beleirom 4. port bezárása Hali
Sziasztok.
Igy néz ki, hibaüzenet nélkül. -------------------------------------------------------------------------------------------- procedure TForm1.Read1Click(Sender: TObject ); var Str: String; Count: Integer; Begin ComPort1.Open; sleep(2); ComPort1.WriteStr('1'); // Elküldi az 1-es helyére beirt karajtersorozet-ot sleep(2); begin Memo1.Clear; ComPort1.ReadStr(Str,Count); Memo1.Text := Memo1.Text + Str; end; ComPort1.Close; end; ------------------------------------------------------------------------------------------- máshogyan nem tudtam megoldani. Hali
Igen. Ez így jó. Te szerintem összekeverted ezt :
Idézet: „TForm1.ComPortRxChar(Sender: TObject; Count: Integer);” ezzel Idézet: <- itt az a baj, hogy hozzáírtad a Count:Integert-t „TForm1.Button1Click(Sender: TObject; Count: Integer);” A kettő nem ugyanaz
Szia!
Az adás és a vétel kezelésére írj különálló eljárásokat, ne tedd a két funkciót egy kiszolgálóba. Ekkor a sleep -eket ki lehet venni a programból. Az adási és a vételi oldalra is tegyél egy memo -t a küldendő táviratok átmeneti tárolásához.
Átnézegettem a progidat és egy 'kicsit' belenyúltam. Írtam hozzá megjegyzéseket.
Valóban célszerűbb úgy csinálni, ahogy Hp41C kolléga mondja. Így fejlesztgetés során könnyebb követni a dolgokat. Pláne , ha az egészet még csak tanulgatod. Bár magam részéről egy pár kisebb progit már írtam Delphiben, gyakran csinálok egy plusz ablakot ahol loggolom a programomat. Pl adott lépéseknél kiíírom egy ablakba, hogy a port megnyitása meg volt vagy konverzió elkezdve utána pedig befejezve . Ajánlok még egy port loggert ahol követni tudod, hogy a programod mit is csinál. Pl:ezt
Sziasztok.(Hp41C és michael67)
WriteStr és ReadStr funkciót egy időben kell használnom. Tesz alany egy beltéri. A régi szofver-e úgy münködik, amit házilag irtak meg hozzá VB6-ban hogy. Read funkció alatt.(csak tömören) Port megnyitás Adatküldés (121212121) Amire a beltéri válasza egy adathalmaz.( pl: beltéri szoft verzió ) Port bezárása. A forrását nem kaptam meg, de az utasitásokat igen. ( gyakorolni jó lesz.) és a végén a progit se. A kis példaprogramok-ban a végén szoktam beleirni a memoárokat, ha már münködik a szoftver, vagy ha már túl nagy. E nélkül pár hét múlva nem emlékeznék rá hogy mit milyen funkció-val láttam el stb. Egy nagy szoftver, kisebb példaprogramokból szoktam megirni és összerakni. Ebben az esetben csak szigorúan a sorosport kezelés a leg első lépés. Tehát visszatérve az elejére READ funkció alatt egy idő-ben kell üzemelnie sorrendben a WriteStr és ReadStr utasitásnak. A módósitott példaprogramot köszönöm. Ahogyan átnéztem sokat tudok belőle megint tanulni. A sorosporti részhez mostanra jutottam el. Ez számomra a következő szint. Ez a programot meg én követtem el, több ember kérésére. Bővebben: Saját megirt progi LAZARUS alatt Kérdésem hogy ezt a procedúr-át hogyan tetted bele a szoftverbe. Ez nem tiszta csak számomra. type {{{ procedure ComPort1RxChar(Sender: TObject; Count: Integer); }}} ----------------------------------------------------------------------------------- És a hozzá tartozó procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var inStr : string; {Adatok fogadására használt változó} inCount : integer; {Adatok számlálásához használt változó} begin ComPort1.ReadStr(inStr,inCount); {Beolvassuk az adatokat} Memo2.Lines.Add(inStr); {A beolvasott adatokat kiírjuk memo2-be} end; ------------------------------------------------------------------------------------------- Hali
Szia. Félre ne érts, pusztán csak segítségként írjuk, amit írunk. Részemről pusztán jó tanácsok. A megjegyzéseket pedig azért írtam, hogy éthetőbb legyen a dolog. Részemről az esetek többségében nem adatott meg a lehetőség, hogy rendelkezzem a kommunikáció adataival Ezeket nekem kellett kibogozni , ezért írtam, hogy segítség egy ilyen kis ön loggolás. Mellesleg szívesen segítek , mert így karban tartom az ez irányú tudást. Éppen egy soros porti programot stoppolgatok én is gyakorlásképpen. (Mostanság elég sok időm van ilyesmit csinálni sajna )
A kérdésedre pedig a válaszok: - nem tettem bele sehogy. A komponensben benne van Az object inspector események fülére kattintva megtalálod. (kép melléklet) - Az egyidejű kezelés így valósul meg lényegében, mivel ez egy beérkező karakterre bekövetkező esemény (procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer). Igazából amit módosítottam program nem tökéletes még így sem csak alap , útmutató. Mint mondtam nem használom ezt a komponenst jobban szeretem külön megírni. (csak a segítség miatt tettem fel) Néhány jó tanács (ismétlem jó tanács. Írtam hasonló programokat abból merítve): - Én szálkezeléssel oldanám meg a problémát. - A fejlesztés alatt amíg írtam a progit, összekötöttem az Rx és Tx-et és így figyeltem, hogy milyen gyorsan és pontosan tud a program reagálni a vételi oldalon. - Az msdn szerint a Timeoutokat minden programhoz magadnak kell belőni. 'Röviden' ennyi De, ha gondolod írj privátba és segítek, ha tudok. A hozzászólás módosítva: Feb 23, 2013
Üdv michael67.
A példaprogramokat én is tanulásra használom fel. Irányitásra pedig szükség van. Alap útmutatónak nagyon jó a példaprogramod. Nagyon sok mindent fel tudok használni a programom-hoz belőle. Hali.
Sziasztok!
Elkezdtem én is ismerkedni Delphivel és ezzel a sorosport kezeléssel. Felhasználtam bizonyos részeit a mintaprogramoknak és ezzel kapcsolatban lenne kérdésem. Ha elküldök terminálból 5-6 karakterből álló szót, akkor az 9600 vagy nagyobb sebességen egyben megérkezik, viszont ha 4800 vagy alá csökkentem a sebességet, akkor tördelve jelenik meg a vételi oldalon? (egyelőre csak vételképes a programom, adás nincs tesztelve) 600as baud raten már karakterenként tördeli. Vélemény? Kiborg
Szia! Nem tördelve jelenik meg szerintem (9600 alatt nem nagyon használtam soros portot) . Elviekben te folyamatosnak fogod érzékelni, 5-6 karakter esetén.
Üdv Mindenkinek
Olvastam a hozzászólásokat, sokat segített a comport programozásban. Viszont van egy problémám: A fenti példaprogramok alapján készítettem egy próba programot - egy adó vevő - vezérléséhez. A probléma az, hogy az elküldött parancsra kapott választ nem írja ki a progi. Ellenőriztem a rádió elküldi a választ mégsem kerül kiírásra. Példa a kommunikációra: comport.WriteStr ('ID;'); vagyis elküldöm a rádiónak az ID; parancsot, amire a rádió az ID0310; karaktereket küldi válaszként. Mellékletként csatolom a próba programot is A másik kérdésem hogy lehet ellenőrizni a com port foglaltságát, még a csatlakozás előtt. thx Samu
Szia,
Mivel a programkód csak be lett írva (vagy másolva), a fogadáshoz tartozó rész gyakorlatilag sose hajtódik végre, mert nem a ComPort eventhez lett írva. Ezt egyszerűen meg lehet oldani, a csatolt kép szerint a Comport eventnél az onrxchar-nál válaszd ki a legördülő menüből az eljárást. Szerk.: most nézem, ez pár hsz-el följebb is van egy ilyen kép. A hozzászólás módosítva: Aug 10, 2014
Igen azt észre vettem, ennek ellenére olyan mintha nem hajtódna végre, pedig a terminál ablakban látszik hogy érkezik szöveg. Csak mintha feldolgozásra nem kerülne.
Közben belenéztem a kódba is, van benne egy kis hiba.
Javítsd ki erre:
Köszi.
Bár ez csak annyit tesz, hogy az "Ansedit.text" meglévő értékéhez adja hozzá az "instr" értékét. Ahogy én írtam az minden esetben felülírja az előző értéket. Az lehet, hogy Win7-el van a probléma. Samu A hozzászólás módosítva: Aug 11, 2014
Nálam viszont jól működik. Win7 alatt. Végrehajtódik egyáltalán a "ComPortRxChar" esemény? (Rakj bele pl. egy showmessage-t, hogy lásd.)
Köszi az ötletet, ki is derült. Nem fut le az OnRxChar esemény. Ezzel kiderült, nem a delphivel és a programkóddal van a probléma.
Köszönöm mindenkinek az ötleteket. Samu
PIC-el küldök egy stringet a PC-nek, az alábbi eljárással. Látszólag jól működik, (bár az "entert" nem látja), de amikor a stringet akarom tovább variláni akkor kiderül, hogy a küldött karakter sorozatot két részletben olvassa be, először csak az elő karakter kerül a stringbe, majd a küldött karakterlánc többi része. Tehát kétszer fut le a procedure. Ennek mi lehet az oka?
(Ha a terminalablakban nézem az érkezett adatokat akkor azt látom amit küldtem. )
A hozzászólás módosítva: Feb 2, 2016
Ez nálam is így működött. Valószínűleg azért, mert ilyenkor egy bufferből olvasunk, és lehet az érkezett adat "nem fér" bele mind a bufferbe, ezért két (vagy több) részletben olvassuk ki (azaz többször veszi elő az oprendszer a buffert).
Bár ez csak tipp, de szerintem valami hasonló dolog lehet a háttérben. A hozzászólás módosítva: Feb 2, 2016
Mindegy mennyi karaktert küldök (5-25 között próbálgattam), első körben egyet olvas be, utána a többit ...
Ez esetben viszont lehet az adó oldalon van valami.. Nem lehet, hogy van egy kis szünet az 1. byte után?
Nem hinném...
Kizárt, hogy ebből a fordító olyant generáljon aminél az első 5-ös után van egy szünet! Nekem inkább az kezd gyanús lenni, nem-e a ComPort komponensben van a hiba. 4.11-est telepítettem de ha jól látom van már 4,14-es verzió is, csak azt még nem tudtam eltölteni sehonnan sem. A hozzászólás módosítva: Feb 2, 2016
Na nekem valahol van valami komponens nélküli kódom, mindjárt előkaparom. Bár az azt hiszem teljesen máshogy működik...
A hozzászólás módosítva: Feb 3, 2016
|
Bejelentkezés
Hirdetés |