JK BMS RS485 general protocol V1.1 Modbus register map

Modbus RTU over RS485 protocol of JK BMS (JIKONG, Chengdu Jikong Technology) battery management systems. The document is a general protocol and does not list product models; the vendor's download page names V1.0 for firmware V11.36. It defines four register blocks: settings at 0x1000, live data at 0x1200, device information at 0x1400 and write only commands at 0x1600. Per-cell values, protection thresholds, alarms, SOC and capacity are listed. The document also lists the per-cell connection and balance wire resistance registers, the protocol selection registers and the voltage and current calibration commands, but this file leaves them out.

Protocol
Modbus RTU over RS485
Defaults
115200 baud, 8 data bits, no parity, 1 stop bit; slave addresses 1 to 247; function codes 03H (read registers) and 10H (write registers) (p. 3). The slave address is held in the DevAddr setting.
Addresses in the manual
0-based protocol addresses, as sent on the wire
32 and 64-bit values
High word first (AB CD)
Registers listed
125
Checked against
Document 'Jikong BMS RS485 Modbus general protocol (V1.1)', Chengdu Jikong Technology Co., Ltd, dated 2024.02, revision record V1.1 2024.01 (fixes some errors and adds registers), 15 pages. The vendor hosts this document on its own site at http://www.jk-bms.com/Upload/2024-02-21/1345398693.pdf (http only, the https form did not respond). The linked https copy is hosted by JKVOLT (jkvolt.com, which describes itself as an authorized JK BMS distributor operated by Chengdu JK Volt Technology Co., Ltd.) on its download center page, served from the Shopify CDN. The two files are byte-identical (same SHA-256, b9b3f1e4...d22739), and a third copy on the jkbms.net downloads archive is also identical. Field names are in English and descriptions are Chinese, so labels here are translations; the document field name is given in every note.

Address base. The document gives each register as a block base address (0x1000, 0x1200, 0x1400, 0x1600) plus an Index (offset) printed in hex and decimal, with the Length column in bytes (UINT16 is 2, UINT32 is 4), so the offset is a byte offset. This file lists base plus offset converted to decimal. The worked write examples on p. 14 to 15 confirm that the wire address is base plus the byte offset: the 32-bit setting at offset 0x0004 is written with function 10H to address 0x1004 with a register quantity of 2 and 4 data bytes, and the next 32-bit setting is written to 0x1008. So 32-bit values are 4 apart and 16-bit live values are 2 apart, while the quantity counts 16-bit registers (length in bytes divided by 2). Addresses between the listed ones, such as 0x1002, are not defined by the document. The document has no read example for the 0x1200, 0x1400 or 0x1600 blocks; reading with function 03H at base plus byte offset and a quantity of length divided by 2 is inferred from the write examples, so confirm on the device that reading address 0x1200 with quantity 2 returns the first two cell voltages. Address 4096 in the manual is address 4096 on the wire.

Word order. The write examples on p. 14 show the 32-bit value 3540 (3.54 V, VolSmartSleep) sent as 00 00 0D D4, and -250 (0.1 degC units) as FF FF FF 06, so the high word comes first. The document gives no example for float values.

Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.

Downloads

The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.

Registers

