PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Com-Schnittstelle in VB bzw. VC++



Import-Script
06.12.2002, 15:40
Suche beispiel Programme zur Programmierung von der COM Schnittstelle für VB oder VC++

Import-Script
06.12.2002, 16:38
Hi <BR> <BR>in VB macht man das &uuml;ber das MSCOMM Objekt. In der Hilfe gibts dazu ne schöne Doku. Ist einfach aber auch nicht grade rasend schnell. <BR> <BR>Matthias

Import-Script
07.02.2003, 11:43
Hi, <BR> <BR>meinst Du die RS232-Schnittstelle oder <i>Component Object Model</i> COM zum Datenaustausch zwischen verschiedenen Windows-Anwendungen? <BR> <BR>Gruß <BR>Elmar

Import-Script
11.03.2003, 19:14
Beispielprogramme mit offenem Quellcode gibt es beispielsweise bei <a href="http://www.activevb.de" target=_top>www.activevb.de</a>. Vielleicht findest du dort ein paar Anregungen.

Import-Script
21.03.2003, 14:47
in C sollte es eigentlich wie in Pascal mit Windows Funktionsaufrufen gehen. <BR>1. <BR>ID:=opencomm&#40;&#39;COM2&#39;,50,50&#41;; damit holst Du Dir eine sogenannte ChildID und reservierst die Schnittstelle sie gehört an dann zu Deinem Programm. Ausserdem legst Du eine Bufferstruktur an, deren Grösse &#40;in=50,out=50&#41; Du definierst. <BR>2. <BR>Baudrate etc. erledigt eine Funktion namens buildcommdcb. Die erwartet einen String&#40;0-terminiert in C, in Pascal muss man das erst machen&#41; wie der DOS-Mode Befehl und liefert Dir eine Datenstruktur mit InQue, OutQue und Flags. <BR>P_String:=&#40;&#39;COM2,19200,N,8,1&#39;&#41;; <BR>Str_Pcopy&#40;C_String,P_String&#41;; damit´s C-konform wird <BR>Error:=BuildCommDCB&#40;C_String,TDCB_Struktur&#41;; <BR>3.&#41; <BR>Wenns bis dahin geht, dann die Schnittstelle aktivieren <BR>SetCommState&#40;TDCB_Struktur&#41;; <BR>4.&#41; Lesen und Schreiben geht dann mit der ID <BR>Error:=TransmitCommChar&#40;ID,@Zeichen,Zeichenanzahl&#41; ; oder <BR>Error:=ReadComm&#40;ID,@Zeichen,Zeichenanzahl&#41;; <BR>und immer wenn Error&#60;&#62;0 mit <BR>GC_Error:=GetCommError&#40;ID,ErrorStatus&#41;; nachsehen, was faul ist. <BR>Ist mords Uuuuz, ich bin da auch schon lange mit zu Gange bis alles so richtig läuft, mit dem Zeiger auf einen Buffer, der oder auch nicht... <BR>Das Problem unter Windows ist eben, dass Du nicht einfach &#34;Repeat .. until ZeichenVorhanden&#34; machen darfst, weil sonst die anderen Programme nicht mehr zum Zug kommen. <BR>Daf&uuml;r läufts auch mit COM6: und auch unter NT. Die Funktionen stammen &uuml;brigens aus Windows2.x Zeiten; daran hat sich bis heute nichts geändert. <BR>Ich mail Dir gerne mal was zum ansehen. <BR>Bräuchte ich Adresse. <BR> <BR>

Import-Script
21.03.2003, 18:06
HI, <BR>das wäre sehr nett, <BR>meine adresse ist <a href="mailto:sirpete@microluxx.de">sirpete@microluxx.de</a> <BR>mfg peter

