#!/bin/bash DEVICE="/dev/ttyUSB0" BAUD=38400 PARITY="even" DATABITS=8 STOPBITS=1 SLAVE=1 START_REG=0 # Modbus address 1 = F000 END_REG=201 # F199 = start+199 OUTPUT_FILE="vfd_register_scan.csv" # Define register labels (all placeholders "Unknown") declare -A REG_LABELS for i in $(seq 0 199); do REG_LABELS[$i]="Unknown" done # Labels taken from H100 Manual REG_LABELS[0]="Parameter Locking" REG_LABELS[1]="Selection of Control Mode" REG_LABELS[2]="Frequuency Setting Selection" REG_LABELS[3]="Main Frequency" REG_LABELS[4]="Reference Frequency" REG_LABELS[5]="Maximum Operating Frequency" REG_LABELS[6]="Intermediate Frequency" REG_LABELS[7]="Starting Frequency" REG_LABELS[8]="Maximum Voltage " REG_LABELS[9]="Intermediate Voltage" REG_LABELS[10]="Booster Voltage of Low-Frequency Torque " REG_LABELS[11]="Lower Limit of Frequency " REG_LABELS[12]="Drive Control Mode " REG_LABELS[13]="Parameter Reset " REG_LABELS[14]="Acceleration Time I" REG_LABELS[15]="Decelaration Time I" REG_LABELS[16]="Acceleration Time II" REG_LABELS[17]="Decelaration Time II" REG_LABELS[18]="Acceleration Time III" REG_LABELS[19]="Decelaration Time III" REG_LABELS[20]="Acceleration Time IV (Jogging Acceleration Time)" REG_LABELS[21]="Decelaration Time IV (Jogging Deceleration Time)" REG_LABELS[22]="Emergency Stop Decelaration Time" REG_LABELS[23]="Reverse Prohibit" REG_LABELS[24]="Stop Key is Valid or Not" REG_LABELS[25]="Start Up Mode" REG_LABELS[26]="Stop Mode" REG_LABELS[27]="Forward and Reverse" REG_LABELS[28]="Stop Frequency" REG_LABELS[29]="DC Braking Time When Starting" REG_LABELS[30]="DC Braking Time When Stopping" REG_LABELS[31]="DC Braking Level" REG_LABELS[32]="Frequency Tracking Time" REG_LABELS[33]="Frequency Tracking Current Level" REG_LABELS[34]="Voltage Risting Time During Frequency Tracking" REG_LABELS[35]="% of Starting Voltage During Frequency Tracking" REG_LABELS[36]="Voltage Increment During Frequency Tracking" REG_LABELS[37]="Reserved" REG_LABELS[38]="Reserved" REG_LABELS[39]="Starting Frequency of DC Braking" REG_LABELS[40]="F / R Key Function Selection" REG_LABELS[41]="Carrier Frequency" REG_LABELS[42]="Jog Frequency" REG_LABELS[43]="S Curve Time" REG_LABELS[44]="X1 Terminal Function" REG_LABELS[45]="X2 Terminal Function" REG_LABELS[46]="X3 Terminal Function" REG_LABELS[47]="X4 Terminal Function" REG_LABELS[48]="X5 Terminal Function" REG_LABELS[49]="X6 Terminal Function" REG_LABELS[50]="Y1 Output Function" REG_LABELS[51]="Y2 Output Function" REG_LABELS[52]="Output Function of Terminals KA" REG_LABELS[53]="Output Function of Terminals FA, FB & FC" REG_LABELS[54]="A0 Output Function" REG_LABELS[55]="A0 Analogy Output" REG_LABELS[56]="Swing Frequency Amplitude" REG_LABELS[57]="Jump Amplitude" REG_LABELS[58]="Swing Frequency Cycle" REG_LABELS[59]="Swing Frequency Rise Time" REG_LABELS[60]="Frequency Consistency I" REG_LABELS[61]="Frequency Consistency" REG_LABELS[62]="Frequency Consistency Range" REG_LABELS[63]="Time I" REG_LABELS[64]="Monostable Pulse Width Setting" REG_LABELS[65]="Counter Reference Value" REG_LABELS[66]="Counter Mode Setting" REG_LABELS[67]="Positive and Negative Logic of Digital Input Terminal" REG_LABELS[68]="Digial Input Dithering Elimination Time" REG_LABELS[69]="PFI / PFO Maximum Frequency" REG_LABELS[70]="Input Channel Selection for Analog Quantity" REG_LABELS[71]="Filtering Time of Analog Quantity" REG_LABELS[72]="AI1 Channel Gain" REG_LABELS[73]="AI2 Channel Gain" REG_LABELS[74]="AI1 Channel Offset" REG_LABELS[75]="AI2 Channel Offset" REG_LABELS[76]="Reverse Selection for Negative Bias of Analog Quantity" REG_LABELS[77]="Memory Function Selection for UP & DOWN" REG_LABELS[78]="Increment Selection for UP & DOWN" REG_LABELS[79]="Increment Multiple for UP & DOWN" REG_LABELS[80]="Multi-Segmented Speed Mode Selection" REG_LABELS[81]="Running Mode Selection of Internally Controlled Multi-Semgment Speed" REG_LABELS[82]="Speed Runing Direction of First 8 Segments" REG_LABELS[83]="Speed Running Direction of Last 8 Segments" REG_LABELS[84]="Acceleration / Deceleration Time Selection for First 8 Segments" REG_LABELS[85]="Acceleration / Deceleration Time Selection for Last 8 Segments" REG_LABELS[86]="Frequency II Setting" REG_LABELS[87]="Frequency III Setting" REG_LABELS[88]="Frequency IV Setting" REG_LABELS[89]="Frequency V Setting" REG_LABELS[90]="Frequency VI Setting" REG_LABELS[91]="Frequency VII Setting" REG_LABELS[92]="Frequenccy VIII Setting" REG_LABELS[93]="Frequencey IX Setting" REG_LABELS[94]="Frequency X Setting" REG_LABELS[95]="Frequency XI Setting" REG_LABELS[96]="Frequency XII Setting" REG_LABELS[97]="Frequency XIII Setting" REG_LABELS[98]="Frequencey XIV Setting" REG_LABELS[99]="Frequencey XV Setting" REG_LABELS[100]="Frequency XVI Setting" REG_LABELS[101]="Timer I" REG_LABELS[102]="Timer II" REG_LABELS[103]="Timer III" REG_LABELS[104]="Timer IV" REG_LABELS[105]="Timer V" REG_LABELS[106]="Timer VI" REG_LABELS[107]="Timer VII" REG_LABELS[108]="Timer VIII" REG_LABELS[109]="Timer IX" REG_LABELS[110]="Timer X" REG_LABELS[111]="Timer XI" REG_LABELS[112]="Timer XII" REG_LABELS[113]="Timer XIII" REG_LABELS[114]="Timer XIV" REG_LABELS[115]="Timer XV" REG_LABELS[116]="Timer XVI" REG_LABELS[117]="Memory Function of Internally Controlled Multi-Segment Speed (UP / DOWN Power Down Reserve)" REG_LABELS[118]="Selection of Overvoltage Stall Prevention" REG_LABELS[119]="Stall Level During Acceleration" REG_LABELS[120]="Stall Level During Constant Speed" REG_LABELS[121]="Deceleration Time for Stall Prevention During Constant Speed" REG_LABELS[122]="Stall Level During Deceleration" REG_LABELS[123]="Selection of Over Torque Detection Method" REG_LABELS[124]="Over Torque Detection Level" REG_LABELS[125]="Over Torque Detection Time" REG_LABELS[126]="Counter Memory" REG_LABELS[127]="Pulse Counter Memory" REG_LABELS[128]="Cooling Fan Control" REG_LABELS[129]="Dynamic Braking Voltage" REG_LABELS[130]="Number of Auxiliary Pumps" REG_LABELS[131]="Continuous Operating Time of Auxiliary Pump" REG_LABELS[132]="Interlocking Time of Auxiliary Pump" REG_LABELS[133]="High-Speed Operating Time" REG_LABELS[134]="Low-Speed Operating Time" REG_LABELS[135]="Sleep Pressure Threshold" REG_LABELS[136]="Sleep Delay" REG_LABELS[137]="Wake-Up Threshold" REG_LABELS[138]="Sleep Frequency" REG_LABELS[139]="Wake-Up Delay" REG_LABELS[140]="Rated Power of Motor" REG_LABELS[141]="Rated Voltage of Motor" REG_LABELS[142]="Rated Current of Motor" REG_LABELS[143]="Number of Motor Poles" REG_LABELS[144]="Motor Rotating Speed" REG_LABELS[145]="Automatic Torque Compensation" REG_LABELS[146]="No-Load Current of Motor" REG_LABELS[147]="Motor Slip Compensation" REG_LABELS[148]="Max Frequency of Motor Slip Compensation" REG_LABELS[149]="Slip Compensation Filtering Time" REG_LABELS[150]="AVR Function" REG_LABELS[151]="Automatic Energy-Saving Function" REG_LABELS[152]="Fault Restart Time" REG_LABELS[153]="Power Failure Restart Selection" REG_LABELS[154]="Allowable Outage Duration" REG_LABELS[155]="Times of Fault Restart" REG_LABELS[156]="Proportional Constant (P)" REG_LABELS[157]="Integration Time (I)" REG_LABELS[158]="Derivation Time (D)" REG_LABELS[159]="Target Value" REG_LABELS[160]="PID Channel Setting" REG_LABELS[161]="PID Upper Limit" REG_LABELS[162]="PID Lower Limit" REG_LABELS[163]="Communication Address" REG_LABELS[164]="Communication Transmission Speed" REG_LABELS[165]="Communication Data Mode" REG_LABELS[166]="Reserve" REG_LABELS[167]="Reserve" REG_LABELS[168]="Reserve" REG_LABELS[169]="Given Deciman Point of Communication Frequency" REG_LABELS[170]="Selection of Displayed Content 1" REG_LABELS[171]="Selection of Displayed Content 2" REG_LABELS[172]="Fault Clearing" REG_LABELS[173]="Rated Voltage of Inverter" REG_LABELS[174]="Rated Current of Inverter" REG_LABELS[175]="Inverter Type" REG_LABELS[176]="Standard for Inverter Frequency" REG_LABELS[177]="Unexpected Error 1" REG_LABELS[178]="Unexpected Error 2" REG_LABELS[179]="Unexpected Error 3" REG_LABELS[180]="Unexpected Error 4" REG_LABELS[181]="Software Version No." REG_LABELS[182]="Running Time" REG_LABELS[183]="Cumulative Running Time" REG_LABELS[184]="Speed Display Coefficient" REG_LABELS[185]="Start Up Preset Display Selection" REG_LABELS[186]="PID Automatic Display Enable" REG_LABELS[187]="PID Display Selection" REG_LABELS[188]="Display Number Corresponding to PID" REG_LABELS[189]="Motor CPU Software" REG_LABELS[190]="Motor CPU Software" REG_LABELS[191]="Motor CPU Sofware" REG_LABELS[192]="Motor Oscillation Compensation Factor" REG_LABELS[193]="Output Open-Phase Protection" REG_LABELS[194]="0Hz Output Enable" REG_LABELS[195]="VF Separation Voltage Given Channel" REG_LABELS[196]="Acceleration and Deceleration Time of VF Separation Voltage" REG_LABELS[197]="Motor Reverse Operation Enable When PID Output Negative Value" REG_LABELS[198]="LSD Compensation Enable" REG_LABELS[199]="Keyboard UP.DOWN" REG_LABELS[200]="N/A" echo "Register,Label,Value" > "$OUTPUT_FILE" echo "Scanning VFD registers F000 to F199 on $DEVICE ..." for modbus_reg in $(seq $START_REG $END_REG); do # poll once (-1) and suppress extra verbose output output=$(mbpoll -1 -m rtu -a $SLAVE -b $BAUD -d $DATABITS -s $STOPBITS -P $PARITY -r $modbus_reg -c 1 "$DEVICE" 2>/dev/null) # parse value value=$(echo "$output" | grep "^\[$modbus_reg\]" | awk -F']' '{print $2}' | xargs) if [ -z "$value" ]; then value="INVALID / no response" fi # Map Modbus register to Fxxx label (offset by 1) f_index=$((modbus_reg - 1)) label=${REG_LABELS[$f_index]} echo "F$(printf "%03d" $f_index) ($label): $value" echo "F$(printf "%03d" $f_index),$label,$value" >> "$OUTPUT_FILE" sleep 0.2 done echo "Scan complete. Results saved to $OUTPUT_FILE"