125 registers
Manual Wire Register Type Regs Unit Scale Access Area
4096 4096 Voltage to enter smart sleepSmart_Sleep_Voltage · Document field VolSmartSleep, block 0x1000 offset 0x0000. uint32 2 mV 1 RW Holding (FC03)
4100 4100 Cell undervoltage protectionCell_Undervoltage_Protection · Document field VolCellUV, block 0x1000 offset 0x0004. uint32 2 mV 1 RW Holding (FC03)
4104 4104 Cell undervoltage protection recoveryCell_Undervoltage_Recovery · Document field VolCellUVPR, block 0x1000 offset 0x0008. uint32 2 mV 1 RW Holding (FC03)
4108 4108 Cell overcharge protection voltageCell_Overcharge_Protection · Document field VolCellOV, block 0x1000 offset 0x000C. uint32 2 mV 1 RW Holding (FC03)
4112 4112 Cell overcharge protection recovery voltageCell_Overcharge_Recovery · Document field VolCellOVPR, block 0x1000 offset 0x0010. uint32 2 mV 1 RW Holding (FC03)
4116 4116 Cell voltage difference that triggers balancingBalance_Trigger_Difference · Document field VolBalanTrig, block 0x1000 offset 0x0014. uint32 2 mV 1 RW Holding (FC03)
4120 4120 SOC 100% voltageSoc_100_Voltage · Document field VolSOC100%, block 0x1000 offset 0x0018. uint32 2 mV 1 RW Holding (FC03)
4124 4124 SOC 0% voltageSoc_0_Voltage · Document field VolSOC0%, block 0x1000 offset 0x001C. uint32 2 mV 1 RW Holding (FC03)
4128 4128 Recommended charge voltageRecommended_Charge_Voltage · Document field VolCellRCV, block 0x1000 offset 0x0020. Added in V1.1 of the document. uint32 2 mV 1 RW Holding (FC03)
4132 4132 Float charge voltageFloat_Charge_Voltage · Document field VolCellRFV, block 0x1000 offset 0x0024. Added in V1.1 of the document. uint32 2 mV 1 RW Holding (FC03)
4136 4136 Automatic shutdown voltageAuto_Shutdown_Voltage · Document field VolSysPwrOff, block 0x1000 offset 0x0028. uint32 2 mV 1 RW Holding (FC03)
4140 4140 Continuous charge currentContinuous_Charge_Current · Document field CurBatCOC, block 0x1000 offset 0x002C. uint32 2 mA 1 RW Holding (FC03)
4144 4144 Charge overcurrent protection delayCharge_Overcurrent_Delay · Document field TIMBatCOCPDly, block 0x1000 offset 0x0030. uint32 2 s 1 RW Holding (FC03)
4148 4148 Charge overcurrent protection release delayCharge_Overcurrent_Release_Delay · Document field TIMBatCOCPRDly, block 0x1000 offset 0x0034. uint32 2 s 1 RW Holding (FC03)
4152 4152 Continuous discharge currentContinuous_Discharge_Current · Document field CurBatDcOC, block 0x1000 offset 0x0038. uint32 2 mA 1 RW Holding (FC03)
4156 4156 Discharge overcurrent protection delayDischarge_Overcurrent_Delay · Document field TIMBatDcOCPDly, block 0x1000 offset 0x003C. uint32 2 s 1 RW Holding (FC03)
4160 4160 Discharge overcurrent protection release delayDischarge_Overcurrent_Release_Delay · Document field TIMBatDcOCPRDly, block 0x1000 offset 0x0040. uint32 2 s 1 RW Holding (FC03)
4164 4164 Short circuit protection release delayShort_Circuit_Release_Delay · Document field TIMBatSCPRDly, block 0x1000 offset 0x0044. uint32 2 s 1 RW Holding (FC03)
4168 4168 Maximum balance currentMax_Balance_Current · Document field CurBalanMax, block 0x1000 offset 0x0048. uint32 2 mA 1 RW Holding (FC03)
4172 4172 Charge over-temperature protectionCharge_Overtemperature_Protection · Document field TMPBatCOT, block 0x1000 offset 0x004C. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4176 4176 Charge over-temperature recoveryCharge_Overtemperature_Recovery · Document field TMPBatCOTPR, block 0x1000 offset 0x0050. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4180 4180 Discharge over-temperature protectionDischarge_Overtemperature_Protection · Document field TMPBatDcOT, block 0x1000 offset 0x0054. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4184 4184 Discharge over-temperature recoveryDischarge_Overtemperature_Recovery · Document field TMPBatDcOTPR, block 0x1000 offset 0x0058. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4188 4188 Charge low-temperature protectionCharge_Undertemperature_Protection · Document field TMPBatCUT, block 0x1000 offset 0x005C. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4192 4192 Charge low-temperature recoveryCharge_Undertemperature_Recovery · Document field TMPBatCUTPR, block 0x1000 offset 0x0060. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4196 4196 MOS over-temperature protectionMos_Overtemperature_Protection · Document field TMPMosOT, block 0x1000 offset 0x0064. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4200 4200 MOS over-temperature protection recoveryMos_Overtemperature_Recovery · Document field TMPMosOTPR, block 0x1000 offset 0x0068. Document unit 0.1 degC. int32 2 degC 0.1 RW Holding (FC03)
4204 4204 Number of cellsCell_Count · Document field CellCount, block 0x1000 offset 0x006C. The document prints the unit as the Chinese character for series (cells in series). uint32 2 1 RW Holding (FC03)
4208 4208 Charge switchCharge_Enable · Document field BatChargeEN, block 0x1000 offset 0x0070. 1: on; 0: off. uint32 2 1 RW Holding (FC03)
4212 4212 Discharge switchDischarge_Enable · Document field BatDisChargeEN, block 0x1000 offset 0x0074. 1: on; 0: off. uint32 2 1 RW Holding (FC03)
4216 4216 Balance switchBalance_Enable · Document field BalanEN, block 0x1000 offset 0x0078. 1: on; 0: off. uint32 2 1 RW Holding (FC03)
4220 4220 Battery design capacityBattery_Design_Capacity · Document field CapBatCell, block 0x1000 offset 0x007C. Document unit mAH. uint32 2 mAh 1 RW Holding (FC03)
4224 4224 Short circuit protection delayShort_Circuit_Delay · Document field SCPDelay, block 0x1000 offset 0x0080. uint32 2 us 1 RW Holding (FC03)
4228 4228 Balance start voltageBalance_Start_Voltage · Document field VolStartBalan, block 0x1000 offset 0x0084. uint32 2 mV 1 RW Holding (FC03)
4360 4360 Device address (slave address)Device_Address · Document field DevAddr, block 0x1000 offset 0x0108. The document prints the unit as H. Slave addresses 1 to 247 are allowed (p. 3). uint32 2 1 RW Holding (FC03)
4364 4364 Discharge precharge timeDischarge_Precharge_Time · Document field TIMProdischarge, block 0x1000 offset 0x010C. uint32 2 s 1 RW Holding (FC03)
4372 4372 Settings flag bitsSetting_Flags · Document fields at block 0x1000 offset 0x0114. Bit field. BIT0 HeatEN heating switch; BIT1 Disable temp-sensor; BIT2 GPS Heartbeat; BIT3 Port Switch (1: RS485, 0: CAN); BIT4 LCD Always On; BIT5 Special Charger; BIT6 SmartSleep; BIT7 DisablePCLModule; BIT8 TimedStoredData; BIT9 ChargingFloatMode. Each bit is 1: on, 0: off except BIT3. BIT7 to BIT9 were added in V1.1 of the document. bitfield16 1 1 RW Holding (FC03)
4608 4608 Cell voltage, index 0Cell_Voltage_0 · Document field CellVol0, block 0x1200 offset 0x0000. uint16 1 mV 1 R Holding (FC03)
4610 4610 Cell voltage, index 1Cell_Voltage_1 · Document field CellVol1, block 0x1200 offset 0x0002. uint16 1 mV 1 R Holding (FC03)
4612 4612 Cell voltage, index 2Cell_Voltage_2 · Document field CellVol2, block 0x1200 offset 0x0004. uint16 1 mV 1 R Holding (FC03)
4614 4614 Cell voltage, index 3Cell_Voltage_3 · Document field CellVol3, block 0x1200 offset 0x0006. uint16 1 mV 1 R Holding (FC03)
4616 4616 Cell voltage, index 4Cell_Voltage_4 · Document field CellVol4, block 0x1200 offset 0x0008. uint16 1 mV 1 R Holding (FC03)
4618 4618 Cell voltage, index 5Cell_Voltage_5 · Document field CellVol5, block 0x1200 offset 0x000A. uint16 1 mV 1 R Holding (FC03)
4620 4620 Cell voltage, index 6Cell_Voltage_6 · Document field CellVol6, block 0x1200 offset 0x000C. uint16 1 mV 1 R Holding (FC03)
4622 4622 Cell voltage, index 7Cell_Voltage_7 · Document field CellVol7, block 0x1200 offset 0x000E. uint16 1 mV 1 R Holding (FC03)
4624 4624 Cell voltage, index 8Cell_Voltage_8 · Document field CellVol8, block 0x1200 offset 0x0010. uint16 1 mV 1 R Holding (FC03)
4626 4626 Cell voltage, index 9Cell_Voltage_9 · Document field CellVol9, block 0x1200 offset 0x0012. uint16 1 mV 1 R Holding (FC03)
4628 4628 Cell voltage, index 10Cell_Voltage_10 · Document field CellVol10, block 0x1200 offset 0x0014. uint16 1 mV 1 R Holding (FC03)
4630 4630 Cell voltage, index 11Cell_Voltage_11 · Document field CellVol11, block 0x1200 offset 0x0016. uint16 1 mV 1 R Holding (FC03)
4632 4632 Cell voltage, index 12Cell_Voltage_12 · Document field CellVol12, block 0x1200 offset 0x0018. uint16 1 mV 1 R Holding (FC03)
4634 4634 Cell voltage, index 13Cell_Voltage_13 · Document field CellVol13, block 0x1200 offset 0x001A. uint16 1 mV 1 R Holding (FC03)
4636 4636 Cell voltage, index 14Cell_Voltage_14 · Document field CellVol14, block 0x1200 offset 0x001C. uint16 1 mV 1 R Holding (FC03)
4638 4638 Cell voltage, index 15Cell_Voltage_15 · Document field CellVol15, block 0x1200 offset 0x001E. uint16 1 mV 1 R Holding (FC03)
4640 4640 Cell voltage, index 16Cell_Voltage_16 · Document field CellVol16, block 0x1200 offset 0x0020. uint16 1 mV 1 R Holding (FC03)
4642 4642 Cell voltage, index 17Cell_Voltage_17 · Document field CellVol17, block 0x1200 offset 0x0022. uint16 1 mV 1 R Holding (FC03)
4644 4644 Cell voltage, index 18Cell_Voltage_18 · Document field CellVol18, block 0x1200 offset 0x0024. uint16 1 mV 1 R Holding (FC03)
4646 4646 Cell voltage, index 19Cell_Voltage_19 · Document field CellVol19, block 0x1200 offset 0x0026. uint16 1 mV 1 R Holding (FC03)
4648 4648 Cell voltage, index 20Cell_Voltage_20 · Document field CellVol20, block 0x1200 offset 0x0028. uint16 1 mV 1 R Holding (FC03)
4650 4650 Cell voltage, index 21Cell_Voltage_21 · Document field CellVol21, block 0x1200 offset 0x002A. uint16 1 mV 1 R Holding (FC03)
4652 4652 Cell voltage, index 22Cell_Voltage_22 · Document field CellVol22, block 0x1200 offset 0x002C. uint16 1 mV 1 R Holding (FC03)
4654 4654 Cell voltage, index 23Cell_Voltage_23 · Document field CellVol23, block 0x1200 offset 0x002E. uint16 1 mV 1 R Holding (FC03)
4656 4656 Cell voltage, index 24Cell_Voltage_24 · Document field CellVol24, block 0x1200 offset 0x0030. uint16 1 mV 1 R Holding (FC03)
4658 4658 Cell voltage, index 25Cell_Voltage_25 · Document field CellVol25, block 0x1200 offset 0x0032. uint16 1 mV 1 R Holding (FC03)
4660 4660 Cell voltage, index 26Cell_Voltage_26 · Document field CellVol26, block 0x1200 offset 0x0034. uint16 1 mV 1 R Holding (FC03)
4662 4662 Cell voltage, index 27Cell_Voltage_27 · Document field CellVol27, block 0x1200 offset 0x0036. uint16 1 mV 1 R Holding (FC03)
4664 4664 Cell voltage, index 28Cell_Voltage_28 · Document field CellVol28, block 0x1200 offset 0x0038. uint16 1 mV 1 R Holding (FC03)
4666 4666 Cell voltage, index 29Cell_Voltage_29 · Document field CellVol29, block 0x1200 offset 0x003A. uint16 1 mV 1 R Holding (FC03)
4668 4668 Cell voltage, index 30Cell_Voltage_30 · Document field CellVol30, block 0x1200 offset 0x003C. uint16 1 mV 1 R Holding (FC03)
4670 4670 Cell voltage, index 31Cell_Voltage_31 · Document field CellVol31, block 0x1200 offset 0x003E. uint16 1 mV 1 R Holding (FC03)
4672 4672 Cell presence bitsCell_Presence · Document field CellSta, block 0x1200 offset 0x0040. Bit n is 1 when cell n is present. uint32 2 1 R Holding (FC03)
4676 4676 Average cell voltageCell_Voltage_Average · Document field CellVolAve, block 0x1200 offset 0x0044. uint16 1 mV 1 R Holding (FC03)
4678 4678 Maximum cell voltage differenceCell_Voltage_Max_Difference · Document field CellVdifMax, block 0x1200 offset 0x0046. uint16 1 mV 1 R Holding (FC03)
4746 4746 Power board temperaturePower_Board_Temperature · Document field TempMos, block 0x1200 offset 0x008A. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4748 4748 Balance wire resistance alarm bitsBalance_Wire_Alarm_Bits · Document field CellWireResSta, block 0x1200 offset 0x008C. Bit n is 1 when the balance wire of cell n is in alarm. uint32 2 1 R Holding (FC03)
4752 4752 Battery total voltageBattery_Voltage · Document field BatVol, block 0x1200 offset 0x0090. uint32 2 mV 1 R Holding (FC03)
4756 4756 Battery powerBattery_Power · Document field BatWatt, block 0x1200 offset 0x0094. Unsigned type as printed; the document does not describe a sign convention. uint32 2 mW 1 R Holding (FC03)
4760 4760 Battery currentBattery_Current · Document field BatCurrent, block 0x1200 offset 0x0098. The document does not describe which current direction is positive. int32 2 mA 1 R Holding (FC03)
4764 4764 Battery temperature sensor 1Battery_Temperature_1 · Document field TempBat 1, block 0x1200 offset 0x009C. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4766 4766 Battery temperature sensor 2Battery_Temperature_2 · Document field TempBat 2, block 0x1200 offset 0x009E. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4768 4768 Alarm bitsAlarm_Bits · Document field Alarm, block 0x1200 offset 0x00A0. Each bit is 1: fault, 0: normal. BIT0 AlarmWireRes (balance wire resistance too large); BIT1 AlarmMosOTP (MOS over-temperature protection); BIT2 AlarmCellQuantity (cell count differs from the setting); BIT3 AlarmCurSensorErr (current sensor error); BIT4 AlarmCellOVP (cell overvoltage); BIT5 AlarmBatOVP (battery overvoltage); BIT6 AlarmChOCP (charge overcurrent); BIT7 AlarmChSCP (charge short circuit); BIT8 AlarmChOTP (charge over-temperature); BIT9 AlarmChUTP (charge low temperature); BIT10 AlarmCPUAuxCommuErr (internal communication error); BIT11 AlarmCellUVP (cell undervoltage); BIT12 AlarmBatUVP (battery undervoltage); BIT13 AlarmDchOCP (discharge overcurrent); BIT14 AlarmDchSCP (discharge short circuit); BIT15 AlarmDchOTP (discharge over-temperature); BIT16 AlarmChargeMOS (charge MOSFET error); BIT17 AlarmDischargeMOS (discharge MOSFET error); BIT18 GPSDisconneted (GPS disconnected); BIT19 Modify PWD. in time (modify the authorization password); BIT20 Discharge On Failed; BIT21 Battery Over Temp Alarm. V1.1 also lists Temperature sensor anomaly and PLCModule anomaly after BIT21 without bit numbers. uint32 2 1 R Holding (FC03)
4772 4772 Balance currentBalance_Current · Document field BalanCurrent, block 0x1200 offset 0x00A4. int16 1 mA 1 R Holding (FC03)
4776 4776 Remaining capacityRemaining_Capacity · Document field SOCCapRemain, block 0x1200 offset 0x00A8. Document unit mAH. int32 2 mAh 1 R Holding (FC03)
4780 4780 Actual battery capacityFull_Charge_Capacity · Document field SOCFullChargeCap, block 0x1200 offset 0x00AC. Document unit mAH. uint32 2 mAh 1 R Holding (FC03)
4784 4784 Cycle countCycle_Count · Document field SOCCycleCount, block 0x1200 offset 0x00B0. The document prints the unit as the Chinese character for times. uint32 2 1 R Holding (FC03)
4788 4788 Total cycle capacityCycle_Capacity · Document field SOCCycleCap, block 0x1200 offset 0x00B4. Document unit mAH. uint32 2 mAh 1 R Holding (FC03)
4794 4794 User level alarm wordUser_Alarm · Document field UserAlarm, block 0x1200 offset 0x00BA. The document does not describe the bits. uint16 1 1 R Holding (FC03)
4796 4796 Run timeRun_Time · Document field RunTime, block 0x1200 offset 0x00BC. uint32 2 s 1 R Holding (FC03)
4802 4802 User level alarm word 2User_Alarm_2 · Document field UserAlarm2, block 0x1200 offset 0x00C2. The document does not describe the bits. uint16 1 1 R Holding (FC03)
4804 4804 Discharge overcurrent protection release timeDischarge_Overcurrent_Release_Time · Document field TimeDcOCPR, block 0x1200 offset 0x00C4. uint16 1 s 1 R Holding (FC03)
4806 4806 Discharge short circuit protection release timeDischarge_Short_Circuit_Release_Time · Document field TimeDcSCPR, block 0x1200 offset 0x00C6. uint16 1 s 1 R Holding (FC03)
4808 4808 Charge overcurrent protection release timeCharge_Overcurrent_Release_Time · Document field TimeCOCPR, block 0x1200 offset 0x00C8. uint16 1 s 1 R Holding (FC03)
4810 4810 Charge short circuit protection release timeCharge_Short_Circuit_Release_Time · Document field TimeCSCPR, block 0x1200 offset 0x00CA. uint16 1 s 1 R Holding (FC03)
4812 4812 Cell undervoltage protection release timeCell_Undervoltage_Release_Time · Document field TimeUVPR, block 0x1200 offset 0x00CC. uint16 1 s 1 R Holding (FC03)
4814 4814 Cell overvoltage protection release timeCell_Overvoltage_Release_Time · Document field TimeOVPR, block 0x1200 offset 0x00CE. uint16 1 s 1 R Holding (FC03)
4820 4820 Emergency switch timeEmergency_Switch_Time · Document field TimeEmergency, block 0x1200 offset 0x00D4. uint16 1 s 1 R Holding (FC03)
4822 4822 Discharge current correction factorDischarge_Current_Correction · Document field BatDisCurCorrect, block 0x1200 offset 0x00D6. V1.0 of the document names this field BatCurCorrect. uint16 1 1 R Holding (FC03)
4824 4824 Charge current sensor voltageCharge_Current_Sensor_Voltage · Document field VolChargCur, block 0x1200 offset 0x00D8. uint16 1 mV 1 R Holding (FC03)
4826 4826 Discharge current sensor voltageDischarge_Current_Sensor_Voltage · Document field VolDischargCur, block 0x1200 offset 0x00DA. uint16 1 mV 1 R Holding (FC03)
4828 4828 Battery voltage correction factorBattery_Voltage_Correction · Document field BatVolCorrect, block 0x1200 offset 0x00DC. Printed type FLOAT, length 4. The document does not show the word order of floats. float32 2 1 R Holding (FC03)
4836 4836 Battery voltage (16-bit)Battery_Voltage_Small · Document field BatVol, block 0x1200 offset 0x00E4. A second BatVol field, distinct from the 32-bit mV value at 0x1290. Document unit 0.01V. uint16 1 V 0.01 R Holding (FC03)
4838 4838 Heating currentHeating_Current · Document field HeatCurrent, block 0x1200 offset 0x00E6. int16 1 mA 1 R Holding (FC03)
4848 4848 System run ticksSystem_Ticks · Document field SysRunTicks, block 0x1200 offset 0x00F0. Document unit 0.1S. uint32 2 s 0.1 R Holding (FC03)
4856 4856 Battery temperature sensor 3Battery_Temperature_3 · Document field TempBat 3, block 0x1200 offset 0x00F8. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4858 4858 Battery temperature sensor 4Battery_Temperature_4 · Document field TempBat 4, block 0x1200 offset 0x00FA. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4860 4860 Battery temperature sensor 5Battery_Temperature_5 · Document field TempBat 5, block 0x1200 offset 0x00FC. Document unit 0.1 degC. int16 1 degC 0.1 R Holding (FC03)
4864 4864 RTC counterRtc_Ticks · Document field RTCTicks, block 0x1200 offset 0x0100. The document says the counter starts from 2020-1-1 and does not print a unit. uint32 2 1 R Holding (FC03)
4872 4872 Time to enter sleepTime_Enter_Sleep · Document field TimeEnterSleep, block 0x1200 offset 0x0108. uint32 2 s 1 R Holding (FC03)
4680 4680 Cell numbers with maximum and minimum voltageMax_Min_Cell_Numbers · Block 0x1200 offset 0x0048 is a 2-byte slot holding two UINT8 fields, listed in the document in this order: MaxVolCellNbr then MinVolCellNbr. The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4774 4774 Balance state and state of chargeBalance_State_And_Soc · Block 0x1200 offset 0x00A6 is a 2-byte slot holding two UINT8 fields, listed in the document in this order: BalanSta (2: discharge; 1: charge; 0: off) then SOCStateOfcharge (state of charge). The unit column prints % on the BalanSta line, but BalanSta is a state code, so the % most likely belongs to the state of charge; the table layout does not make this explicit. The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4792 4792 State of health and precharge stateSoh_And_Precharge · Block 0x1200 offset 0x00B8 is a 2-byte slot holding two UINT8 fields, listed in the document in this order: SOCSOH (state of health, unit %) then Precharge (1: on; 0: off). The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4800 4800 Charge and discharge stateCharge_And_Discharge_State · Block 0x1200 offset 0x00C0 is a 2-byte slot holding two UINT8 fields, listed in the document in this order: Charge (1: on; 0: off) then Discharge (1: on; 0: off). The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4816 4816 Temperature sensor presence flags and heating stateTemp_Sensor_Flags_And_Heating · Block 0x1200 offset 0x00D0 is a 2-byte slot holding two UINT8 fields, listed in the document in this order: a flag byte (BIT0 MOS TempSensorAbsent; BIT1 to BIT5 BATTempSensor1Absent to BATTempSensor5Absent, BIT3 is sensor 3; for the battery sensor bits the document prints 1: normal, 0: missing), then Heating (1: on; 0: off). The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4846 4846 Charger plugged stateReserved_And_Charger_Plugged · Block 0x1200 offset 0x00EE is a 2-byte slot holding two UINT8 fields, listed in the document in this order: RVD (reserved) then ChargerPlugged (1: plugged in; 0: not plugged in). The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
4876 4876 Parallel current limiting module statePcl_Module_State · Block 0x1200 offset 0x010C is a 2-byte slot holding two UINT8 fields, listed in the document in this order: PCLModuleSta (1: on; 0: off) then RVD (reserved). The document does not say which byte of the register holds which field, so read both and check against a known state. bitfield16 1 1 R Holding (FC03)
5120 5120 Manufacturer device IDManufacturer_Device_Id · Document field ManufacturerDeviceID, block 0x1400 offset 0x0000. ASCII, 16 bytes. string 8 1 R Holding (FC03)
5136 5136 Hardware versionHardware_Version · Document field HardwareVersion, block 0x1400 offset 0x0010. ASCII, 8 bytes. string 4 1 R Holding (FC03)
5144 5144 Software versionSoftware_Version · Document field SoftwareVersion, block 0x1400 offset 0x0018. ASCII, 8 bytes. string 4 1 R Holding (FC03)
5152 5152 Accumulated run timeAccumulated_Run_Time · Document field ODDRunTime, block 0x1400 offset 0x0020. uint32 2 s 1 R Holding (FC03)
5156 5156 Number of power-onsPower_On_Count · Document field PWROnTimes, block 0x1400 offset 0x0024. The document prints the unit as the Chinese character for times. uint32 2 1 R Holding (FC03)
5636 5636 Protection board shutdown commandCommand_Shutdown · Document field Shutdown, block 0x1600 offset 0x0004, write only. The document does not state which value to write. uint16 1 1 W Holding (FC03)
5642 5642 One-key setting for ternary lithium (LI-ION)Command_Preset_Li_Ion · Document field LI-ION, block 0x1600 offset 0x000A, write only. The document does not state which value to write. uint16 1 1 W Holding (FC03)
5644 5644 One-key setting for LiFePO4Command_Preset_LiFePO4 · Document field LIFEPO4, block 0x1600 offset 0x000C, write only. The document does not state which value to write. uint16 1 1 W Holding (FC03)
5646 5646 One-key setting for lithium titanate (LTO)Command_Preset_Lto · Document field LTO, block 0x1600 offset 0x000E, write only. The document does not state which value to write. uint16 1 1 W Holding (FC03)
5648 5648 Emergency start commandCommand_Emergency_Start · Document field Emergency, block 0x1600 offset 0x0010, write only. The document does not state which value to write. uint16 1 1 W Holding (FC03)
5650 5650 Time calibrationCommand_Time_Calibration · Document field Timecalibration, block 0x1600 offset 0x0012, write only. The document does not state which value to write. uint32 2 1 W Holding (FC03)

