WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktions-und Variablenübergabe

 

lab_manager
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 10.08.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 06.03.2012, 09:30     Titel: Funktions-und Variablenübergabe
  Antworten mit Zitat      
Hallo Leute,

ich habe endliche ein Möglichkeit gefunden mein Oszi über ActiveX anzusteuern. Leider stehe ich jetzt vor einem ganz anderem Problem.

Ich habe zwei Funktionen erstellt, die erste Funktion lautet:

Code:
%
function LeCroyOszi = Scope(DSO)

DSO = actxcontrol('LeCroy.ActiveDSOCtrl.1');
%pause(0.05);
connect =  invoke (DSO,'MakeConnection','IP:10.199.92.241');
%pause(0.05);
invoke(DSO,'WriteString','*IDN?',true);
ID=invoke(DSO,'ReadString',1000);
end


Die 2. Funktion lautet:

Code:
%
function TestAufruf = Scopevom(Oszi)

%DSO = actxcontrol('LeCroy.ActiveDSOCtrl.1');
LeCroyOszi = Scope(DSO);% Aufruf der Funktion mit dem Connect Befehl

invoke(DSO,'WriteString','C1:TRA ON',true);
invoke(DSO,'WriteString','C2:TRA OFF',true);

end
 


Nun möchte die erste Funktion in der zweiten Funktion aufrufen, so dass das Gerät verbunden wird und anschliessend die weiteren Befehle ausführt.
Aber sobald ich den Befehl ausführe passiert rein gar nichts am Oszi, er öffnet den ActiveX Control Figure aber sonst passiert gar nichts?! Was mache ich falsch.
(Wenn ich alles in einer Funktion schreibe werden die Befehle am Oszi ausgeführt). Leider erkennt er auch nicht die Variable DSO die ich in der ersten Funktion definiert habe.

Zusätzlich möchte ich in der ersten Funktion ein paar Variablen definieren, die ich gerne in der zweiten Funktion verwenden möchte, ohne immer wieder den langen Text zu schreiben, da ich später auch eine GUI mit verschiedenen Buttons erzeugen möchte:

Code:
%
TRSL_P = invoke(DSO,'WriteString','TRSL POS', true);
TRSL_N = invoke(DSO,'WriteString','TRSL NEG', true);
C1_On = TRSL_P = invoke(DSO,'WriteString','C1:TRA ON', true);
C1_OFF = TRSL_P = invoke(DSO,'WriteString','C1:TRA OFF', true);
 


Für eure Hilfe wäre ich sehr dankbar! Smile

Danke im Vorraus! Smile

MFG

Lab_Manager
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.03.2012, 13:56     Titel:
  Antworten mit Zitat      
Hallo

du muss aber dann auch deine Funktionen entsprechen definieren
z.B.
Variable DSO muss ja zurückgeben werden, um in 2.Funktion verwendbar zu machen.

so z.B.
Code:


function DSO= Scope()
DSO = actxcontrol('LeCroy.ActiveDSOCtrl.1');

connect =  invoke (DSO,'MakeConnection','IP:10.199.92.241');
invoke(DSO,'WriteString','*IDN?',true);
ID=invoke(DSO,'ReadString',1000);
end


%
function TestAufruf = Scopevom(Oszi)

% DSO = actxcontrol('LeCroy.ActiveDSOCtrl.1');
DSO    = Scope();% Aufruf der Funktion mit dem Connect Befehl

invoke(DSO,'WriteString','C1:TRA ON',true);
invoke(DSO,'WriteString','C2:TRA OFF',true);

end
 
 




wenn du mehrere Rückgabe-Parameter hast, da wäre es vielleicht sinnvoll in eine Struktur Ergebnisse zu schreiben

Code:


function Scp= Scope()
Scp.DSO = actxcontrol('LeCroy.ActiveDSOCtrl.1');

connect =  invoke (Scp.DSO,'MakeConnection','IP:10.199.92.241');
invoke(Scp.DSO,'WriteString','*IDN?',true);
Scp.ID=invoke(Scp.DSO,'ReadString',1000);
Scp.TRSL_P = invoke(Scp.DSO,'WriteString','TRSL POS', true);
Scp.TRSL_N = invoke(Scp.DSO,'WriteString','TRSL NEG', true);
Scp.C1_On =  invoke(Scp.DSO,'WriteString','C1:TRA ON', true);
Scp.C1_OFF = invoke(Scp.DSO,'WriteString','C1:TRA OFF', true);
end

 


Zuletzt bearbeitet von denny am 06.03.2012, 16:48, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
lab_manager
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 10.08.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 06.03.2012, 14:48     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort! Smile

Ich habe deine Vorschläge eingearbetet und es funktioniert zum teil. Der DSO Befehl als auch die Funktion wird übernommen.

Leider werden die Steuerbefehle:

Code:
% Das ist mein Programm.
invoke(Scp.DSO,'WriteString','C1:TRA ON',true);
invoke(Scp.DSO,'WriteString','C2:TRA OFF',true);

 


von Oszi geflissentlich ignoriert, warum?

Danke!

MFG

Lab
Private Nachricht senden Benutzer-Profile anzeigen
 
lab_manager
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 10.08.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 19.03.2012, 14:06     Titel:
  Antworten mit Zitat      
Es hat sich erledigt, das Oszilloskop hatte sich nur aufgehängt! Nach dem Neustart hat es dann auch geklappt, danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum 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.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.