0. Спасибо, не заморачивайтесь
Изначально я упёрся в то, чтоб рабочий проект оставался без каких-то доработок периода отладки. Поэтому всю периферию хотел сделать совершенно отдельно - во втором проекте или в какой-то сторонней программе. На тот момент я ещё не представлял всех сложностей и ограничений, с которыми столкнусь.
На сегодняшний момент - выше описанный код позволяет мне успешно имитировать работу двух модулей: МУ110-224.16Р и МВ110-224-16ДН.
Я могу в отладочном проекте имитировать входы модуля ввода одним щелчком мыши в удобном мне месте, реагировать на выходы модуля вывода программно (я в курсе про скрипты в ОПС модбас сервере, но это дичь). В этот же отладочный проект я добавил имитацию весового модуля, который шлёт в основной проект данные по RS-232.
НО. Ещё раз повторю - у этого способа есть только один плюс - мне никак не надо переделывать основной рабочий проект. Для него вся периферия - что железная, что имитированная, видится и работает одинаково.
А теперь о минусах:
а) мне тупо повезло, что эти два модуля имеют разную адресацию регистров. Если бы имели одинаковую или пересекающуюся (например, у меня был бы модуль вЫвода не на 16, а на 32 контакта) - ничего не прокатило бы.
б) каждый раз для отладки приходится запускать программу Virtual Serial Ports Emulator и в ней настраивать связь двух виртуальных портов - для 232 (весовой модуль) и 485(модули ввода и вывода).
в) каждый раз приходится запускать вторую копию виртуального контроллера, чтоб на нём крутился проект имитации.
Сейчас я бы просто в своём рабочем проекте сделал отдельную визуализацию с имитацией нужных мне железяк и повесил бы её на вёб-морду, вытащив её на второй экран компа. Да, основной проект пришлось бы переделать. Но это заняло бы куда меньше времени.
1. Да, слева в рабочем проекте - шаблоны, справа в имитируемом - ФБ, создающие слэйв устройство.
схемо.png
2. Я создал вируальный ПЛК, в нём через ФБ открыл порт 485 и через ещё один ФБ создал виртуальный слейв, отзывающийся на любой айдишник. Далее в программе Virtual Serial Ports Emulator создал виртуальную связь между компортом рабочего контролера и имитирующего.
3. Это одна из проблем.Я не нашёл, как можно на одном компорту заиметь более одного слэйв устройства в одном проекте, поэтому реализовал через "универсальный" слэйв.
4. От модуля вЫода нужно было, чтоб он визуально мне показал, что программа хочет задействовать какой-то выход. Именно чтоб удобно на это было смотреть, а не искать глазами конкретную строчку где-то в отладочной информации, в столбиках. Ну и заодно теперь на этот же сигнал у меня реагирует имитатор наполнения весов, что тоже удобно. Не надо лишний раз тыкать кнопки. От модуля ввода мне нужно было, чтоб я удобно в один клик мышкой мог менять его состояние. Всё это у меня сейчас уже реализовано. Ну и имитацию пропадания связи я тоже могу теперь реализовать во втором проекте, если захочу.
5. Любая - у нас не критичны задержки какие-то в доли секунд
Так что не заморачивайтесь) Создавая пост, я хотел получить наводку на какой-то метод удобной отладки проекта. В целом - теперь понимаю, что проще всего просто в одном проекте реализовать режим отладки с имитацией нужных мне данных.
Так что спасибо большое за готовность помочь)