COM1 bis ...
Moderator: Moderatoren
-
- UDF-Programmierer
- Beiträge: 54
- Registriert: Sa, 07. Jan 2006 17:30
- Wohnort: Braunschweig
- Kontaktdaten:
COM1 bis ...
Hallo XBase++ Gemeinde,
hat von Euch schon jemand mit der Seriellen-Schnittstelle über Win XP gearbeitet. Mit den ToolsIII geht das nicht wirklich. Unter Win98SE war das kein Problem. Mit Com_Open, Com_init und Com_send konnte man einen String an ein angeschlossenes Telefon senden. Bei XP bleibt die Anwendung bei Com_send einfach stehen. Wie siehts mit der TAPI32.DLL aus? Dort gibbet es ja ähnliche Funktionen für die Com-Schnittstelle. Gibt es irgendwo beispiele?
Gruß
Manfred
hat von Euch schon jemand mit der Seriellen-Schnittstelle über Win XP gearbeitet. Mit den ToolsIII geht das nicht wirklich. Unter Win98SE war das kein Problem. Mit Com_Open, Com_init und Com_send konnte man einen String an ein angeschlossenes Telefon senden. Bei XP bleibt die Anwendung bei Com_send einfach stehen. Wie siehts mit der TAPI32.DLL aus? Dort gibbet es ja ähnliche Funktionen für die Com-Schnittstelle. Gibt es irgendwo beispiele?
Gruß
Manfred
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
ein bekannter von mir hat mit den XbToolsIII ein Datenübertragungsprogramm gemacht, welches seit Jahren einwandfrei läuft. Ich meine der hätte auch XP Rechner.
Könnte es sein, dass eine andere Anwendung den Port blockiert ? Telefonsoftware oder die Firewall von SP2 ?
Ich selbst habe leider damit keine Erfahrung.
ein bekannter von mir hat mit den XbToolsIII ein Datenübertragungsprogramm gemacht, welches seit Jahren einwandfrei läuft. Ich meine der hätte auch XP Rechner.
Könnte es sein, dass eine andere Anwendung den Port blockiert ? Telefonsoftware oder die Firewall von SP2 ?
Ich selbst habe leider damit keine Erfahrung.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Fr, 23. Sep 2005 16:07
- Wohnort: Bad Oldesloe
- Kontaktdaten:
Hallo.
Ich habe eine Xbase++ Anwendung auf XP laufen, die sogar parallel auf COM1 und COM2 permanent Daten sendet und empfängt. Diese Anwendung ist im SPS-Umfeld integriert und steuert die Paketlogistik im Versand, dh. es werden permanent Daten vom Scanner und der Digitalwaage empfangen und verarbeitet. Bisher habe ich noch keine Probleme mit der Ansteuerung der Com-Ports gehabt. Vielleicht kannst du mal deine COM-Aufrufe
hier posten.
Gruß
Thomas
Ich habe eine Xbase++ Anwendung auf XP laufen, die sogar parallel auf COM1 und COM2 permanent Daten sendet und empfängt. Diese Anwendung ist im SPS-Umfeld integriert und steuert die Paketlogistik im Versand, dh. es werden permanent Daten vom Scanner und der Digitalwaage empfangen und verarbeitet. Bisher habe ich noch keine Probleme mit der Ansteuerung der Com-Ports gehabt. Vielleicht kannst du mal deine COM-Aufrufe
hier posten.
Gruß
Thomas
-
- UDF-Programmierer
- Beiträge: 54
- Registriert: Sa, 07. Jan 2006 17:30
- Wohnort: Braunschweig
- Kontaktdaten:
Hallo Thomas,
meine Aufrufe, die unter Win98 laufen, sehen so aus:
Unter XP klemmt es an der Stelle com_send(1,sendstr). Dort bleibt das Prog hängen.
Zu Funktion: In sendstr steht eine Rufnummer, die mit dem ATD-Commando an das Telefon gesendet wird.
Gruß
Manfred
meine Aufrufe, die unter Win98 laufen, sehen so aus:
Code: Alles auswählen
IF com_close(1,)
comok:=com_open(1,,,,)
if comok
dtrok:=com_dtr(1,.T.)
rtsok:=com_rts(1,.T.)
comsh:=com_hard(1,.T.)
initok:=com_init(1,9600,"N",8,1)
if .not. initok
?"Schnittstelle 1 konnte nicht geöffnet werden."
com_close(1)
WACLOSE()
RETURN(0)
endif
endif
ENDIF
millisec(100)
sendstr="ATD"+sTemp1+CHR(13)
comfl:=com_flush(1)
rest:=com_send(1,sendstr)
IF rest>0
? "Es wurden nicht alle Zeichen gesendet!"
com_close(1,)
WACLOSE()
return(0)
ENDIF
millisec(300)
com_close(1,)
Zu Funktion: In sendstr steht eine Rufnummer, die mit dem ATD-Commando an das Telefon gesendet wird.
Gruß
Manfred
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
geh mal in ein Terminalprogramm auf dem Rechner (z.B. Terminal oder Hyperterminal), stelle die Parameter genauso ein und gebe dann die Befehle per Hand ein. Du müstest immer ein OK sehen oder eben nichts und das vermute ich, ein anderes Programm blockiert deine Schnittstelle.
geh mal in ein Terminalprogramm auf dem Rechner (z.B. Terminal oder Hyperterminal), stelle die Parameter genauso ein und gebe dann die Befehle per Hand ein. Du müstest immer ein OK sehen oder eben nichts und das vermute ich, ein anderes Programm blockiert deine Schnittstelle.
Zuletzt geändert von brandelh am Mi, 19. Apr 2006 9:07, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
-
- UDF-Programmierer
- Beiträge: 54
- Registriert: Sa, 07. Jan 2006 17:30
- Wohnort: Braunschweig
- Kontaktdaten:
Hallo zusammen,
ich habe das mal ausprobiert. Über das Hyperterminal kann ich das Telefon ansprechen. Die Einstellungen sind identisch. Diesen Teil:
habe ich auch so eingebaut, aber kein Erfolg damit. Es werden aber auch keine Fehlermeldungen ausgegeben.
Über diesen Teil
läuft das Prog hinweg. Die Variable rest ist Null; es wurden also alle Zeichen übertragen.
Klemmt es da bei XP intern vielleicht? Kann man die TAPI umgehen?
Fragen über Fragen.
Gruß
Manfred
ich habe das mal ausprobiert. Über das Hyperterminal kann ich das Telefon ansprechen. Die Einstellungen sind identisch. Diesen Teil:
Code: Alles auswählen
comok:=com_open(1,,,,COM_OPEN_NOINIT)
Über diesen Teil
Code: Alles auswählen
millisec(100)
sendstr="ATD"+sTemp1+CHR(13)
comfl:=com_flush(1)
rest:=com_send(1,sendstr)
IF rest>0
? "Es wurden nicht alle Zeichen gesendet!"
com_close(1,)
WACLOSE()
return(0)
ENDIF
Klemmt es da bei XP intern vielleicht? Kann man die TAPI umgehen?
Fragen über Fragen.
Gruß
Manfred
-
- UDF-Programmierer
- Beiträge: 54
- Registriert: Sa, 07. Jan 2006 17:30
- Wohnort: Braunschweig
- Kontaktdaten:
Hallo zusammen,
ich habe inzwischen die Lösung gefunden und das Problem beseitigt. Schuld an diesem Fehlverhalten war eine IF-Abfrage. Es geht nicht so:
sondern nur so:
Com_close(1,) verträgt anscheinend kein IF.
Nun wählt es fleissig unter Win98SE und XP.
Schönen Abend noch.
Manfred
ich habe inzwischen die Lösung gefunden und das Problem beseitigt. Schuld an diesem Fehlverhalten war eine IF-Abfrage. Es geht nicht so:
Code: Alles auswählen
IF com_close(1,)
comok:=com_open(1,,,,)
if comok
dtrok:=com_dtr(1,.T.)
rtsok:=com_rts(1,.T.)
Code: Alles auswählen
com_close(1,0)
comok:=com_open(1,,,,) //COM_OPEN_FASTUART + COM_OPEN_NOINIT
if comok =.T.
dtrok:=com_dtr(1,.T.)
rtsok:=com_rts(1,.T.)
Nun wählt es fleissig unter Win98SE und XP.
Schönen Abend noch.
Manfred