PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle in VB 6.0


Vertex
2003-02-17, 16:17:35
Muss bei einem Projekt bei einem VisualBasic 6.0 Programm mit der seriellen Schnittstelle arbeiten.

Mein Prob: Ich muss die einzlenen Pins auf high und low setzen können. (Es muss eine Interfaceschaltung angesteuert werden, welche dann weiter verarbeitet wird) Der Befehl muss irgendwas mit RTA heißen, oder so.

Die Initialisierung der seriellen Schnittstelle wäre nicht das Problem, sondern nur der direkte Befehl.

Bitte um Hilfe, wenns auch nur n Link is.

Vertex
2003-02-17, 16:47:48
Es handelt sich hierbei um eine V.24 (RS-232-C) serielle Schnittstelle. Falls des was hilft, bezweifle aber...

Demirug
2003-02-17, 17:14:54
Zur Steuerung der Seriellen Schnittstelle mit VB gibt es das "MSComm control"

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/comm98/html/vbobjcomm.asp

Ein RTA Signal kenne ich allerdings nicht und auf so tiefer ebene lässt sich die Serielle Schnittstellen auch normalerweise nicht steuern.

Aber möglicherweise reicht dir das Control ja doch.

Vertex
2003-02-17, 17:27:34
Originally posted by Demirug
Ein RTA Signal kenne ich allerdings nicht und auf so tiefer ebene lässt sich die Serielle Schnittstellen auch normalerweise nicht steuern.

Aber möglicherweise reicht dir das Control ja doch.

War wahrscheinlich doch RTS.:eyes:

Muss mich aber leider auf eine so tiefe Ebene begeben, da ich damit einen IC "ansteuern muss". Wobei ich eh gerade am Überlegen bin, ob ich des ned eh über des Standartserielle Protokoll mache. Hab dann nur des Prob, dass ich die Signale/ das Protokoll am IC verarbeiten, da der IC (PIC) wahrscheinlich keine Unterstützung für dieses Protokoll mitbringen wird.

Des ganze is ein Schülerprojekt, wobei wir uns des selber zusammenstellen müssen. Eben auch diese Verbindung der Schaltung mit dem PC mit einem seriellen Kabel.

Demirug
2003-02-17, 18:02:11
Mircontroller Programmierung. Immer wieder schön ;)

Manche Chips der PIC Rheie haben eine eingebautes RS232 Schnittstelle. Ansonsten kann man sich eines solche programmieren.

Was mir da aber gerade noch einfällt. AFAIR darf man Signale von der RS232 nicht direkt in einen TTL Chip einspeisen sonst raucht das Teil ab. Da muss also noch eine Pegelanpassung dazwischen z.b. MAX232 von Maxim oder ein DS275 von Dallas. Der DS275 ist normalerweise die bessere Wahl.

Vertex
2003-02-18, 13:36:29
Originally posted by Demirug
Was mir da aber gerade noch einfällt. AFAIR darf man Signale von der RS232 nicht direkt in einen TTL Chip einspeisen sonst raucht das Teil ab. Da muss also noch eine Pegelanpassung dazwischen z.b. MAX232 von Maxim oder ein DS275 von Dallas. Der DS275 ist normalerweise die bessere Wahl.

Jo, darüber weiß ich bescheid. Wir werden die Schaltung selbst entwerfen/dimensionieren und aufbauen. Gehört zu unserem schulischen Stoff. (Die Interfaceschaltung)

Vertex
2003-02-19, 15:14:53
Originally posted by Demirug
Ein RTA Signal kenne ich allerdings nicht und auf so tiefer ebene lässt sich die Serielle Schnittstellen auch normalerweise nicht steuern.

Heißt das, dass ich nicht jede einzelne Leitung manuell auf h oder l setzen kann? ???

Demirug
2003-02-19, 15:23:11
Originally posted by Vertex


Heißt das, dass ich nicht jede einzelne Leitung manuell auf h oder l setzen kann? ???

