Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Seriova komunikace ve FoxPro 26

Dobry vecer,
mam problem s napsanim jedne funkce, z urcitych duvodu to potrebuji pod Foxpro 2.6,
jde o to, ze na COM je pripojene zarizeni, ktere po odeslani znaku +CRLF vrati hodnotu podle stavu snimace a tu potrebuju precist z toho sameho COMu

x CRLF --- > COM2
COM2 ----> hodnota

Nevim jak na to, musi to byt rychle.

Předmět Autor Datum
To je dosovska FoxPro? Poku ano, budes potrebovat nejake externi knihovny na komunikaci.
Jan Fiala 21.01.2007 23:00
Jan Fiala
JJ, jde o DOSovou foxku. Vzhledem k tomu ze jde o komercni projekt, jsem schopen i zaplatit. Kdysi e…
Radek_B 22.01.2007 08:51
Radek_B
mozna pomuze neco z tohoto? www.qfoks.cz
sobol 22.01.2007 08:54
sobol
Presne tohle jsem mel na mysli. S FoxPro 2.5 jsme to uspesne pouzivali. Umi to velkou poustu veci.
Jan Fiala 22.01.2007 16:14
Jan Fiala
Nebo možná TurboPower's Async Pro for DOS.
host 22.01.2007 15:39
host
Diky, rekl bych ze ten Qfoks je to co jsem myslel. Puvodne jsem predpokladal ze by to mohlo jit obsl…
Radek_B 22.01.2007 21:36
Radek_B
Ked uz tak COM2: (s tou dvojbodkou) Rychlost a parametre prenosu by ale pred spustenim programu bolo…
MM.. 22.01.2007 21:41
MM..
Je jasne ze musim pomoci mode nastavit port, takhle jsem resil kominikaci se zakaznickym displejem,…
Radek_B 22.01.2007 21:56
Radek_B
Potrebuji trosku nakopnout, stahnul jsem si qfoks, ale navim jestli to delam dobre nebo ne a nevim j…
Radek_B 23.01.2007 20:53
Radek_B
Funkce Q_INP() přečte z portu jeden bajt. Rovněž tak Q_OUTP() zapíše jen jeden bajt. Pokud chceš čís…
host 23.01.2007 21:17
host
To si tak nejak myslim, ale netusim jak.
Radek_B 23.01.2007 21:31
Radek_B
Jezis :)) Ak chces pracovat priamo s portom na lowlevel urovni, tak si najprv musis zohnat pokec reg…
MM.. 23.01.2007 21:32
MM..
... z toho vyplyva: musis tam mat cyklus v ktorom budes testovat bit 5 alebo 6 (zhlavy neviem) statu…
MM.. 23.01.2007 21:40
MM..
... inac nepotrebuje to zariadenie nahodou HW handshaking? Su zapojene signaly CTS, DTS, RTS, DSR?
MM.. 23.01.2007 21:38
MM..
Diky za obsahly popis, zkusim to prostudovat. Kabel a zarizeni je OK, testovaci programek co k tomu…
Radek_B 23.01.2007 21:57
Radek_B
Ta hlaska DOSu je preto ze to chce hanshaking. Staci spojit tusim piny CTS a RTS (piny 7,8 na 9pinov…
MM.. 23.01.2007 22:03
MM..
DIKY VAM !! tak to vypada ze to funguje, uz ctu data z portu tak jak to ten kram posila. Sice tu mam…
Radek_B 23.01.2007 22:46
Radek_B
Ak budes mat nezrovnalosti ktorym nebudes rozumiet, kludne sa pytaj (ale potom treba aj podrobnejsie…
MM.. 24.01.2007 02:05
MM..
Dobrý den , chystám se řešit obdobný ůkol ,jde o čtení dat ze dvou vstupů ,můžete mě poradit? Lubos…
lubos56 04.03.2007 19:57
lubos56
A co chces poradit? Vsetko uz mas napisane vyssie. poslední
MM.. 04.03.2007 21:50
MM..

Ked uz tak COM2: (s tou dvojbodkou)
Rychlost a parametre prenosu by ale pred spustenim programu bolo treba nastavit cez prikaz mode. Ale toto riesenie moc nemam rad (podpora COM v DOSe a IBM-compatible BIOSe je horsia ako katastrofa, bill gates sa asi vtedy este len ucil programovat :-D)

P.S. namiesto toho druheho parametra (2) by som skusil radsej F_READWRITE_UNBUFF. 2 je bufferovany prenos, to by nebola komunikacia v realnom case.

P.S.2. alebo mozno to ide aj bez tej dvojbodky, ale s dvojbodkou sa asi da ten subor otvorit aj priamo s uvedenim parametrov prenosu, napr. :
fopen('COM2:9600,N,8,1', F_READWRITE_UNBUFF)
apod., mozes vyskusat ak mas chut :-) Samozrejme parametre prenosu si zmen podla toho ake potrebuje to zariadenie...

Potrebuji trosku nakopnout, stahnul jsem si qfoks,
ale navim jestli to delam dobre nebo ne a nevim jak
precist z portu to, co me zarizeni vrati.

na port poslu
=q_outp(760,68)
=q_outp(760,13)
=q_outp(760,10)

a kdyz prectu prikazem q_inp(760) tak dostanu vzdy jen hodnotu 21,
jak docilit toho, aby to precetlo vic znaku z portu ?
Nebo nejaky ukazkovy priklad by se hodil, priznam se ze v tom celkem tapu.

Jezis :))
Ak chces pracovat priamo s portom na lowlevel urovni, tak si najprv musis zohnat pokec registrov ktore tam su a ako sa k nim pristupuje a precitat si to cele, a aj ako sa s tym kusom hardwaru pracuje. Napr. tu serial-port-registers.php
alebo googlom: serial port registers

