Добрый день!

Использую СПК-207 для управления тремя сетями: две сетки Modbus ("быстрая" и "медленная", быстрая обрабатывает импульсные выхода с расходомеров) подключены к различным модулям ОВЕН МВ и МУ, и одна сетка CANopen, по ней успешно управляю пневмоостровами Camozzi.

С пневмоостровами Camozzi CANopen заработал сразу, без танцев с бубнами, но сами пневомоострова отказались со временем работать. Было принято решение перейти на Festo.

С настройкой Festo всё оказалось сложнее...

Вообще у Festo серии CPV три типа "голов" для канопена, для этого три различных eds-файла, на все случаи жизни. Мой вариант CO2. На деле не оказалось никакой разницы: использовать CO3 или CO2 (CO3 оказалась удобнее тем, что при создании устройства уже сконфигурированы PDO с выходами и входами, в СО2 надо ручками всё создавать). В обоих вариантах нет обмена с пневмоостровом по заготовленным регистрам (в CANopen это - PDO). Изменения в битах регистров, предназначенных для выходов, не изменяют состояние острова (выхода не срабатывают). Кроме регистров записи, предусмотрено несколько регистров для чтения: состояние входов на дополнительном модуле (он не приобретался), Error register, Manuifacturer status register и состояние выходов. Так вот все выходные регистры всегда в нуле. Я даже инициировал ошибку (поставил переключатели в острове так, как будто подключен модуль расширения, которого нет). Остров свалился в ошибку, регистры ошибок остаются в нуле (тут недочёт от фесто, у них регистры в нулях если ошибок нет, то есть одно и тоже состояние: регистр не считывается или всё ок). Далее в документации на остров указан алгоритм реакции на ошибки: сначала формируется код ошибки в регистре 1001 "Error register", затем в регистре 1002 "Manuifacturer status register", потом сдвиг в регистре № 1003 с номером ошибки (похоже на буфер ошибок), а затем "Send Emergency Message". В онлайне я вижу только последнее действие, а именно: во вкладке "состояние" вижу "Diag String: 'EMCY Code:FF30; Register:81; Field: 00 00 00 02 11'. При этом в устройствах на пневмоострове появляется воскл-знак.
Судя по всему значение регистра 1002 должно поменяться с нуля на FF30, но этого не происходит.

Из этого можно сделать вывод, что CANopen функционирует. Недоступен только обмен по регистрам.

Как этот обмен наладить?

CANopen_EMCY.jpg

CANopen_Regs.jpg