JK-BMS BD6A32S10P rs-485

Я знайшов той шматок діалог с грок, де я теж так думав, але сканер показав, що при заряді/розряді цей регістр статичний. Я робив все "на живу" та особисто спостерігав зміни, так 4760 був статичний, в 4762 - динамічній, і 4762 відповідав саме точному показнику струму відповідно до блютуз-додатка бмс. На скрінв показав. Я ж кажу, це просто особливості ПЗ, в цьому і була деяка головна біль, з якою я мучився))
По скріну схоже, що в 4760 лежать два старші байти, а в 4762 два молодші. Треба читати всі 4.
 
Я знайшов той шматок діалог с грок, де я теж так думав, але сканер показав, що при заряді/розряді цей регістр статичний. Я робив все "на живу" та особисто спостерігав зміни, так 4760 був статичний, в 4762 - динамічній, і 4762 відповідав саме точному показнику струму відповідно до блютуз-додатка бмс. На скрінв показав. Я ж кажу, це просто особливості ПЗ, в цьому і була деяка головна біль, з якою я мучився))
І до речі, саме в момент сканування скриптом, я паралельно дивився в ПЗ телефоні показник струму, та "впіймав" прямо точно саме цей струм. Тобто я на 100% впевнений, що в моєму випадку це саме він у повному обсязі. Можу сюди дати скрипт - сканер для регістрів, може згодитися)) Але є його потрібно буде підкоригувати під свої потреби та параметри. Після запуску він відає відповідь у термінал по кожному перевіреному регістру. Це може бути у нагоді, коли прошивка відрізняється і потрібно коректування. Та хочу відмітити, що в платі скоріше за все є декілька блоків, де є постійна пам'ять (там, де ліміти), live-параметри, управління та ін. Це все можливо знайти в документації, але враховуючи можливі зміщення в задоволенні від прошивки та особливостей версій протоколу
 
Я знайшов той шматок діалог с грок, де я теж так думав, але сканер показав, що при заряді/розряді цей регістр статичний. Я робив все "на живу" та особисто спостерігав зміни, так 4760 був статичний, в 4762 - динамічній, і 4762 відповідав саме точному показнику струму відповідно до блютуз-додатка бмс. На скрінв показав. Я ж кажу, це просто особливості ПЗ, в цьому і була деяка головна біль, з якою я мучився))
Та ясно що він буде статичний, якщо значення струму менше +-65535 папуг. Перевірити просто. Зробіть щоб той струм став зі знаком +. І в 4760 з'являться нулі замість 65535.
 
По скріну схоже, що в 4760 лежать два старші байти, а в 4762 два молодші. Треба читати всі 4.
Можливо це "перший нуль", я сам не знаю, бо бмс може робити з 100+ ампер, тому це не вийняток. Але такого струму моя система точно не побачить))))) але це лише припущення. Точно можна перевірити на практиці скрипом-сканером. Мені це не принципово. Я не такий мега-спеціалість, як вам може здаватися)) Мій досвід, це бажання+інструменти+вдача+залізні нерви)) і в цьому списку, як бачите - знань немає
 
Та ясно що він буде статичний, якщо значення струму менше +-65535 папуг. Перевірити просто. Зробіть щоб той струм став зі знаком +. І в 4760 з'являться нулі замість 65535.
Так я ж робив. Я ж надав Ші для аналізу і він таблиці вивів. Оцю ж таблицю я і заскрінив. Я дивився значення 4760 при заряді 4-5А, та при розряді 2А. Показник залишався статичним
 
Можливо це "перший нуль", я сам не знаю, бо бмс може робити з 100+ ампер, тому це не вийняток. Але такого струму моя система точно не побачить))))) але це лише припущення. Точно можна перевірити на практиці скрипом-сканером. Мені це не принципово. Я не такий мега-спеціалість, як вам може здаватися)) Мій досвід, це бажання+інструменти+вдача+залізні нерви)) і в цьому списку, як бачите - знань немає
І якщо ви уважно подивитися, на одному зі скрінів в мене ж в моніторингу в йде показник як +А, так і -А
 

Вкладення

  • IMG_20260220_092601.jpg
    IMG_20260220_092601.jpg
    128 Кб · Перегляди: 2
  • IMG_20260220_092613.jpg
    IMG_20260220_092613.jpg
    139,5 Кб · Перегляди: 2
Так я ж робив. Я ж надав Ші для аналізу і він таблиці вивів. Оцю ж таблицю я і заскрінив. Я дивився значення 4760 при заряді 4-5А, та при розряді 2А. Показник залишався статичним
Та Ви не ШІ, а нам покажіть той регістр коли струм >0 :)
Теоретично можна і не всі байти читати. Якщо читати тільки самий молодший байт, а БМС видає струм в форматі хх.х, то Ви обмежите значення +-12.7А Якщо струм стане більше, то буде показувати біліберду.
Тобто можна читати тільки молодші байти, але Ви штучно обмежуєте діапазон вимірювання.
 
Та Ви не ШІ, а нам покажіть той регістр коли струм >0 :)
Теоретично можна і не всі байти читати. Якщо читати тільки самий молодший байт, а БМС видає струм в форматі хх.х, то Ви обмежите значення +-12.7А Якщо струм стане більше, то буде показувати біліберду.
Тобто можна читати тільки молодші байти, але Ви штучно обмежуєте діапазон вимірю

