my_parser . add_argument ( '-i' , '--ipaddress' , action = 'store' , type = str , required = True , help = 'Input IP Address' ) my_parser . add_argument ( '-p' , '--port' , action = 'store' , type = int , required = False , help = 'Port Number' , default = 502 ) my_parser . add_argument ( '-r' , '--range' , action = 'store' , type = int , required = False , default =[ 1 - 500 ], dest = 'range' , help = 'Define the range. Default is 1-500' , nargs = 2 ) my_parser . add_argument ( '-t' , '--timeout' , action = 'store' , type = int , required = False , help = 'Timeout' , default = 10 ) my_parser . add_argument ( '-ro' , '--read' , action = 'store_true' , required = False , help = 'enable read-only mode' ) args = my_parser . parse_args () ip_addr = args . ipaddress port = args . port if args . read : print ( "[+] read only mode enabled" ) #Create workbook to save the result wb = Workbook () #Coils - valid and Data [Read and Write] print ( "******************************" ) print ( "Reading Coils Status - 0x01" ) coil_valid_list , coil_data_list , coil_permission_list = read_valid_registers ( ip_addr , port , "coil" , args . range [ 0 ], args . range [ 1 ], args . timeout ) #Function Code - 0x01 if coil_data_list : print ( "Writing Coil Status - 0x05" ) write_coil_valid_list , write_coil_data_list , coil_permission_list = write_single_coil_regiser ( ip_addr , port , coil_valid_list , coil_permission_list ) #Function Code - 0x05 if args . read == False : if coil_data_list : print ( "Writing Coil Status - 0x05" ) write_coil_valid_list , write_coil_data_list , coil_permission_list = write_single_coil_regiser ( ip_addr , port , coil_valid_list , coil_permission_list ) #Function Code - 0x05 else : print ( "No valid Register Found to do Write Operation" ) else : print ( "No valid Register Found to do Write Operation" ) #print_details(coil_valid_list,coil_data_list,"Read") wb = write_to_excel ( wb , "Coil" , coil_valid_list , coil_data_list , coil_permission_list , 0 ) print ( "******************************" ) print ( "Reading Holding Registers - 0x03" ) hold_valid_list , hold_data_list , hold_permission_list = read_valid_registers ( ip_addr , port , "hold" , args . range [ 0 ], args . range [ 1 ], args . timeout ) #Function Code - 0x03 #print_details(hold_valid_list,hold_data_list,"Read") if hold_data_list : print ( "Writing Holding Status - 0x06" ) write_hold_valid_list , write_hold_data_list , hold_permission_list = write_single_hold_regiser ( ip_addr , port , hold_valid_list , hold_permission_list ) #Function Code - 0x06 else : print ( "No valid Register Found to do Write Operation" ) if args . read == False : if hold_data_list : print ( "Writing Holding Status - 0x06" ) write_hold_valid_list , write_hold_data_list , hold_permission_list = write_single_hold_regiser ( ip_addr , port , hold_valid_list , hold_permission_list ) #Function Code - 0x06 else : print ( "No valid Register Found to do Write Operation" ) wb = write_to_excel ( wb , "Holding_Register" , hold_valid_list , hold_data_list , hold_permission_list , 40000 )