Manuelles Senden einer Symbol-Nachricht über VBScript

Comprehensive CAN monitor for Windows® and its add-ins: Plotter, CANdb Import, Instruments Panel, and J1939
Post Reply
AndreasZ
Posts: 15
Joined: Mon 28. Jan 2013, 11:38

Manuelles Senden einer Symbol-Nachricht über VBScript

Post by AndreasZ » Wed 30. Jan 2013, 10:45

Hallo,

ich möchte aus meiner Symboldatei eine Nachricht setzen (Variablen bearbeiten) und manuell über einen timestamp versenden. Beispiele dafür sind wohl in der Hilfe vorhanden.
Meine Nachricht aus der Symboldatei konnte ich schon einbinden.

Hier der Code:

Code: Select all

Dim objSymbol
   Dim objMsg
   If SymbolsManager.Count > 0 Then
     	Set objSymbol = SymbolsManager("CAN Message V5").Item("S_Mode_501h")
	PrintToOutputWindow objSymbol.Name & " - ID: " & Hex(objSymbol.CanId) &"h - "
	 
	objMsg = Connections.TransmitMessages.FindSymbol(objSymbol)
	MsgBox objMsg.Count & " messages found"
   End IF
	
Meine Ausgabe zeigt mir schonmal den Namen und die richtige ID an. Nun möchte ich diese Nachricht als Message Objekt haben um diese manuall über mein VBScript zu senden. Die einzelnen Signale kann ich schon anpassen. Da ich nicht möchte, dass die Nachricht bei jeder Signal-Änderung versendet wird, habe ich das AutoTransmit über "Signals("S_Mode_501h.S_Response").Source.AutoTransmit = FALSE" ausgeschaltet.

Bei der Zeile "objMsg = Connections.TransmitMessages.FindSymbol(objSymbol)" bekomme ich eine Fehlermeldung:
"Falsche Anzahl an Argumenten oder ungültige Eigenschaftenzuweisung"
Leider finde über die Hilfe nicht heraus was ich falsch mache. Bit auch nicht so fit in VBScript.

Kann mir jemand weiterhelfen?
Danke

MfG Andi

K.Wolf
Software Development
Software Development
Posts: 141
Joined: Wed 22. Sep 2010, 15:37

Re: Manuelles Senden einer Symbol-Nachricht über VBScript

Post by K.Wolf » Wed 30. Jan 2013, 11:44

Hallo,

bei Objektzuweisungen muss immer ein "Set" vor dem Variablennamen stehen:

Code: Select all

Set objMsg = Connections.TransmitMessages.FindSymbol(objSymbol)

AndreasZ
Posts: 15
Joined: Mon 28. Jan 2013, 11:38

Re: Manuelles Senden einer Symbol-Nachricht über VBScript

Post by AndreasZ » Wed 30. Jan 2013, 13:02

Hallo,

danke für die Hilfe. Das habe ich übersehen...

Mir ist noch nicht ganz klar welches Objekt ich hierbei übergeben bekomme. Das sollte ja eine TransmitMessage sein.
Auf .Count kann ich schonmal zugreifen.
Wenn ich nun hinter ".FindSymbol(objSymbol)" ein ".Item(1)" dranhäng (also : .FindSymbol(objSymbol).Item(1))
müsste ich ja eine Message zurück bekommen. Von dieser kann ich mit "obj.ID" die CAN Id lesen.

Wie kann ich diese verändern?
Ich möchte über eine Virtuelle Variable mittels Panel die CanId verändern. Geht das so? Oder gibt es eine andere Möglichkeit?
Die Möglichkeit mir eine Message einfach zu generieren und hierbei eine CAN Id zuzuweisen habe ich in Betracht gezogen. Möcht aber meine Symboldatei nutzen und hierdurch die Signale manipulieren/ einstellen.

MfG

Andi

K.Wolf
Software Development
Software Development
Posts: 141
Joined: Wed 22. Sep 2010, 15:37

Re: Manuelles Senden einer Symbol-Nachricht über VBScript

Post by K.Wolf » Fri 1. Feb 2013, 10:49

Hallo,

die Methode FindSymbol liefert eine Messages-Kollektion zurück. Es kann ja immer mehr als eine TransmitMessage mit dem gleichen Symbol in der Sendeliste geben, die zurückgegebene Kollektion enthält dann alle diese Botschaften.

Item(1) liefert dann das erste gefundene TransmitMessage-Objekt zurück. Verändern der CAN ID geht dann ganz einfach durch Setzen der ID-Eigenschaft:

Code: Select all

  Set objMsgs = Connections.TransmitMessages.FindSymbol(objSymbol)
  If objMsgs.Count > 0 Then
    Set objMsg = objMsgs(1)   ' Identisch zu objMsgs.Item(1)
    objMsg.ID = &H123
  End If
Nach dem Verändern der CAN-ID passt aber das Symbol nicht mehr dazu, die Botschaft wird in diesem Fall nur noch in Hex angezeigt (es sei denn, ein anderes Symbol passt zufällig). Das dynamische Verändern der CAN-ID des Symbols selbst ist nicht so einfach möglich, das geht nur über den Umweg der Symboldatei.

AndreasZ
Posts: 15
Joined: Mon 28. Jan 2013, 11:38

Re: Manuelles Senden einer Symbol-Nachricht über VBScript

Post by AndreasZ » Tue 5. Feb 2013, 12:52

Hallo,

danke für die Antwort.
Ich habe das nun folgendermaßen gelöst:

-habe die Signale der Symboldatei normal bearbeitet.
-das Senden bei Änderung habe ich ausgeschaltet.
also: Signals("S_CellMode_50Ah.S_SelectCell_4").Source.AutoTransmit = FALSE
bis auf das letzte Signal das geschrieben wird. Hier wird es nach dem schreiben dann gesendet....

Über die Transmit-List hole ich die versendete Nachricht mit
"Set objTxMsg = Connections.TransmitMessages.FindSymbol(objTxSymbol).Item(1)"
in mein Objekt und setze die Daten in meine vordefinierte Nachricht.
->"Set TxMsg = MyClient.Messages.Add"

Code: Select all

With TxMsg
		.ID = IntCardId.Value 'gewünschte ID
		.DLC = 8
		.MsgType = pcanMsgTypeStandard  			'wichtig!!: Standard Nachrichtentyp verwenden :)'
		
		.Data(0) = objTxMsg.Data(0)
		.Data(1) = objTxMsg.Data(1)
		.Data(2) = objTxMsg.Data(2)
		.Data(3) = objTxMsg.Data(3)
		.Data(4) = objTxMsg.Data(4)
		.Data(5) = objTxMsg.Data(5)
		.Data(6) = objTxMsg.Data(6)
		.Data(7) = objTxMsg.Data(7)
	End With
Hierbei kann ich dann auch die gewünschte ID vergeben.
Dann kann ich die Nachricht auch versenden.

Einzigster Nachteil hierbei ist, dass ich eine Leerlauf-Nachricht versende die an keine bestimmte Addresse geht. Zudem darf diese Addresse nicht vorhanden sein.

Das wäre meine vorläufige Lösung... etwas aufwendiger ;)


MfG

Andi

Post Reply