Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

V24 Schnittstelle

Danni_KA / 9 Antworten / Flachansicht Nickles

Hallo,


ich bin newby und habe ein ziemlich grosses Problem mit dem Übersetzten eines alten Turbo C++ Codes!


In diesem älternen Programm werden Daten mit einer DOS-Applikation über die serielle Schnittstelle an ein externes Gerät geschickt, welches als Antwort ebenfalls Daten zurückgibt.


z.B. Senden:


unsigned send ( char ch )


byte buf[2];


int int_ch;


int_ch = ch;


send14_std ( &int_ch, ss );


void send14_std (int *value, int channel)


{


union REGS r;


r.x.ax = *value;


r.h.ah = 1;


r.x.dx = channel;


int86 (0x14, &r, &r);


*value = r.x.ax;


daneben wird dann noch syncronisiertund aufs Echo gewartet!


Mein Problem ist, das ich nicht verstehe, was, wann und welche Zeichen bzw. Zahlen über die Schnittstelle geschickt werden! Mein Hyperterminal zeigt irgendwie nichts gescheites an!


Kann mir jemand weiterhelfen oder ein Tipp geben um das ganze zu verstehen?


Hab leider keine Beschreibung für den Controller im externen Gerät; außer die Anforderungen an Baud, Stopbits usw.


Bin über jeden Hinweis dankbar.


Liebe Grüsse


Danni

bei Antwort benachrichtigen
vergisses Danni_KA „Danke Andreas für deine schnelle Hilfe! Wie die Programmierung der seriellen...“
Optionen

Hallo Danni_KA,

da das externe Gerät über die serielle Schnittstelle
angeschlossen ist, mußt Du eigentlich nur das
gleiche tun, was die DOS Anwendung macht und
solltest dann auch zu den gleichen Ergebnissen kommen ;-)

Mit der WinAPI geht das sogar leichter von der Hand,
da Du nicht jedes Zeichen einzeln, sondern komplette
Sequenzen mit einem Befehl übertragen kannst.

Ich habe mal vor ein paar Jahren eine kleine DLL mit
den benötigten Funktionen geschrieben.
Du brauchst eigentlich nur folgende Operationen
zu implementieren:
ser_open() // Oeffnet die Serielle Schnittstelle
ser_close() // Das Gegenstueck
ser_para() // Einstellen der Kommunikationsparameter
ser_read() // Lesen
ser_write() // Schreiben

mit
hComm=CreateFile(devnam,GENERIC_READ|GENERIC_WRITE,NULL, NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Holst Du ein Handle auf das Device.

mit
CloseHandle(hComm);
Kannst Du es wieder schliessen

Über die Struktur COMMCONFIG und
GetCommConfig(hComm,lpCC,lpdwSize);
BuildCommDCB(lpDef,&CC.dcb);
SetCommConfig(hComm,lpCC,wSize);
GetCommTimeouts(hComm,lpCommTimeouts);
SetCommTimeouts(hComm,lpCommTimeouts);
kannst Du die Kommunikationsparameter lesen und setzen.

Mit
ReadFile(hComm,retwert,cnt, (LPDWORD)&readBytes, NULL);
WriteFile(hComm,retwert,strlen(retwert), (LPDWORD)&readBytes, NULL);
kannst Du lesen und schreiben.

Den Rest kannst Du ausführlich in der MSVC Hilfe nachlesen.

Gruss, vergisses

bei Antwort benachrichtigen