Во-во, ещё бы эти грабли были подробнее описаны в мануалеВы наступили на грабли выравнивания.(опять я за старое, да
)
А вариант с SysMemCpy хуже? Может тут тоже есть что-то, о чём ещё предстоит узнать?Побайтовое копирование - единственный выход.![]()
На счёт структуры - надо подумать.
А разве я говорил о восстановлении? По моему скромному мнению, в случае фатальной ошибки контроллер должен:По ошибке невыровненного доступа к памяти восстановление невозможно, поэтому единственным выходом является перезагрузка.
1. Остановить выполнение программы.
2. Перевести выходы в безопасные состояния.
3. Записать максимум информации об ошибке в энергонезависимую память.
4. Сохранить возможность коммуникаций со средой программирования.
5. Ни в коем случае не пытаться самостоятельно стартовать снова (и сделать это только по нажатию кнопки "Сброс").
6. Стоять и ждать программиста.
Было бы хорошо, если бы Вы добавили контроллеру операцию автоматической записи информации об ошибке (при её возникновении) в энергонезависимую память (минимально - тип ошибки и программый блок, где она произошла (в идеале - номер строки)). И возможность считать эту инфу через PLC-Browser, добавив соответствующую команду (типа GetLastError). Естественно, эта информация не должна теряться при перезагрузке.




(опять я за старое, да
)
Ответить с цитированием