PDA

Просмотр полной версии : Обращение к регистру ошибок модуля MODBUS



Назаров Александр
16.12.2008, 19:28
Каким образом, кроме прямой адресации, можно обратиться к регистрам "Last address" и "Last error" в модулях управления периферией? АТ нельзя поменять на глобальную переменную, а чем они отличаются от регистров данных?

Филоненко Владислав
16.12.2008, 21:03
Попробуйте назвать эти переменные и обращатся по имени.
Или взять указатель функцией ADR()

Логвиненко Андрей
16.12.2008, 21:20
Как привязано обновление "Last address" и "Last error" к циклу ПЛК?
Возможна ли такая ситуация, когда Master за время одного цикла проведет опрос нескольких каналов, и значения "Last address" и "Last error" кроме последнего будут утеряны?

Kirill
17.12.2008, 09:48
Как привязано обновление "Last address" и "Last error" к циклу ПЛК?
Возможна ли такая ситуация, когда Master за время одного цикла проведет опрос нескольких каналов, и значения "Last address" и "Last error" кроме последнего будут утеряны?

Поскольку сам обмен к циклу не привязан, то не привязаны и изменения этих переменных. В обычных условиях цикл ПЛК работает быстрее, чем производится запрос/ответ. Если только вы сами не подкрутили минимальное время цикла до, скажем, 10-15 мс.

Принципиально, описанная ситуация с опросом нескольких каналов за цикл возможна в случае больших программ или перенастроенного времени цикла.

Филоненко Владислав
17.12.2008, 11:04
Как привязано обновление "Last address" и "Last error" к циклу ПЛК?
Возможна ли такая ситуация, когда Master за время одного цикла проведет опрос нескольких каналов, и значения "Last address" и "Last error" кроме последнего будут утеряны?

Ситуация принципиально невозможна, если цикл ПЛК 1 мс. При больших значениях и большом кол-ве UMD (т.е. когда (период опроса/число UMD)<ЦИКЛА ПЛК )возможна.

Назаров Александр
17.12.2008, 11:23
Попробуйте назвать эти переменные и обращатся по имени.
Или взять указатель функцией ADR()
Тема немного ушла от первоначального вопроса. Обращение к регистрам состояния возможно только как:

VAR_GLOBAL
Error AT %QD9.0: DWORD ;(*Last Error в UMD*)
END_VAR

Или ещё как то?

Филоненко Владислав
17.12.2008, 13:40
Попробуйте назвать эти переменные и обращатся по имени.
Или взять указатель функцией ADR()

Назаров Александр
17.12.2008, 13:57
Попробуйте назвать эти переменные и обращатся по имени.
Или взять указатель функцией ADR()

В том то и дело, что назвать их в модуле не позволяет среда программирования! или это только у меня такой глюк? :confused:

Филоненко Владислав
17.12.2008, 15:12
Откройте файл hardware.cfg в каталоге, куда установлен таргет
Найдите описание модуля [Module.MODBUS_MASTER_ID450]
В строке SymbolicNames=locked вместо locked напишите unlocked

Назаров Александр
17.12.2008, 15:20
Данке шон, теперь понятно!:)

Назаров Александр
17.12.2008, 17:10
Возможна ли прогнозируемая адресация через POINTER к элементам ModBus(Master) отталкиваясь, например, от адреса "Last address"? Просто хотелось бы как то унифицировать свои функциональные блоки для МДВВ, МВУ, МВА в зависимости от их количества и определенного порядка их подключения в ModBus(Master) и избавиться от глобальных имен, а пользоваться, например, массивами или структурами.

Филоненко Владислав
17.12.2008, 18:45
Если Вы расположите свои UMD соответствующим, "прогнозируемым" образом, то возможно. Однако при обновлении среды разработки не гарантируется, что расположение каналов памяти не сдвинется. Уже было такое.
Лучше:
а) в гл. переменных создайте массив структур, и проинициализируйте указатели через ADR()
б) поименуйте все переменные именем, содержащим адрес и номер регистра и обращайтесь к ним по имени через библиотеку SymLib.lib

Назаров Александр
17.12.2008, 20:49
Если Вы расположите свои UMD соответствующим, "прогнозируемым" образом, то возможно. Однако при обновлении среды разработки не гарантируется, что расположение каналов памяти не сдвинется. Уже было такое.
Лучше:
а) в гл. переменных создайте массив структур, и проинициализируйте указатели через ADR()
б) поименуйте все переменные именем, содержащим адрес и номер регистра и обращайтесь к ним по имени через библиотеку SymLib.lib

А SymLib.lib что это такое?

Филоненко Владислав
18.12.2008, 11:20
Библиотека для доступа к значениям переменных в ПЛК по их имени

Назаров Александр
20.12.2008, 17:35
Библиотека для доступа к значениям переменных в ПЛК по их имени

Не нашел такой библиотеки на диске:(

Филоненко Владислав
21.12.2008, 12:52
Диск какой версии? Выложите мыло, вышлем.

Назаров Александр
21.12.2008, 14:34
Диск какой версии? Выложите мыло, вышлем.

Диск 8 версии. Но, я думаю, что от версии диска это не зависит, т.к. когда-то я обнаружил появляющееся предупреждение при использовании ФБ Blink из Util 2006г. В результате общения в форуме мне прислали Util 2007г, однако на диске как были библиотеки старые так они и остались. Наклеить бирочку 6.08.zip на новый диск оказывается проще, чем поменять его содержание. А то народ перестанет ходить на форум!:(

Филоненко Владислав
21.12.2008, 15:31
Тогда мыло дайте, вышлю. На сайте выкладывать сам не могу, прав нет.

Назаров Александр
21.12.2008, 15:42
Тогда мыло дайте, вышлю. На сайте выкладывать сам не могу, прав нет.

Пордон, забыл... :) stint_nag@bk.ru

Филоненко Владислав
21.12.2008, 19:11
ЗАвтра вышлю

Назаров Александр
07.08.2009, 15:45
Откройте файл hardware.cfg в каталоге, куда установлен таргет
Найдите описание модуля [Module.MODBUS_MASTER_ID450]
В строке SymbolicNames=locked вместо locked напишите unlocked
Все работало как описано выше. Пробую сделать это сейчас и не получается? В чем может быть прикол? Т.е меняю locked -> unlocked. Сохраняю файл. Открываю программу а доступа к переменным LastAdres не имею.

Назаров Александр
07.08.2009, 16:21
Выяснил, что на новом проекте все Ok'. А вот там, где я менял конфигурацию контроллера со 150 на 100 разлочка не помогает. Что делать?

Филоненко Владислав
07.08.2009, 16:42
Надо создать модуль заново.

Назаров Александр
07.08.2009, 17:13
Спасибо за ответ, уже перебил всю конфигурацию, а можно было только модуль.... не подумал!:)