Ja das heist das. Es gibt allerdings zwei Ausnahmen. Die Signalleitungen DTR und RTS können von der Anwendung gesteuert werden. Wie und ob das aber mit VB 6.0 geht müsste ich erst mal nachschauen da ich sowas bisher nur mit VC++ gemacht habe.

Vertex
2003-02-19, 19:34:16
Hab da ne Frage:

Nehmen wir folgende Problemstellung an: Der Pic überträgt Daten an den PC, der allerdings ignoriert diese. Dann wenn der PC plötzlich auf der Schnittstelle "hört" und der PIC durch Zufall gerade beim Paketsenden is (zb.: bei den Daten, weils am wahrscheinlichsten is). Der PC dürfte nun mit den Datenbits nichts anfangen können, bzw. sie missverstehen.

Hat das RS-232-C ?Protokol? eine Art Sicherheitsfunktion für sowas, oder muss ich mich da selber drum kümmern.

Ich hätte das so gelöst: Beim Senden an den PIC ein eigenes Empfangsbereit BIT (glaube dafür gibts sogar ne Leitung, nur die kann ich nicht benutzen), welches ihm signalisiert, dass der PC bereit is Daten zu empfangen. Wäre das OK, oder sinnlos, da er dieses Prob selber löst. (oben)?

Demirug
2003-02-19, 21:04:26
Für diesen Zweg gibt es die DTR und RTS Signale.

Dort gibt es eine menge Infos zu RS 232: http://www.interfacebus.com/Design_Connector_RS232.html

Vertex
2003-02-19, 21:44:26
Originally posted by Demirug
Für diesen Zweg gibt es die DTR und RTS Signale.

Dort gibt es eine menge Infos zu RS 232: http://www.interfacebus.com/Design_Connector_RS232.html

Mal ein großes Thx für die ganzen Infos und Hilfen.

Das Prob is, dass ich wahrscheinlich nur die zwei Leitungen (TXD,RXD) benutzen kann. GND brauche ich hier glaube ich nicht zu erwähnen.

Frage: Wenn ich RTS benutzen würde, erkennt, dann VB das automatisch oder müsste man das programmieren. Noch was: DTR könnte ich mir dann eigentlich sparen, oder?

Werde noch kurz die Kurzbeschreibung dieses Projektes posten. Muss nur schnell suchen. Vielleicht wirds dann etwas klarer und vielleicht interessierts wen.

Vertex
2003-02-19, 21:57:16
So nun hier die Kurzbeschreibung wie versprochen: (nichts denken is für die Schule) Is ne kurze Beschreibung vor der restlichen Entwicklung.


Beim 2. Teil des Projektes geht es um die Datenerfassung und Steuerung des Zählers über den Computer. Der Computer soll über die RS-232-C Schnittstelle mit dem Zähler Daten austauschen.

Da die Bauteile mit unterschiedlichen Spannungen arbeiten, muss zur richtigen Funktionsweise eine Pegelanpassung erfolgen. Zur Pegelanpassung muss eine Interfaceschaltung aufgebaut werden. (Siehe Entwurf Interfaceschaltung)

Um die Datenübertragung zwischen dem PC und dem Zähler bzw. umgekehrt konform zu halten, befindet sich vor dem Zähler ein PIC, der das Splitten und Zusammenfassen der Daten übernimmt Er kommuniziert über die RS-232-C Schnittstelle, durch die Interfaceschaltung mit dem Computer.

Der PC belegt drei Leitungen durch die Interfaceschaltung zum PIC. Eine TxD (für das Senden der Daten), eine RxD (für den Empfang von Daten) und Ground.

Der PIC hat 13 Leitungen für die Zähleranbindung. Zwei Ausgangsleitungen zur Steuerung: Eine Leitung für das Taktsignal, eine Leitung für den Reset. Elf Eingangsleitungen zur Datensammlung: Vier Leitungen (nach dem Zähler) für die binäre Zahl, 7 Leitungen (nach dem Gal) für die 7-Segmentzahl.

Nach der Datenübertragung werden diese im PC verarbeitet und Ausgegeben bzw. neue Werte für die Datenübertragung in Richtung PIC gesammelt. Die Software dient als Schnittstelle zum Benutzer. (Siehe Softwarebeschreibung)

Vertex
2003-02-20, 17:08:38
was haltest du davon:

MSCOMM1.TXDEnable = True

Müsste eigentlich TXD auf 1 bwz. high setzen, oder?

Demirug
2003-02-20, 17:40:42
Originally posted by Vertex
was haltest du davon:

MSCOMM1.TXDEnable = True

Müsste eigentlich TXD auf 1 bwz. high setzen, oder?

Mein MS-COMM Control hier hat kein TXDEnable. Da gibt es nur DTREnable und RTSEnable. IMO kommst du nicht umhin auf dem PIC das RS232 Protokol zu implementieren.

Vertex
2003-02-21, 16:52:41
Originally posted by Demirug


Mein MS-COMM Control hier hat kein TXDEnable. Da gibt es nur DTREnable und RTSEnable. IMO kommst du nicht umhin auf dem PIC das RS232 Protokol zu implementieren.

Mit dem hast du wahrscheinlich recht. Werde es aber aus anderen Gründen mit nem GAL realisieren. Wobei da nur der Unterschied is, dass ich nicht mit dem Protokoll arbeiten kann. Werde also jetzt 2 Leitungen nach draußen brauchen die direkt in die Schaltung gehen. Dann noch eine Empfangsleitung und eine CLK Leitung für die einzelne Bitsteuerung der Empfangsleiung.

Also muss ich 4 Leitungen steuern können.

2 hätte ich ja schon DTR und RTS.

Kann ich die anderen Leitungen durch solche "Tricks" auch irgendwie steueren (0/1, H/L)?

Demirug
2003-02-21, 16:57:55
Originally posted by Vertex


Mit dem hast du wahrscheinlich recht. Werde es aber aus anderen Gründen mit nem GAL realisieren. Wobei da nur der Unterschied is, dass ich nicht mit dem Protokoll arbeiten kann. Werde also jetzt 2 Leitungen nach draußen brauchen die direkt in die Schaltung gehen. Dann noch eine Empfangsleitung und eine CLK Leitung für die einzelne Bitsteuerung der Empfangsleiung.

Also muss ich 4 Leitungen steuern können.

2 hätte ich ja schon DTR und RTS.

Kann ich die anderen Leitungen durch solche "Tricks" auch irgendwie steueren (0/1, H/L)?

Ausser DTR und RTS kannst du nichts kontrollieren weil das RS232 Protokoll beim PC vom Chipsatz implementiert ist.

Vertex
2003-02-21, 17:10:28
Originally posted by Demirug


Ausser DTR und RTS kannst du nichts kontrollieren weil das RS232 Protokoll beim PC vom Chipsatz implementiert ist.

