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

Timer zum senden von Nachrichten

 

Sammy243
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2018, 19:15     Titel: Timer zum senden von Nachrichten
  Antworten mit Zitat      
Hallo zusammen,

Ich möchte mir einen Timer erstellen, zum senden von CAN Nachrichten.
Leider bin ich noch blutiger Anfänger und verstehe nicht ganz wie ich mit der
TimerFcn umzugehen habe, bzw. wie man Parameter übergibt.

Ich möchte CAN Nachrichten auf den Bus übermitteln.
Dabei soll einfach jede 0.1s ein Wert aus einen Vektor gesendet werden.

Das ganze sieht aktuelle so aus:

Code:

i = 0;
t = timer;

%CAN-Message aufsetzen

db2 = canDatabase('Powertrain.dbc');
ch2 = canChannel('Vector', 'CANcaseXL 1', 2);
ch2.Database = db2;
message2 = canMessage(db2,'Mass_Tx');
start(ch2);

%Timer Einstellungen

t.TimerFcn = @sendCANmessage;

t.Period = 0.1;
t.TasksToExecute = 100;
t.ExecutionMode = 'fixedRate';

start(t)


function sendCANmessage(message2,ch2,i)

  message2.Signals.Bus = massflow_data(i);
  transmit(ch2,message2);  
  %i = i+1;    

end
 


massflow_data ist im Workspace hinterlegt.
Er zeigt mir jetzt so z.B. an "The Name 'Signals' is not an accessible property for an instance of class 'timer objects'."
Signals ist aber eigentlich in message2 enthalten... Sad
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.03.2018, 20:21     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung besagt ja, was das Problem ist: message2 ist nicht die Variable message2 vom anderen Workspace, sondern das Timer-Objekt.

Du brauchst wohl eher:
Code:
t.TimerFcn = @(~, ~) sendCANmessage(message2,ch2)


Wenn i innerhalb der Funktion hochgezählt werden soll, dann würde ich dafür eher eine statische Variable verwenden ( persistent )

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sammy243
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2018, 18:29     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

die Fehlermeldung besagt ja, was das Problem ist: message2 ist nicht die Variable message2 vom anderen Workspace, sondern das Timer-Objekt.

Du brauchst wohl eher:
Code:
t.TimerFcn = @(~, ~) sendCANmessage(message2,ch2)


Wenn i innerhalb der Funktion hochgezählt werden soll, dann würde ich dafür eher eine statische Variable verwenden ( persistent )

Grüße,
Harald


Vielen Dank Harald! Es funktioniert damit Very Happy

Noch eine Frage zum Verständnis, was wird durch das (~,~) bewirkt?
Ich würde aktuell noch gerne einen Zeitstempel auf der Konsole ausgeben lassen immer wenn die Funktion ausgeführt wird.
Mein Ansatz war das Timer object mit zu übergeben, also sendCANmessage(t,message2,ch2) und dann in der Funktion:

Code:
disp(datestr(t.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF'))


Aber so richtig haut das nicht hin Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.03.2018, 10:26     Titel:
  Antworten mit Zitat      
Hallo,

~ bedeutet, dass ein Argument (hier: die standardmäßig in die Timer-Funktion eingespeisten) übersprungen / ignoriert wird.

Zitat:
Aber so richtig haut das nicht hin Sad

Die Aussage ist wenig hilfreich. Was passiert, wenn du es so versuchst?

In dem Fall solltest du statt dem ersten ~ den Timer entgegennehmen. Siehe
https://www.mathworks.com/help/matl.....r-callback-functions.html

Grüße,
Harald
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 - 2024 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.