Настроил СПК110 как модбас слейв. Работает прекрасно, отвечает на запросы охотно, но передает нули вместо данных.
Как же так? Выручайте.
Вид для печати
Настроил СПК110 как модбас слейв. Работает прекрасно, отвечает на запросы охотно, но передает нули вместо данных.
Как же так? Выручайте.
Без проекта и описания (что вы сделали/что вы ожидаете/что происходит на самом деле) крайне трудно будет что-то подсказать.
Возможно, вам поможет документ СПК. Modbus - там есть соответствующий пример.
да уже переписал все.
ну насколько я понял, в кодесисе 3 не работает модбасный слейв. т.е. работает, но не разрешает изменять содержимое регистров. поэтому у меня все нули в ответах.
применил библиотеку овена со слейвом - заработало.
Работает. Вот несколько вещей, которые сложно найти.
1. Регистры хранения нельзя изменить из программы слейва (вообще можно, там тока предупреждение появляется, а не ошибка, но не надо), меняются мастером функцией 16. Адреса регистров с 0 и по порядку.
2. Входные регистры можно изменять из программы слейва. Для чтения этих регистров мастером используйте функцию 04. Адреса регистров снова с 0 и по порядку.
Таким образом, обращение к регистру с адресом 0 функцией 16 и функцией 04 это обращение к разным регистрам.
А я вот, продолжая эксперименты, обнаружил что не надо делать СООТНЕСЕНИЕ.
Если его сделать на %IW (а у меня там массив висел и только для того чтобы онлайн смотреть содержимое), то эта зона все время перетирается переменной из соотнесения.
Надо снять соотнесение и просто обращаться к областям %IW указателями или MEM.MemMove.
Так-то. :))