PDA

Просмотр полной версии : Modbus RTU



uvwxyz
16.05.2012, 11:09
Уважаемые специалисты подскажите пожалуйста что делать в следующей ситуации.

ПЛК 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.

capzap
16.05.2012, 11:14
ПЛК100 с какой буквой на конце?

uvwxyz
16.05.2012, 11:17
PLC100.R-M

swerder
16.05.2012, 11:23
а зачем вам 27 Universal Modbus device'ов для 3х приборов?

Валенок
16.05.2012, 11:23
Намутили с "AT % ..."
Просто дайте имена переменным в модулях и не используйте прямую адресацию

uvwxyz
16.05.2012, 11:41
Я не задаю прямую адресацию. Прямая адресация AT%... задаётся автоматически при вводе модуля в Plc Configuration.

Universal Modbus device позволяет опрашивать каждую переменную по индивидуальной комаде Start (16#FF). Если внутри одного Universal Modbus device помещу несколько Real input module, то будет менее полный контроль над процессом опроса.
Хотя в ваших словах есть смысл, но мне неизвестно, что есть ограничения на число Universal Modbus device

Валенок
16.05.2012, 11:51
Проект выложите ?

uvwxyz
16.05.2012, 12:11
Выслал zip-файл, содержащий только часть проекта с Plc configuration. После компиляции возникают сообщения об ошибках.

swerder
16.05.2012, 14:10
при компиляции ни 1й ошибки не возникает

Валенок
16.05.2012, 19:19
и у меня нет ошибок
проект/очистить все помогает ?

uvwxyz
17.05.2012, 08:33
Спасибо за ответы, но у меня почему-то сообщения об ошибках сохраняются.

Возможно это связано с тем, что я включаю в проект модули Universal Modbus device путём вырезания предыдущего и копировыния в его проект, а не с помощью выпадающего меню Append subelement. Может быть в этом случае он не корректно размещается в памяти. Но тогда не понятно почему у Вас компиляция проходит без сообщений об ошибоках.
Кроме того, путём копирования я помещаю в проект 25 модулей Universal Modbus device, а сообщения об ошибках указывают только на 4 модуля с 19 по 22 (из 25). Мне в голову приходит только одно объяснение,что включение модуля в проект путём копирования не является корректным.

swerder
17.05.2012, 09:06
проект -> очистить все

Николаев Андрей
17.05.2012, 09:48
Выкладывайте скрин-шот ошибки приложенным файлом.

uvwxyz
17.05.2012, 09:57
К сожалению, не помогает.

Я создал новый проект (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!

capzap
17.05.2012, 10:07
перепрошивали ли Вы свой контроллер после того как создали проект для него в КДС?

uvwxyz
17.05.2012, 10:21
Так как проект компилируется с ошибками, то я его записать в контроллер не могу. (Или может быть я не правильно понял, что Вы имеете в виду, говоря о перепрошивке контроллера?)

capzap
17.05.2012, 10:32
да несколько другое, пустые проекты в ПЛК заливаются? Ну скорее всего Вы прошивку в ПЛК не меняли. Все же перед компиляцией и очисткой, попробуйте с самого начала поставить таргет-файл для Вашего ПЛК

swerder
17.05.2012, 10:33
все 3 проекта компилируются без проблем. у вас какая версия Codesys? попробуйте переустановить с полным удалением.

uvwxyz
17.05.2012, 11:02
Большое спасибо за ответы

1. Пробные проекты переда полностью и у меня нет никакой дополнительной информации по ним.
2. Так как эти проекты у уважаемого swerder'a компилируются без сообщений об ошибках, то я попробую переустановить CoDeSys как он советует
3. Или/и вместо Real input и Real output module буду использовать модули Register input modul и Register output module. С ними проблем никогда не было. Только придётся масштабировать переменные при приёме и передаче.

capzap
17.05.2012, 11:09
Большое спасибо за ответы

1. Пробные проекты переда полностью и у меня нет никакой дополнительной информации по ним.
2. Так как эти проекты у уважаемого swerder'a компилируются без сообщений об ошибках, то я попробую переустановить CoDeSys как он советует
3. Или/и вместо Real input и Real output module буду использовать модули Register input modul и Register output module. С ними проблем никогда не было. Только придётся масштабировать переменные при приёме и передаче.

компилируются Ваши проекты у всех кроме Вас :) видимо действительно надо все ставить с нуля
По поводу Real IM и Register IM если будет стоять два регистра, то из них всегда можно получить тот же Real, просто пугают Ваши слова о каком то масштабировании

Валенок
17.05.2012, 14:34
А компилится именно то что выложили ? (кастрированное)

uvwxyz
18.05.2012, 16:49
Удалил CoDeSys. Потом переустановил CoDeSys. Программа стала компилироваться без сообщений об ошибках. Спасибо за совет.

По поводу масштабирования.
Предположим переменная принимает значения из диапазона 0..14 с дискретностью 0.01.
Предположим надо передать число 3.14, используя Register OM и передавая только один регистр(так как я считал, что попытка выделить для приёма или передачи область памяти, содершащую два регистра, вызывала, каким-то образом, сообщение об ошибке).
Число умножаю на 100, преобразую произведение в формат WORD и передаю через модуль Register OM. В случае приёма выполняю обратные действия. Преобразую принятую переменную из формата WORD в REAL и делю на 100.

capzap
18.05.2012, 17:54
Число умножаю на 100, преобразую произведение в формат WORD и передаю через модуль Register OM. В случае приёма выполняю обратные действия. Преобразую принятую переменную из формата WORD в REAL и делю на 100.

так это несовсем называется масштабирование и во вторых лучше INT используйте, WORD не понимает отрицательных значений