% Installation package for SG8/SG9 Drives % Release: Build 20260710 % Date: 10.07.2026 % Copyright 2005-2026, NTI AG. [D /CONST [D:CONST % SG 8 /Global_VerDef_SG8 [D /RelVersion 7 /RelSubVersion 0 /RelBuildInfo 'Build 20260710' /RelString '7.0 Build 20260710' ] /SW_Version_SG8 [D /SWVersion 7 /SWSubVersion 0 /SWBetaInfo 'a15' ] /Tree_Version_SG8 [D /TreeVersion 7 /TreeSubVersion 0 /TreeBetaInfo 'a15' ] /Tree_Version_2S_SG8 [D /TreeVersion2S 1 /TreeSubVersion2S 2 /TreeBetaInfo2S 'a15' ] /FW_Version_SM02PN [D /FWVersion 1 /FWSubVersion 1 /FWBetaInfo 'a15' ] /FW_Version_SM02DS [D /FWVersion 1 /FWSubVersion 1 /FWBetaInfo 'a15' ] /TestFW_Version_SM02 [D /FWVersion 2 /FWSubVersion 5 /FWBetaInfo 'a15' ] /ROSVersion_SG8 [D /ROSSWVersion $1 /ROSSWSubVersion $6 ] % SG 9 /Global_VerDef_SG9 [D /RelVersion 7 /RelSubVersion 0 /RelBuildInfo 'Build 20260710' /RelString '7.0 Build 20260710' ] /SW_Version_SG9 [D /SWVersion 7 /SWSubVersion 0 /SWBetaInfo 'b01' ] /Tree_Version_SG9 [D /TreeVersion 7 /TreeSubVersion 0 /TreeBetaInfo 'b01' ] /INTF_CO_DEFINITIONS [D /Name 'CanOpen' /Caption 'CanOpen' /Description 'CanOpen' /IntfDir 'Interfaces\CanOpen' ] /INTF_MCLINK_DEFINITIONS [D /Name 'MCLink' /Caption 'MCLink' /Description 'MCLink' /IntfDir 'Interfaces\MCLink' ] % F1200 DEFINITIONS % F1200 DEFINITIONS % F1200 DEFINITIONS % F1200 DEFINITIONS % F1200 DEFINITIONS %-------------------------------------------------------------------------------------------------- /F1250_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallOverETH 1 /InstallMCSW 1 /EloTypeExt 'F1250' /OSExt 'F1250' /OSTypeExt 'F1250' /UPROSAvailable #1 /netXBased #0 /netX90Based #1 /IntfSWTypeExt 'SG8' /IntfTreeTypeExt 'SG8' /ApplTypeExt 'SG8' /EasyStepsParExt '' /SupportedHWVersions [A $0102 ] /SupportedDSWVersions [A $60 ] ] /F1250_C00_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallOverETH 1 /InstallMCSW 1 /EloTypeExt 'F1250' /OSExt 'F1250' /OSTypeExt 'F1250C00' /UPROSAvailable #1 /netXBased #0 /netX90Based #1 /IntfSWTypeExt 'SG8' /IntfTreeTypeExt 'SG8' /ApplTypeExt 'SG8' /EasyStepsParExt '' /SupportedHWVersions [A $0102 ] /SupportedDSWVersions [A $60 ] ] /F1250_MI_INTERFACES [D % netX based /Interfaces [A PROFIdrive_SG8NX EtherCAT_DS402_SG8NX EthernetIP_SG8NX POWERLINK_SG8NX SERCOSIII_SG8NX CCLinkIEFB_SG8NX] /InterfacesExtended [A PROFIdrive_SG8NX EtherCAT_DS402_SG8NX EthernetIP_SG8NX POWERLINK_SG8NX SERCOSIII_SG8NX CCLinkIEFB_SG8NX None NoChange ] ] /F1200_APPLICATIONS [D /Applications [A None ProcMon_SG8] /ApplicationsExtended [A None ProcMon_SG8 NoChange] ] % F1150 DEFINITIONS % F1150 DEFINITIONS % F1150 DEFINITIONS % F1150 DEFINITIONS % F1150 DEFINITIONS %-------------------------------------------------------------------------------------------------- /F1150_UC_3S_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallMCSW 1 /InstallOverETH 1 /SupportedHWVersions [A $0104] /SupportedDSWVersions [A $51] /EloTypeExt 'F1150' /OSExt 'F1150' /OSTypeExt 'F1150' /UPROSAvailable #0 /IntfSWTypeExt 'SG9' /IntfTreeTypeExt 'SG9' /ApplTypeExt 'SG9' /EasyStepsParExt '' ] /F1150_DS_INTERFACES [D /Interfaces [A EtherCAT_DS402_SG9 CanOpen_F1150] /InterfacesExtended [A EtherCAT_DS402_SG9 CanOpen_F1150 None NoChange ] ] /F1150_APPLICATIONS [D /Applications [A None ProcMon_SG9] /ApplicationsExtended [A None ProcMon_SG9] ] % F1050 DEFINITIONS % F1050 DEFINITIONS % F1050 DEFINITIONS % F1050 DEFINITIONS % F1050 DEFINITIONS %-------------------------------------------------------------------------------------------------- /F1050_UC_0S_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallMCSW 1 /InstallOverETH 1 /SupportedHWVersions [A $0103] /SupportedDSWVersions [A $52] /EloTypeExt 'F1050' /OSExt 'F1050' /OSTypeExt 'F1050' /UPROSAvailable #0 /IntfSWTypeExt 'SG9' /IntfTreeTypeExt 'SG9' /ApplTypeExt 'SG9' /EasyStepsParExt '' ] /F1050_DS_INTERFACES [D /Interfaces [A EtherCAT_DS402_SG9 CanOpen_F1050 MCLink_SG9] /InterfacesExtended [A EtherCAT_DS402_SG9 CanOpen_F1050 MCLink_SG9 None NoChange ] ] /F1050_APPLICATIONS [D /Applications [A None ProcMon_SG9] /ApplicationsExtended [A None ProcMon_SG9] ] % I1050 DEFINITIONS % I1050 DEFINITIONS % I1050 DEFINITIONS % I1050 DEFINITIONS % I1050 DEFINITIONS %-------------------------------------------------------------------------------------------------- /I1050_HC_0S_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallMCSW 1 /InstallOverETH 1 /SupportedHWVersions [A $0103] /SupportedDSWVersions [A $50] /EloTypeExt 'I1050' /OSExt 'I1050' /OSTypeExt 'I1050' /UPROSAvailable #0 /IntfSWTypeExt 'SG9' /IntfTreeTypeExt 'SG9' /ApplTypeExt 'SG9' /EasyStepsParExt '' ] /I1050_DS_INTERFACES [D /Interfaces [A EtherCAT_DS402_SG9 CanOpen_I1050] /InterfacesExtended [A EtherCAT_DS402_SG9 CanOpen_I1050 None NoChange ] ] /I1050_APPLICATIONS [D /Applications [A None ProcMon_SG9] /ApplicationsExtended [A None ProcMon_SG9] ] % R1050 DEFINITIONS % R1050 DEFINITIONS % R1050 DEFINITIONS % R1050 DEFINITIONS % R1050 DEFINITIONS %-------------------------------------------------------------------------------------------------- /R1050_LV_0S_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallMCSW 1 /InstallOverETH 1 /SupportedHWVersions [A $0102] /SupportedDSWVersions [A $53] /EloTypeExt 'R1050' /OSExt 'R1050' /OSTypeExt 'R1050' /UPROSAvailable #0 /IntfSWTypeExt 'SG9' /IntfTreeTypeExt 'SG9' /ApplTypeExt 'SG9' /EasyStepsParExt '' ] /R1050_DS_INTERFACES [D /Interfaces [A EtherCAT_DS402_SG9] /InterfacesExtended [A EtherCAT_DS402_SG9 None NoChange ] ] /R1050_APPLICATIONS [D /Applications [A None ProcMon_SG9] /ApplicationsExtended [A None ProcMon_SG9] ] % SH01 DEFINITIONS % SH01 DEFINITIONS % SH01 DEFINITIONS % SH01 DEFINITIONS % SH01 DEFINITIONS %-------------------------------------------------------------------------------------------------- %SH01 /SH01_TYPE_DEFINITIONS [D /TypeSupported 1 /InstallMCSW 0 /InstallOverETH 1 /SupportedHWVersions [A $0201] /SupportedDSWVersions [A $00] /EloTypeExt 'SH01' /OSExt 'SH01' /OSTypeExt 'SH01' /UPROSAvailable #0 /IntfSWTypeExt 'SG9' /IntfTreeTypeExt 'SG9' /ApplTypeExt 'SG9' /EasyStepsParExt '' ] /SH01_INTERFACES [D /Interfaces [A None] /InterfacesExtended [A None] ] /SH01_APPLICATIONS [D /Applications [A None ] ] ] %/Main [B /FirmwareScriptVer 4 /Init [B /ProgFlag exch def ProgFlag [B 'PIVar' nknown not [B 'PIVar' cnamespace ] if %/InFilePath exch def /FilePath exch def /PIVar:PortType exch def %/FilePath 'FirmwareFiles\FirmwareE1100\' def ] [B /FilePath '' def ] ifelse %'TypeDefinitions' import %TypeDefinitions:CreateTypeDefinitions 'PackInst' nknown not [B 'PackInst' import ] if /RelInfoDict [D /F1250 [D *Global_VerDef_SG8 ] /F1150 [D *Global_VerDef_SG9] /F1050 [D *Global_VerDef_SG9] /I1050 [D *Global_VerDef_SG9] /R1050 [D *Global_VerDef_SG9] /SH01 [D *Global_VerDef_SG9] ] def /OSDir 'OS' def /OSLoaderFile 'OSLoader' def /OSLoadSW [B OSLoader:LoadSW ] def /OSSWFileName 'UPOS_' def /OSInfoDict [D /F1250 [D *SW_Version_SG8 *Tree_Version_SG8 /TreeFileName 'EOSTr_' %'EOSTr2S_' *Tree_Version_2S_SG8 %/TreeFileName2S '2STrPNs_' *ROSVersion_SG8 ] /F1150 [D *SW_Version_SG9 *Tree_Version_SG9 /TreeFileName 'EOSTr_' ] /F1050 [D *SW_Version_SG9 *Tree_Version_SG9 /TreeFileName 'EOSTr_' ] /I1050 [D *SW_Version_SG9 *Tree_Version_SG9 /TreeFileName 'EOSTr_' ] /R1050 [D *SW_Version_SG9 *Tree_Version_SG9 /TreeFileName 'EOSTr_' ] /SH01 [D *SW_Version_SG9 *Tree_Version_SG9 /TreeFileName 'EOSTr_' ] ] def /MCDir 'MC_SW' def /MCLoaderFile 'MCLoader' def /MCLoadSW [B MCLoader:LoadSW ] def /MCInfoDict [D /F1250 [D *SW_Version_SG8 *Tree_Version_SG8 /MCSWFileName 'EMCSWF1250_' /TreeFileName 'EMCTrF12503S_' ] /F1150 [D *SW_Version_SG9 *Tree_Version_SG9 /MCSWFileName 'EMCSWF1150_' /TreeFileName 'EMCTrF11503S_' ] /F1050 [D *SW_Version_SG9 *Tree_Version_SG9 /MCSWFileName 'EMCSWF1050_' /TreeFileName 'EMCTrF10500S_' ] /I1050 [D *SW_Version_SG9 *Tree_Version_SG9 /MCSWFileName 'EMCSWI1050_' /TreeFileName 'EMCTrI10500S_' ] /R1050 [D *SW_Version_SG9 *Tree_Version_SG9 /MCSWFileName 'EMCSWR1050_' /TreeFileName 'EMCTrR10500S_' ] ] def /InterfacesDir 'Interfaces' def /IntfLoaderFile 'IntfLoader' def /IntfLoadSW [B IntfLoader:LoadSW ] def /ApplicationsDir 'Applications' def /ApplLoaderFile 'ApplLoader' def /ApplLoadSW [B ApplLoader:LoadSW ] def /SafetyFWDir 'Safety' def /SafetyFWLoaderFile 'SafetyLoader' def /SafetyFWLoadSW [B SafetyLoader:LoadSW ] def %Interfaces SG9 %-------------- /CanOpen_F1150 [D *INTF_CO_DEFINITIONS *SW_Version_SG9 *Tree_Version_SG9 /IntfSWFileName 'EIntfSWCO_' /IntfTreeFileName 'EIntfTrCOF1150_' /IntfMCTreeExt 'DS' /IntfMCSWExt '' /VirtArtNumberValue 30271 /VirtArtNumberString '30271' /VirtArtNumberCompleteString '0150-30271' ] def /CanOpen_F1050 [D *INTF_CO_DEFINITIONS *SW_Version_SG9 *Tree_Version_SG9 /IntfSWFileName 'EIntfSWCO_' /IntfTreeFileName 'EIntfTrCOF1050_' /IntfMCTreeExt 'DS' /IntfMCSWExt '' /VirtArtNumberValue 30271 /VirtArtNumberString '30271' /VirtArtNumberCompleteString '0150-30271' ] def /CanOpen_I1050 [D *INTF_CO_DEFINITIONS *SW_Version_SG9 *Tree_Version_SG9 /IntfSWFileName 'EIntfSWCO_' /IntfTreeFileName 'EIntfTrCOI1050_' /IntfMCTreeExt 'DS' /IntfMCSWExt '' /VirtArtNumberValue 30271 /VirtArtNumberString '30271' /VirtArtNumberCompleteString '0150-30271' ] def /MCLink_SG9 [D *INTF_MCLINK_DEFINITIONS *SW_Version_SG9 *Tree_Version_SG9 /IntfSWFileName 'EIntfSWML_' /IntfTreeFileName 'EIntfTrML_' /IntfMCTreeExt 'DS' /IntfMCSWExt '' /VirtArtNumberValue 30272 /VirtArtNumberString '30272' /VirtArtNumberCompleteString '0150-30272' ] def /EtherCAT_DS402_SG9 [D /Name 'EtherCAT_DS402' /Caption 'EtherCAT_CiA402' /Description 'Ethernet EtherCAT communication' *SW_Version_SG9 *Tree_Version_SG9 /IntfDir 'Interfaces\EtherCAT' /IntfSWFileName 'EIntfSWECDS_' /IntfTreeFileName 'EIntfTrECATDS_' /IntfMCTreeExt 'DS' /IntfMCSWExt '' /VirtArtNumberValue 30262 /VirtArtNumberString '30262' /VirtArtNumberCompleteString '0150-30262' ] def % Applications SG9 %----------------- /ProcMon_SG9 [D /Name 'ProcessMonitoring' /Caption 'ProcessMonitoring' /Description 'ProcessMonitoring Application' *SW_Version_SG9 *Tree_Version_SG9 /ApplDir 'Applications\ProcessMonitoring' /ApplSWFileName 'EApplSwProcMon_' /ApplTreeFileName 'EApplTrProcMon_' ] def %Interfaces SG8 %-------------- %------------ % F1250 %------------ /PROFIdrive_SG8NX [D % netX based /Name 'PROFIdrive_NX' /Caption 'PROFINET/PROFIdrive' /Description 'PROFINET/PROFIdrive' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\ProfiNet_NX' /IntfSWFileName 'EIntfSWPD_' /IntfTreeFileName 'EIntfTrPD_' /IntfModulePar '\netX\PNS_SG8_V5S6_0_10.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt 'DS' /VirtArtNumberValue 30225 /VirtArtNumberString '30225' /VirtArtNumberCompleteString '0150-30225' /ProtStackVersName 'PROFINET IO Device' ] def /EthernetIP_SG8NX [D % netX based /Name 'EthernetIP_NX' /Caption 'EtherNet/IP' /Description 'EtherNet/IP' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\EtherNetIP_NX' /IntfSWFileName 'EIntfSWIPNX_' /IntfTreeFileName 'EIntfTrIPNX_' /IntfModulePar '\netX\EIS_SG8_V5S4_0_6.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt '' /VirtArtNumberValue 30227 /VirtArtNumberString '30227' /VirtArtNumberCompleteString '0150-30227' /ProtStackVersName 'EtherNet/IP Adapter' ] def /POWERLINK_SG8NX [D % netX based /Name 'POWERLINK_NX' /Caption 'POWERLINK' /Description 'POWERLINK' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\POWERLINK_NX' /IntfSWFileName 'EIntfSWEPLNX_' /IntfTreeFileName 'EIntfTrEPLNX_' /IntfModulePar '\netX\PLS_SG8_V5S3_0_0.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt '' /VirtArtNumberValue 30224 /VirtArtNumberString '30224' /VirtArtNumberCompleteString '0150-30224' /ProtStackVersName 'Ethernet Powerlink Controlled N' ] def /SERCOSIII_SG8NX [D % netX based /Name 'SERCOSIII_NX' /Caption 'Sercos III' /Description 'Sercos III' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\SERCOSIII_NX' /IntfSWFileName 'EIntfSWS3NX_' /IntfTreeFileName 'EIntfTrS3NX_' /IntfModulePar '\netX\SCS_SG8_V5S2_0_3.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt '' /VirtArtNumberValue 30229 /VirtArtNumberString '30229' /VirtArtNumberCompleteString '0150-30229' /ProtStackVersName 'SERCOS III Slave' ] def /CCLinkIEFB_SG8NX [D % netX based /Name 'CCLinkIEFB_NX' /Caption 'CC-Link' /Description 'CC-Link' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\CCLinkIEFB_NX' /IntfSWFileName 'EIntfSWCCLIEFBNX_' /IntfTreeFileName 'EIntfTrCCLIEFBNX_' /IntfModulePar '\netX\CCIEBS_SG8_V5S1_0_4.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt '' /VirtArtNumberValue 30230 /VirtArtNumberString '30230' /VirtArtNumberCompleteString '0150-30230' /ProtStackVersName 'CC-Link IE Field Basic Slave' ] def /EtherCAT_DS402_SG8NX [D /Name 'EtherCAT_DS402_NX' /Caption 'EtherCAT' /Description 'EtherCAT' *SW_Version_SG8 *Tree_Version_SG8 /IntfDir 'Interfaces\EtherCAT_NX' /IntfSWFileName 'EIntfSWECDS_' /IntfTreeFileName 'EIntfTrECATDS_' /IntfModulePar '\netX\ECS_SG8_V5S6_0_0.HX2' /IntfSpecificSetup 'MIGenericSetup_NX_SG8' /IntfMCTreeExt 'DS' /VirtArtNumberValue 30262 /VirtArtNumberString '30262' /VirtArtNumberCompleteString '0150-30262' /ProtStackVersName 'EtherCAT Slave' ] def /None [D /Name 'None' /Caption 'None' ] def /NoChange [D /Name 'NoChange' /Caption 'No Change' ]def /OperatingSystem [D /Name 'OS' /Caption 'OS' ]def /MCSoftware [D /Name 'MCSW' /Caption 'MC Software' ]def %Applications SG8 %----------------- /ProcMon_SG8 [D /Name 'ProcessMonitoring' /Caption 'ProcessMonitoring' /Description 'ProcessMonitoring Application' *SW_Version_SG8 *Tree_Version_SG8 /ApplDir 'Applications\ProcessMonitoring' /ApplSWFileName 'EApplSwProcMon_' /ApplTreeFileName 'EApplTrProcMon_' ] def %Safety FW %--------- /SM02FWPN [D /Name 'SM02FWPN' /Caption 'SM02FWPN' /Description 'Firmware for SM02 Module' *FW_Version_SM02PN /MCU1FWSWTypeExt 'MCU1' /MCU2FWSWTypeExt 'MCU2' /SafetyFWDir 'Safety\SafetyFW' /FWFileName 'SM02PNsFW_' ] def /SM02FWDS [D /Name 'SM02FWDS' /Caption 'SM02FWDS' /Description 'Firmware for SM02 Module' *FW_Version_SM02DS /MCU1FWSWTypeExt 'MCU1' /MCU2FWSWTypeExt 'MCU2' /SafetyFWDir 'Safety\SafetyFW' /FWFileName 'SM02DsFsFW_' ] def /SM02TestFW [D /Name 'SM02TestFW' /Caption 'SM02TestFW' /Description 'TestFirmware for SM02 Module' *TestFW_Version_SM02 /MCU1FWSWTypeExt 'MCU1' /MCU2FWSWTypeExt 'MCU2' /SafetyFWDir 'Safety\SafetyFW' /FWFileName 'SafetyTestFW_' ] def /Controllers [A % F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 F1200 [D /Name 'F1250-MI-UC-3S-000' /TypeID *F1250MIUC3S000 /PowerExtension 'UC' *F1250_TYPE_DEFINITIONS *F1250_MI_INTERFACES *F1200_APPLICATIONS ] [D /Name 'F1250-MI-UC-3S-C00' /TypeID *F1250MIUC3SC00 /PowerExtension 'UC' *F1250_C00_TYPE_DEFINITIONS *F1250_MI_INTERFACES *F1200_APPLICATIONS ] %F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 F1150 [D /Name 'F1150-DS-UC-3S-000' /TypeID *F1150DSUC3S000 /PowerExtension 'UC' *F1150_UC_3S_TYPE_DEFINITIONS *F1150_DS_INTERFACES *F1150_APPLICATIONS ] %F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 F1050 [D /Name 'F1050-DS-UC-0S-000' /TypeID *F1050DSUC0S000 /PowerExtension 'UC' *F1050_UC_0S_TYPE_DEFINITIONS *F1050_DS_INTERFACES *F1050_APPLICATIONS ] %I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 I1050 [D /Name 'I1050-DS-HC-0S-M00-000' /TypeID *I1050DSHC0SM00000 /PowerExtension 'HC' *I1050_HC_0S_TYPE_DEFINITIONS *I1050_DS_INTERFACES *I1050_APPLICATIONS ] %R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 R1050 [D /Name 'R1050-DS-LV-0S-000' /TypeID *R1050DSLV0S000 /PowerExtension 'LV' *R1050_LV_0S_TYPE_DEFINITIONS *R1050_DS_INTERFACES *R1050_APPLICATIONS ] %SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 SH01 [D /Name 'SH01' /TypeID *SH01 /PowerExtension '' *SH01_TYPE_DEFINITIONS *SH01_INTERFACES *SH01_APPLICATIONS ] ] def /StopFirmware [P [A counts] /Stopped #0 def % only stop FW if ROS is not running PackInst:CheckROS /ROSSubVersion exch def /ROSVersion exch def /ROSRunning exch def /ROSPresent exch def ROSRunning [B 'ROS running' log ] [B counts [B 150 wait PIVar:TalkIntf.StopProgram PIVar:TalkIntf.GetResult 0 eq PIVar:TalkIntf.GetResult $DA eq or [B /Stopped #1 def ExitLoop ] if ] repeat Stopped not [B 'StopProgram' '' PIVar:TalkIntf.GetResult PackInst:_RaiseTalkError ] if ] ifelse [A ] ]def /GetInstalledFileName [P % Returns the the 32 byte string read at ReadAddress [A /ReadAddress ] ReadAddress 16 BlockRd.ReadBlock BlockRd.GetData /FileNameArray exch def /TempCounter 0 def /FileNameDrive '' def [B /Character FileNameArray TempCounter get def /CharLow Character $ff and def /CharHigh Character 8 shr $ff and def CharLow 0 eq [B exitloop ] if /FileNameDrive FileNameDrive CharLow chr add def CharHigh 0 eq [B exitloop ] if /FileNameDrive FileNameDrive CharHigh chr add def /TempCounter TempCounter 1 add def TempCounter 16 eq [B exitloop ] if ] loop [A /FileNameDrive ] ] def /WriteStringToElo [P %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This procedure writes an string value of the % % protected block to the ELO % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [A /Address /InString ] /StrLength InString length def 0 2 StrLength 2 sub [B /TmpIndex exch def /TmpAddr Address TmpIndex add def /TmpData InString TmpIndex 1 getsubstr ord def /TmpIndex TmpIndex 1 add def TmpIndex StrLength lt [B /TmpData TmpData InString TmpIndex 1 getsubstr ord 256 mul add def ] if TmpAddr TmpData WriteWordToElo ] for [A ] ] def /WriteWordToElo [B TalkIntf.WriteMemory ] def /ReadMemory [B TalkIntf.ReadMemory TalkIntf.GetResult 0 eq [B TalkIntf.GetData ] [B 'TalkError: ' TalkIntf.GetResult cvs add raisese ] ifelse ] def /ReadMemory_WithoutTimeout [B TalkIntf.ReadMemory TalkIntf.GetResult 0 eq [B TalkIntf.GetData] [B 8 ] ifelse ] def /StartProgram [B TalkIntf.StartProgram TalkIntf.GetResult 0 ne [B 'TalkError: ' TalkIntf.GetResult cvs add raisese ] if ] def /ResetDevice [B TalkIntf.ResetDevice TalkIntf.GetResult 0 ne [B 'TalkError: ' TalkIntf.GetResult cvs add raisese ] if ] def /RebootDevice [B TalkIntf.RebootDevice TalkIntf.GetResult 0 ne [B 'TalkError: ' TalkIntf.GetResult cvs add raisese ] if ] def /ReadUPID [B TalkIntf.GenericCmd /UPIDResult TalkIntf.GetResult def UPIDResult 0 eq [B TalkIntf.GetDataStr ] [B % Unknown UPID UPIDResult $C0 eq [B '' ] [B 'TalkError: ' TalkIntf.GetResult cvs add raisese ] ifelse ] ifelse ] def /GetEloType [B Offset $6000 add ReadMemory ] def /GetEloVersion [B Offset $6002 add ReadMemory ] def /GetEloSWVersion [B Offset $622A add ReadMemory ] def /GetEloOrderingArtNo [B Offset $62C2 add ReadMemory ] def /GetEloTypeStr [P [A ] /EloName '' def /StringEndFound #0 def Offset $6010 add 2 Offset $601E add [B /WordAddr exch def StringEndFound not [B /Value WordAddr ReadMemory def Value $FF and 0 ne [B /EloName EloName Value $FF and chr add def Value 8 shr 0 ne [B /EloName EloName Value 8 shr chr add def ] [B /StringEndFound #1 def ] ifelse ] [B /StringEndFound #1 def ] ifelse ]if ] for [A EloName] ] def /CheckEloIsKnown [P [A Type OrdArtNo ] /IsKnown #0 def OrdArtNo 0 eq [B Controllers [B /TempEloDict exch def TempEloDict.TypeID Type eq [B /IsKnown #1 def exitloop ] if ] forall ] [B Controllers [B /TempEloDict exch def TempEloDict.TypeID Type eq [B TempEloDict /OrderingArtNo known [B TempEloDict.OrderingArtNo OrdArtNo eq [B /IsKnown #1 def exitloop ] if ] [B /IsKnown #1 def exitloop ] ifelse ] if ] forall ] ifelse [A IsKnown] ] def /CheckHWVersionCompatible [P [A HWVersion Controller] /Result #0 def /Msg '' def Controller /SupportedHWVersions known [B Controller.SupportedHWVersions [B HWVersion eq [B /Result #1 def exitloop ] if ] forall ] if Controller /NotSupportedHWVersion known [B Controller.NotSupportedHWVersion [B /TempDict exch def TempDict.HWVersion HWVersion eq [B /Msg TempDict.LastReleaseName def exitloop ] if ] forall ] if [A Result Msg ] ] def /CheckEloSWVersionCompatible [P [A EloSWVersion Controller] /Result #0 def Controller /SupportedDSWVersions known [B Controller.SupportedDSWVersions [B EloSWVersion eq [B /Result #1 def ] if ] forall ] if [A Result] ] def /GetEloDict [P [A Type OrdArtNo ] /EloDict Controllers 0 get def % changed from 1 to 0, Ro, 20090324 OrdArtNo 0 eq [B Controllers [B /TempEloDict exch def TempEloDict.TypeID Type eq [B /EloDict TempEloDict def ] if ] forall ] [B Controllers [B /TempEloDict exch def TempEloDict.TypeID Type eq [B TempEloDict /OrderingArtNo known [B TempEloDict.OrderingArtNo OrdArtNo eq [B /EloDict TempEloDict def ExitLoop ] if ] [B /EloDict TempEloDict def % ExitLoop % removed: dc, 20230707 ] ifelse ] if ] forall ] ifelse [A EloDict] ] def /SelectInstallation [P [A /OsArray /MCSWArray] % init variables /Result #0 def /MCSWSel MCSWArray 0 get def /OSSel OsArray 0 get def %create choose installation dialog /InstDlg 'Installation Option' 250 220 Create:Form def %add ok/cancel buttons 75 25 InstDlg.SetButtonSize 'Ok' '' 'Ok' 1 50 150 InstDlg.AddButton 'Cancel' '' 'Cancel' 2 144 150 InstDlg.AddButton %add OS combo box 'OsLable' '' 'OS:' 17 19 InstDlg.AddLabel 130 21 InstDlg.SetComboSize 'OsCombo' '' 88 16 InstDlg.AddCombo % create one entry for each OS /First 1 def OsArray [B /TmpOs exch def 'OsCombo' TmpOs.Caption InstDlg.AddString First 1 eq [B 'OsCombo' TmpOs.Caption InstDlg.SetStrVal /First 0 def ] if ] forall /TmpOs OsArray 0 get def '3' log %add MCSW combo box 'MCSWLable' '' 'MCSoftware:' 17 76 InstDlg.AddLabel 130 21 InstDlg.SetComboSize 'MCSWCombo' '' 88 73 InstDlg.AddCombo '4' log % create one entry for each MCSW /First 1 def MCSWArray [B /TmpMCSW exch def 'MCSWCombo' TmpMCSW.Caption InstDlg.AddString First 1 eq [B 'MCSWCombo' TmpMCSW.Caption InstDlg.SetStrVal /First 0 def ] if ] forall /TmpMCSW MCSWArray 0 get def InstDlg.Execute 1 eq [B /OsCaption 'OsCombo' InstDlg.GetStrVal def OsArray [B /TmpOs exch def TmpOs.Caption OsCaption eq [B /OsSel TmpOs def ] if ] forall /MCSWCaption 'MCSWCombo' InstDlg.GetStrVal def MCSWArray [B /TmpMCSW exch def TmpMCSW.Caption MCSWCaption eq [B /MCSWSel TmpMCSW def ] if ] forall /Result #1 def ] if [A /MCSWSel /OsSel /Result] ] def /SelectIntf [P [A /IntfArray] % init variables /Result #0 def /IntfSel IntfArray 0 get def % create choose interface dialog /IntfDlg 'Choose Interface' 280 140 Create:Form def % add ok/cancel buttons 70 25 IntfDlg.SetButtonSize 'Ok' '' 'Ok' 1 85 70 IntfDlg.AddButton 'Cancel' '' 'Cancel' 2 165 70 IntfDlg.AddButton %add Interface combo box % create label and combo box 'IntfLabel' '' 'Interface:' 17 19 IntfDlg.AddLabel 150 21 IntfDlg.SetComboSize 'IntfCombo' '' 85 16 IntfDlg.AddCombo % create one entry for each interface /First 1 def IntfArray [B /TmpIntf exch def 'IntfCombo' TmpIntf.Caption IntfDlg.AddString First 1 eq [B 'IntfCombo' TmpIntf.Caption IntfDlg.SetStrVal /First 0 def ] if ] forall /TmpIntf IntfArray 0 get def % execute dialog IntfDlg.Execute 1 eq [B /IntfCaption 'IntfCombo' IntfDlg.GetStrVal def IntfArray [B /TmpIntf exch def TmpIntf.Caption IntfCaption eq [B /IntfSel TmpIntf def ] if ] forall /Result #1 def ] if [A /IntfSel /Result] ] def /SelectAppl [P [A /ApplArray] % init variables /Result #0 def /ApplSel ApplArray 0 get def % create choose application dialog /ApplDlg 'Choose Application' 280 140 Create:Form def % add ok/cancel buttons 70 25 ApplDlg.SetButtonSize 'Ok' '' 'Ok' 1 85 70 ApplDlg.AddButton 'Cancel' '' 'Cancel' 2 165 70 ApplDlg.AddButton %add application combo box % create label and combo box 'ApplLabel' '' 'Application:' 17 19 ApplDlg.AddLabel 150 21 ApplDlg.SetComboSize 'ApplCombo' '' 85 16 ApplDlg.AddCombo % create one entry for each application /First 1 def ApplArray [B /TmpAppl exch def 'ApplCombo' TmpAppl.Caption ApplDlg.AddString First 1 eq [B 'ApplCombo' TmpAppl.Caption ApplDlg.SetStrVal /First 0 def ] if ] forall /TmpAppl ApplArray 0 get def % execute dialog ApplDlg.Execute 1 eq [B /ApplCaption 'ApplCombo' ApplDlg.GetStrVal def ApplArray [B /TmpAppl exch def TmpAppl.Caption ApplCaption eq [B /ApplSel TmpAppl def ] if ] forall /Result #1 def ] if [A /ApplSel /Result] ] def /SelectSafetyFW [P [A /SafetyFWArray] % init variables /Result #0 def /SafetyFWSel SafetyFWArray 0 get def % create choose SafetyFW dialog /SafetyFWDlg 'Choose SafetyFW' 250 140 Create:Form def % add ok/cancel buttons 75 25 SafetyFWDlg.SetButtonSize 'Ok' '' 'Ok' 1 50 70 SafetyFWDlg.AddButton 'Cancel' '' 'Cancel' 2 144 70 SafetyFWDlg.AddButton %add SafetyFW combo box % create label and combo box 'SafetyFWLabel' '' 'SafetyFW:' 17 19 SafetyFWDlg.AddLabel 130 21 SafetyFWDlg.SetComboSize 'SafetyFWCombo' '' 88 16 SafetyFWDlg.AddCombo % create one entry for each interface /First 1 def SafetyFWArray [B /TmpSafetyFW exch def 'SafetyFWCombo' TmpSafetyFW.Caption SafetyFWDlg.AddString First 1 eq [B 'SafetyFWCombo' TmpSafetyFW.Caption SafetyFWDlg.SetStrVal /First 0 def ] if ] forall /TmpSafetyFW SafetyFWArray 0 get def % execute dialog SafetyFWDlg.Execute 1 eq [B /SafetyFWCaption 'SafetyFWCombo' SafetyFWDlg.GetStrVal def SafetyFWArray [B /TmpSafetyFW exch def TmpSafetyFW.Caption SafetyFWCaption eq [B /SafetyFWSel TmpSafetyFW def ] if ] forall /Result #1 def ] if [A /SafetyFWSel /Result] ] def /ReadyForStopDlg [P [A ] /Result #0 def /ReadyDlg 'Ready to Download' 400 150 Create:Form def 'Label1' '' 'The System is ready to download the firmware.' 17 19 ReadyDlg.AddLabel 'Label2' '' 'The download procedure will erase all former settings.' 17 32 ReadyDlg.AddLabel 'Label3' '' 'Do you want to continue?' 17 55 ReadyDlg.AddLabel % add ok/cancel buttons 75 25 ReadyDlg.SetButtonSize 'Ok' '' 'Ok' 1 108 80 ReadyDlg.AddButton 'Cancel' '' 'Cancel' 2 203 80 ReadyDlg.AddButton /Result ReadyDlg.Execute 1 eq def [A /Result] ] def /AbortDlg [P [A Msg Msg2 Msg3 ] Msg3 '' ne [B /AbortDlg 'Abort' 520 180 Create:Form def 'AbortLbl' '' 'Installation aborted!' 20 19 AbortDlg.AddLabel 'AbortMsg' '' Msg 20 49 AbortDlg.AddLabel 'AbortMsg2' '' Msg2 20 65 AbortDlg.AddLabel 'AbortMsg3' '' Msg3 20 81 AbortDlg.AddLabel % add ok button 75 25 AbortDlg.SetButtonSize 'Ok' '' 'Ok' 1 235 106 AbortDlg.AddButton ] [B Msg2 '' ne [B /AbortDlg 'Abort' 450 160 Create:Form def 'AbortLbl' '' 'Installation aborted!' 20 19 AbortDlg.AddLabel 'AbortMsg' '' Msg 20 49 AbortDlg.AddLabel 'AbortMsg2' '' Msg2 20 65 AbortDlg.AddLabel % add ok button 75 25 AbortDlg.SetButtonSize 'Ok' '' 'Ok' 1 185 90 AbortDlg.AddButton ] [B Msg '' ne[B %When Msg = '' then this Label dont needed to show 150930 ka /AbortDlg 'Abort' 368 150 Create:Form def 'AbortLbl' '' 'Installation aborted!' 92 19 AbortDlg.AddLabel 'AbortMsg' '' Msg 92 49 AbortDlg.AddLabel % add ok button 75 25 AbortDlg.SetButtonSize 'Ok' '' 'Ok' 1 146 80 AbortDlg.AddButton ] [B /AbortDlg 'Abort' 368 150 Create:Form def 'AbortLbl' '' 'Installation aborted!' 92 19 AbortDlg.AddLabel % add ok button 75 25 AbortDlg.SetButtonSize 'Ok' '' 'Ok' 1 146 80 AbortDlg.AddButton ]ifelse ] ifelse ] ifelse AbortDlg.Execute [A ] ] def /SuccessDlg [P [A ] /SuccessDlg 'Success' 368 140 Create:Form def 'SuccessLbl' '' 'Installation successfully completed!' 92 19 SuccessDlg.AddLabel % add ok button 75 25 SuccessDlg.SetButtonSize 'Ok' '' 'Ok' 1 146 70 SuccessDlg.AddButton SuccessDlg.waitButton [A ] ] def /InstallationOkPowerUPDlg [P [A ] /PowerUPDlg 'Power UP' 450 140 Create:Form def 'PowerUPLbl' '' 'Installation successfully completed! Please power cycle the drive, then press OK!' 10 19 PowerUPDlg.AddLabel % add ok button 75 25 PowerUPDlg.SetButtonSize 'Ok' '' 'Ok' 1 190 70 PowerUPDlg.AddButton PowerUPDlg.Execute [A ] ] def /FileCheck [P [A ] /Result #1 def /MissingFile '' def % OS OSSel1.Caption 'OS' eq [B Result [B /FileName FilePath OSDir add '\' add OSLoaderFile add def FileName '.stx' add FileExist [B OSLoaderFile nknown not [B FileName import ] if #0 ChangeInterface OSLoadSW /Result exch def /MissingFile exch def ][B /Result #0 def /MissingFile FileName def ] ifelse ]if ] if % Interface Result [B IntfSel.Name 'None' ne [B IntfSel.Name 'NoChange' ne[B /FileName FilePath InterfacesDir add '\' add IntfLoaderFile add def FileName '.stx' add FileExist [B IntfLoaderFile nknown not [B FileName import ] if #0 IntfLoadSW /Result exch def /MissingFile exch def ][B /Result #0 def /MissingFile FileName def ] ifelse ]if ] if ] if % MC Controller.InstallMCSW 1 eq [B MCSWSel1.Caption 'MC Software' eq [B Result [B /FileName FilePath MCDir add '\' add MCLoaderFile add def FileName '.stx' add FileExist [B MCLoaderFile nknown not [B FileName import ] if #0 MCLoadSW /Result exch def /MissingFile exch def ][B /Result #0 def /MissingFile FileName def ] ifelse ] if ] if ]if % Application Result [B ApplSel.Name 'None' ne [B ApplSel.Name 'NoChange' ne [B /FileName FilePath ApplicationsDir add '\' add ApplLoaderFile add def FileName '.stx' add FileExist [B ApplLoaderFile nknown not [B FileName import ] if #0 ApplLoadSW /Result exch def /MissingFile exch def ][B /Result #0 def /MissingFile FileName def ] ifelse ] if ] if ] if % SafetyFW SM02BAsed[B Result [B SafetyFWSel.Name 'None' ne [B SafetyFWSel.Name 'NoChange' ne [B /FileName FilePath SafetyFWDir add '\' add SafetyFWLoaderFile add def FileName '.stx' add FileExist [B SafetyFWLoaderFile nknown not [B FileName import ] if #0 SafetyFWLoadSW /Result exch def /MissingFile exch def ][B /Result #0 def /MissingFile FileName def ] ifelse ] if ] if ] if ]if [A /MissingFile /Result] ] def /CheckNetXSWDownload [P [A ] /Success FALSE def % max 8 minutes if request is never answered % min 2 minutes if request is always answered 'Waiting for Intf-FW stack update to finish:' log '' log 60 [B /OSInstallCommand OSInstallCommandAddress ReadMemory_WithoutTimeout def OSInstallCommand 8 and 0 eq [B 2000 wait /Success TRUE def ExitLoop ] if '.' PIVar:LogMemo.AddToLine 2000 wait ] repeat [A /Success] ] def /GetNetX90FWVersionFromFileName [P [A /FileName] FileName '_V' search /Res exch def /Post exch def /Match exch def /Pre exch def Post 'S' search /Res exch def /Post exch def /Match exch def /Pre exch def /ProtStackMajorVers Pre cvi def Post '_' search /Res exch def /Post exch def /Match exch def /Pre exch def /ProtStackMinorVers Pre cvi def Post '_' search /Res exch def /Post exch def /Match exch def /Pre exch def /ProtStackBuildVers Pre cvi def Post '.' search /Res exch def /Post exch def /Match exch def /Pre exch def /ProtStackRevNumber Pre cvi def [A /ProtStackMajorVers /ProtStackMinorVers /ProtStackBuildVers /ProtStackRevNumber] ] def /CheckSafetyCRC [P [A ] /Str_CRC_MCU1 $88 chr $01 chr add $03 chr add $03 chr add def /ResStr Str_CRC_MCU1 ReadUPID def /UPID_CRC_MCU1 ResStr 0 1 getsubstr ord ResStr 1 1 getsubstr ord 8 shl add ResStr 2 1 getsubstr ord 16 shl add ResStr 3 1 getsubstr ord 24 shl add def /Str_CRC_MCU2 $88 chr $01 chr add $04 chr add $03 chr add def /ResStr Str_CRC_MCU2 ReadUPID def /UPID_CRC_MCU2 ResStr 0 1 getsubstr ord ResStr 1 1 getsubstr ord 8 shl add ResStr 2 1 getsubstr ord 16 shl add ResStr 3 1 getsubstr ord 24 shl add def /Str_CRC_Para $88 chr $01 chr add $05 chr add $03 chr add def /ResStr Str_CRC_Para ReadUPID def /UPID_CRC_Para ResStr 0 1 getsubstr ord ResStr 1 1 getsubstr ord 8 shl add ResStr 2 1 getsubstr ord 16 shl add ResStr 3 1 getsubstr ord 24 shl add def /Str_CRC_Addr $88 chr $01 chr add $06 chr add $03 chr add def /ResStr Str_CRC_Addr ReadUPID def /UPID_Safe_Addr ResStr 0 1 getsubstr ord ResStr 1 1 getsubstr ord 8 shl add def /UPID_Safe_Addr UPID_Safe_Addr $FF00 and def % mask upper byte, lower byte is for switch value '' log 'Check Safety Firmware and Parameter CRC...' log UPID_CRC_MCU1 MCU1_CRC eq UPID_CRC_MCU2 MCU2_CRC eq and UPID_CRC_Para Para_CRC eq and UPID_Safe_Addr Safe_Addr eq and [B 'Check successful!' log /RetResult #1 def /ErrMsg ' ' def ][B /RetResult #0 def /ErrMsg 'Safety Firmware and Parameter CRC Check failed. Installation went wrong or rotary switches are in wrong position.' def ] ifelse [A /RetResult /ErrMsg ] ] def /CheckManufacturingBlock [P [A ] % Generate CRC table /crc_table $00000000 $77073096 $ee0e612c $990951ba $076dc419 $706af48f $e963a535 $9e6495a3 $0edb8832 $79dcb8a4 $e0d5e91e $97d2d988 $09b64c2b $7eb17cbd $e7b82d07 $90bf1d91 $1db71064 $6ab020f2 $f3b97148 $84be41de $1adad47d $6ddde4eb $f4d4b551 $83d385c7 $136c9856 $646ba8c0 $fd62f97a $8a65c9ec $14015c4f $63066cd9 $fa0f3d63 $8d080df5 $3b6e20c8 $4c69105e $d56041e4 $a2677172 $3c03e4d1 $4b04d447 $d20d85fd $a50ab56b $35b5a8fa $42b2986c $dbbbc9d6 $acbcf940 $32d86ce3 $45df5c75 $dcd60dcf $abd13d59 $26d930ac $51de003a $c8d75180 $bfd06116 $21b4f4b5 $56b3c423 $cfba9599 $b8bda50f $2802b89e $5f058808 $c60cd9b2 $b10be924 $2f6f7c87 $58684c11 $c1611dab $b6662d3d $76dc4190 $01db7106 $98d220bc $efd5102a $71b18589 $06b6b51f $9fbfe4a5 $e8b8d433 $7807c9a2 $0f00f934 $9609a88e $e10e9818 $7f6a0dbb $086d3d2d $91646c97 $e6635c01 $6b6b51f4 $1c6c6162 $856530d8 $f262004e $6c0695ed $1b01a57b $8208f4c1 $f50fc457 $65b0d9c6 $12b7e950 $8bbeb8ea $fcb9887c $62dd1ddf $15da2d49 $8cd37cf3 $fbd44c65 $4db26158 $3ab551ce $a3bc0074 $d4bb30e2 $4adfa541 $3dd895d7 $a4d1c46d $d3d6f4fb $4369e96a $346ed9fc $ad678846 $da60b8d0 $44042d73 $33031de5 $aa0a4c5f $dd0d7cc9 $5005713c $270241aa $be0b1010 $c90c2086 $5768b525 $206f85b3 $b966d409 $ce61e49f $5edef90e $29d9c998 $b0d09822 $c7d7a8b4 $59b33d17 $2eb40d81 $b7bd5c3b $c0ba6cad $edb88320 $9abfb3b6 $03b6e20c $74b1d29a $ead54739 $9dd277af $04db2615 $73dc1683 $e3630b12 $94643b84 $0d6d6a3e $7a6a5aa8 $e40ecf0b $9309ff9d $0a00ae27 $7d079eb1 $f00f9344 $8708a3d2 $1e01f268 $6906c2fe $f762575d $806567cb $196c3671 $6e6b06e7 $fed41b76 $89d32be0 $10da7a5a $67dd4acc $f9b9df6f $8ebeeff9 $17b7be43 $60b08ed5 $d6d6a3e8 $a1d1937e $38d8c2c4 $4fdff252 $d1bb67f1 $a6bc5767 $3fb506dd $48b2364b $d80d2bda $af0a1b4c $36034af6 $41047a60 $df60efc3 $a867df55 $316e8eef $4669be79 $cb61b38c $bc66831a $256fd2a0 $5268e236 $cc0c7795 $bb0b4703 $220216b9 $5505262f $c5ba3bbe $b2bd0b28 $2bb45a92 $5cb36a04 $c2d7ffa7 $b5d0cf31 $2cd99e8b $5bdeae1d $9b64c2b0 $ec63f226 $756aa39c $026d930a $9c0906a9 $eb0e363f $72076785 $05005713 $95bf4a82 $e2b87a14 $7bb12bae $0cb61b38 $92d28e9b $e5d5be0d $7cdcefb7 $0bdbdf21 $86d3d2d4 $f1d4e242 $68ddb3f8 $1fda836e $81be16cd $f6b9265b $6fb077e1 $18b74777 $88085ae6 $ff0f6a70 $66063bca $11010b5c $8f659eff $f862ae69 $616bffd3 $166ccf45 $a00ae278 $d70dd2ee $4e048354 $3903b3c2 $a7672661 $d06016f7 $4969474d $3e6e77db $aed16a4a $d9d65adc $40df0b66 $37d83bf0 $a9bcae53 $debb9ec5 $47b2cf7f $30b5ffe9 $bdbdf21c $cabac28a $53b39330 $24b4a3a6 $bad03605 $cdd70693 $54de5729 $23d967bf $b3667a2e $c4614ab8 $5d681b02 $2a6f2b94 $b40bbe37 $c30c8ea1 $5a05df1b $2d02ef8d 256 carr def % Get ManufacturingBlock Version /Str_ManBlockVers $88 chr $01 chr add $20 chr add $03 chr add def /UPID_ManBlockVers Str_ManBlockVers ReadUPID def % Get ManufacturingBlock Device Type /Str_ManBlockDevType $88 chr $01 chr add $21 chr add $03 chr add def /UPID_ManBlockDevType Str_ManBlockDevType ReadUPID def % Get ManufacturingBlock Device Version /Str_ManBlockDevVersion $88 chr $01 chr add $22 chr add $03 chr add def /UPID_ManBlockDevVersion Str_ManBlockDevVersion ReadUPID def % Get ManufacturingBlock ICTString /Str_ManBlockICTString $88 chr $01 chr add $23 chr add $03 chr add def /UPID_ManBlockICTString Str_ManBlockICTString ReadUPID def % Concatenate above strings /UPID_ManBlock UPID_ManBlockVers UPID_ManBlockDevType add UPID_ManBlockDevVersion add UPID_ManBlockICTString add def % Get ManufacturingBlock CRC /Str_ManBlockCRC $88 chr $01 chr add $2C chr add $03 chr add def /ResStr Str_ManBlockCRC ReadUPID def /UPID_ManBlockCRC ResStr 0 1 getsubstr ord ResStr 1 1 getsubstr ord 8 shl add ResStr 2 1 getsubstr ord 16 shl add ResStr 3 1 getsubstr ord 24 shl add def % Start CRC calculation /crc 0 $ffffffff xor def 0 1 UPID_ManBlock length 1 sub [B /loopIdx exch def % get loop index /bufVar UPID_ManBlock loopIdx 1 getsubstr ord def % get next buffer element and convert to ordinal position /tbl_idx crc bufVar xor $ff and def /crc crc_table tbl_idx get crc 8 shr xor $ffffffff and def ] for /crc_calc crc $ffffffff and $ffffffff xor def '' log 'Check Safety Manufacturing Block...' log UPID_ManBlockCRC crc_calc eq [B 'Check successful!' log /RetResult #1 def /ErrMsg ' ' def ][B /RetResult #0 def /ErrMsg 'Safety Manufacturing Block Check failed. Manufacturing Block possibly not programmed.' def ] ifelse [A /RetResult /ErrMsg ] ] def /CheckSM02Started [P [A /TimeOut ] /RetResult #0 def /ErrMsg 'Safety Firmware not starting. Timeout occured.' def TimeOut [B /Str_SM02SystemState $88 chr $01 chr add $18 chr add $03 chr add def /UPID_SM02SystemState Str_SM02SystemState ReadUPID 0 1 getsubstr ord def UPID_SM02SystemState $00 ne [B 'SM02 started!' log /RetResult #1 def /ErrMsg ' ' def exitloop ] if 1000 wait ] repeat [A /RetResult /ErrMsg ] ] def ] /InstallProc [P [A /InputDict ] InputDict /MI_SelectedIntf known [B /SelectedInterface InputDict.MI_SelectedIntf def /ChangeInterface #1 def /ChangeInterfaceExt #1 def ] [B /SelectedInterface '' def /ChangeInterface #0 def /ChangeInterfaceExt #0 def ] ifelse /Continue #1 def /SuccessDlgFlag #0 def 'Checking Servo Drive...' log /EloType GetEloType def /OrderingArtNo GetEloOrderingArtNo def /OSSel1 /Name 'OS' /Caption 'OS' 2 cdict def /MCSWSel1 /Name 'MCSW' /Caption 'MC Software' 2 cdict def EloType OrderingArtNo CheckEloIsKnown [B /Controller EloType OrderingArtNo GetEloDict def %'Device Type: ' Controller.Name add log 'Device Text: ' GetEloTypeStr add log 'Device Type ID: 0' EloType 16 cvrs add 'h' add log Controller.TypeSupported 1 eq [B /Family Controller.EloTypeExt def % Release Info /RelDict RelInfoDict Family cvn get def /ReleaseVersion RelDict.RelVersion def /ReleaseSubVersion RelDict.RelSubVersion def /ReleaseBuildInfo RelDict.RelBuildInfo def /ReleaseString RelDict.RelString def /OS [A NoChange OperatingSystem] def /MCSW [A NoChange MCSoftware None] def 'UserName' Device.GetDeviceVar uppercase 'DEVELOPER' eq [B OS MCSW SelectInstallation[B /OSSel1 exch def /MCSWSel1 exch def OSSel1.Caption 'No Change' eq[B 'No Change' log ] [B 'OS' log ]ifelse MCSWSel1.Caption 'No Change' eq[B 'No Change' log ] [B MCSWSel1.Caption 'None' eq[B 'None' log ] [B 'MCSW' log ]ifelse ]ifelse %IntfSel.Caption ' selected.' add log %IntfSel /IntfMCTreeExt known [B %/IntfMCTreeExt IntfSel.IntfMCTreeExt def %] if ][B /OsSel exch def /MCSWSel exch def 'Installation aborted! No Installation selected!' log /Continue #0 def ] ifelse ][B /Continue #1 def ]ifelse % OS Info /RelDict OSInfoDict Family cvn get def /OSSWVersion RelDict.SWVersion def /OSSWSubVersion RelDict.SWSubVersion def /OSSWBetaInfo RelDict.SWBetaInfo def /OSTreeVersion RelDict.TreeVersion def /OSTreeSubVersion RelDict.TreeSubVersion def /OSTreeBetaInfo RelDict.TreeBetaInfo def /OSTreeFileName RelDict.TreeFileName def % Define the 2S safety tree version with an empty string if it does not exist in the RelDict RelDict /TreeFileName2S known [B /OSTreeFileName2S RelDict.TreeFileName2S def /OSTreeVersion2S RelDict.TreeVersion2S def /OSTreeSubVersion2S RelDict.TreeSubVersion2S def /OSTreeBetaInfo2S RelDict.TreeBetaInfo2S def ] [B /OSTreeFileName2S '' def /OSTreeVersion2S 0 def /OSTreeSubVersion2S 0 def /OSTreeBetaInfo2S '' def ] ifelse % Define the ROS version with an empty string if it does not exist in the RelDict RelDict /ROSSWVersion known [B /ROSSWVersion RelDict.ROSSWVersion def ] [B /ROSSWVersion '' def ] ifelse RelDict /ROSSWSubVersion known [B /ROSSWSubVersion RelDict.ROSSWSubVersion def ] [B /ROSSWSubVersion '' def ] ifelse Controller.InstallMCSW 1 eq [B % MC Info /RelDict MCInfoDict Family cvn get def /MCSWVersion RelDict.SWVersion def /MCSWSubVersion RelDict.SWSubVersion def /MCSWBetaInfo RelDict.SWBetaInfo def /MCTreeVersion RelDict.TreeVersion def /MCTreeSubVersion RelDict.TreeSubVersion def /MCTreeBetaInfo RelDict.TreeBetaInfo def /MCTreeFileName RelDict.TreeFileName def /MCSWFileName RelDict.MCSWFileName def ]if 'Device Type Supported: True' log /EloHWVersion GetEloVersion def 'Device HW Version: 0' EloHWVersion 16 cvrs add 'h' add log EloHWVersion Controller CheckHWVersionCompatible /LastCompatibleFirmware exch def /Compatible exch def Compatible [B 'Device HW version supported: True' log Controller.InstallMCSW 1 eq [B /EloSWVersion GetEloSWVersion def 'Device SW Version: ' EloSWVersion cvs add log ][B /EloSWVersion $00 def ]ifelse EloSWVersion Controller CheckEloSWVersionCompatible [B Controller.InstallMCSW 1 eq [B 'Device SW ID Supported: True' log '' log /PowerExtension Controller.PowerExtension def ]if /EloTypeExt Controller.EloTypeExt def Controller /OSTypeExt known [B /OSTypeExt Controller.OSTypeExt def ] [B /OSTypeExt '' def ] ifelse Controller /_2SOSTypeExt known [B /_2SOSTypeExt Controller._2SOSTypeExt def ] [B /_2SOSTypeExt OSTypeExt def ] ifelse Controller /UPOSExt known [B /UPOSExt Controller.UPOSExt def ] [B /UPOSExt '' def ] ifelse Controller /OSExt known [B /OSExt Controller.OSExt def ] [B /OSExt '' def ] ifelse Controller /UPROSAvailable known [B /UPROSAvailable Controller.UPROSAvailable def ] [B /UPROSAvailable #0 def ] ifelse Controller /netXBased known [B /netXBased Controller.netXBased def ] [B /netXBased #0 def ] ifelse Controller /netX90Based known [B /netX90Based Controller.netX90Based def ] [B /netX90Based #0 def ] ifelse Controller /SM02Based known [B /SM02Based Controller.SM02Based def ] [B /SM02Based #0 def ] ifelse /IntfSWTypeExt Controller.IntfSWTypeExt def /IntfTreeTypeExt Controller.IntfTreeTypeExt def /ApplTypeExt Controller.ApplTypeExt def /EasyStepsParExt Controller.EasyStepsParExt def Continue[B InputDict /MI_SelectedIntf known [B Controller /Interfaces InputDict.MI_SelectedIntf 1 carr puts Controller /InterfacesExtended InputDict.MI_SelectedIntf 1 carr puts ] if InputDict /MI_SelectedAppl known [B Controller /Applications InputDict.MI_SelectedAppl 1 carr puts Controller /ApplicationsExtended InputDict.MI_SelectedAppl 1 carr puts ] if % Interfaces 'UserName' Device.GetDeviceVar uppercase 'DEVELOPER' eq[B /Interfaces Controller.InterfacesExtended def ][B /Interfaces Controller.Interfaces def ] ifelse Interfaces Count 0 eq [B /NoIntf #1 def ][B /NoIntf #0 def ] ifelse 'Interfaces compatible with Drive: ' log Interfaces [B /IntfInfo exch def IntfInfo.Name 'None' ne [B '- ' IntfInfo.Caption add log ] if ] forall /Continue #1 def /IntfMCTreeExt '' def Interfaces count 1 gt [B ProgFlag not ChangeInterface not and [B Interfaces SelectIntf [B /IntfSel exch def IntfSel.Caption ' selected.' add log IntfSel /IntfMCTreeExt known [B /IntfMCTreeExt IntfSel.IntfMCTreeExt def ] if ][B /IntfSel exch def 'Installation aborted! No Interface selected!' log /Continue #0 def ] ifelse ] [B Interfaces [B /IntfSel exch def IntfSel /IntfMCTreeExt known [B /IntfMCTreeExt IntfSel.IntfMCTreeExt def ] if ExitLoop ] forall ] ifelse ][B NoIntf not [B Interfaces [B /IntfSel exch def ] forall IntfSel.Caption ' Interface selected.' add log IntfSel /IntfMCTreeExt known [B /IntfMCTreeExt IntfSel.IntfMCTreeExt def ] if ] if ] ifelse ]if Continue [B % Applications 'UserName' Device.GetDeviceVar uppercase 'DEVELOPER' eq[B /Applications Controller.ApplicationsExtended def ][B /Applications Controller.Applications def ] ifelse Applications Count 0 eq [B /NoAppl #1 def ][B /NoAppl #0 def ] ifelse 'Applications compatible with Drive: ' log Applications [B /ApplInfo exch def ApplInfo.Name 'None' ne [B '- ' ApplInfo.Caption add log ] if ] forall /Continue #1 def Applications count 1 gt [B ProgFlag not ChangeInterface not and [B Applications SelectAppl [B /ApplSel exch def ApplSel.Caption ' selected.' add log ][B /ApplSel exch def 'Installation aborted! No Application selected!' log /Continue #0 def ] ifelse ] [B Applications [B /ApplSel exch def ExitLoop ] forall ] ifelse ][B NoAppl not [B Applications [B /ApplSel exch def ] forall ApplSel.Caption ' Application selected.' add log ] if ] ifelse ] if Continue [B SM02BAsed[B % SafetyFW /SafetyFW Controller.SafetyFirmwareNone def 'UserName' Device.GetDeviceVar uppercase 'DEVELOPER' eq[B /SafetyFW Controller.SafetyFirmwareExtended def ][B IntfSel.Name [B 'PROFIdrive_Safety_NX' [B /SafetyFW Controller.SafetyFirmware_PN def ] 'PROFINET_Safety_NX' [B /SafetyFW Controller.SafetyFirmware_PN def ] 'EtherCAT_Safety_DS402_NX' [B /SafetyFW Controller.SafetyFirmware_DS def ] 'EthernetIP_NX' [B /SafetyFW Controller.SafetyFirmware_CM def ] 'LinUDP_NX' [B /SafetyFW Controller.SafetyFirmware_LU def ] 'POWERLINK_NX' [B /SafetyFW Controller.SafetyFirmware_PL def ] 'SERCOSIII_NX' [B /SafetyFW Controller.SafetyFirmware_SC def ] 'CCLinkIEFB_NX' [B /SafetyFW Controller.SafetyFirmware_CC def ] ][B % do nothing ] case ] ifelse IntfSel.Name [B 'PROFIdrive_Safety_NX' [B /MCU1_CRC Controller.MCU1_CRC_PN def /MCU2_CRC Controller.MCU2_CRC_PN def /Para_CRC Controller.Para_CRC_PN def /Safe_Addr Controller.Safe_Addr_PN def ] 'PROFINET_Safety_NX' [B /MCU1_CRC Controller.MCU1_CRC_PN def /MCU2_CRC Controller.MCU2_CRC_PN def /Para_CRC Controller.Para_CRC_PN def /Safe_Addr Controller.Safe_Addr_PN def ] 'EtherCAT_Safety_DS402_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] 'EthernetIP_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def % --> change this to CipSync Safety if available /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] 'LinUDP_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def % --> change this to LinUDP Safety if available /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] 'POWERLINK_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def % --> change this to PowerLink Safety if available /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] 'SERCOSIII_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def % --> change this to Sercos Safety if available /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] 'CCLinkIEFB_NX' [B /MCU1_CRC Controller.MCU1_CRC_DS def % --> change this to CCLink Safety if available /MCU2_CRC Controller.MCU2_CRC_DS def /Para_CRC Controller.Para_CRC_DS def /Safe_Addr Controller.Safe_Addr_DS def ] ][B % do nothing ] case SafetyFW Count 0 eq [B /NoSafetyFW #1 def ][B /NoSafetyFW #0 def ] ifelse 'SafetyFW compatible with Drive: ' log SafetyFW [B /SafetyFWInfo exch def SafetyFWInfo.Name 'None' ne [B '- ' SafetyFWInfo.Caption add log ] if ] forall /Continue #1 def SafetyFW count 1 gt [B ProgFlag not ChangeInterface not and [B SafetyFW SelectSafetyFW [B /SafetyFWSel exch def SafetyFWSel.Caption ' selected.' add log ][B /SafetyFWSel exch def 'Installation aborted! No SafetyFW selected!' log /Continue #0 def ] ifelse ] [B SafetyFW [B /SafetyFWSel exch def ExitLoop ] forall ] ifelse ][B NoSafetyFW not [B SafetyFW [B /SafetyFWSel exch def ] forall SafetyFWSel.Caption ' SafetyFW selected.' add log ] if ] ifelse ]if ] if Continue [B '' log 'Checking files...' log FileCheck /FileCheckResult exch def /MissingFile exch def FileCheckResult [B '...all necessary files have been found.' log '' log 'Installing Firmware Release ' ReleaseString add log '' log ProgFlag not ChangeInterfaceExt not and [B /Bool ReadyForStopDlg def ] [B /Bool #1 def PIVar:PortType 'COM' eq [B 'LinMotInstall' PackInst:_ChangeToMaxBaudRate /TalkIntf PIVar:TalkIntf def /Device PIVar:Device def ] if ] ifelse Bool [B Continue [B /BlockRd 'DeviceName' Device.GetDeviceVar Create:BlockReader def /BlockWrt 'DeviceName' Device.GetDeviceVar Create:BlockWriter def /MCSWFLag 0 def /IntfFlag 0 def ] if % Read netX(90) protocol stack information /ProtStackMajorVersRead 0 def /ProtStackMinorVersRead 0 def /ProtStackBuildVersRead 0 def /ProtStackRevNumberRead 0 def /ProtStackVersNameRead 0 def PackInst:CheckROS /ROSSubVersion exch def /ROSVersion exch def /ROSRunning exch def /ROSPresent exch def ROSRunning not[B netXBased netX90Based or[B /ProtStackMajorVersRead $7000863C ReadMemory def /ProtStackMinorVersRead $70008640 ReadMemory def /ProtStackBuildVersRead $70005644 ReadMemory def /ProtStackRevNumberRead $70008648 ReadMemory def /ProtStackVersNameRead $7000864C GetInstalledFileName uppercase def ]if ]if 'Starting download procedure...' log 'Stop Firmware...' log 20 StopFirmware '' log % Set only(!) installation valid flag of FW to invalid FWInstallValidAddr InstallationInvalid WriteWordToElo Continue [B OSSel1.Caption 'OS' eq [B % Load OS SW #1 ChangeInterface OSLoadSW /Continue exch def /MissingFile exch def '' log Continue [B OSInstallValidAddr InstallationValid WriteWordToElo '' TalkIntf.DeviceLogin /PIVar:FlashInfo PackInst:_GetFlashInfo def ProgFlag [B PIVar:PortType 'COM' eq [B 'LinMotInstall' PackInst:_ChangeToMaxBaudRate /TalkIntf PIVar:TalkIntf def /Device PIVar:Device def % Recreate BlockRd and BlockWrt because they were destroyed before /BlockRd 'DeviceName' Device.GetDeviceVar Create:BlockReader def /BlockWrt 'DeviceName' Device.GetDeviceVar Create:BlockWriter def ] if ] if ] if ] if ] if Controller.InstallMCSW 1 eq [B Continue [B MCSWSel1.Caption 'MC Software' eq [B % Load MC SW #1 MCLoadSW /Continue exch def /MissingFile exch def '' log Continue [B MCInstallValidAddr InstallationValid WriteWordToElo ] if ][B MCSWSel1.Caption 'None' eq [B MCInstallValidAddr InstallationInvalid WriteWordToElo 'Erasing MC SW firmware sectors...' log '' log 3 PIVar:TalkIntf.EraseSWInstance 4 PIVar:TalkIntf.EraseSWInstance ] if ] ifelse ] if ] if Continue [B IntfSel.Name 'None' ne [B IntfSel.Name 'NoChange' ne [B % Load Software code #1 IntfLoadSW /Continue exch def /MissingFile exch def '' log Continue [B INTFInstallValidAddr InstallationValid WriteWordToElo ] if ] if ][B INTFInstallValidAddr InstallationInvalid WriteWordToElo 'Erasing INTF firmware sectors...' log '' log 5 PIVar:TalkIntf.EraseSWInstance 6 PIVar:TalkIntf.EraseSWInstance ] ifelse ] if Continue [B ApplSel.Name 'None' ne [B ApplSel.Name 'NoChange' ne [B % Load APPL #1 ApplLoadSW /Continue exch def /MissingFile exch def '' log Continue [B APPLInstallValidAddr InstallationValid WriteWordToElo ] if ] if ][B APPLInstallValidAddr InstallationInvalid WriteWordToElo 'Erasing APPL firmware sectors...' log '' log 7 PIVar:TalkIntf.EraseSWInstance 8 PIVar:TalkIntf.EraseSWInstance ] ifelse ] if Continue [B SM02BAsed[B SafetyFWSel.Name 'None' ne [B SafetyFWSel.Name 'NoChange' ne [B #1 SafetyFWLoadSW /Continue exch def /MissingFile exch def '' log ] if ] if ] if ] if Continue [B /TalkVersion PIVar:TalkVersion $F0 and def %SG8 TalkVersion $80 eq [B /ReleaseInfoAddr Offset $1748 add def /ReleaseVersionAddr Offset $17A8 add def /ReleaseSubVersionAddr Offset $17AA add def $A20019E2 $1A WriteWordToElo % Safety Parameter Set Version ProgFlag [B $D0001816 $0 WriteWordToElo ] if ]if %SG9 TalkVersion $A0 eq [B /ReleaseInfoAddr Offset $1748 add def /ReleaseVersionAddr Offset $17A8 add def /ReleaseSubVersionAddr Offset $17AA add def %$A20019E2 $1A WriteWordToElo % Safety Parameter Set Version ProgFlag [B $A2001016 $0 WriteWordToElo ] if ]if 'Writing Release Info...' log ReleaseInfoAddr ReleaseString 32 ' ' padr WriteStringToElo ReleaseVersionAddr ReleaseVersion WriteWordToElo ReleaseSubVersionAddr ReleaseSubVersion WriteWordToElo FWInstallValidAddr InstallationValid WriteWordToElo % Needed to default the parameters in case of lazy installation. % Do not default the parameters in case of change interface ChangeInterface not [B '' log 'Default parameters...' log OSParameterDefaultAddr InstallationValid WriteWordToElo MCParameterDefaultAddr InstallationValid WriteWordToElo INTFParameterDefaulAddr InstallationValid WriteWordToElo APPLParameterDefaultAddr InstallationValid WriteWordToElo % Default Safety Parameters SM02Based[B '' log 'Default Safety parameters...' log %'Resetting Device. Please wait...' log %ResetDevice %1000 wait SafetyFWSel.Name 'SM02FWPN' eq SafetyFWSel.Name 'SM02FWDS' eq or [B 'Defaulting Safety Parameters...' log % Stop Firmware $21 chr TalkIntf.GenericCmd % Get System Reinit $9A chr $02 chr add TalkIntf.GenericCmd 1000 wait % Safety Default Par Service $99 chr $A4 chr add $00 chr add $01 chr add $0F chr add $AA chr add TalkIntf.GenericCmd ]if ] if ] if % do not default parameters in case of change interface procedure 2000 wait 'Resetting Device. Please wait...' log ResetDevice 2000 wait 'Updating FW on Drive...' log /TimeOut #1 def 300 [B 2000 wait $03 chr $00 chr add TalkIntf.GenericCmd %this message is not shown in the debug window TalkIntf.GetResult 0 eq [B /TimeOut #0 def exitloop ]if '.' log ] repeat TimeOut [B 'After resetting the device, it was not possible to reach the device within the time limit.' log /Continue #0 def ]if % update netx image IntfSel /IntfSpecificSetup known [B IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG8' eq[B % wait for netX firmware installation to finish % only check the netX FW state if the interface was downloaded IntfSel.Name 'None' ne IntfSel.Name 'NoChange' ne and [B CheckNetXSWDownload not [B 'NX firmware download failed!' log /Continue FALSE def ] if ]if ] if ] if Continue [B %verify the installation valid flags /OSValid OSInstallValidAddr ReadMemory def /MCValid MCInstallValidAddr ReadMemory def /IntfValid INTFInstallValidAddr ReadMemory def /ApplValid APPLInstallValidAddr ReadMemory def /OSOK #0 def /MCOK #0 def /IntfOK #0 def /ApplOK #0 def OSValid $1111 eq [B /OSOK #1 def ]if MCSWSel1.Caption 'None' ne [B Controller.InstallMCSW 1 eq [B MCValid $1111 eq[B /MCOK #1 def ]if ][B MCValid $FFFF eq[B /MCOK #1 def ]if ]ifelse ][B MCValid $FFFF eq[B /MCOK #1 def ]if ]ifelse IntfSel.Name 'None' ne [B IntfValid $1111 eq[B /IntfOK #1 def ]if ][B IntfValid $FFFF eq [B /IntfOK #1 def ]if ]ifelse ApplSel.Name 'None' ne [B ApplValid $1111 eq [B /ApplOK #1 def ]if ][B ApplValid $FFFF eq [B /ApplOK #1 def ]if ]ifelse OSOK MCOK and IntfOK and ApplOK and [B FWInstallValidAddr InstallationValid WriteWordToElo ][B 'Installation was not fully complete' log /Continue #0 def ]ifelse ]if /TimeCounter 0 def ] if /ErrMsg1 '' def /ErrMsg2 '' def /ErrMsg3 '' def Continue [B SM02Based [B 60 CheckSM02Started % normally 25 sec should be enough (PnP incl.), set timeout to 60 sec /ErrMsg1 exch def /Continue1 exch def CheckSafetyCRC /ErrMsg2 exch def /Continue2 exch def CheckManufacturingBlock /ErrMsg3 exch def /Continue3 exch def /Continue Continue1 Continue2 and Continue3 and def ] if ] if Continue not [B '' log 'Installation aborted! ' log ErrMsg1 ErrMsg2 ErrMsg3 AbortDlg ][B 'Installation successfully completed!' log ProgFlag not ChangeInterfaceExt not and [B /SuccessDlgFlag #1 def ] if ] ifelse ][B /Continue #0 def 'Installation aborted! ' log ] ifelse ][B /Continue #0 def 'Installation aborted! ' log 'File not found: \' MissingFile add log 'File not found: \' MissingFile add '' '' AbortDlg ] ifelse ] if ][B /Continue #0 def 'Device SW ID Supported: False' log '' log 'Installation aborted! ' log 'Device SW ID not supported!' '' '' AbortDlg ] ifelse ][B /Continue #0 def 'Device HW version supported: False' log '' log 'Installation aborted! ' 'The Version ' EloHWVersion 16 cvrs add 'h' add ' of the Drive ' add Controller.Name add ' is not compatible with this firmware release!' add log ' Last firmware release which supports this HW version is: ' LastCompatibleFirmware '!' add add add log LastCompatibleFirmware '' ne [B 'HW version not supported!' 'Last firmware version that supports this hardware: ' LastCompatibleFirmware add 'The corresponding installation script file can be found in the subfolder: ..\Firmware\OlderReleases\' AbortDlg ] [B 'HW version not supported! ' '' '' AbortDlg ] ifelse ] ifelse ][B /Continue #0 def /EloHWVersion GetEloVersion def 'Device HW Version: 0' EloHWVersion 16 cvrs add 'h' add log EloHWVersion Controller CheckHWVersionCompatible /LastCompatibleFirmware exch def 'Device Type Supported: False' log '' log 'Installation aborted! ' 'The Drive ' add Controller.Name add ' is not compatible with this firmware release!' add log LastCompatibleFirmware '' ne [B 'HW version not supported!' 'Last firmware version that supports this hardware: ' LastCompatibleFirmware add 'The corresponding installation script file can be found in the subfolder: ..\Firmware\OlderReleases\' AbortDlg ] [B 'Device Type not supported!' '' '' AbortDlg ] ifelse ] ifelse ][B /Continue #0 def 'Device Type: 0' EloType 16 cvrs add 'h' add log '' log 'Installation aborted! Unknown Device Type!' log 'Unknown Device Type!' '' '' AbortDlg ] ifelse [A /SuccessDlgFlag /Continue ] ] /InitPackInst [B ProgFlag [B /DevName exch def /Device Create:Device def DevName Device.AssignDevice DevName /PackInst:OnMessageCallback PackInst:Init ] [B /InputDict exch def InputDict /MI_SelectedIntf known [B /PackInst:OnMessageCallback Controllers InputDict PackInst:InitNew_withParameters /Device PIVar:Device def %/PortName 'PortName' Device.GetDeviceVar def ] [B /PackInst:OnMessageCallback Controllers PackInst:InitNew_withControllers_6_7 /Device PIVar:Device def /PortName 'PortName' Device.GetDeviceVar def ] ifelse ] ifelse /InitResult exch def InitResult [B /TalkIntf PIVar:TalkIntf def /TalkVersion PIVar:TalkVersion $F0 and def /InstallationInvalid $ffff def /InstallationValid $1111 def TalkVersion [B % SG8 3S $80 [B /Offset $A2000000 def /FWInstallValidAddr $A2001180 def /OSInstallValidAddr $A2001182 def /MCInstallValidAddr $A2001184 def /INTFInstallValidAddr $A2001186 def /APPLInstallValidAddr $A2001188 def /OSSoftwareUpdateAddr $A2006400 def /OSTreeUpdateAddr $A2006402 def /MCSoftwareUpdateAddr $A2006404 def /MCTreeUpdateAddr $A2006406 def /INTFSoftwareUpdateAddr $A2006408 def /INTFTreeUpdateAddr $A200640A def /APPLSoftwareUpdateAddr $A200640C def /TestSoftwareUpdateAddr $A200640E def /APPLTreeUpdateAddr $A2006410 def /OSParameterDefaultAddr $A2006420 def /MCParameterDefaultAddr $A2006422 def /INTFParameterDefaulAddr $A2006424 def /APPLParameterDefaultAddr $A2006426 def /IPAddressAddrWorking $70007084 def /NetMaskAddrWorking $70007088 def /DefaultGatewayAddrWorking $7000708C def /IPAddressAddr $70001080 def /NetMaskAddr $70001084 def /DefaultGatewayAddr $70001088 def /IPConfigModeAddr $7000108E def /OS_SW_CRC_Addr $80080048 def /OS_SW_CRC_Flash_Addr $A3080048 def /OS_SW_CRC_EEPROM_Addr $A3080058 def /OS_SW_FileName_Addr $A0080140 def /OS_Tr_CRC_Addr $80100098 def /OS_Tr_CRC_Flash_Addr $A3100098 def /OS_Tr_CRC_EEPROM_Addr $A31000A8 def /OS_Tr_FileName_Addr $A010004C def /MC_SW_CRC_Addr $80200048 def /MC_SW_CRC_Flash_Addr $A3180048 def %CRC over flash in EEPROM .hx3 /MC_SW_CRC_EEPROM_Addr $A3180058 def %CRC over EEPROM in EEPROM .hx3 /MC_SW_FileName_Addr $A0200140 def /MC_Tr_CRC_Addr $80380098 def /MC_Tr_CRC_Flash_Addr $A3300098 def %CRC over flash in EEPROM .hx2 /MC_Tr_CRC_EEPROM_Addr $A33000A8 def %CRC over EEPROM in EEPROM .hx2 /MC_Tr_FileName_Addr $A038004C def %$A002004C def /INTF_SW_CRC_Addr $80400048 def %CRC in flash /INTF_SW_CRC_Flash_Addr $A3380048 def %CRC over flash in EEPROM .hx3 /INTF_SW_CRC_EEPROM_Addr $A3380058 def %CRC over EEPROM in EEPROM .hx3 /INTF_SW_FileName_Addr $A0400140 def /INTF_Tr_CRC_Addr $804A0098 def %CRC in flash /INTF_Tr_CRC_Flash_Addr $A3400098 def %CRC over flash in EEPROM .hx2 /INTF_Tr_CRC_EEPROM_Addr $A34000A8 def %CRC over EEPROM in EEPROM .hx2 /INTF_Tr_FileName_Addr $A04A004C def /APPL_SW_CRC_Addr $80600048 def %CRC in flash /APPL_SW_CRC_Flash_Addr $A3480048 def %CRC over flash in EEPROM .hx3 /APPL_SW_CRC_EEPROM_Addr $A3480058 def %CRC over EEPROM in EEPROM .hx3 /APPL_SW_FileName_Addr $A0600140 def /APPL_Tr_CRC_Addr $806A0098 def %CRC in flash /APPL_Tr_CRC_Flash_Addr $A3500098 def %CRC over flash in EEPROM .hx3 /APPL_Tr_CRC_EEPROM_Addr $A35000A8 def %CRC over EEPROM in EEPROM .hx3 /APPL_Tr_FileName_Addr $A06A004C def /SystGen 8 def /CRC_invalid1 $00000000 def /CRC_invalid2 $FFFFFFFF def /OSInstallCommandAddress $7000101E def ] % SG9 3S $A0 [B /Offset $A2000000 def /FWInstallValidAddr $A2001180 def /OSInstallValidAddr $A2001182 def /MCInstallValidAddr $A2001184 def /INTFInstallValidAddr $A2001186 def /APPLInstallValidAddr $A2001188 def /OSSoftwareUpdateAddr $A2006400 def /OSTreeUpdateAddr $A2006402 def /MCSoftwareUpdateAddr $A2006404 def /MCTreeUpdateAddr $A2006406 def /INTFSoftwareUpdateAddr $A2006408 def /INTFTreeUpdateAddr $A200640A def /APPLSoftwareTreeUpdateAddr $A200640C def /TestSoftwareUpdateAddr $A200640E def /OSParameterDefaultAddr $A2006420 def /MCParameterDefaultAddr $A2006422 def /INTFParameterDefaulAddr $A2006424 def /APPLParameterDefaultAddr $A2006426 def /IPAddressAddrWorking $20007084 def /NetMaskAddrWorking $20007088 def /DefaultGatewayAddrWorking $2000708C def /IPAddressAddr $20001080 def /NetMaskAddr $20001084 def /DefaultGatewayAddr $20001088 def /IPConfigModeAddr $2000108E def /OS_SW_CRC_Addr $0C040048 def /OS_SW_CRC_Flash_Addr $A21C0048 def /OS_SW_CRC_EEPROM_Addr $A21C0058 def /OS_SW_FileName_Addr $0C040140 def /OS_Tr_CRC_Addr $0C080098 def /OS_Tr_CRC_Flash_Addr $A2200098 def /OS_Tr_CRC_EEPROM_Addr $A22000A8 def /OS_Tr_FileName_Addr $0C08004C def /MC_SW_CRC_Addr $0C0C0048 def %CRC in flash /MC_SW_CRC_Flash_Addr $A2240048 def %CRC over flash in EEPROM .hx3 /MC_SW_CRC_EEPROM_Addr $A2240058 def %CRC over EEPROM in EEPROM .hx3 /MC_SW_FileName_Addr $0C0C0140 def /MC_Tr_CRC_Addr $0C100098 def %CRC in flash /MC_Tr_CRC_Flash_Addr $A2280098 def %CRC over flash in EEPROM .hx2 /MC_Tr_CRC_EEPROM_Addr $A22800A8 def %CRC over EEPROM in EEPROM .hx2 /MC_Tr_FileName_Addr $0C10004C def /INTF_SW_CRC_Addr $0C140048 def %CRC in flash /INTF_SW_CRC_Flash_Addr $A22C0048 def %CRC over flash in EEPROM .hx3 /INTF_SW_CRC_EEPROM_Addr $A22C0058 def %CRC over EEPROM in EEPROM .hx3 /INTF_SW_FileName_Addr $0C140140 def /INTF_Tr_CRC_Addr $0C180098 def %CRC in flash /INTF_Tr_CRC_Flash_Addr $A2300098 def %CRC over flash in EEPROM .hx2 /INTF_Tr_CRC_EEPROM_Addr $A23000A8 def %CRC over EEPROM in EEPROM .hx2 /INTF_Tr_FileName_Addr $0C18004C def /APPL_SW_CRC_Addr $0C1C0048 def %CRC in flash /APPL_SW_CRC_Flash_Addr $A2340048 def %CRC over flash in EEPROM .hx3 /APPL_SW_CRC_EEPROM_Addr $A2340058 def %CRC over EEPROM in EEPROM .hx3 /APPL_SW_FileName_Addr $0C1C0140 def /APPL_Tr_CRC_Addr $0C1E0098 def %CRC in flash /APPL_Tr_CRC_Flash_Addr $A2360098 def %CRC over flash in EEPROM .hx3 /APPL_Tr_CRC_EEPROM_Addr $A23600A8 def %CRC over EEPROM in EEPROM .hx3 /APPL_Tr_FileName_Addr $0C1E004C def /SystGen 9 def /CRC_invalid1 $00000000 def /CRC_invalid2 $FFFFFFFF def /OSInstallCommandAddress $2000101E def ] ] [B 'Installation aborted! Unknown talk protocol version!' raisese ] case /log [B 'LogTxt' exch PackInst:OnMessageCallback ] def #1 ] [B #0 ] ifelse ] /PackInstExit [B PackInst:Exit SuccessDlgFlag [B SuccessDlg ]if ] ]