Hallo!
Ich stehe vor folgendem Problem: Ein uralter Messplatz-Computer hat seinen Geist aufgegeben, Ersatz gibt´s nicht. Auf dem Rechner lief ein LabWindows-Programm, das 4 Schrittmotoren und ein Zählrohr über GPIB steuerte. Ich möchte einen neuen, aktuellen GPIB Geräte-Treiber erstellen, habe aber nur die alten Dateien, insbesondere die C-Datei zur Verfügung.
Mit MAX finde ich das Gerät (Adresse 6), die Kommunikation scheint aber nicht so ganz zu klappen, weil ich eventuell das Gerät nicht richtig initialisiere. Ich habe die kurze und eigentlich recht simple C-Datei (mit C kenne ich mich aber kaum aus) hochgeladen, wäre schön, wenn mir jemand helfen könnte, was ich zuerst über GPIB schicken muss, damit ich das Gerät ansteuern kann.
Danke im Vorraus und beste Grüße!
Simon[
attachment=2319]
Hi, aus der C Datei kann ich leider keine konkreten Befehle herauslesen. Dies muss anscheinend noch auf einer anderen Ebene geschehen, zumindest hab ich es so noch nie gesehen ;-)
Aber meines Wissen, muss man das Gerät nicht großartig initialisieren um mit ihm zu kommunizieren. Du musst nur die richtigen Befehle kennen und gut ist.
' schrieb:Hallo!
Ich stehe vor folgendem Problem: Ein uralter Messplatz-Computer hat seinen Geist aufgegeben, Ersatz gibt´s nicht. Auf dem Rechner lief ein LabWindows-Programm, das 4 Schrittmotoren und ein Zählrohr über GPIB steuerte. Ich möchte einen neuen, aktuellen GPIB Geräte-Treiber erstellen, habe aber nur die alten Dateien, insbesondere die C-Datei zur Verfügung.
Mit MAX finde ich das Gerät (Adresse 6), die Kommunikation scheint aber nicht so ganz zu klappen, weil ich eventuell das Gerät nicht richtig initialisiere. Ich habe die kurze und eigentlich recht simple C-Datei (mit C kenne ich mich aber kaum aus) hochgeladen, wäre schön, wenn mir jemand helfen könnte, was ich zuerst über GPIB schicken muss, damit ich das Gerät ansteuern kann.
Danke im Vorraus und beste Grüße!
Simon[attachment=28215:attachment]
Hi!
Also wenn ich mich im Inhalt der C-Datei nicht irre, sind die Steuerschritte beschrieben:
/*=========================================================================*/
/* Funktion mc_move. mc_move bewegt die Achse eines Schrittmotors. */
/*=========================================================================*/
void mc_move(Adresse,Schrittzahl,Schrittfrequenz)
int Adresse,Schrittzahl,Schrittfrequenz;
{
int schritte_hibyte,schritte_lobyte;
if (mc_device_closed())
return;
if (mc_invalid_integer_range(Schrittfrequenz,1,256,-1) != 0)
return;
if (mc_invalid_integer_range(Adresse,32,39,-1) != 0)
return;
schritte_hibyte=Schrittzahl>>8;
schritte_lobyte=Schrittzahl-(schritte_hibyte*256);
sende[0]=1;
sende[1]=Adresse;
sende[2]=0;
sende[3]=schritte_lobyte;
sende[4]=schritte_hibyte;
sende[5]=Schrittfrequenz;
sende[6]=0;
mc_write_data(sende,7);
mc_read_data(antwort,3);
}
Es sind wohl 7 byte, die man dem Gerät schicken muss. Hab ich auch gemacht, nur passiert leider nichts. Davor kommt aber in der C-Datei die Öffnungsroutine, die wohl nur hieraus besteht:
if (bd <= 0)
{ CloseInstrDevs("mc");
bd = OpenDev ("", "mc");
if (bd <= 0) {
mc_err = 220;
return;
Die checke ich aber mangels genügender C-Kenntnisse nicht. Wenn ich dem Gerät zuerst ein Null-Byte und dann mc schicke, kommt zumindest keine Fehlermeldung bei LabVIEW. Die Steuerbefehle nimmt er aber trotzdem nicht an.
Das mit den 7 byte's hätte ich auch so verstanden. Aber komischer weise bestehen diese eigentlich nur aus Intiger Werten. Und ein
SCPI Befehl ist normalerweise anders aufgebaut. z.B. ERR? (Fragezeichen steht für auslesen)
Hast du dazu keine Anleitung in der die Befehle und die Syntax definiert sind?
Wie ist denn dein VI aufgebaut? Ich hab mal ein kleines Bsp. angeheftet.
' schrieb:Hi!
Also wenn ich mich im Inhalt der C-Datei nicht irre, sind die Steuerschritte beschrieben:
/*=========================================================================*/
/* Funktion mc_move. mc_move bewegt die Achse eines Schrittmotors. */
/*=========================================================================*/
void mc_move(Adresse,Schrittzahl,Schrittfrequenz)
int Adresse,Schrittzahl,Schrittfrequenz;
{
int schritte_hibyte,schritte_lobyte;
if (mc_device_closed())
return;
if (mc_invalid_integer_range(Schrittfrequenz,1,256,-1) != 0)
return;
if (mc_invalid_integer_range(Adresse,32,39,-1) != 0)
return;
schritte_hibyte=Schrittzahl>>8;
schritte_lobyte=Schrittzahl-(schritte_hibyte*256);
sende[0]=1;
sende[1]=Adresse;
sende[2]=0;
sende[3]=schritte_lobyte;
sende[4]=schritte_hibyte;
sende[5]=Schrittfrequenz;
sende[6]=0;
mc_write_data(sende,7);
mc_read_data(antwort,3);
}
Es sind wohl 7 byte, die man dem Gerät schicken muss. Hab ich auch gemacht, nur passiert leider nichts. Davor kommt aber in der C-Datei die Öffnungsroutine, die wohl nur hieraus besteht:
if (bd <= 0)
{ CloseInstrDevs("mc");
bd = OpenDev ("", "mc");
if (bd <= 0) {
mc_err = 220;
return;
Die checke ich aber mangels genügender C-Kenntnisse nicht. Wenn ich dem Gerät zuerst ein Null-Byte und dann mc schicke, kommt zumindest keine Fehlermeldung bei LabVIEW. Die Steuerbefehle nimmt er aber trotzdem nicht an.
Danke für das Test-VI! Ich werde es gleich Freitag ausprobieren (heut schaff ich´s nicht mehr und morgen is ja frei). Es sieht in etwa aus wie meins, aber doch etwas anders und mal sehen, was passiert.
An mein VI komme ich auch erst Freitag wieder ran und poste es dann.
Eine wirkliche Dokumentation habe ich leider nicht (nur ein Produkt-Prospekt), dazu kommt, dass das Gerät aus Anfang der 70er ist und die Firma schon längst nicht mehr existiert, also keine Doku auftreibar ist.
Ich habe es sowohl mit Integer-Werten als auch mit einem String in dem die Zahlen aus dem Quellcode in ASCI-Zeichen umgewandelt werden probiert, ging aber beides nicht. Letzteres sollte aber eigentlich stimmen, da im uralt-Prospekt für dieses Teil steht, dass eine word-Datei aus 7 byte als GPIB-Steuersequenz benutzt wird.
Danke und bis Freitag!
Simon
Sorry für die späte ERFOLGSMELDUNG!
Mit Deinem VI habe ich meins modifiziert (GPIB Initialisierung rausgenommen und Mode=0 eingebaut) -und siehe da, es geht!
Super, jetzt kann ich den Treiber schreiben und wir können das Gerät wieder in Betrieb nehmen.
Vielen Dank!!!!
ciao!
simon
Naja lieber spät als nie...
Und kein Problem, ich helfe gerne weiter (wenn ich kann)
mfg
tobi
' schrieb:Sorry für die späte ERFOLGSMELDUNG!
Mit Deinem VI habe ich meins modifiziert (GPIB Initialisierung rausgenommen und Mode=0 eingebaut) -und siehe da, es geht!
Super, jetzt kann ich den Treiber schreiben und wir können das Gerät wieder in Betrieb nehmen.
Vielen Dank!!!!
ciao!
simon