Вкину свои 5 копеек.

Были слегка подобные случаи, в общем в конфигурацию ПЛК м02 постепенно по мере прироста оборудования добавлялись модули вывода МВ210-403. И вот в один день уже под конец раб. дня добавил ещё один мв210-403, причём сделал это копированием т.е. новый модуль в конфигурации встал между двумя последними модулями но т.к. надо было уже уезжать с объекта, я его добавил, потыкал оборудование, проверил что всё работает и решил, что в следующий раз займусь его окончательной настройкой и полной проверкой, а сейчас откачусь на прежнюю рабочую прошивку. Короче просто удалил его из конфигурации, перезалил прежнюю программу на ПЛК, которая до это стабильно работала, и каково же было моё удивление, что сразу после перезаливки у меня самопроизвольно включились выходы на последнем модуле вывода. И были включены пока я не нажал "Старт", я опять также добавил новый модуль в конфигурацию, залил с новым модулем и всё нормально. Удалил его, и снова опять те же выходы сработали на последнем модуле. но т.к. времени уже было в обрез, разбираться не стал, просто добавил новый модуль и оставил так.

Я слабо себе представляю как там организовано адресное пространство, что с чем взаимодействует, и что на что влияет. Но у меня сложилось впечатление, что когда я воткнул новый модуль между двумя последними, а потом его удалил, то последний модуль вывода "переехал" на место предпоследнего, который я удалил, и там остались какие-то данные в том адресном пространстве, которые обнулились только после запуска основной программы.

А так в целом солидарен с большинством, что во всех случаях именно работы кода косячил сам я. И вроде бы смотришь на код, видишь что ну вот же я явно присваиваю значение, а оно не присваивается. А через пару часов вникания в работу именно в контексте постоянно повторяющегося цикла контроллера понимаешь, почему всё так работает.