Import-Script
23.04.2003, 12:08
Da muss ich Andreas wiedersprechen. Die Funktionen ReadComm, WriteComm etc. sind meines Wissens nach nur in der 16-Bit Windows API enthalten. F&uuml;r ein &#34;sauberes&#34; 32-Bit Programm sollte man diese Funktionen daher nicht verwenden. <BR> <BR>Die serielle Schnittstelle wird wie eine Datei angesprochen. <BR> <BR>Beispiel in Pascal: <BR> <BR>C1:=CreateFile&#40;&#39;COM1&#39; ,GENERIC_READ or GENERIC_WRITE , 0, nil, OPEN_EXISTING, 0, 0&#41;; <BR> <BR>Mit WriteFile kann man dann Daten senden und mit ReadFile empfangene Daten lesen. <BR> <BR>Die Funktionen SetComState, GetCommMask etc. sind auch in der 32-Bit API vorhanden. <BR>MfG

Import-Script
21.02.2004, 22:27
Auf meiner Seite gibt es einen link zu einem Projekt von mir: Da ist einiges zur Schnittstellenprogrammierung beschrieben. <BR><a href="http://home.arcor.de/juergen.schuhmacher/progrecommend.html" target=_top>http://home.arcor.de/juergen.schuhmacher/progrecommend.html</a> <BR> <BR>

Import-Script
22.02.2004, 01:03
Geiles B&uuml;cherverzeichnis, Deine Homepage, echt... <BR> <BR>Ja, ja, &#34;Inschenör hat´s schwör&#34;... <img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0>

Jürgen Schuhmacher
15.05.2004, 04:18
Wichtig ist das Verständnis der Funktionen overlapped / nonoverlapped und die logistisch richtige Anwendung der CommTimeOuts! Was an Büchern nichts so zu empfehlen ist: Microsoft Press.

MacSeck
15.05.2004, 12:08
gg:) usw. Und deswegen ist es kein Wunder, dass die "V24"

= 24 Verschiedene Kabelvarianten, seit 24 Jahren, mit 24 verschiedenen Betriebssystemen und locker 24 EXP 24 verschiedenen Treibern und Units bis dato so verschrien ist.
Eigentlich Schade...:)

Ralf Dressler, Offenburg
03.07.2004, 22:16
>Jürgen Schumacher beschreibt "nonoverlapped".

Was ist das genau und was hat die V24 damit zu tun?

Unregistriert
16.12.2004, 23:45
Schau mal hier:

http://members.inode.at/anton.zechner/az/index.html

ink3n
09.01.2005, 22:12
hier mal ein gundgerüst von ner ampelsteuerung über rs232 in windows:


/* Ampel.cpp Ampelschaltung */
#include <stdio.h>
#include <time.h>
#include <windows.h>

DCB dcb;
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;

void warten(int sekunden)
{
clock_t start;
sekunden *= CLOCKS_PER_SEC;
start = clock();
while( clock() < start + sekunden)
;
}

// Funktionen für Schaltzustände
void rot()
{
printf("\nRot");
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
printf("Status nicht gesetzt\n");
}
else
{
warten(10);
}
}

void rot_gelb()
{
printf("\nRot\tGelb");
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
printf("Status nicht gesetzt\n");
}
else
{
warten(2);
}
}

void gruen()
{
printf("\n\t\tGruen");

dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
printf("Status nicht gesetzt\n");
}
else
{
unsigned long geschrieben;
unsigned char zeichen = 0;
clock_t start;
int sekunden = 2 * CLOCKS_PER_SEC;
start = clock();
while( clock() < start + sekunden)
{
zeichen++;
zeichen %= 255;
WriteFile(hCom,&zeichen,1,&geschrieben,0);
}
}
}

void gelb()
{
printf("\nGelb");
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
printf("Status nicht gesetzt\n");
}
else
{
warten(3);
}
}



// Array von Zeigern auf Funktionen
void (*fpointer[4]) ();

int main()
{

hCom = CreateFile("COM2",
GENERIC_READ | GENERIC_WRITE,
0, /* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0, /* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
);

if (hCom == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();

/* handle error */
printf("Mist! nicht geoeffnet\n");
}

fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess) {
/* Handle the error. */
printf("Mist! kein Status\n");
}


int i;

// Zeiger initialisieren (mit Funktionen)
fpointer[0]=rot;
fpointer[1]=rot_gelb;
fpointer[2]=gruen;
fpointer[3]=gelb;


// Array durchlaufen (Ampel in Betrieb nehmen)
for (i=0;i<=3;i++)
fpointer[i]();

CloseHandle(hCom);
hCom = NULL;

return 0;
}