Набирающий популярность протокол IO-Link постепенно набирает популярность и проникает в обычные датчики. Казалось бы обычный датчик давления - что можно придумать? Японская Omron выпустила серию E8PC, которая объединяет в себе и датчик давления, и датчик температуры. Работает всё это счастье через IO-Link.
Что такое и зачем нам IO-Link?
Все уже давно привыкли к протоколам Modbus и ему подобным. Обычно через него подключаются серьёзные устройства, но не сами датчики. Протокол IO-Link же специально разработан для работы с датчиками и им подобными исполнительными устройствами.
На примере нашего датчика E8PC, с помощью IO-Link мы можем получать значения текущего давления и температуры. Вы скажете что это можно делать с помощью обычного аналогово сигнала. Можно, но для этого надо и по 2-3 провода на каждый сигнал, и потом разобрать его аналоговое значение.
Работа через протокол IO-Link обеспечивает передачу по 3-4 проводам уже нормализованных значений давления и температуры, а также сервисную информацию как статус, наличие ошибок и используемые единицы:

Подключение IO-Link
Подключение всех конечных устройств по протоколу IO-Link в вышестоящий контроллер осуществляется через Master/Coupler. В данном случае мы выбрали NX-ILM400, который удобно монтируется на NX-BUS в NX1P2.
Чтобы не долго маяться с разводкой разъёма, мы подключаемся через кабель серии XS2F. Чтобы разобраться с распиновкой сигналов по цветам жил, надо обратиться в спецификация к серии кабелей (скачать). Там мы находим следующую информативную картинку:

Сравнив со спецификацией на NX-ILM400, подключаем следующим образом в первый порт NX-ILM400. Черный в первый контакт, белый во второй контакт, коричневый в третий контакт и синий в четвёртый контакт.
Настройка в Sysmac
IO-Link почти также удобен как и EtherCAT, но с одной маленькой оговоркой. Надо ручкам выбрать размерность передаваемых данных и потом их разобрать в переменные. На фото вначале статьи видна структура передаваемых данных.
В Sysmac сначала требуется провести стандартную процедуру по настройке модуля NX-ILM400. Для этого на CPU Rack просто нажимаем Compare and Merge with Actual Unit Configuration.
По появившемся NX-ILM400 нажимаем Edit Unit Operation Settings и в новом окне жмём Transfer from Unit. Вроде бы всё хорошо и синхронизируемся с контроллером. У нас мастер IO-Link висит прямо на CPU Rack - можно физически не перевключать питание.
Всё бы хорошо, но после всех манипуляций мы видим Port1 Device IO Size Error. Неожиданно, но вернёмся в Edit Unit Operation Settings и найдём вот это поле. Его значение совпадает со структурой передаваемых данных, описанной выше.

Если же внимательно присмотреться, то мы имеем дело с Device Information Area. Нам же надо перенести ручками это значение в Device Configuration Data.

Настройка переменных
Вышли на финишную прямую. Использую уже знакомую таблицу структуры данных или иначе, надо обработать данные из E8PC для работы внутри программы контроллера. Для этого в I/O Map находим нужные значения и задаём переменные.

Если не отвлекаться на формат передачи данных в IO-Link, то мы просто имеем дело массивами по 2 байта каждый. Рассмотрим на примере температуры.
Значение температуры 27.9 передаётся как 279 или ^10. Один байт - это 2**8 или 256. Таким образом нам нужен второй байт. На самом деле, значение типа Integer в Sysmac равно 2**16 или 65 536. Таким образом, можно использовать следующую формулу (обратите внимание на разницу в единицы - 255 или 256).

Всё работает. В итоге, очень даже удобно. Если же Вы хотите сделать ещё удобнее и использовать тип Double, то это уже другая, несложная история.