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

Делись идеей, получай поддержку и критику!
Ответить
Silver87
interested
interested
Сообщения: 1
Зарегистрирован: 05 ноя 2017, 17:57
Версия LabVIEW: 2017
Контактная информация:

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

Сообщение 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) Можно относительно легко выбирать, сколько и каких переменных передавать, просто указывая диапазон адресов массива нужного типа.

Что интересно: код уже долго тестировался, но вдруг кто найдёт ошибки? или есть предложения по улучшению кода?
Вложения
Снипет основной функции
Снипет основной функции
Driver_S7.zip
Проект в LV
(308.03 КБ) 264 скачивания
S7_communications_LabView(TIA_v14).zip
Проект в TIA Portal v14
(1.42 МБ) 253 скачивания
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Проекты»