#OnInit port = "COM10"; baudrate = 9600; bits = 8; parity = 0; stopbits = 1; addr = 1; flowcontrol = 0; ;debug = 1; parameter_number = 0; response_size_max = 8; response_size_min = 6; file_delete("Huan_Yang_VFD_Parameters.txt"); ;============================================================================== #Modbus_HuanYang_VFD_Parameter_read debug('BEGIN #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 0; for(i = parameter_number, parameter_number <= 15, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 70; for(i = parameter_number, parameter_number <= 73, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 120; for(i = parameter_number, parameter_number <= 120, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 141; for(i = parameter_number, parameter_number <= 144, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 163; for(i = parameter_number, parameter_number <= 165, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); parameter_number = 174; for(i = parameter_number, parameter_number <= 174, parameter_number = parameter_number + 1, exec(parameter_number, '#Modbus_HuanYang_VFD_Parameter_read_scan')); debug('END #Modbus_HuanYang_VFD_Parameter_read'); return(0); ;============================================================================== #Modbus_HuanYang_VFD_Parameter_read_scan debug(str(" ",1),'BEGIN #Modbus_HuanYang_VFD_Parameter_read_scan'); .addr = 0x01; .fc = 0x01; .data_size = 0x03; .parameter_number = .arg1; .data = 0x0000; .payload = array_new(); array_setdata(.payload, 0, .addr, .fc, .data_size, .parameter_number); array_setdata16(.payload, -1,.data); .rc = exec(.payload, .resp_size, .parameter_number, '#Modbus_Write_Read_Data_VFD_param'); if(.rc != 0, exec(array_delete(.payload), return(-1))); array_delete(.payload); debug(str(" ",1),'END #Modbus_HuanYang_VFD_Parameter_read_scan'); ;============================================================================== #Modbus_Write_Read_Data_VFD_param debug(str(" ",3),'BEGIN #Modbus_Write_Read_Data_VFD_param'); .payload = .arg1; .parameter = .arg3; ;COM port init .rc = serial_open(port, baudrate, bits, parity, stopbits, flowcontrol); if(.rc != 0, exec(debug('COM port not available'), return(-1))); .addr = array_getdata(.payload, 0); .fc = array_getdata(.payload, 1); ;crc16 calculation .crc = array_crc16(.payload, 0, -1); ;set array data with crc array_setdata16(.payload, -1, .crc); ;send array data serial_writearray(port, .payload, 50); array_clear(.payload); ;-------------------------------------------------------------------------- ;read array data serial_readarray(port, .payload, 50); debug(str(" ",4),'PRINT VFD parameter data'); ;array_printdata(.payload); ;check returned array data .rc = exec(.payload, .addr, .fc, .parameter, '#Check_VFD_response_data_param'); if (.rc, exec(debug('response check failed with error code: ', .rc), serial_close(port), return(-1))); ;print VFD param data exec(.payload, .parameter, '#Response_data_processing_param'); serial_close(port); debug(str(" ",3),'END #Modbus_Write_Read_Data_VFD_param'); return(0); ;============================================================================== #Check_VFD_response_data_param debug(str(" ",5),'BEGIN #Check_VFD_response_data_param'); .hnd = .arg1; .addr = .arg2; .fc = .arg3; .parameter = .arg4; .size = array_size(.hnd); ;compare size with array size if ((array_size(.hnd) < response_size_min) || (array_size(.hnd) > response_size_max), return(-1)); ;read crc1 from data .crc1 = array_getdata16(.hnd, .size - 2); ;calc crc2 from data .crc2 = array_crc16(.hnd, 0, .size - 2); if(.crc1 != .crc2, return(-2)); debug(str(" ",6),'CRC OK: ', .crc2); ;compare addr with data from array if(.addr != array_getdata(.hnd, 0), return(-3)); debug(str(" ",6),'Address OK: ', .addr); ;compare fc with data from array if(.fc != array_getdata(.hnd, 1), return(-4)); debug(str(" ",6),'Function Code OK: ', .fc); debug(str(" ",5),'END #Check_VFD_response_data_param'); return(0); ;============================================================================== #Response_data_processing_param debug(str(" ",7),'BEGIN #Response_data_processing_param'); .payload = .arg1; .parameter_number = .arg2; .parameter = array_getdata(.payload, 2); .divider_value = 1; if(.parameter == 2, exec( .data = array_getdata(.payload, 4), ; if((.parameter_number == 142) || (.parameter_number == 70) || (.parameter_number == 143) || (.parameter_number == 146)|| (.parameter_number == 163)|| (.parameter_number == 164)|| (.parameter_number == 165), ; .divider_value = 1), if(.parameter_number == 145, .divider_value = 10), if(.parameter_number == 0,.paramname = "Parameter Lock"), if(.parameter_number == 1,.paramname = "Source of Run commands"), if(.parameter_number == 2,.paramname = "Source of operating frequency"), if(.parameter_number == 7,.paramname = "Min. Frequency"), if(.parameter_number == 10,.paramname = "Min. Voltage"), if(.parameter_number == 11,.paramname = "Frequency lower limit"), if(.parameter_number == 70,.paramname = "Analog Input"), if(.parameter_number == 73,.paramname = "Higher Analog Frequency"), if(.parameter_number == 120,.paramname = "Stall Prevention"), if(.parameter_number == 142,.paramname = "Rated Motor Current"), if(.parameter_number == 143,.paramname = "Motor Pole Number"), if(.parameter_number == 145,.paramname = "Auto torque Compensation"), if(.parameter_number == 146,.paramname = "Motor no-load current"), if(.parameter_number == 163,.paramname = "Communication Address"), if(.parameter_number == 164,.paramname = "Communication Baud Rate"), if(.parameter_number == 165,.paramname = "Communication Data Method"), if(.parameter_number == 174,.paramname = "Rated Current of Inverter"), if((.parameter_number == 142) || (.parameter_number == 174), .paramunits = "A"), if((.parameter_number == 8) || (.parameter_number == 9)|| (.parameter_number == 10) || (.parameter_number == 141), .paramunits = "Volts"), if((.parameter_number == 3) || (.parameter_number == 4)|| (.parameter_number == 5) || (.parameter_number == 6)|| (.parameter_number == 7)|| (.parameter_number == 11)|| (.parameter_number == 72)|| (.parameter_number == 73), .paramunits = "Hz"), if(.parameter_number == 144, .paramunits = "Volts"), if((.parameter_number == 14) || (.parameter_number == 15), .paramunits = "Seconds"), exec(parameter_number, .data, .divider_value, .paramname, .paramunits, '#Print_VFD_Param_data') ) ); if(.parameter == 3, exec( .hnd = array_new(), .data = array_getdata16(.payload, 4), array_setdata(.hnd, 0, .data >> 8), array_setdata(.hnd, -1, .data), .data = array_getdata16(.hnd, 0), array_delete(.hnd), ; if(.parameter_number == 144, ; .divider_value = 1), if((.parameter_number == 141) || (.parameter_number == 142) || (.parameter_number == 8)|| (.parameter_number == 9)|| (.parameter_number == 14)|| (.parameter_number == 15)|| (.parameter_number == 174)|| (.parameter_number == 163)|| (.parameter_number == 164)|| (.parameter_number == 165), .divider_value = 10), if((.parameter_number == 3) || (.parameter_number == 4)|| (.parameter_number == 5)|| (.parameter_number == 72)|| (.parameter_number == 6), .divider_value = 100), if(.parameter_number == 0,.paramname = "Parameter Lock"), if(.parameter_number == 1,.paramname = "source of Run commands"), if(.parameter_number == 2,.paramname = "Source of operating frequency"), if(.parameter_number == 3,.paramname = "Main Frequency"), if(.parameter_number == 4,.paramname = "Base Frequency"), if(.parameter_number == 5,.paramname = "Max Operating Frequency"), if(.parameter_number == 6,.paramname = "Intermediate Frequency"), if(.parameter_number == 7,.paramname = "Min. Frequency"), if(.parameter_number == 8,.paramname = "Max. Voltage"), if(.parameter_number == 9,.paramname = "Intermediate Voltage"), if(.parameter_number == 10,.paramname = "Min. Voltage"), if(.parameter_number == 11,.paramname = "Frequency lower limit"), if(.parameter_number == 14,.paramname = "Accel. Time 1"), if(.parameter_number == 15,.paramname = "Decel. Time 1"), if(.parameter_number == 72,.paramname = "Higher Analog Frequency"), if(.parameter_number == 73,.paramname = "Higher Analog Frequency"), if(.parameter_number == 120,.paramname = "Stall Prevention"), if(.parameter_number == 141,.paramname = "Rated Motor Voltage"), if(.parameter_number == 142,.paramname = "Rated Motor Current"), if(.parameter_number == 143,.paramname = "Motor Pole Number"), if(.parameter_number == 144,.paramname = "Rated Motor Revolution"), if(.parameter_number == 147,.paramname = "Motor Slip Compensation"), if(.parameter_number == 163,.paramname = "Communication Address"), if(.parameter_number == 164,.paramname = "Communication Baud Rate"), if(.parameter_number == 165,.paramname = "Communication Data Method"), if(.parameter_number == 174,.paramname = "Rated Current of Inverter"), if((.parameter_number == 142) || (.parameter_number == 174), .paramunits = "Ampere"), if((.parameter_number == 8) || (.parameter_number == 9)|| (.parameter_number == 10) || (.parameter_number == 141), .paramunits = "Volts"), if((.parameter_number == 3) || (.parameter_number == 4)|| (.parameter_number == 5) || (.parameter_number == 6)|| (.parameter_number == 7)|| (.parameter_number == 11)|| (.parameter_number == 72)|| (.parameter_number == 73), .paramunits = "Hz"), if(.parameter_number == 144, .paramunits = "RPM"), if((.parameter_number == 14) || (.parameter_number == 15), .paramunits = "Seconds"), exec(.parameter_number, .data, .divider_value, .paramname, .paramunits, '#Print_VFD_Param_data') ) ); debug(str(" ",7),'END #Response_data_processing_param'); ;============================================================================== #Print_VFD_Param_data debug(str(" ",7),'BEGIN #Print_VFD_Param_data'); if((.arg1 == 12) || (.arg1 == 13) || (.arg1 == 22) || (.arg1 == 71), return(0) ); .len = strlen(.arg4); print(str("*", 10), .arg4, str("*", (50 - (10 + .len)))); print("Value of parameter PD", .arg1 , " is " , .arg2 / .arg3 ," ", .arg5); print(str("*", 50)); fhnd = file_open("Huan_Yang_VFD_Parameters.txt"); file_append(fhnd, str("*",10),.arg4 ,str("*", (50 - (10 + .len))), "\n"); file_append(fhnd, "Value of parameter PD", .arg1 , " is " , .arg2 / .arg3 ," ", .arg5, "\n"); file_append(fhnd, str("*", 50), "\n\n\n"); file_flush(fhnd); file_close(fhnd); debug(str(" ",7),'BEGIN #END_VFD_Param_data'); ;============================================================================== #Swap .data = .arg1; .res = (.data >> 8)+(.data << 8); return(.res);