Страница 1 из 1

Пример связи Siemens S7-1500 и LabVIEW без OPC

Добавлено: 16 дек 2017, 22:14
Silver87
Приветствую!
Выкладываю пример драйвера связи контроллера Siemens S7-1500 и LabVIEW, чтобы самому не забыть и может кому-нибудь ещё пригодится.

Делал не с нуля :dntknw: и когда начинал, нашёл следующие варианты:
1) OPC - не подошёл, т.к. лишняя прослойка склонная к глюкам и инсталлер с ним это тоже не просто.
2) Собственный TCP протокол - это тоже куча не нужной ручной работы.
3) Библиотека libnodave - наверное, классная штука, но это лишние зависимости в проекте от внешних dll, ну и просто-напросто "сложно" понятное у них описание.
4) Самым удобным и понятным оказался вариант от DMC на полностью встроенных в LV функциях. Этот пример основан на более фундаментальном решении и его на форуме тоже предлагают использовать. Там есть видимо куча интересных функций вплоть до доступа к оптимизированным блокам данных, однако всё выглядит сыро и плохо документировано.

Пример предоставленный DMC оказался для меня самым понятным, но он слишком упрощённый в одном и усложнённый в другом (естественно под мою задачу).
Приложенный пример гораздо ближе к реальному применению, и снабжён подробными комментариями на русском :cool:
Из значимых доделок:
1) Подключение переделано с 1200 серии на 1500 (проверено на CPU 1512SP-1 PN и на CPU 1517-3 PN/DP)
2) Сделано не только чтение но и запись в ПЛК.
3) Упрощен процесс изменения количества и типа передаваемых данных (ненужно в ручную собирать и разбирать данные в LV)
4) Сделано восстановление связи после обрыва и несколько других мелочей.

Из упрощений под мою задачу:
1) В обе стороны передаётся по два блока по 440 байт (880 байт в одну сторону) (можно легко поменять).
2) Передавать можно только переменные типа Real, Int и Bool, объединённые в массивы.
3) Можно относительно легко выбирать, сколько и каких переменных передавать, просто указывая диапазон адресов массива нужного типа.

Что интересно: код уже долго тестировался, но вдруг кто найдёт ошибки? или есть предложения по улучшению кода?