Forum:E3.series
Thema:Script zum Ermitteln der Pinbelegung
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Thomas6789

Beiträge: 18 / 0

Zuken E3

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

Beiträge: 230 / 0

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

Beiträge: 18 / 0

Zuken E3

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

Beiträge: 230 / 0

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

Beiträge: 18 / 0

Zuken E3

Danke, hat funktioniert