Цитата Сообщение от Yegor Посмотреть сообщение
Я не просто так предложил именно TON#(...), а не TON(). Такой синтаксис аннотирования используется для литералов встроенных и перечисляемых типов (UDINT#42). Т.к. анонимность один хрен нарушает секцию объявлений, то её можно сделать опциональной и тупо вводить экземпляров: IF TON#(...) / IF TON#ton1(...). Только ни в коем случае не разрешать использование имени за пределами скобок — будет бардак. UPD: хотя не, с видимостью в скобках тоже бардак будет, т.к. другие переменные так себя не ведут.
Да, на досуге можно подумать стоит ли разрешать именовать блоки, и нужно ли разрешать видимость в скобках.
Возможно, если нужно "с видимостью в скобках", то лучше уж выделить в отдельный "человекопонятный блок".


Цитата Сообщение от Yegor Посмотреть сообщение
Под устоявшимися приёмами я понимаю подход, где входы оказываются связанными с выходами без дополнительных прослоек, а независимые ФБ содержат только обобщённый функционал
Можно с этого момента по-подробнее?

Я, вроде, на форуме как-то встречал, что народ вообще mock'и делает. Т.е. из отдельного ПЛК делает "эмулятор реальной системы", подключает его к "боевому ПЛК" и смотрит работает ли "как надо".

Цитата Сообщение от Yegor Посмотреть сообщение
Модули с сильным зацеплением сопротивляются юнит-тестированию, как известно. Не TONы же тестировать, ей богу.
Ну, 10 TON'ов уже без поллитра на понять.
Поэтому, лучше лишний раз проверить.

Да и интеграционное тестирование никто не отменял.
Да и chaos monkey тестирование тоже (запускаем тест, и в произвольный момент жмём на перезагрузку ПЛК)

Вот, например, тема про измерение частоты: http://www.owen.ru/forum/showthread....l=1#post192280
Там могли бы помочь тесты вида: "подаём на вход меандр 1.0 Гц -- ожидаем, что через минуту на выходе переменная такая-то должна быть 1.0 +- 0.1 Гц".

С точки зрения тестов, самый сложный момент -- ПЛК завязано на "реальный мир" и на "реальные часы". Т.е. если сказано "среднее за час", то для обычного теста придётся ждать этот самый один час.

Я же могу при "компиляции в режиме теста" незаметно подменять вызовы TIME() на чтение специальнообученной переменной и таким образом "ускорять время". Да, будут некоторые проблемы с зашифрованными библиотеками, но в пользовательском коде вообще без проблем.