760 je standardna base address pre COM2 (hexadecimalne 2F8).
Standardny controller serioveho portu ma 8 zakladnych registrov, pristupuje sa k nim priamo cez I/O porty, t.j. u COM2 ak je na 2F8h na porty decimalne: 760 az 767, popis mas napr. na tej stranke co som ti dal link.
Dolezity je napr. status register (base address +5, t.j. pre COM2 je to port 765), ktorym ti radic oznamuje ci nejaky bajt prijal (az ked nejaky bajt prijal tak mozes precitat prijaty byte z portu 760), a hlavne aj pred vysielanim kazdeho bytu musis testovat bit 5 alebo 6, inac ti to nic neposle :-)
P.S. a musis tie data stihat vyberat vtedy ked prichadzaju, ptz. controller serioveho port ti tie bajty nebude drzat v uschove. Dnesne controllery maju sice FIFO ale len 16byte a zvycajne je defaultne vypnute v DOSe (tusim).
Atd. na to nestaci jeden prispevok aby som to cele tu popisoval.
Dalsia vec je prerusenie od toho portu (tiez sa nastavuje v jednom z registrov), ak by OS povolil prerusenia tak ti bude OS kradnut znaky :-D (DOS ale tusim prerusenia COM portov nepovoloval takze to by malo byt ok)

Aky si mal vlastne problem s tym fopen("COM2:baud,...", ...)? Skusal si to co som pisal (s tym UNBUFFERED parametrom)?

... z toho vyplyva: musis tam mat cyklus v ktorom budes testovat bit 5 alebo 6 (zhlavy neviem) status registra, ak mozes poslat byte tak posles, az odosles tie 2byty tak dalsi cyklus v ktorom testujes bit tusim 0 status registra a az je nastaveny tak precitas byte a niekde ulozis, a to sa opakuje az kym neprecitas tolko bytov kolko treba. Samozrejme museli by tam byt aj nejake timeouty nech sa to nezacykli donekonecna ak ten kram nebude do COM2 zapojeny apod.

P.S. ak by tych prenasanych bytov nebolo vela, tak by ti asi stacilo povolit a nastavit FIFO, a nacpat to tam len normalne v sekvencii, tak ako to robis. Skus si pozriet tie registre ze kde sa povoluje FIFO...
... t.j. skus na zaciatku nacpat na port 762 hodnotu 1

Diky za obsahly popis, zkusim to prostudovat.
Kabel a zarizeni je OK, testovaci programek co k tomu je funguje OK,
zarizeni na vyzadani vraci hodnoty (teplota a tlak).
Jen to potrebuju udelat z ty foxky, aby to zapisovalo do databaze pro dalsi zpracovani. O seriove komunikaci vim skoro prd, bohuzel.
pri pokusu s fopen me to nefungovalo vubec, vzdy to koncilo hlaskou DOSu ze neni mozne zapisovat na port a klasicky Prerusit, Ignore,.....
Pomoci mode jsem to samozrejme nastavil. Necekal jsem ze to bude takovy slozity, popravde, cekal jsem ze to pujde tim fopen, fputs,...

Ta hlaska DOSu je preto ze to chce hanshaking. Staci spojit tusim piny CTS a RTS (piny 7,8 na 9pinovom konektorw) na strane PC, ak nie su zapojene na zariadenie. (edit: toto plati pre DOS. Ak na to pristupujes priamo cez porty, tak nic prepajat netreba).

Alebo skus zapnut to FIFO ako som pisal out(762,1), ak posielas/prijmas menej ako 16byte tak by to mohlo klapnut aj tak sekvencne, ako si to robil.

P.S: ja ti verim ze testovaci SW funguje, ale ak su zapojene na zariadenie aj riadiace signaly RTS DTR, a ak ich to zariadenie potrebuje, tak navyse musis nastavit aj tie signaly spravne (bit 0,1 portu 764)

Zpět do poradny Odpovědět na původní otázku Nahoru