[D
	/LoadSW [P
		[A LoadFlag ]	% LoadFlag = False -> Check only if Files are existing 	
		
		/Result #1 def
		/MissingFile '' def
		
		% Build SW File name
		/SWFile FilePath IntfSel.IntfDir add '\' add IntfSel.IntfSWFileName add IntfSWTypeExt add def
		/SWFile SWFile '_V' add IntfSel.SWVersion cvs add 'S' add IntfSel.SWSubVersion cvs add def 
		IntfSel.SWBetaInfo '' ne [B
			/SWFile SWFile '_' add IntfSel.SWBetaInfo add def
		] if
		/SWFile SWFile '.HX3' add def
		
		% Build Tree File name
		/TreeFile FilePath IntfSel.IntfDir add '\' add IntfSel.IntfTreeFileName add IntfTreeTypeExt add def
		/TreeFile TreeFile '_V' add IntfSel.TreeVersion cvs add 'S' add IntfSel.TreeSubVersion cvs add def 
		IntfSel.TreeBetaInfo '' ne [B
			/TreeFile TreeFile '_' add IntfSel.TreeBetaInfo add def
		] if
		/TreeFile TreeFile '.HX2' add def
		
		% Build DefaultPar File name
		/DefaultParFile FilePath IntfSel.IntfDir add '\' add IntfSel.IntfTreeFileName add IntfTreeTypeExt add def
		/DefaultParFile DefaultParFile '_V' add IntfSel.TreeVersion cvs add 'S' add IntfSel.TreeSubVersion cvs add def 
		IntfSel.TreeBetaInfo '' ne [B
			/DefaultParFile DefaultParFile '_' add IntfSel.TreeBetaInfo add def
		] if
		/DefaultParFile DefaultParFile '.GR3' add def
		
		
		% check if files are existing
		Result [B
			SWFile FileExist not [B
				/Result #0 def 
				/MissingFile SWFile def
			] if
		] if
		Result [B
			TreeFile FileExist not [B
				/Result #0 def 
				/MissingFile TreeFile def
			] if
		] if
		Result [B
			DefaultParFile FileExist not [B
				/Result #0 def 
				/MissingFile DefaultParFile def
			] if
		] if
		Result [B
			IntfSel /IntfSpecificSetup known [B
				/SpecificSetupName IntfSel.IntfSpecificSetup def
				#0 'IntfLoader:' SpecificSetupName add cvn exec
				/MissingFile exch def
				/Result exch def
			] if
		] if
		
		
		Result LoadFlag and [B
			% write serialnumber, articlenumber and articlenumber string according to selected interface
			% only for 2S netX drives at the moment: 10.09.2021, dc
			IntfSel /VirtArtNumberValue known [B

				/VirtArtNumberValueAddress $A20006C6 def
				/VirtArtNumberStringAddress $A20006BC def
				/SerialNumberStringAddress $A20006AE def
			
				VirtArtNumberValueAddress IntfSel.VirtArtNumberValue WriteWordToElo
				VirtArtNumberStringAddress IntfSel.VirtArtNumberCompleteString 10 ' ' padr WriteStringToElo

				/SerialNumberStr IntfSel.VirtArtNumberString def %XXXXX.YYY.ZZZ
				% read .YYY of ordering serial number
					/Value $A2001094 ReadMemory def
					/SerialNumberStr SerialNumberStr Value $FF and chr add def
					/SerialNumberStr SerialNumberStr Value 8 shr chr add def  
					/Value $A2001096 ReadMemory def
					/SerialNumberStr SerialNumberStr Value $FF and chr add def
					/SerialNumberStr SerialNumberStr Value 8 shr chr add def  
				% read .ZZZ of ordering serial number
					/Value $A2001098 ReadMemory def
					/SerialNumberStr SerialNumberStr Value $FF and chr add def
					/SerialNumberStr SerialNumberStr Value 8 shr chr add def  
					/Value $A200109A ReadMemory def
					/SerialNumberStr SerialNumberStr Value $FF and chr add def
					/SerialNumberStr SerialNumberStr Value 8 shr chr add def  
					/SerialNumberStr SerialNumberStr 0 chr add def 
				SerialNumberStringAddress SerialNumberStr 14 ' ' padr WriteStringToElo

			] if
			
			
			% Read drive
			% Get Installation Valid Flag
			/InstVal INTFInstallValidAddr PackInst:ReadMemory def
			
			% Get SW CRC
			/CRC_drive_SW INTF_SW_CRC_Addr PackInst:_GetBlock def
			
			% Get Tree CRC
			/CRC_drive_Tr INTF_Tr_CRC_Addr PackInst:_GetBlock def
			
			% Get SW file name
			/Filename_read_SW INTF_SW_FileName_Addr GetInstalledFileName uppercase def
			
			% Get Tree file name
			/Filename_read_Tr INTF_Tr_FileName_Addr GetInstalledFileName uppercase def
			
			
			% Read file
			% Get SW CRC
			getcurrentdir '\' add SWFile add INTF_SW_CRC_Addr SystGen_CRC crcfromfile
			/Res exch def
			/CRC_file_SW exch def
			
			% Get Tree CRC
			getcurrentdir '\' add TreeFile add INTF_Tr_CRC_Addr SystGen_CRC crcfromfile
			/Res exch def
			/CRC_file_Tr exch def
			
			% Get SW file name
			/Filename_file_SW SWFile extfilename '' chfileext uppercase def
			
			% Get Tree file name
			/Filename_file_Tr TreeFile extfilename '' chfileext uppercase def
			
			% Check CRC
			CRC_file_SW CRC_invalid1 eq
			CRC_file_SW CRC_invalid2 eq or [B
				'File: ' SWFile extfilename add ' is corrupted!' add log
				/Result #0 def
			] if
			
			CRC_file_Tr CRC_invalid1 eq
			CRC_file_Tr CRC_invalid2 eq or [B
				'File: ' TreeFile extfilename add ' is corrupted!' add log
				/Result #0 def
			] if
			
			Result [B
				% if it is an MI SG6 devices download netx90 FW image before rest of interface FW
				IntfSel /IntfSpecificSetup known [B
					
					IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG6' eq IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG61_SG62' eq or[B
						/SpecificSetupName IntfSel.IntfSpecificSetup def
						#1 'IntfLoader:' SpecificSetupName add cvn exec
						/MissingFile exch def
						/Result exch def

						IntfSel.Name 'None' ne IntfSel.Name 'NoChange' ne and [B
						
							% set bit on to indicate when install is finished
							/OSInstallCommand OSInstallCommandAddress ReadMemory def
							/OSInstallCommand OSInstallCommand $0008 or def
							OSInstallCommandAddress OSInstallCommand WriteWordToElo
							
							% set re-Download FW flag and framework enable flag for netx
							/REDOWNLOADFLAG_ADDRESS $A2001E00 def
							/REDOWNLOADFLAG_VALUE $00000003 def
							REDOWNLOADFLAG_ADDRESS REDOWNLOADFLAG_VALUE WriteWordToElo
							
							'' log
							'Init update of Interface FW-stack...' log
						
						][B
							% reset re-Download FW flag for netx
							/REDOWNLOADFLAG_ADDRESS $A2001E00 def
							/REDOWNLOADFLAG_VALUE $00000001 def
							REDOWNLOADFLAG_ADDRESS REDOWNLOADFLAG_VALUE WriteWordToElo
						]ifelse
						
						'Resetting Device. Please wait...' log
						ResetDevice
						8000 wait

					]if
				] if
				
				InstVal InstallationValid ne [B
					'Clearing Intf Parameter Section...' log
					3 PIVar:TalkIntf.ClearInstancePar

					'Erasing INTF SW firmware sector...' log
					'Erasing INTF Tree firmware sector...' log
					2 EraseSWInstance
					
					'Downloading ' SWFile add log
					SWFile dup loadobj exch PackInst:DownloadHX3File
										
					'Downloading ' TreeFile add log
					TreeFile dup loadobj exch PackInst:DownloadHX2File
					
					'Updating UPID list...' log
					TalkIntf.UpdateUPIDList
					
					TalkIntf.GetResult 0 ne [B
					
						IntfSel /IntfSpecificSetup known [B
							IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG6' eq IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG61_SG62' eq or[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
						ResetDevice
						10000 wait
					] if
					
					'Default parameters...' log
					3 TalkIntf.SetInstanceDefPar

				][B
					/InstallSW
						Filename_file_SW Filename_read_SW ne
						CRC_file_SW CRC_drive_SW ne or def
					
					/InstallTr
						Filename_file_Tr Filename_read_Tr ne
						CRC_file_Tr CRC_drive_Tr ne or def
					
					InstallSW [B
						INTFInstallValidAddr InstallationInvalid WriteWordToElo
					
						'Erasing INTF SW firmware sector...' log
						12 EraseSWInstance
						
						'Downloading ' SWFile add log
						SWFile dup loadobj exch PackInst:DownloadHX3File
					][B
						'Download INTF SW firmware skipped. Already up to date...' log
					] ifelse

					InstallTr [B
						INTFInstallValidAddr InstallationInvalid WriteWordToElo
					
						'Clearing Intf Parameter Section...' log
						3 PIVar:TalkIntf.ClearInstancePar

						'Erasing INTF Tree firmware sector...' log
						102 EraseSWInstance
						
						'Downloading ' TreeFile add log
						TreeFile dup loadobj exch PackInst:DownloadHX2File
					
						'Updating UPID list...' log
						TalkIntf.UpdateUPIDList

						TalkIntf.GetResult 0 ne [B
						
							IntfSel /IntfSpecificSetup known [B
								IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG6' eq IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG61_SG62' eq or[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
							ResetDevice
							10000 wait
						] if
						
						'Default Intf parameters...' log
						3 TalkIntf.SetInstanceDefPar
						
					][B
						'Download INTF Tree firmware skipped. Already up to date...' log
					] ifelse
				] ifelse
				
				IntfSel /IntfSpecificSetup known [B

					IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG6' ne IntfSel.IntfSpecificSetup 'MIGenericSetup_NX_SG61_SG62' ne and[B
						/SpecificSetupName IntfSel.IntfSpecificSetup def
						#1 'IntfLoader:' SpecificSetupName add cvn exec
						/MissingFile exch def
						/Result exch def
					][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
					]ifelse
					
				] if
				
				
				
			] if
		] if
		
		[A /MissingFile /Result]
	]
	
	/EtherCATSetup_SG5_SG6 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		LoadFlag [B
			/ModuleType  $A3000000 ReadMemory def
			ModuleType $10 eq [B
				'Downloading ' ModuleParFile add log
				ModuleParFile dup loadobj exch PackInst:DownloadHX2File	
				/Value $A200068E ReadMemory def
				$A400001C Value WriteWordToElo
				/Value $A200068C ReadMemory def
				$A400001E Value WriteWordToElo
			]
			[B
				/Result #0 def 
				'Warning: EtherCAT module is not connected!' log
			] ifelse  
		] if
		[A /Result /MissingFile] 
	]
	
	/EtherCATSetup_SG7 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		LoadFlag [B
			'Downloading ' moduleparfile add log
			moduleparfile dup loadobj exch packinst:downloadhx2file
		] if
		[A /Result /MissingFile] 
	]
	
	/ProfiNetSetup_SG5 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def

		/ModuleParFile1 FilePath IntfSel.IntfDir add IntfSel.IntfModulePar1 add def
		ModuleParFile1 FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile1 def
		] if 
		%/ModuleParFile2 FilePath IntfSel.IntfDir add IntfSel.IntfModulePar2 add def
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		
		LoadFlag [B
			/ModuleType  			$A3000000 ReadMemory def
			/ModuleFWTypeAddress 	$A3000070 def
			/ModuleFWVersionAddress $A3000072 def
			/ModuleHWVersionAddress $A3000002 def
			/ModuleFWVersion		$0101 def
			/ModuleFWVersionErased	$FFFF def
			/ModuleFWVersionRead  	ModuleFWVersionAddress ReadMemory def

			ModuleType $70 eq [B

				/ModuleHWVersionRead  ModuleHWVersionAddress ReadMemory def

				/PN_Flash_CRCRead  	$C00001A2 ReadMemory def
				/PN_Flash_CRC 		$BC73 def
				% check CRC to decide if second part of PN FW has to be reloaded
				PN_Flash_CRCRead	PN_Flash_CRC ne [B
				
					ModuleFWVersionAddress ModuleFWVersionErased WriteWordToElo
					
						% Erase whole RT Flash with special bulkerase command
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $78 chr add $56 chr add $34 chr add $12 chr add TalkIntf.GenericCmd
						15000 wait
						ResetDevice
						15000 wait
					
						'Downloading ' ModuleParFile add log
						ModuleParFile dup loadobj exch PackInst:DownloadHX2file
						
					ModuleFWVersionAddress ModuleFWVersion WriteWordToElo
				] 
				[B
				
					ModuleHWVersionRead $00202 ge[B % Module Version >= V2RA
						% Erase the first 16 4k blocks  in the flash
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $00 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $10 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $20 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $30 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $40 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $50 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $60 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $70 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $80 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $90 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $A0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $B0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $C0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $D0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $E0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $F0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
					]if
				
					'Defaulting ' ModuleParFile1 add log
					ModuleParFile1 dup loadobj exch PackInst:DownloadHX2file
				] ifelse
			]
			[B
				/Result #0 def 
				'Warning: ProfiNet module is not connected!' log
			] ifelse  
		] if
		[A /Result /MissingFile] 
	]

	/ProfiNetSetup_SG6 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def

		/ModuleParFile1 FilePath IntfSel.IntfDir add IntfSel.IntfModulePar1 add def
		ModuleParFile1 FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile1 def
		] if 
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		
		LoadFlag [B
			/ModuleType  			$A3000000 ReadMemory def
			/ModuleFWTypeAddress 	$A3000070 def
			/ModuleFWVersionAddress $A3000072 def
			/ModuleHWVersionAddress $A3000002 def
			/ModuleFWVersion		$0101 def
			/ModuleFWVersionErased	$FFFF def
			/ModuleFWVersionRead  	ModuleFWVersionAddress ReadMemory def

			ModuleType $70 eq [B

				/ModuleHWVersionRead  ModuleHWVersionAddress ReadMemory def  

				/PN_Flash_CRCRead  	$900001A2 ReadMemory def 
				/PN_Flash_CRC 		$BC73 def
				% check CRC to decide if second part of PN FW has to be reloaded
				PN_Flash_CRCRead	PN_Flash_CRC ne [B
				
					ModuleFWVersionAddress ModuleFWVersionErased WriteWordToElo
					
						% Erase whole RT Flash with special bulkerase command
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $78 chr add $56 chr add $34 chr add $12 chr add TalkIntf.GenericCmd
						15000 wait
						ResetDevice
						15000 wait
					
						'Downloading ' ModuleParFile add log
						ModuleParFile dup loadobj exch PackInst:DownloadHX2file
						
					ModuleFWVersionAddress ModuleFWVersion WriteWordToElo
				] 
				[B
				
					ModuleHWVersionRead $00302 ge[B % Module Version >= V3RA
						% Erase the first 16 4k blocks  in the flash
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $00 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $10 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $20 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $30 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $40 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $50 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $60 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $70 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $80 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $90 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $A0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $B0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $C0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $D0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $E0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $A7 chr add $00 chr add $F0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
					]if
					
					'Defaulting ' ModuleParFile1 add log
					ModuleParFile1 dup loadobj exch PackInst:DownloadHX2file
					
				] ifelse
			]
			[B
				/Result #0 def 
				'Warning: ProfiNet module is not connected!' log
			] ifelse  
		] if
		[A /Result /MissingFile] 
	]

	/ProfiNetSetup_SG7 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def

		/ModuleParFile1 FilePath IntfSel.IntfDir add IntfSel.IntfModulePar1 add def
		ModuleParFile1 FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile1 def
		] if 
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		
		LoadFlag [B
			/ModuleFWVersionAddress $301062 def
			/ModuleFWVersion		$0101 def
			/ModuleFWVersionErased	$FFFF def
			/ModuleFWVersionRead  	ModuleFWVersionAddress ReadMemory def
			
			/DI_ProfinetonboardAddress	$D952 def
			/DI_Profinetonboard  		DI_ProfinetonboardAddress ReadMemory def 
			
			
				/PN_Flash_CRCRead  	$805E ReadMemory def 
				/PN_Flash_CRC 		$BC73 def
				% check CRC to decide if second part of PN FW has to be reloaded
				PN_Flash_CRCRead	PN_Flash_CRC ne [B
				
					ModuleFWVersionAddress ModuleFWVersionErased WriteWordToElo
					
						% Erase whole RT Flash with special bulkerase command
						$31 chr $66 chr add $66 chr add $66 chr add $78 chr add $56 chr add $34 chr add $12 chr add TalkIntf.GenericCmd
						15000 wait
						ResetDevice
						15000 wait
					
						'Downloading ' ModuleParFile add log
						ModuleParFile dup loadobj exch PackInst:DownloadHX2file	
						
					ModuleFWVersionAddress ModuleFWVersion WriteWordToElo
				] 
				[B
				
					DI_Profinetonboard $0041 ge[B % Profinetonboard DI-Block entry >= 0x41
						% Erase the first 16 4k blocks  in the flash
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $00 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $10 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $20 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $30 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $40 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $50 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $60 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $70 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $80 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $90 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $A0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $B0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $C0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $D0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $E0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
						$31 chr $66 chr add $66 chr add $66 chr add $00 chr add $F0 chr add $00 chr add $55 chr add TalkIntf.GenericCmd
						100 wait
					]if
					
					'Defaulting ' ModuleParFile1 add log
					ModuleParFile1 dup loadobj exch PackInst:DownloadHX2file
				] ifelse
				
		] if
		[A /Result /MissingFile] 
	]
	
	% special SG6 netx devices such as C1250-CC
	/MIGenericSetup_NX_SG6 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def
		
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def 
			/MissingFile ModuleParFile def
		] if 
		
		LoadFlag [B
			netX90Based[B
				IntfSel.IntfModulePar GetNetX90FWVersionFromFileName
			][B
				IntfSel.IntfModulePar GetNetX52FWVersionFromFileName
			] ifelse
			/ProtStackRevNumber exch def
			/ProtStackBuildVers exch def
			/ProtStackMinorVers exch def
			/ProtStackMajorVers exch def
			
			/ProtStackVersName IntfSel.ProtStackVersName uppercase def
			
			ProtStackMajorVers ProtStackMajorVersRead eq
			ProtStackMinorVers ProtStackMinorVersRead eq and
			ProtStackBuildVers ProtStackBuildVersRead eq and
			ProtStackRevNumber ProtStackRevNumberRead eq and 
			ProtStackVersName  ProtStackVersNameRead  eq and [B
				'Download netX firmware skipped. Already up to date...' log
				
				IntfSel /Name known [B
					IntfSel /Name 'NoChange' puts
				] if
			][B
				/ModuleTypeAddress 		$A3000000 def
				/ModuleHWVersionAddress $A3000002 def
				
				/ModuleHWVersion		$0201 def % latest HW Version: Version 2, No Revision
				
				/ModuleType  ModuleTypeAddress ReadMemory def
		
				% check Module Type
				ModuleType $90 eq[B
					/ModuleHWVersionRead  ModuleHWVersionAddress ReadMemory def
					
					% check HW module version
					ModuleHWVersionRead ModuleHWVersion ge[B
							'Erasing netX firmware sectors...' log
							% wait 250 ms between erase commands, to give switch some time to process eth frames received while erasing flash which is blocking
							$80900000 PackInst:EraseFlash
							250 wait
							$80940000 PackInst:EraseFlash
							250 wait
							$80980000 PackInst:EraseFlash
							250 wait
							$809C0000 PackInst:EraseFlash
							250 wait
					
							'Downloading ' ModuleParFile add log
							ModuleParFile dup loadobj exch PackInst:DownloadHX2file	
					][B
						/Result #0 def 
						'Warning: Wrong HW Module Version!' log
					] ifelse 
				]
				[B
					/Result #0 def 
					'Warning: Wrong HW Module Type connected!' log
				] ifelse 
			] ifelse
		] if
		
		[A /Result /MissingFile] 
	]
	
	%  SG6 MI netx devices
	/MIGenericSetup_NX_SG61_SG62 [P
		[A /LoadFlag ]
		/Result #1 def
		/MissingFile '' def
		
		/ModuleParFile FilePath IntfSel.IntfDir add IntfSel.IntfModulePar add def
		ModuleParFile FileExist not [B
			/Result #0 def
			/MissingFile ModuleParFile def
		] if
		
		LoadFlag [B
		
			netX90Based[B
				IntfSel.IntfModulePar GetNetX90FWVersionFromFileName
			][B
				IntfSel.IntfModulePar GetNetX52FWVersionFromFileName
			] ifelse
			/ProtStackRevNumber exch def
			/ProtStackBuildVers exch def
			/ProtStackMinorVers exch def
			/ProtStackMajorVers exch def
			
			/ProtStackVersName IntfSel.ProtStackVersName uppercase def
			
			ProtStackMajorVers ProtStackMajorVersRead eq
			ProtStackMinorVers ProtStackMinorVersRead eq and
			ProtStackBuildVers ProtStackBuildVersRead eq and
			ProtStackRevNumber ProtStackRevNumberRead eq and 
			ProtStackVersName  ProtStackVersNameRead  eq and [B
				'Download netX firmware skipped. Already up to date...' log
				
				IntfSel /Name known [B
					IntfSel /Name 'NoChange' puts
				] if
			][B
				'Erasing netX firmware sectors...' log
				% wait 250 ms between erase commands, to give switch some time to process eth frames received while erasing flash which is blocking
				$80900000 PackInst:EraseFlash
				250 wait
				$80940000 PackInst:EraseFlash
				250 wait
				$80980000 PackInst:EraseFlash
				250 wait
				$809C0000 PackInst:EraseFlash
				250 wait
			
				'Downloading ' ModuleParFile add log
				ModuleParFile dup loadobj exch PackInst:DownloadHX2file
			] ifelse
		] if
		
		[A /Result /MissingFile]
	]
]