Autor
|
Thema: Script zum Ermitteln der Pinbelegung (1091 / mal gelesen)
|
Thomas6789 Mitglied CAE-Admin
Beiträge: 31 Registriert: 24.10.2018 Zuken E3
|
erstellt am: 05. Nov. 2019 13:32 <-- editieren / zitieren --> Unities abgeben:
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
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K0NFUZIUS Moderator
Beiträge: 258 Registriert: 06.02.2006
|
erstellt am: 05. Nov. 2019 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für Thomas6789
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.CreateJobObjectSet 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 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas6789 Mitglied CAE-Admin
Beiträge: 31 Registriert: 24.10.2018 Zuken E3
|
erstellt am: 05. Nov. 2019 16:30 <-- editieren / zitieren --> Unities abgeben:
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.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K0NFUZIUS Moderator
Beiträge: 258 Registriert: 06.02.2006
|
erstellt am: 05. Nov. 2019 17:08 <-- editieren / zitieren --> Unities abgeben: Nur für Thomas6789
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 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| (Junior) Elektrokonstrukteur (m/w/d) | Was unsere Kunden von ihren Technologielösungen erwarten? Das nächste Level! Das gelingt unserem Team bei FERCHAU Tag für Tag. Wir suchen dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und arbeiten mit an anspruchsvollen Lösungen für die Industrie.... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
Thomas6789 Mitglied CAE-Admin
Beiträge: 31 Registriert: 24.10.2018 Zuken E3
|
erstellt am: 06. Nov. 2019 10:35 <-- editieren / zitieren --> Unities abgeben:
|