|
|
CH : |
28.6.21 13:37 |
Второй архив - самый сложный для обработки без файловых функций, поскольку вспомогательная структура его описания начинается не просто с адреса регистра 658, а только с его второй половины (байта) из за нечётного числа байтов в самой структуре (9). То есть, по вашим данным: - в регистре 658 значение 5725 = 0x165D. 0x16 = 22 размер записи первого архива. 0x5D - первый байт адреса заголовка второго архива. - в регистре 659 значение 18944 = 0x4A00. 0x4A - второй байт адреса заголовка второго архива. - Адрес заголовка второго архива (байтовый) = 0x5D4A = 23882. - Переводим байтовый адрес заголовка второго архива в регистровый (с учётом отображения архива начиная с адреса 0x1000 в пространстве регистров): (23882 + 0x1000) / 2 = 13989. | |
|
RUS : |
29.6.21 11:55 |
При повторном чтении из Holding Registers получились значения: 658 - 5766 - 0x1686 659 - -24576 - 0xA000.
Получается число 0х86А0 - 34464. Отсюда выходит, что (34464 + 4096) / 2 = 19280.
Значения по адресам в Input Registers: 19280 - 327 19281 - 512 19282 - 0 19283 - 11
И при высчитывании полученное число накопленной энергии не совпадает с действительным.
Подскажите пожалуйста в чем может быть причина? Или что я делаю не так? | |
|
CH : |
29.6.21 12:09 |
Значения в Holding-регистрах не могут отличаться от раза к разу, это настроечные константы в ПЗУ. Не знаю, насколько верно были прочитаны значения в первый раз, но регистр 654 во всяком случае прочитан верно - первый архив всегда с адреса 4096 (0x1000). Убедитесь, что стабильно читаете одинаковые верные значения для начала по первому архиву (сравните размер / состав архива со значениями из заголовка архива), возможно обнаружите какую-то ошибку в процессе чтения. | |
|