Script zum Ermitteln der Pinbelegung / E3.series
Thomas6789 05. Nov. 2019, 13:32

Hallo zusammen,
ich bastle gerade an einem Script zum Ermitteln der Pinbelegung an einem bestimmten Bauteil im Projekt.

Hintergrund: Ziel ist es zu erkennen, bei welchen Betriebsmitteln mit den Kennbuchstaben "V" der Anschlusspunkt X9:+ und X9:GND belegt ist, um zu ermitteln ob die DC Versorgung angeschlossen ist oder nicht.

Meine Probleme sind im Moment folgende:

1. Wie kann ich nach dem Kennbuchstaben V suchen? In meinem Code kann ich im Moment nur nach einem BMK suchen z.B. "-V1". Ich möchte aber nach allen Betriebsmitteln suchen, von V1 - V999. Hierzu konnte ich leider nichts finden.

2. Mit dev.GetPinIds kann werden alle Pins ausgegeben. Ich möchte aber nur Pins ausgeben, die auch angeschlossen sind. In der Hilfe habe ich den Befehl GetConnectedPinIds gefunden, der aber leider nicht vom Device Object unterstützt wird. Gibt es da eine Möglichkeit?


Hier der Code:


Code:

Dim Excel: Set Excel = CreateObject("Excel.Application")
Dim Dev: Set Dev  = CreateObject("CT.Device")
Dim Cab: Set Cab  = CreateObject("CT.Device")
Dim Prj: Set Prj  = CreateObject("CT.Job")
Dim App: Set App  = CreateObject("CT.Application")
Dim Pin: Set Pin   = CreateObject("CT.Pin")
Dim Cor: Set Cor  = CreateObject("CT.Pin")
Dim Comp: Set Comp  = CreateObject("CT.Component")

Excel.WorkBooks.Add
Excel.Visible = 1 'Nach diesem Befehl wird Excel sichtbar


'pin.GetConnectedPinIds pinIds
prj.GetAllDeviceIds devIds 'Alle Betriebsmittel in den Kontainer / Array laden
nzeile = 1

For i = 1 to UBound(devIds)
dev.SetId DevIds(i)

if dev.Getname = "-V1" then 'Nur Ausgeben bei Device mit -V1

dev.GetPinIds pinIds

For j = 1 to UBound(pinIds)
pin.SetId pinids(j) 'Setzt den jeweiligen Anschlusspunkt mit der id als aktiven Anschlusspunkt

if pin.GetAttributeValue (".CONNECTOR_NAME") = "X9" and (pin.GetName = "+" or pin.GetName = "GND") then
Excel.Cells(nzeile,2) = pin.GetName 'Ausgabe Anschlusspunktname in Spalte 2
'Excel.Cells(nzeile,3) = pin.GetSignalName 'Ausgabe am Anschlusspunkt anliegendes Signal in Spalte 3
Excel.Cells(nzeile,3) = pin.GetAttributeValue (".CONNECTOR_NAME") 'Ausgabe internes BMK Spalte 4
Excel.Cells(nzeile,4) = "DC Versorgung" 'Ausgabe Hinweis
nzeile = nzeile + 1

end if
Next

end if
nzeile = nzeile + 1
next


Excel.Columns.AutoFit 'Spaltenbreite automatisch anpassen


Set Comp  = Nothing
Set Cor  = Nothing
Set Pin   = Nothing
Set App  = Nothing
Set Prj  = Nothing
Set Cab  = Nothing
Set Dev  = Nothing
Set Excel = Nothing


K0NFUZIUS 05. Nov. 2019, 15:23

Hallo Thomas,

Nr: 1
Versuche einmal DeviceInterface::SearchAll()
hier kannst Du mit wild strings arbeiten.
* Beliebige Anzahl Zeichen
? Genau ein beliebiges Zeichen

Code:

Set App = CreateObject("CT.Application")
Set Prj = App.CreateJobObject

Set dev = prj.CreateDeviceObject

devcnt = dev.SearchAll( "-V*", "*", "*", devids )
for i = 1 to devcnt
dev.setid devids(i)
app.putInfo 0, devids(i) & ": " & dev.GetName()
next


Nr.2:
Definiere "Angeschlossen" :-)
Mit einem Draht/Ader verbunden:

Code:

pin.GetCoreIds

Mit einer Verbindungslinie angeschlossen:
Jetzt wird's komplizierter. Der Pin kann über Anschlusspunktansichten mehrfach platziert und angeschlossen sein:

Code:

netsegCnt= pin.GetNetSegmentIds( netsegids )
if( netsegCnt = 0 ) Then
' Ich bin nicht angeschlossen
Endif

Next


Lieben Gruß
Jörg

Thomas6789 05. Nov. 2019, 16:30

Danke für die schnelle Antwort! Also der erste Teil mit Dev.SearchAll funktioniert schonmal.

Mit "Angeschlossen :-)" meinte ich dass mindestens eine Verbindugnslinie an Pin "+" oder Pin "GND" gezeichnet ist. Ein Draht muss nicht zwingend aufgelegt sein. Deshalb wird wohl die zweite Variante mit GetNetSegmentIds die bessere Wahl sein.

Ich habe den folgenden Code in die for-Schleife von devcnt direkt nach der Ausgabe App.putinfo eingefügt:

Code:

netsegCnt= pin.GetNetSegmentIds( netsegids )
  if( netsegCnt = 0 ) Then
  app.putInfo 0, " Ich bin nicht angeschlossen"
  else
  app.putInfo 0, " Ich bin angeschlossen"
End if



Leider scheint das aber nicht wirklich zu funktionieren, es erfolgt immer nur die Ausgabe " Ich bin nicht angeschlossen" obwohl Verbindungen vorhanden sind.

[Diese Nachricht wurde von Thomas6789 am 05. Nov. 2019 editiert.]

K0NFUZIUS 05. Nov. 2019, 17:08

Ich habe das gerade mal ausprobiert funktioniert bei mir zuverlässig.

Du musst das natürlich unter

Code:

For j = 1 to UBound(pinIds)
pin.SetId pinids(j)
netsegCnt= pin.GetNetSegmentIds( netsegids )
if( netsegCnt = 0 ) Then
app.putInfo 0, " Ich bin nicht angeschlossen"
else
app.putInfo 0, " Ich bin angeschlossen"
End if

einfügen.
Gruß Jörg

Thomas6789 06. Nov. 2019, 10:35

Danke, hat funktioniert