Forum » Programiranje » C++
C++
strobos ::
Pozdravljeni.
Še vedno nisem rešil problema s pošiljanjem in sprejemanjem na COM portu.V Visual C++ funkcija _outp() in _inp() ne dela.V Dos-ovem C++ pa so funkcije outport in inport.Ima mogoče kdo kakšen program narejen s temi funkcijami ali pa tudi na kakšen drugačen način.
Lp
Še vedno nisem rešil problema s pošiljanjem in sprejemanjem na COM portu.V Visual C++ funkcija _outp() in _inp() ne dela.V Dos-ovem C++ pa so funkcije outport in inport.Ima mogoče kdo kakšen program narejen s temi funkcijami ali pa tudi na kakšen drugačen način.
Lp
Sem že dvakrat stran odrezal,pa je še zmer prekratko!
madonch ::
Ali imaš msdn Library?
Tam je pod: Serial Communications, Win23
zelo dobro opisana serijska komunikacija s primeri.
Na port pišeš z WriteFile in ReadFile, kot bi pisal ali bral iz datoteke.
Poglej si in če ti kaj ne bo jasno vprašaj, bom poskusil pomagat, so pa s to serijsko komunikacijo vedno jajaca.
Tam je pod: Serial Communications, Win23
zelo dobro opisana serijska komunikacija s primeri.
Na port pišeš z WriteFile in ReadFile, kot bi pisal ali bral iz datoteke.
Poglej si in če ti kaj ne bo jasno vprašaj, bom poskusil pomagat, so pa s to serijsko komunikacijo vedno jajaca.
leposemejte :-)
strobos ::
MSDN library sem naložil danes,ker sem prej vse diske formatiral in potem vse na novo in sedaj imam tri operacijske sisteme in niti nimam časa.Bom pa pogledal in povedal,kako bo.Hvala!
Lp
Lp
Sem že dvakrat stran odrezal,pa je še zmer prekratko!
strobos ::
Sem iskal,pa nisem našel writefile in readfile.Našel sem samo nekaj za Visual Basic in sicer
MScomm1.CommPort=1
MScomm1.Settings="9600,N,8,1"
MScomm1.open=true
za odpiranje porta in nastavitve.Bi mi lahko kdo pomagal pri tem?Ni važno,če je v Visual Basicu ali v Visual C++.Rabil bi samo rutino,ki bi pošiljala in sprejemala podatke,naprej pa bom sam napisal svoj program.
Lp
MScomm1.CommPort=1
MScomm1.Settings="9600,N,8,1"
MScomm1.open=true
za odpiranje porta in nastavitve.Bi mi lahko kdo pomagal pri tem?Ni važno,če je v Visual Basicu ali v Visual C++.Rabil bi samo rutino,ki bi pošiljala in sprejemala podatke,naprej pa bom sam napisal svoj program.
Lp
Sem že dvakrat stran odrezal,pa je še zmer prekratko!
madonch ::
Pojdi v MSDN Library!
Klikni listič 'Search' !
V okence napiši (skopiraj) tale niz: "serial communications in win32"
(z navednicami vred) ter klikni 'list topics'.
Če tako še vedno ne boš nič našel, pa ti lahko jaz pošljem na kak mejl, če mi ga sporočiš.
Nasvet: če ti je Visual Basic bolj domač kot Visual C++, naredi to raje v Visual Basicu, ker je najbrž enostavneje.
Klikni listič 'Search' !
V okence napiši (skopiraj) tale niz: "serial communications in win32"
(z navednicami vred) ter klikni 'list topics'.
Če tako še vedno ne boš nič našel, pa ti lahko jaz pošljem na kak mejl, če mi ga sporočiš.
Nasvet: če ti je Visual Basic bolj domač kot Visual C++, naredi to raje v Visual Basicu, ker je najbrž enostavneje.
leposemejte :-)
zdravcc ::
#include "windows.h"
void main(void)
{
HANDLE hConIn, hConOut, hCommPort;
HANDLE hEvents[2];
DWORD dwCount;
DWORD dwWait;
COMMTIMEOUTS ctmoCommPort;
DCB dcbCommPort;
OVERLAPPED ov;
INPUT_RECORD irBuffer;
BOOL fInRead;
char c;
int i;
hConIn = CreateFile("CONINS$", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
SetConsoleMode(hConIn, 0);
hConOut = CreateFile("CONOUTS$", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
hCommPort = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 0);
ctmoCommPort.ReadIntervalTimeout = MAXDWORD;
ctmoCommPort.ReadTotalTimeoutMultiplier = MAXDWORD;
ctmoCommPort.ReadTotalTimeoutConstant = MAXDWORD;
ctmoCommPort.WriteTotalTimeoutMultiplier = 0;
ctmoCommPort.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCommPort, &ctmoCommPort);
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hCommPort, &dcbCommPort);
SetCommState(hCommPort, &dcbCommPort);
SetCommMask(hCommPort, EV_RXCHAR);
ov.Offset = 0;
ov.OffsetHigh = 0;
ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
hEvents[0] = ov.hEvent;
fInRead=FALSE;
while(1)
{
if (!fInRead)
while (ReadFile(hCommPort, &c, 1, &dwCount, &ov))
if (dwCount == 1)
WriteFile(hConOut, &c, 1, &dwCount, NULL);
fInRead = TRUE;
dwWait = WaitForMultipleObjects(dwCount, hEvents, FALSE, INFINITE);
switch (dwWait)
{
case WAIT_OBJECT_0:
if (GetOverlappedResult(hCommPort, &ov, &dwCount, FALSE))
if (dwCount == 1)
WriteFile(hConOut, &c, 1, &dwCount, NULL);
fInRead = FALSE;
break;
case WAIT_OBJECT_0 + 1:
ReadConsoleInput(hConIn, &irBuffer, 1, &dwCount);
if (dwCount == 1 && irBuffer.EventType == KEY_EVENT && irBuffer.Event.KeyEvent.bKeyDown)
for (i = 0; i < irBuffer.Event.KeyEvent.wRepeatCount; i++)
{
if (irBuffer.Event.KeyEvent.uChar.AsciiChar)
{
WriteFile(hCommPort, &irBuffer, 1, &dwCount, NULL);
if (irBuffer.Event.KeyEvent.uChar.AsciiChar == 24)
goto Konec;
}
}
}
}
Konec:
CloseHandle(ov.hEvent);
CloseHandle(hConIn);
CloseHandle(hConOut);
CloseHandle(hCommPort);
Evo to je, ta program posilja in sprejema iz com porta, ce bos reabil dodatno razlago ali komentarje me polklici se mi jih ni ljubilo pisat.
void main(void)
{
HANDLE hConIn, hConOut, hCommPort;
HANDLE hEvents[2];
DWORD dwCount;
DWORD dwWait;
COMMTIMEOUTS ctmoCommPort;
DCB dcbCommPort;
OVERLAPPED ov;
INPUT_RECORD irBuffer;
BOOL fInRead;
char c;
int i;
hConIn = CreateFile("CONINS$", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
SetConsoleMode(hConIn, 0);
hConOut = CreateFile("CONOUTS$", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
hCommPort = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 0);
ctmoCommPort.ReadIntervalTimeout = MAXDWORD;
ctmoCommPort.ReadTotalTimeoutMultiplier = MAXDWORD;
ctmoCommPort.ReadTotalTimeoutConstant = MAXDWORD;
ctmoCommPort.WriteTotalTimeoutMultiplier = 0;
ctmoCommPort.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCommPort, &ctmoCommPort);
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hCommPort, &dcbCommPort);
SetCommState(hCommPort, &dcbCommPort);
SetCommMask(hCommPort, EV_RXCHAR);
ov.Offset = 0;
ov.OffsetHigh = 0;
ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
hEvents[0] = ov.hEvent;
fInRead=FALSE;
while(1)
{
if (!fInRead)
while (ReadFile(hCommPort, &c, 1, &dwCount, &ov))
if (dwCount == 1)
WriteFile(hConOut, &c, 1, &dwCount, NULL);
fInRead = TRUE;
dwWait = WaitForMultipleObjects(dwCount, hEvents, FALSE, INFINITE);
switch (dwWait)
{
case WAIT_OBJECT_0:
if (GetOverlappedResult(hCommPort, &ov, &dwCount, FALSE))
if (dwCount == 1)
WriteFile(hConOut, &c, 1, &dwCount, NULL);
fInRead = FALSE;
break;
case WAIT_OBJECT_0 + 1:
ReadConsoleInput(hConIn, &irBuffer, 1, &dwCount);
if (dwCount == 1 && irBuffer.EventType == KEY_EVENT && irBuffer.Event.KeyEvent.bKeyDown)
for (i = 0; i < irBuffer.Event.KeyEvent.wRepeatCount; i++)
{
if (irBuffer.Event.KeyEvent.uChar.AsciiChar)
{
WriteFile(hCommPort, &irBuffer, 1, &dwCount, NULL);
if (irBuffer.Event.KeyEvent.uChar.AsciiChar == 24)
goto Konec;
}
}
}
}
Konec:
CloseHandle(ov.hEvent);
CloseHandle(hConIn);
CloseHandle(hConOut);
CloseHandle(hCommPort);
Evo to je, ta program posilja in sprejema iz com porta, ce bos reabil dodatno razlago ali komentarje me polklici se mi jih ni ljubilo pisat.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [baze] Povezava do slike ali BLOB?Oddelek: Programiranje | 1650 (1447) | BlueRunner |
» | [C] MySQLOddelek: Programiranje | 2807 (1829) | Tutankhamun |
» | [C/C++] Branje sektorjevOddelek: Programiranje | 1273 (1121) | yeti |
» | [Winsock & C++]HTTP - Prenašanje binarne datoteke - recv()Oddelek: Programiranje | 1224 (1143) | W3by |
» | C++ in komunikacija preko LPT pod NT/W2kOddelek: Programiranje | 1132 (945) | Turbina |