Scale is the number to multiply the raw value by to get the unit. Types with more than one register (32 and 64-bit) follow the word order above.

Open in Modbus Poll

  1. Download the Modbus Poll blocks file.
  2. Open Modbus Poll, connect to the device and set its unit ID. In Modbus Poll set Word order to AB CD.
  3. In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
  4. The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.

Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.

Source and accuracy

Manufacturer document: JK BMS RS485 Modbus general protocol V1.1 (Chinese title: Jikong BMS RS485 Modbus tongyong xieyi V1.1) (cdn.shopify.com)

Document 'Jikong BMS RS485 Modbus general protocol (V1.1)', Chengdu Jikong Technology Co., Ltd, dated 2024.02, revision record V1.1 2024.01 (fixes some errors and adds registers), 15 pages. The vendor hosts this document on its own site at http://www.jk-bms.com/Upload/2024-02-21/1345398693.pdf (http only, the https form did not respond). The linked https copy is hosted by JKVOLT (jkvolt.com, which describes itself as an authorized JK BMS distributor operated by Chengdu JK Volt Technology Co., Ltd.) on its download center page, served from the Shopify CDN. The two files are byte-identical (same SHA-256, b9b3f1e4...d22739), and a third copy on the jkbms.net downloads archive is also identical. Field names are in English and descriptions are Chinese, so labels here are translations; the document field name is given in every note., p. 3 to 5 (interface, frames, errors), p. 6 to 13 (Register Map), p. 14 to 15 (worked examples). Read on 2026-10-24.

Also used: JK BMS RS485 Modbus Protocol V1.0 for Firmware V11.36 on the vendor's download center (jk-bms.com), earlier revision of the same document (www.jk-bms.com)

Also used: JKBMS technical downloads page (links the V1.0 Modbus protocol PDF) (www.jkbms.net)

Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.

Found a mistake? Report it by email with the register address and the manual page.

Other batteries and battery management systems

All register maps · Modbus addressing explained