Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Так всем брейк, не надо нервничать)))
Распишу по порядку
1) Вы пропустили ( вероятно), что в передаче через STRING порядок не меняется.
2) Техподдержка, вероятно ответила про обычную конфигурацию, где меняется порядок регистров и байт по Модбас.
Вот и вся проблема, выложенные проекты проверены, можете повторить и проверить сами. Мой проет проверяли уже раз сто, никто проблем не нашёл)))
Последний раз редактировалось kondor3000; 25.07.2023 в 15:56.
Благодарю.
Меня БЕСЯТ невежды. У меня в той теме лежит готовый пример, рабочий.
Нет, надо всем повыносить мозги, (мне ещё и в личку понаписать), наговорить на две страницы темы - и про пример забыть.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Прошу помощи. все устройства пришли
1. на столе собрал связку плк110-30 (мастер) + 4 МВ110-8А (слайв).
2. МВ110-8А настроены через конфигуратор (адреса заданы, типы датчиков определены, параметры modbus заданы)
3. создаю тестовый проект ПЛК110-30
https://disk.yandex.ru/i/3WCEZavcfY-UEA
4. тестовая программа получает доступ к элементам стринг, отображает последний адрес устройства modbus и ошибку
5. нет никакой активности по modbus
подскажите пожалуйста, что упустил?
Вот ваша программа, где у вас 4 модуля? Что у вас за байты в основной программе и что вы сделали в ФБ Opros_MVA ? а=в это что такое? 1 а и в.jpg
А вот что должно бытьКод:w_1:=ADR(Str14); (*Начальный адрес в массиве WORD *) w_2:=ADR(Str58);
Последний раз редактировалось kondor3000; 30.07.2023 в 13:57.
это просто тест, и переменные просто для ознакомления с codesys ни какого смысла в них нет
меня интересует почему нет обмена по модбус, должно быть периодическое считывание со slave устройства и
в переменой LastAdress должен быть адрес последнего опрощенного устройства и ошибка если устройства нет.
у меня в них значение всегда 0.
сейчас создал проект с нуля по чтению одного регистра по инструкции
https://cs-cs.net/plk-oven-110-programmiruem-na-codesys
всё работает, обмен начался..
Благодарю всех.
Последний раз редактировалось Васильев; 30.07.2023 в 15:15.
Так возьмите пример, и ничего не переделывая проверьте, поменяйте конфигурацию под свой ПЛК и поставьте адрес своего МВ8А
Вот повыкидывал, всё что не работало, проверьте адрес МВ8А ( в программе 31) подключите 1 блок к RS-485-2 и проверьте, все переменные будут в глобальных
Зачем скорость поставили 9600, у вас ведь 4 блока, и поллинг 300 ms ? Вот зачем это ?
Последний раз редактировалось kondor3000; 30.07.2023 в 15:19.
и так информация для начинающих (как и я)
в МВ110-08А порядок следования байт при считывании регистров сначала младший, потом старший байт;
для значения температуры в формате Float32 в регистре 4 передаётся порядок и старшая часть мантиссы (сначала младший байт, потом старший)
в регистре 5 передаётся младшая часть мантиссы (сначала младший байт, потом старший)
в стандартном представлении чисел Float32 в памяти мк сначала идёт младшая часть мантиссы, потом порядок и старшая часть,
поэтому при получении данных с МВ110-8а необходимо слова переставить местами.
считываем данные для 4 датчиков через строковую переменную,
копируем в массив temp данные для одного датчика, через указатель типа word,
температуру в формате Float32 получаем путём копирования, через указатель типа word:
ptr:=ADR(var_real);
ptr^[0]:=temp[5];
ptr^[1]:=temp[4];
параметр Byte Sequence (trace_mode и native) при конфигурировании ModBus влияет только на порядок байт в слове при считывании Real input module (сам проверил и находил в каком-то мануле).
Спасибо большое.