Здравствуйте.
Во вложении карта памяти [Modbus] устройства РС83-В1 с журналом аварий на 100 событий. Структура ошибки очень похожа, но способ чтения совершенно другой.
1. Для начала нужно получить доступ к данным. Вам необходимо построить (пытая китайское устройство) или подсмотреть в китайском руководстве (цифры-то арабские) аналогичную карту.
2. Определить критерий, когда приняты все данные ошибки, особенно если линии связи с прибором медленные.
3. Из Вашего сообщения и документа на РС83-В1 можно предположить:
- чтение журнала ведется из очереди аварий по одной аварии через буфер, который заполняется при записи в регистр (4000) смещения относительно начала очереди;
- аварии последовательно заполняют очередь, и при её переполнении новая авария вытесняет первую аварию из очереди. Скорее всего для контроля этой ситуации используется возвращаемое значение "номер аварии" - порядковое число 0..65535;
- в незаполненной очереди признаком конца очереди является авария с нулевыми данными;
- полностью заполненная очередь создаёт еще одну ошибку: если между чтением двух аварий вклинится новая запись аварии-события, то произойдет сдвиг аварий в очереди, что нарушит всю последовательность чтения по номеру аварии.
4. Что ещё следует поискать в китайском устройстве и что, по моему мнению, крайне необходимо. так это удаление прочитанной ошибки из очереди, что даёт возможность (если не зевать с удалением ошибок) исключить переполнение очереди.
5. Самое простое китайское решение - НЕ ДЕЛАТЬ НИЧЕГО ВООБЩЕ, т.е. считать что есть только кольцевой буфер аварий, с началом индексации от самой старой сохранившейся аварии. В этом случае алгоритм на основе анализа возвращаемого значения "номер аварии" пытается упорядочить прочитанные аварии в порядке последовательного возрастания номеров аварий.
Пример из вложения содержит модель "Китайского устройства" (генерация ошибки/серии, очистка очереди) и окно получения данных (чтение ошибки по смещению, чтение списка аварий, очистка окна). Пример только для иллюстрации алгоритма, тщательно проверять его нет смысла пока не будут решены вопрос п.1 и п.2.
Для ввода повторного значения используйте лидирующий 0.