1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Проблемы с чтением регистров Modbus TCP

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
a93911
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 09 июн 2017, 09:03
Имя: Андрей А.
Благодарил (а): 4 раза
Поблагодарили: 6 раз

Проблемы с чтением регистров Modbus TCP

Сообщение a93911 »

Здравствуйте! Образовалась такая проблемка. Есть компрессор, управляемый по модбасу тсп. Диапазон адресов 40001-40031. Регистры 40001-40004 служат для записи команд и уставок внешним контроллером, 40005-40031 для чтения показании. Использую MB_CLIENT. Создан блок для чтения и блок для записи. Запрос каждые 0.5 сек. Чтение проходит без проблем, а вот у блока записи постоянно висит BUSY, соответственно ничего не пишется. Статус 7002. Ошибок нет. Что можно сделать?

Dmitriy1983
здесь недавно
здесь недавно
Сообщения: 66
Зарегистрирован: 29 окт 2017, 19:52
Имя: Дмитрий
Благодарил (а): 5 раз
Поблагодарили: 13 раз

Проблемы с чтением регистров Modbus TCP

Сообщение Dmitriy1983 »

Доброе утро. Статус 7002, вроде как установка соединения. Я делал и чтение и запись через один блок MB_CLIENT, попробуй. Модбас адрес прописывал в системной DB, в той, что создается при вызове блока MB_CLIENT ?

Автор темы
a93911
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 09 июн 2017, 09:03
Имя: Андрей А.
Благодарил (а): 4 раза
Поблагодарили: 6 раз

Проблемы с чтением регистров Modbus TCP

Сообщение a93911 »

Dmitriy1983 писал(а): 12 мар 2020, 06:42 Доброе утро. Статус 7002, вроде как установка соединения. Я делал и чтение и запись через один блок MB_CLIENT, попробуй. Модбас адрес прописывал в системной DB, в той, что создается при вызове блока MB_CLIENT ?
Адрес прописал внешней константой. Можно образец кода? А то с одним блоком ругается то на одинаковый id, то на неправильный указатель на данные.

Dmitriy1983
здесь недавно
здесь недавно
Сообщения: 66
Зарегистрирован: 29 окт 2017, 19:52
Имя: Дмитрий
Благодарил (а): 5 раз
Поблагодарили: 13 раз

Проблемы с чтением регистров Modbus TCP

Сообщение Dmitriy1983 »

Я делал на S7-1500, на STL через косвенную адресацию, создал блок обработки регистров и к нему DB на каждое соединение. Там поочередно опрашивал каждый регистр (пока не получал DONE=1, не переходил к следующему регистру) , если регистр был записывающий менял МODE на 1. Так, что одним кодом тут не обойтись.
Попробуй по простому, считал информацию с пакета чтения ( появилась Done = 1), меняй MODE на 1 и уже производи запись, опять все прошло успешно ( появилась Done = 1), меняй MODE на 0 и.т.д.

Автор темы
a93911
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 09 июн 2017, 09:03
Имя: Андрей А.
Благодарил (а): 4 раза
Поблагодарили: 6 раз

Проблемы с чтением регистров Modbus TCP

Сообщение a93911 »

Dmitriy1983 писал(а): 12 мар 2020, 11:05 Я делал на S7-1500, на STL через косвенную адресацию
Можно образец кода на косвенную адресацию? Не пойму как подменять адреса подключаемых DB с регистрами для чтения/записи

Dmitriy1983
здесь недавно
здесь недавно
Сообщения: 66
Зарегистрирован: 29 окт 2017, 19:52
Имя: Дмитрий
Благодарил (а): 5 раз
Поблагодарили: 13 раз

Проблемы с чтением регистров Modbus TCP

Сообщение Dmitriy1983 »

Доброе утро. Не надо менять адреса, надо менять MODE с 0 на 1. Вот пример косвенной адресации, что бы понять смысл.
// Считывание информации о регистре при успешной обработки
A #Done
JCN n_D1
// Проверка на записывающий регистр
A DBX [ AR1 , P#144.0 ]
JC n_w1

L DBW [ AR1 , P#32.0 ] //Текущее значение из регистра
T DBW [ AR1 , P#36.0 ] // Запись для вывода на Скаду

JC y_W1

n_w1: NOP 0 // Регистр записывающий
// Прооверка на изменение значения
L DBW [ AR1 , P#36.0 ] // Текущее значение на скаде
L DBW [ AR1 , P#32.0 ] //Текущее значение из регистра
<>I
JCN y_W1
L DBW [ AR1 , P#36.0 ] // Текущее значение на скаде
T DBW [ AR1 , P#32.0 ] //Записывает значение в регистр

// Задание на запись 1 регистра
L 1
T DBB [ AR1 , P#26.0 ] //Режим записи
JU end
// Записть прошла успешно
y_W1: NOP 0
// Переход на 2 шаг
L 2
T DBW [ AR1 , P#24.0 ]
// Задание на считывание 2 регистра
L DBD [ AR1 , P#76.0 ]
T DBD [ AR1 , P#28.0 ] //Номер необходимого регистра

L 0
T DBB [ AR1 , P#26.0 ] //Режим считывания

end: NOP 0

Когда посылаем в DBB [ AR1 , P#26.0 ] - 0 ( Это считывание из регистра ) , - 1 ( Это запись в регистр )
Его и посылаем в блок MB_CLIENT на вход MB_MODE.

Автор темы
a93911
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 09 июн 2017, 09:03
Имя: Андрей А.
Благодарил (а): 4 раза
Поблагодарили: 6 раз

Проблемы с чтением регистров Modbus TCP

Сообщение a93911 »

Спасибо, буду разбираться. Мне нужно в DB сервера сначала записать 5 регистров (40001-40005), далее прочитать 31 регистр (40011-40042). Получается у DB клиента адрес для записи прочитанных регистров необходимо задавать со смещением, иначе затрем начало, где располагаются регистры для отправки на запись. Или использовать разные DB, один на запись, один на чтение, но нужно знать как подменять адреса

Автор темы
a93911
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 09 июн 2017, 09:03
Имя: Андрей А.
Благодарил (а): 4 раза
Поблагодарили: 6 раз

Проблемы с чтением регистров Modbus TCP

Сообщение a93911 »

Решил проблему следующим образом. Были созданы 3 DB блока. В одном хранятся данные для записи, в другой записываются прочитанные данные. Третий DB промежуточный.
К блоку MB_CLIENT, выводу DONE подключен счётчик. По значению 0 счётчика данные для записи копируются в промежуточный DB, указывается начальный адрес Modbus регистра для записи, кол-во регистров и MODE=1. Далее вызывается блок MB_CLIENT. По значению Done=1 значение счётчика меняется на 1. Указываем начальный адрес Modbus регистра для чтения, кол-во регистров и MODE=0. Далее вызывается блок MB_CLIENT. По значению DONE=1 & счётчик=1 копируем данные из промежуточного DB в DB для прочитанных данных.
Далее значение счётчика меняется на 0 и цикл повторяется.

GReZ78
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 06 июл 2017, 11:45
Имя: Александр
Страна: Казахстан
город/регион: Кызылорда

Проблемы с чтением регистров Modbus TCP

Сообщение GReZ78 »

Народ, Доброго времени суток!!! где найти материал в TiaPortal s7-1500 сделать MODBUS rs485, в 1200 проблем нет, но этого блока нет в библиотеке для 1500. короче печалько и спс кто отзовется)
Ответить

Вернуться в «Simatic TIA Portal»