'Ändert die Adressen im Systemmanager 'Dazu werden die im Systemmanager eingetragenen Geräte mit den gefundenen Geräten abgeglichen. 'Eingetragene Geräte, die nicht gefunden wurden werden auf "Disabled" gesetzt Option Explicit Dim wshshell,fso,i,Fnct Dim strPath,strSystemFolder,strWinFolder,strTempFolder '----------------------------- Objekte erzeugen -------------------------------- i = 0 On Error Resume Next Do err.Clear i = i+1 Set wshshell = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Set Fnct = CreateObject("Install.Functions") WScript.Sleep 1000 Loop Until Err.Number = 0 OR i > 30 If Err.Number <> 0 Then WScript.Quit End If On Error Goto 0 '--------------------------- Standardpfade ------------------------------------- strPath = GetCurrentPath() strSystemFolder = fso.GetSpecialFolder(1) & "\" strWinFolder = fso.GetSpecialFolder(0) & "\" strTempFolder = fso.GetSpecialFolder(2) & "\" '------------------------------ Main ------------------------------------------- 'Konstanten für den Systemmanager const TREEITEMTYPE_DEVICE = 2 const IODEVICETYPE_CP5412A2 = 7 const IODEVICETYPE_FC3100 = 38 const IODEVICETYPE_FC3100_SLAVE = 60 const IODEVICETYPE_ETHERNET = 45 const IODEVICETYPE_ENETRTMP = 66 const IODEVICETYPE_EL6731 = 86 const IODEVICETYPE_EL6731SLV = 97 const IODEVICETYPE_ETHERCAT = 94 const IODEVICETYPE_FC7500 = 48 const IODEVICETYPE_ETHERCATPROT = 111 const IODEVICETYPE_ETHERNETNVPROT = 112 const IODEVICETYPE_ETHERNETPNMPROT = 113 Dim Arguments 'Kommandozeilenparameter Set Arguments = wscript.Arguments 'SystemManagerFile Dim WsmFileName Dim tsm WsmFileName = Arguments(0) 'WsmFileName = "c:\Focke\M252\25215966.wsm" Set tsm = CreateObject("TCatSysManager.TcSysManager") 'Wsm Konfiguration Dim SysManagerItems Call tsm.OpenConfiguration(WsmFileName) Set SysManagerItems = tsm.LookupTreeItem("TIID") 'Start 'Gefundene Geräte Dim xml Dim FoundDevices Set xml = CreateObject("Msxml.DOMDocument") Call xml.loadXml(SysManagerItems.ProduceXml) Set FoundDevices = xml.selectNodes("TreeItem/DeviceGrpDef/FoundDevices/Device") Dim bDeviceDone(20) 'bool For i = 0 To 19 bDeviceDone(i) = true Next 'Adressen ändern Call SetAllAddresses() 'Wurde etwas ausgelassen? => nicht gefunden For i = 0 To 19 'Wenn ja dann Device auf Disable setzen If Not bDeviceDone(i) Then Dim Child SysManagerItems.Child(i+1).Disabled = 1 'Child.Disabled = 1 End If Next call tsm.SaveConfiguration(WsmFileName) '------------------------------- Funktionen ------------------------------------ Function GetCurrentPath() Dim l_strScriptName Dim l_strTemp l_strScriptName = WScript.ScriptFullName l_strTemp = WScript.ScriptName GetCurrentPath = Left(l_strScriptName, Len(l_strScriptName) - Len(l_strTemp)) End Function Function ExpandPath(p_strEnvironment,p_strDefault) Dim l_strTemp l_strTemp = wshshell.ExpandEnvironmentStrings(p_strEnvironment) If l_strTemp = p_strEnvironment Then l_strTemp = p_strDefault End If ExpandPath = l_strTemp End Function 'Adresse eines Devices einstellen, Namen vergeben und in der Liste abhaken Function SetAddressInfo(p_AddressInfo,p_DeviceType,p_strDeviceText) Dim nCurrentDevice Dim bResult bResult = false nCurrentDevice = 0 Dim SysManagerDevice For Each SysManagerDevice In SysManagerItems ' Für alle Devices in der Datei DIM l_CurrentSysManagerDevice Set l_CurrentSysManagerDevice = SysManagerDevice ' ... Zwischenergebisse Dim bIsDevice 'Ist es ein Device Dim bIsCorrectType 'Stimmt der Typ überein Dim bIsNotDone 'Noch nicht abgehakt Dim bIsEthernet 'Ethernet Port muss etwas anders behandelte werden Dim bIsEtherCATDevice ' Auch EtherCAT Devices brauchen eine Sonderbehandlung bIsDevice = l_CurrentSysManagerDevice.ItemType = TREEITEMTYPE_DEVICE bIsCorrectType = l_CurrentSysManagerDevice.ItemSubType = p_DeviceType bIsNotDone = Not bDeviceDone(nCurrentDevice) bIsEthernet = ((p_DeviceType = IODEVICETYPE_ETHERNET) Or (p_DeviceType = IODEVICETYPE_ENETRTMP)) And Not IsEtherCAT(p_DeviceType) bIsEtherCATDevice = (p_DeviceType = IODEVICETYPE_EL6731SLV) Or (p_DeviceType = IODEVICETYPE_EL6731)Or (p_DeviceType = IODEVICETYPE_ETHERCAT)Or (p_DeviceType = IODEVICETYPE_ETHERCATPROT) ' ... Vergleichen und ggf. Adresse zuweisen 'if bIsNotDone Then MsgBox "IsDevice:" & bIsDevice & vbCrLf & "CorrectType:" & bIsCorrectType & vbCrLf & "DeviceType:" & p_DeviceType & vbCrLf & "Current DeviceType:" & l_CurrentSysManagerDevice.ItemSubType & vbCrLf & "Current Device Name:" & p_strDeviceText If (bIsDevice And bIsCorrectType) And bIsNotDone Then l_CurrentSysManagerDevice.Name = p_strDeviceText If Not bIsEthernet And Not bIsEtherCATDevice Then l_CurrentSysManagerDevice.ConsumeXml(p_AddressInfo.xml) End If bDeviceDone(nCurrentDevice) = true bResult = true Exit For End If nCurrentDevice = nCurrentDevice+1 Next 'SysManagerDevice SetAddressInfo = bResult End Function Function IsEtherCAT(p_DeviceType) Dim k Dim AllEtherCATS(4) AllEtherCATs(0) = IODEVICETYPE_ETHERCAT AllEtherCATs(1) = IODEVICETYPE_ETHERCATPROT AllEtherCATs(2) = IODEVICETYPE_ETHERNETNVPROT AllEtherCATs(3) = IODEVICETYPE_ETHERNETPNMPROT IsEtherCAT = false For k = 0 To 3 If p_DeviceType = AllEtherCATs(k) Then IsEtherCAT = True Next End Function '------------------------------- Subs ------------------------------------ 'Adressen anpassen Sub SetAllAddresses Dim IdxCurrentFC3100Master Dim IdxCurrentFC3100Slave Dim IdxCurrentCP9030 IdxCurrentFC3100Master = 1 IdxCurrentFC3100Slave = 1 IdxCurrentCP9030 = 1 Dim nCurrentDevice Dim SysManagerDevice For Each SysManagerDevice In SysManagerItems ' Für alle Devices in der Datei bDeviceDone(nCurrentDevice) = false nCurrentDevice = nCurrentDevice+1 Next 'Fuer alle gefundenen Geraete Dim AInfo For i = 0 To FoundDevices.length -1 Set ainfo = FoundDevices(i).selectSingleNode("AddressInfo") Dim strProfibusMasterDevice Dim strProfibusSlaveDevice Dim strCP9030Device Select Case FoundDevices(i).selectSingleNode("ItemSubType").nodeTypedValue Case CStr(IODEVICETYPE_CP5412A2) Call SetAddressInfo(ainfo,IODEVICETYPE_CP5412A2,"Profibus Master (CP5412)") Case CStr(IODEVICETYPE_FC3100) strProfibusMasterDevice = "Profibus Master" & IdxCurrentFC3100Master & " (FC3100)" strProfibusSlaveDevice = "Profibus Slave" & IdxCurrentFC3100Slave & " (FC3100)" If SetAddressInfo(ainfo,IODEVICETYPE_FC3100,strProfibusMasterDevice) Then IdxCurrentFC3100Master = IdxCurrentFC3100Master + 1 Elseif SetAddressInfo(ainfo,IODEVICETYPE_FC3100_SLAVE,strProfibusSlaveDevice) Then IdxCurrentFC3100Slave = IdxCurrentFC3100Slave + 1 End If Case CStr(31) strCP9030Device = "Beckhoff Link" & IdxCurrentCP9030 & "(CP9030)" Call SetAddressInfo(ainfo,31,strCP9030Device) IdxCurrentCP9030 = IdxCurrentCP9030 + 1 Case CStr(IODEVICETYPE_FC7500) Call SetAddressInfo(ainfo,IODEVICETYPE_FC7500,"Sercos") ' Case CStr(IODEVICETYPE_ETHERCATPROT) ' Call SetAddressInfo(0,IODEVICETYPE_ETHERCATPROT,"EtherCAT" & i) ' Case CStr(IODEVICETYPE_ETHERCAT) ' Call SetAddressInfo(0,IODEVICETYPE_ETHERCAT,"EtherCAT" & i) ' Case CStr(IODEVICETYPE_EL6731) ' MsgBox "IODEVICETYPE_EL6731" ' Call SetAddressInfo(0,IODEVICETYPE_EL6731,"EtherCAT" & i) ' Case CStr(IODEVICETYPE_ETHERNET) ' Call SetAddressInfo(0,IODEVICETYPE_ETHERNET,"EtherCAT" & i) End Select Next'Für alle gefundenen Geräte ' ... der wird nicht gefunden For i = 1 To 4 Call SetAddressInfo(0,IODEVICETYPE_ETHERCAT,"EtherCAT" & i) Next For i = 1 To 4 Call SetAddressInfo(0,IODEVICETYPE_ETHERCATPROT,"EtherCAT" & i) Next For i = 1 To 4 Call SetAddressInfo(0,IODEVICETYPE_EL6731,"Profibus Master" & i & " (EL6731)") Next For i = 1 To 4 Call SetAddressInfo(0,IODEVICETYPE_EL6731SLV,"Profibus Slave" & i & " (EL6731)") Next For i = 1 To 4 Call SetAddressInfo(0,IODEVICETYPE_ETHERNET,"Ethernet" & i) Next End Sub