Ну в мене ж все правильно показує)))
 
Та Ви не ШІ, а нам покажіть той регістр коли струм >0 :)
Теоретично можна і не всі байти читати. Якщо читати тільки самий молодший байт, а БМС видає струм в форматі хх.х, то Ви обмежите значення +-12.7А Якщо струм стане більше, то буде показувати біліберду.
Тобто можна читати тільки молодші байти, але Ви штучно обмежуєте діапазон вимірювання.
Бмс же не буде розбивати на два регістри силу струму))) Типу, в одному буде 100+Ампер, в іншому - до 99000 міліампер)))
 
Якщо струм перевищить +-32769 ма приблизно, то буде переповнення зчитанного int16 замість int32.
Буде помилка

val if val <= 32767 else val - 65536 це некорректно для int32
 
Останнє редагування:
Якщо струм перевищить +-65535 ма приблизно, то буде переповнення зчитанного int16 замість int32.
Все що більше -+66А буде з помилкою
Можливо все))) Ось, спеціально переключив для фіксації показників упс на батарею та на скрінах чітко показники сходяться - додатка телефону, та з БД.
 

Вкладення

  • Screenshot_2026-02-20-09-57-58-878_com.android.chrome.jpg
    Screenshot_2026-02-20-09-57-58-878_com.android.chrome.jpg
    335,9 Кб · Перегляди: 2
  • Screenshot_2026-02-20-09-57-32-194_com.jktech.bms.jpg
    Screenshot_2026-02-20-09-57-32-194_com.jktech.bms.jpg
    602,8 Кб · Перегляди: 2
Варто враховувати, що в мене версія 32s, же й свіжак, тому в прошивці можуть бути свої приколи)
 
По 4670 не int16 . Там не -0.001 . Це старші байти int32 яке по адресах 4760 та 4762 сукупно
 

Вкладення

  • Screenshot_2026-02-20-09-59-37-270_com.android.chrome-edit.jpg
    Screenshot_2026-02-20-09-59-37-270_com.android.chrome-edit.jpg
    83 Кб · Перегляди: 3
Якщо струм перевищить +-65535 ма приблизно, то буде переповнення зчитанного int16 замість int32.
Буде помилка

val if val <= 32767 else val - 65536 це некорректно для int32
в моїй BD6A32S10P (і моїй прошивці) Battery Current - це signed INT16 (1 регістр, mA), і конструкція val if val <= 32767 else val - 65536 - стандартний спосіб конвертації signed 16-bit з Modbus в Python.
 
Бмс же не буде розбивати на два регістри силу струму))) Типу, в одному буде 100+Ампер, в іншому - до 99000 міліампер)))
Саме так і є. Тільки там двоїчне представлення. Ваша БМС спілкується строго по протоколу. А Ви штучно його обмежили.
Просто покажіть нам дамп регістра 4760 коли струм більше 0.
 
на моїй конкретній BD6A32S10P (з моєю прошивкою) ситуація інша — значення струму приходить як signed INT16 саме в регістрі 4762 (count=1), і це дає правильні, динамічні дані, які ідеально збігаються з Bluetooth-додатком JK і реальним навантаженням. Коли струм = 0 А → обидва регістри (4760 і 4762) показують 0 (або дуже близько). Коли реальний розряд, наприклад -10 А → регістр 4762 дає значення ≈ -10000 (після /1000 і signed-конвертації), знак правильний, значення змінюється плавно і точно. Якщо читати 4760 count=1 — там або 0, або статичне/незмінне значення, яке не реагує на навантаження. Якщо читати count=2 з 4760 → low word (4762) дає правильний струм, а high word (4760) — 0 або сміття, яке не впливає на результат (тобто ефективно 16-бітне значення). Це не штучне обмеження протоколу — це те, як саме моя BMS віддає дані по Modbus. Можливо, в моїй прошивці JK зробили спрощення (або баг/особливість), і повноцінний INT32 не використовується, а струм поміщається в молодші 16 біт
 
на моїй конкретній BD6A32S10P (з моєю прошивкою) ситуація інша — значення струму приходить як signed INT16 саме в регістрі 4762 (count=1), і це дає правильні, динамічні дані, які ідеально збігаються з Bluetooth-додатком JK і реальним навантаженням. Коли струм = 0 А → обидва регістри (4760 і 4762) показують 0 (або дуже близько). Коли реальний розряд, наприклад -10 А → регістр 4762 дає значення ≈ -10000 (після /1000 і signed-конвертації), знак правильний, значення змінюється плавно і точно. Якщо читати 4760 count=1 — там або 0, або статичне/незмінне значення, яке не реагує на навантаження. Якщо читати count=2 з 4760 → low word (4762) дає правильний струм, а high word (4760) — 0 або сміття, яке не впливає на результат (тобто ефективно 16-бітне значення). Це не штучне обмеження протоколу — це те, як саме моя BMS віддає дані по Modbus. Можливо, в моїй прошивці JK зробили спрощення (або баг/особливість), і повноцінний INT32 не використовується, а струм поміщається в молодші 16 біт
Це я вставив пояснення грока
 
Назад
Угорі