Просмотр полной версии : Modbus RTU
Уважаемые специалисты подскажите пожалуйста что делать в следующей ситуации.
ПЛК 100 должен связываться с ИП320 и двумя МДВВ .
В PLC Configuration используется Modbus(Master) и в нём 27 Universal Modbus device
При компиляции программы для ПЛК 100 появляется сообщение
Error 3454: The address '%QD8.19.0.0' points to a used memory block!
Error 3454: The address '%QB8.20.0' points to a used memory block!
Error 3454: The address '%QD8.21.0.0' points to a used memory block!
Error 3454: The address '%QB8.22.0' points to a used memory block!
Всего требуется опросить порядка 30 переменных типа Real с помощью Real input modul.
ПЛК100 с какой буквой на конце?
а зачем вам 27 Universal Modbus device'ов для 3х приборов?
Намутили с "AT % ..."
Просто дайте имена переменным в модулях и не используйте прямую адресацию
Я не задаю прямую адресацию. Прямая адресация AT%... задаётся автоматически при вводе модуля в Plc Configuration.
Universal Modbus device позволяет опрашивать каждую переменную по индивидуальной комаде Start (16#FF). Если внутри одного Universal Modbus device помещу несколько Real input module, то будет менее полный контроль над процессом опроса.
Хотя в ваших словах есть смысл, но мне неизвестно, что есть ограничения на число Universal Modbus device
Выслал zip-файл, содержащий только часть проекта с Plc configuration. После компиляции возникают сообщения об ошибках.
при компиляции ни 1й ошибки не возникает
и у меня нет ошибок
проект/очистить все помогает ?
Спасибо за ответы, но у меня почему-то сообщения об ошибках сохраняются.
Возможно это связано с тем, что я включаю в проект модули Universal Modbus device путём вырезания предыдущего и копировыния в его проект, а не с помощью выпадающего меню Append subelement. Может быть в этом случае он не корректно размещается в памяти. Но тогда не понятно почему у Вас компиляция проходит без сообщений об ошибоках.
Кроме того, путём копирования я помещаю в проект 25 модулей Universal Modbus device, а сообщения об ошибках указывают только на 4 модуля с 19 по 22 (из 25). Мне в голову приходит только одно объяснение,что включение модуля в проект путём копирования не является корректным.
Николаев Андрей
17.05.2012, 09:48
Выкладывайте скрин-шот ошибки приложенным файлом.
К сожалению, не помогает.
Я создал новый проект (prb120617_0), в котором в разделе Resources/Plc configuration вставил всего два модуля Universal Modbus device. В каждый поместил по одному Real output module. И при компиляции появляется сообщение об ошибке.
Error 3454: The address '%QD8.1.0.0' points to a used memory block!
Error 3454: The address '%QB8.2.0' points to a used memory block!
Затем я создал второй проект (prb120617_1), в котором в разделе Resources/Plc configuration вставил третий модуль Universal Modbus device. И в нём Real output module. И при компиляции появляется то же самое сообщение об ошибке.
Error 3454: The address '%QD8.1.0.0' points to a used memory block!
Error 3454: The address '%QB8.2.0' points to a used memory block!
Далее я создал третий проект (prb120617_2), в котором в разделе Resources/Plc configuration вставил тчетвёртый модуль Universal Modbus device. И в нём Real output module. И при компиляции появляется новое сообщение об ошибке.
Error 3454: The address '%QD8.1.0.0' points to a used memory block!
Error 3454: The address '%QB8.2.0' points to a used memory block!
Error 3454: The address '%QD8.3.0.0' points to a used memory block!
Error 3454: The address '%QB8.4.0' points to a used memory block!
перепрошивали ли Вы свой контроллер после того как создали проект для него в КДС?
Так как проект компилируется с ошибками, то я его записать в контроллер не могу. (Или может быть я не правильно понял, что Вы имеете в виду, говоря о перепрошивке контроллера?)
да несколько другое, пустые проекты в ПЛК заливаются? Ну скорее всего Вы прошивку в ПЛК не меняли. Все же перед компиляцией и очисткой, попробуйте с самого начала поставить таргет-файл для Вашего ПЛК
все 3 проекта компилируются без проблем. у вас какая версия Codesys? попробуйте переустановить с полным удалением.
Большое спасибо за ответы
1. Пробные проекты переда полностью и у меня нет никакой дополнительной информации по ним.
2. Так как эти проекты у уважаемого swerder'a компилируются без сообщений об ошибках, то я попробую переустановить CoDeSys как он советует
3. Или/и вместо Real input и Real output module буду использовать модули Register input modul и Register output module. С ними проблем никогда не было. Только придётся масштабировать переменные при приёме и передаче.
Большое спасибо за ответы
1. Пробные проекты переда полностью и у меня нет никакой дополнительной информации по ним.
2. Так как эти проекты у уважаемого swerder'a компилируются без сообщений об ошибках, то я попробую переустановить CoDeSys как он советует
3. Или/и вместо Real input и Real output module буду использовать модули Register input modul и Register output module. С ними проблем никогда не было. Только придётся масштабировать переменные при приёме и передаче.
компилируются Ваши проекты у всех кроме Вас :) видимо действительно надо все ставить с нуля
По поводу Real IM и Register IM если будет стоять два регистра, то из них всегда можно получить тот же Real, просто пугают Ваши слова о каком то масштабировании
А компилится именно то что выложили ? (кастрированное)
Удалил CoDeSys. Потом переустановил CoDeSys. Программа стала компилироваться без сообщений об ошибках. Спасибо за совет.
По поводу масштабирования.
Предположим переменная принимает значения из диапазона 0..14 с дискретностью 0.01.
Предположим надо передать число 3.14, используя Register OM и передавая только один регистр(так как я считал, что попытка выделить для приёма или передачи область памяти, содершащую два регистра, вызывала, каким-то образом, сообщение об ошибке).
Число умножаю на 100, преобразую произведение в формат WORD и передаю через модуль Register OM. В случае приёма выполняю обратные действия. Преобразую принятую переменную из формата WORD в REAL и делю на 100.
Число умножаю на 100, преобразую произведение в формат WORD и передаю через модуль Register OM. В случае приёма выполняю обратные действия. Преобразую принятую переменную из формата WORD в REAL и делю на 100.
так это несовсем называется масштабирование и во вторых лучше INT используйте, WORD не понимает отрицательных значений
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot