 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 27.03.2009, 18:39 Titel: Zentrifugensteuerung über COM |
|
|
Hallo!
Ich bitte höflichst um Hilfe. Wir haben eine Zentrifuge, die ich rasch reaktivieren und mit QBasic über COM1 mit Nullmodemkabel steuern muß.
(Den Rest des Programmes werde ich irgendwie hinbekommen, aber mit Datenübertragung kenne ich mich leider überhaupt nicht aus.)
Z.B.: Die Zentrifuge soll mit 150u/min und 800 Sekunden laufen und die Drehzahlen sollen am Bildschirm angezeigt werden (Rückmeldung von der Zentrifugensteuerung, um darauf reagieren zu können). Danach die Drehzahl auf 0 setzen und beenden.
Ich vermute:
OPEN "COM1:19200,N,8,n,1," FOR RANDOM AS #1
print #1, t800
print #1 r1500
?.....?
Wie sendet man zerstörungsfrei die richtigen Werte/Befehle?
Alles was ich zur Zentrifugensteuerung finden konnte, war ein Zettel mit folgenden Angaben:
"Drehzahl-Fernsteuerung:
Ist die Zentrifuge aktiviert, so kann mittels Kippschalter die remote-Steuerung gewählt werden. In diesem Zustand akzeptiert die STeuerung Kommandos von der seriellen Schnittstelle.
Übertragungsparameter: 19200 baud,8 data-bits, no parity, 1 stop-bit)
Die Ein- und Ausgabe der Drehzahl erfolgt als ganzzahliger Wert von 1/10 rpm (3500-350.0 rpm)
Es stehen folgende Befehle die mit CR-terminiert werden, zur Verfügung:
s[0,1] stream off/on, status
r[n] RpM=n, status
t[n] time=n, status
V interner status, dient der Vor-Ort-Diagnose
s,r,t können groß oder klein geschrieben werden.
Im stream-Modus wird jede Sekunde der aktuelle Wert der internen Zeit (des internen Sekundenzählers) und der aktuellen Drehzahl, getrennt durch Leerzeichen, ausgegeben.
Jede Ausgabe wird durch CR abgeschlossen
Zum Beispiel:
t123 setzt aktuelle Zeit auf 123 Sekunden
r3500 setzt die Drehzahl auf 350 rpm
r gibt die aktuelle Drehzahl aus
124 3450
s1 aktiviert den Stream-Modus
125 3467
126 3496
127 3500
Über die serielle Schnittstelle wird außerdem das Auftreten des kritischen Fehlers Unwwucht unbalances, sowie die Quittierung dieses Fehlers über die Taste unbal/reset ausgegeben."
Was ist ein stream-Modus?
Bitte dringend um Unterstützung!
Beste Grüße
Markus |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.03.2009, 20:34 Titel: |
|
|
Falls es zu dieser Zentrifuge bereits eine Steuersoftware gibt, dann ist eine Protokollanalyse mittels
http://beilagen.dreael.ch/QB/MODEMLIS.ZIP
das Richtige (obiges Programm muss auf einem dazwischengeschalteten PC mit zwei COM-Ports ausgeführt werden), d.h. Du siehst die untereinander ausgetauschten Bytes. Notfalls statt Steuersoftware HyperTerminal nehmen und so die ASCII-Zeichen testen.
Zur Programmierung selber einen Artikel:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SerielleKommunikation.html
Sonst ist eine Suche im Internet nach diesem Typ von Gerät auch immer empfehlenswert, nicht selten findet man die Protokollspezifikationen in einer .PDF-Datei. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 28.03.2009, 00:21 Titel: |
|
|
Vielen Dank dreael!
Ich werde also erst einmal versuchen, die beiden Programme annähernd zu verstehen, auszuführen und vor allem einen PC mit zwei COM-ports zu finden.
Dies deshalb, da die Zentrifuge nur über einen einzigen serellen Steueranschluß verfügt, weshalb ich annehme, daß daran nicht Qbasic und HyperTerminal gleichzeitig laufen kann/wird. Oder funktioniert es, daß Qbasic (unter Win98SE in einer DOS-Box) sendet, Hyperterminal empfängt?
Eine Protokollspezifikationen ist leider nicht auffindbar, die Herstellerfirma (USA) existiert schon länger nicht mehr.
Beste Grüße
Markus |
|
Nach oben |
|
 |
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 28.03.2009, 17:54 Titel: |
|
|
Hallo Markus!
Vielleicht steht ja schon alles auf dem Zettel, was Du brauchst.
Die Befehle bestehen aus Buchstaben und Zahlen, werden also ziemlich sicher als Zeichenkette gesendet. In QBasic musst Du die deshalb in Anführungszeichen setzen.
Zitat: | Im stream-Modus wird jede Sekunde der aktuelle Wert der internen Zeit (des internen Sekundenzählers) und der aktuellen Drehzahl, getrennt durch Leerzeichen, ausgegeben.
Jede Ausgabe wird durch CR abgeschlossen
| Ich denke, stream-Modus heißt nichts anderes, als dass die Zentrifunge dauernd (sekündlich) sendet = Daten-Strom(Stream).
Zitat: | ... Befehle die mit CR-terminiert werden, ...
| Bei PRINT wird von QBasic immer ungefragt ein CR (CHR$(13)) und ein LF (CHR$(10)) als Zeilenumbruch angehängt. Das kannst Du mit einem Semikolon verhindern. Da die Steuerung aber offensichtlich ein CR verlangt, musst Du vsl. dieses (und nur dieses) dann wieder anhängen.
Eine offene Frage ist, ob ein Hardware-Handshake über die Steuerleitungen erforderlich ist. Da auf dem "Zettel" nichts erwähnt ist, ist im Beispielcode das ganze Geraffel deaktiviert ( ... ,RS,CS,DS,CD")
Und so könnte das vielleicht funktionieren:
Code: | '19200 Baud, kein Paritaetsbit, 8 Datenbits, 1 Stoppbit
'ohne Ueberpruefung der Statusleitungen:
OPEN "COM1:19200,N,8,1,RS,CS,DS,CD" FOR RANDOM AS #1
'Steuerbefehle senden
' CR = Carriage Return = CHR$(13)
' Das Semikolon unterdrueckt das Senden von CHR$(13) + CHR$(10)
PRINT #1, "t800" + CHR$(13); 'Zeit 800 Sekunden
PRINT #1, "r1500" + CHR$(13); '150 UpM
PRINT #1, "s1" + CHR$(13); 'Stream Modus (Zentrifunge sendet permanent)
DO 'Dauerschleife
IF LOC(1) THEN 'wenn ein Zeichen auf #1 eingegangen
Zeichen$ = INPUT$(1, #1) 'dieses speichern
PRINT Zeichen$; 'und anzeigen
END IF
LOOP UNTIL INKEY$ = CHR$(27) 'Ende mit Taste Escape
CLOSE #1 'Schnittstelle schliessen
|
_________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
 |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 28.03.2009, 22:36 Titel: |
|
|
@Steini63
Zitat: | Vielleicht steht ja schon alles auf dem Zettel, was Du brauchst. |
Ja, vielleicht, nur ist meine Interpretation technischer Angaben bisweilen sehr fragwürdig und eine 3m durchmessende Zentrifuge zu zerstören würde mich den Kopf kosten - was sicherlich kein großer Verlust für die Menschheit wäre, persönlich habe ich diesen aber gerne mit dem Rest meines Kadavers ausreichend fest verbunden. Darum besser erst Experten zu Rate ziehen.
Zitat: | Bei PRINT wird von QBasic immer ungefragt ein CR (CHR$(13)) und ein LF (CHR$(10)) als Zeilenumbruch angehängt. Das kannst Du mit einem Semikolon verhindern. Da die Steuerung aber offensichtlich ein CR verlangt, musst Du vsl. dieses (und nur dieses) dann wieder anhängen. |
Verstehe!
Ganz herzlichen Dank für das Testprogramm !!
Ich werde es Montags laufen lassen und berichten (sofern seine Herrlichkeit, mein Chef, mich nicht zu unschöneren Tätigkeiten zwingt).
Ein Nullmodemkabel ist schon gekauft und lechzt nach Übertragung.
Beste Grüße
Markus |
|
Nach oben |
|
 |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 31.03.2009, 16:53 Titel: |
|
|
Nach gestrigen stundenlangen Plagen und Versuchen mit 3 PCs ergab sich:
Offenbar ist die Verbindung von PC und Zentrifugensteuerung gestört, denn das dankenswerter Weise übermittelte Programm funktionierte 1x (nach mehreren Stunden) einwandfrei, allerdings nur beim Senden der Steuerbefehle (Drehzahl einstellen). Der Empfang von Daten funktionierte nie.
Heute ging wiederum gar nichts mehr.
Nun wurde ein Techniker bestellt, der die Steuerungsleitungen überprüfen muß, denn die Steuerung wurde vor ca. 1 Jahr "erneuert" und offenbar NIE auf Funktionstüchtigkeit überprüft.
That´s Austria.
Beste Grüße
Markus |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.03.2009, 19:49 Titel: |
|
|
Sonst zu meinem Utility: Als "Sniffer" musst Du MODEMLIS.BAS starten, die Analyse des Tracefiles erfolgt mit DISPPROT.BAS. An dieser Stelle noch wichtig: Ruhig mit diesen Parametern wie CD, DS, CS usw. spielen, denn RS-232 ist hier manchmal recht heikel, was das Auffinden der richtigen Parameter anbelangt. Ebenso kannst Du serielle Nullmodemkabel auf die unterschiedlichste Weise verdrahten; diejenige Variante in meinem Artikel mit 5 Adern verhält sich bezüglich diesen Handshake-Signalen ziemlich gutmütig, d.h. Du kriegst dort einen RS-232-Link sehr rasch hin, denn das Entscheidende dort sind noch diese Brücken innerhalb des Steckers.
Tipp von mir: Kabel bezüglich Verdrahtung mit Durchgangsprüfer exakt ausmessen, umgekehrt evtl. im Elektronikbauteileladen zwei Sub-D-Stecker sowie Kabel holen und gemäss meinem Artikel ein Nullmodemkabel selber löten. Auf der Software-Seite ein Kommando nehmen, welches ausser einer Quittierantwort nichts bewirkt. => Erst, wenn dieser Fall einwandfrei klappt, würde ich die eigentlichen SPS-Steuerfunktionen einmal testen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 110
|
Verfasst am: 01.04.2009, 03:00 Titel: |
|
|
Oder erstmal mit einem Terminalprogramm testen. |
|
Nach oben |
|
 |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 01.04.2009, 14:22 Titel: |
|
|
Zitat: | Ruhig mit diesen Parametern wie CD, DS, CS usw. spielen |
Ich werde tun wie mir geraten und auch ein 5poliges Kabel zwecks Selbstbaues eines Nullmodemkabels besorgen.
Jetzt habe ich mir das Terminalprogramm "kermit1.5" heruntergeladen und werde damit morgen testen und natürlich zuerst modemlis.bas anwenden.
Vielen Dank für die nützlichen Tips!
mfg
Markus |
|
Nach oben |
|
 |
Markus
Anmeldungsdatum: 16.09.2004 Beiträge: 104 Wohnort: Wien
|
Verfasst am: 06.04.2009, 16:56 Titel: |
|
|
Hallo!
Freudige Nachrichten: Das Ansprechen der Zentrifuge über COM1 funktioniert nun. Ursache des Übels war der PC mit 2 (zwei!) defekten COM-Anschlüssen. Nochmals Danke!
---------------------
Wenn ich weiteres noch fragen darf:
Es geht darum, aus der auch in einer Datei mitprotokollierten Bildschirm-Ausgabeschleife (wahlweise auf Tastendruck oder zeitgesteuert z.B. alle 60 Sekunden) herauszuspringen und über COM2 sowie LPT Geräte anzusteuern. Ist das möglich, ohne Fehler hervorzurufen?
Oder aber wäre es günstiger, am Programmanfang den COM-Port zu öffnen und dann aus einem generellen Steuerprogramm für die anderen Komponenten so oft wie möglich in die u.a. "Einlese- und Bildschirmausgabeschleife" (als Unterroutine ausgeführt) zu verzweigen, um so Zeit und Drehzahlen in einer Datei mitzuschreiben?
Beispielsweise soll nach Erreichen der gewünschten Drehzahl über LPT ein Getriebemotor einige Sekunden eingeschalten bzw. ein Schrittmotor einige wenige Umdrehungen weitergedreht werden:
OPEN "COM1:19200,N,8,1,RS,CS,DS,CD" FOR RANDOM AS #1
Open "protokol.txt" for output as #2
PRINT #1, "r1500" + CHR$(13); '150 UpM
PRINT #1, "s1" + CHR$(13); 'Stream Modus
DO 'Dauerschleife
IF LOC(1) THEN 'wenn ein Zeichen auf #1 eingegangen
Zeichen$ = INPUT$(1, #1) 'dieses speichern
locate 9: PRINT Zeichen$; 'und anzeigen
print #2, Zeichen$; ´Protokollierung in einer Datei
T$=input$(1): if T$="G" then gosub Getriebe: ' oder
Wenn Zeit > Startzeit+60, dann gehe zu Kamera:
END IF
LOOP UNTIL INKEY$ = CHR$(27) 'Ende mit Taste Escape
CLOSE #1 'Schnittstelle schliessen
END
Getriebe:
....
return
Kamera:
....
return
Was wird wohl vernünftiger bzw. konfliktfreier sein?
Beste Grüße
Markus |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|