:...(

Naja CLK könnte ich vielleicht auf die ?clk? Leitung hauen. (normierte, vom PC dann vorgegebene Taktfrequenz) Und die Leitung zum Einlesen... kann doch sicher auf jeder Leitung "horchen"/"zuhören" was gesendet wird, oder?

Demirug
2003-02-21, 17:20:55
Originally posted by Vertex


:...(

Naja CLK könnte ich vielleicht auf die ?clk? Leitung hauen. (normierte, vom PC dann vorgegebene Taktfrequenz) Und die Leitung zum Einlesen... kann doch sicher auf jeder Leitung "horchen"/"zuhören" was gesendet wird, oder?

Nein die eigentliche Datenleitungen werden direkt vom Chip ausgewertet. Ich verstehe immer noch nicht warum du auf deinem PIC nicht einfach den Code zum senden und empfangen auf den dafür vergesehenen Leitungen implementierst. Dann brauchts du zwei Pins und das war es.

Vertex
2003-02-21, 17:33:14
Originally posted by Demirug


Nein die eigentliche Datenleitungen werden direkt vom Chip ausgewertet. Ich verstehe immer noch nicht warum du auf deinem PIC nicht einfach den Code zum senden und empfangen auf den dafür vergesehenen Leitungen implementierst. Dann brauchts du zwei Pins und das war es.

Kann ich eigentlich die Leitungen auch selber deffinieren. (WENN ICH NICHT RS232 BENUTZE) Oder geht das ganze auch ohne MSCOMM1?

Da ich nach einer langen Disskusion mit meinem Projektleiter zu dem Entschluss gekommen bin, dass es keine Kommunikation zwischen PIC und PC geben darf (sondern nur als Schieberegister und direkt angesteuert, also ohne irgend ein Protokoll) benutze ich aus speziellen Gründen (weil schon einer vorhanden ist) einen GAL, an dem die Informationsleitungen sowieso angeschlossen sind.

Natürlich erzählt man uns nicht wie man das in VB umsetzt. (Einzelne Leitungen setzten und so) Sonst wär ja irgendwie die Schwierigkeit weg. :D :) :( :-(

stabilo_boss13
2003-02-21, 19:15:45
Hier beschreibt einer, wie er eine Thermometersteuerung über RS232, MSComm1 und VB5 realisiert hat: http://www.riccibitti.com/pc_therm.htm

Mit Sourcen zum Download.

Vielleicht ist ja was brauchbares für dich dabei.

Hab noch ein paar Sachen für VB6 gefunden:

Serial Comms with Windows API
http://www.planetsourcecode.com/xq/ASP/txtCodeId.3367/lngWId.1/qx/vb/scripts/ShowCode.htm

Serial Com User Control:
http://www.planetsourcecode.com/xq/ASP/txtCodeId.12423/lngWId.1/qx/vb/scripts/ShowCode.htm

Vertex
2003-02-22, 20:05:12
Originally posted by Demirug


Ausser DTR und RTS kannst du nichts kontrollieren weil das RS232 Protokoll beim PC vom Chipsatz implementiert ist.

Wie siehts mit dem Befehl:

MSComm1.CTSHolding = True

aus.

Kann ich damit CTS high setzen?

Demirug
2003-02-22, 20:15:22
Originally posted by Vertex


Wie siehts mit dem Befehl:

MSComm1.CTSHolding = True

aus.

Kann ich damit CTS high setzen?

CTS = Clear to Send ist ein Eingangssignal. Das kann man nur abfragen und nicht setzen.

Vertex
2003-02-22, 20:18:14
Originally posted by Demirug


CTS = Clear to Send ist ein Eingangssignal. Das kann man nur abfragen und nicht setzen.

thx dann hab ich eine leitung für den Eingang, an dem ich einzelen Bits/Zustände abfragen kann?

Gäbe es noch ne Leitung, mit der ich den "Empfangstakt" übertragen kann?

Vertex
2003-02-26, 14:58:23
So. Nun weiß ich wie es geht:

TXD,RTS,DTR, kann ich somit als Ausgangssignal jeweils setzten.

Private Sub chkTxD_Click()
MSComm1.Break = MSComm1.Break Xor True
End Sub

Private Sub chkRTS_Click()
MSComm1.RTSEnable = MSComm1.RTSEnable Xor True
End Sub

Private Sub chkDTR_Click()
MSComm1.DTREnable = MSComm1.DTREnable Xor True
End Sub


Und die Eingänge rufe ich über die folgenden Befehle ab.


Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent
Case comEvReceive ' RxD, Anzahl empfangener Zeichen gleich RThreshold
Case comEvCD ' Pegeländerung auf DCD
Case comEvCTS ' Pegeländerung auf CTS
Case comEvDSR ' Pegeländerung auf DSR
Case comEvRing ' Pegeländerung auf RI (Ring Indicator)

End Select

End Sub



Also hab ich 3 Ausgänge und 4 Eingänge für die manuelle Steuerung! Hoffe das stimmt alles so?!?

Vertex
2003-02-26, 18:35:33
Möchte eine Verzögerung für eine Befehl einbauen!

Wie soll bzw. kann ich das machen????