#OnInit port = "COM10"; baudrate = 9600; bits = 8; parity = 0; stopbits = 1; addr = 1; flowcontrol = 0; debug = 1; response_size_max = 8; response_size_min = 6; divider_value = 1; ;============================================================================== #Modbus_HuanYang_VFD_control debug(str(" ",1),'BEGIN #Modbus_HuanYang_VFD_control'); .addr = 0x01; .fc = 0x03; .data_size = 0x01; .data = .arg1; ;print(.data); .payload = array_new(); array_setdata(.payload, 0, .addr, .fc, .data_size, .data); .crc = array_crc16(.payload, 0, -1); array_setdata16(.payload, -1, .crc); ;array_printdata(.payload); .rc = exec(.payload, .resp_size, '#Modbus_Write_Read_Data_VFD'); if(.rc != 0, exec(array_delete(.payload), return(-1))); array_delete(.payload); debug(str(" ",1),'END #Modbus_HuanYang_VFD_control'); return(0); ;============================================================================== #Modbus_Write_Read_Data_VFD debug(str(" ", 2),'BEGIN #Modbus_Write_Read_Data_VFD'); .payload = .arg1; ;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); array_clear(.payload); ;-------------------------------------------------------------------------- ;read array data serial_readarray(port, .payload, 100); debug(str(" ",2),'PRINT VFD parameter data'); ;array_printdata(.payload); ;check returned array data .rc = exec(.payload, .addr, .fc, '#Check_VFD_response_data'); if (.rc, exec(debug('Response check failed with error code: ', .rc), serial_close(port), return(-1))); ;print VFD param data ;exec(.payload, '#Print_VFD_Param_data'); serial_close(port); debug(str(" ", 2),'END #Modbus_Write_Read_Data_VFD'); return(0); ;============================================================================== #Check_VFD_response_data debug(str(" ", 3),'BEGIN #Check_VFD_response_data'); .hnd = .arg1; .addr = .arg2; .fc = .arg3; .size = array_size(.hnd); ;compare size with array size if ((array_size(.hnd) < response_size_min) || (array_size(.hnd) > response_size_max), exec(print("Buffer size: ", .size), 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(" ",3),'CRC OK: ', .crc2); ;compare addr with data from array if(.addr != array_getdata(.hnd, 0), return(-3)); debug(str(" ",3),'Address OK: ', .addr); ;compare fc with data from array if(.fc != array_getdata(.hnd, 1), return(-4)); debug(str(" ",3),'Function Code OK: ', .fc); debug(str(" ", 3),'END #Check_VFD_response_data'); return(0);