Просмотр полной версии : Подключение по Modbus TCP Slave к панели оператора. Сброс регистров после выключения
Здравствуйте, подключаю панель оператора (Modbus TCP Master) к плк 210 (Modbus TCP Slave) с последней прошивкой под SP16.
Тестовый проект, несколько переменных как в обучающем видео и вебинаре.
Все работает, но holding регистры после остановки или отключения питания контроллера сбрасываются на ноль. Переменные Retain работают нормально, как только привязываю одну из них к регистру, то эта переменная начинает сбрасываться на 0. Так и должно быть?
Не очень понятно тогда как работать с настройками, которые должны быть изменены с панели оператора... Если после отключения питания они стираются.
и второй вопрос, Slave ID (или Unit ID) можно поменять (в sp16)? Связь работает только с 0, а где изменить я не нашел.
Евгений Кислов
14.04.2022, 07:04
Здравствуйте, подключаю панель оператора (Modbus TCP Master) к плк 210 (Modbus TCP Slave) с последней прошивкой под SP16.
Тестовый проект, несколько переменных как в обучающем видео и вебинаре.
Все работает, но holding регистры после остановки или отключения питания контроллера сбрасываются на ноль. Переменные Retain работают нормально, как только привязываю одну из них к регистру, то эта переменная начинает сбрасываться на 0. Так и должно быть?
Не очень понятно тогда как работать с настройками, которые должны быть изменены с панели оператора... Если после отключения питания они стираются.
и второй вопрос, Slave ID (или Unit ID) можно поменять (в sp16)? Связь работает только с 0, а где изменить я не нашел.
Добрый день.
Так и должно быть?
Да.
Вы можете настроить Modbus TCP Slave через библиотеку OwenCommunication - тогда можно будет объявить данные слэйва как RETAIN и они не будут обнуляться при перезагрузке.
https://youtu.be/Cv9kxIT1eOA?t=4947
и второй вопрос, Slave ID (или Unit ID) можно поменять (в sp16)? Связь работает только с 0, а где изменить я не нашел.
В SP16 слэйв отвечает только на запросы с Unit ID = 0 и 255. Изменить это поведение нельзя.
В более старых и более новых версиях - отвечает на запросы с любыми Unit ID.
Опять же, если использовать OwenCommunucation - можно задать слэйву конкретный Unit ID.
Сделал проект на OwenCommunication. Все работает.
В вашем примере в функцию MB_TcpSlave передается указатель на буфер, который состоит из массива слов. И для того чтобы передать туда переменные типа Bool и Real используются функции преобразования.
Я использовал вместо массива слов структуру с Bit, int, real и т.д. и передаю указатель на нее. Все работает нормально и не надо преобразования делать. Можно сразу использовать данные из буфера или просто копировать их.
Может быть есть какие-то подводные камни при использовании структур вместо массива в этой функции?
Евгений Кислов
14.04.2022, 10:52
Сделал проект на OwenCommunication. Все работает.
В вашем примере в функцию MB_TcpSlave передается указатель на буфер, который состоит из массива слов. И для того чтобы передать туда переменные типа Bool и Real используются функции преобразования.
Я использовал вместо массива слов структуру с Bit, int, real и т.д. и передаю указатель на нее. Все работает нормально и не надо преобразования делать. Можно сразу использовать данные из буфера или просто копировать их.
Может быть есть какие-то подводные камни при использовании структур вместо массива в этой функции?
Из подводных камней - выравнивание в структурах, об этом рассказывается в видео по ссылке выше.
Вообще, использовать структуру в качестве карты регистров слэйва - очень удобный и разумный подход.
Теперь понял, я смотрел видео с сайта, а вашу ссылку не заметил. На сайте ссылка на другое видео с массивами.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot