Страница 1 из 1
Добавлено: 14 янв 2012, 03:02
Б.Е.Г.
В с_блоке использована функция
dep_DiscretRead(&DBlock0_out ,d_30CDE3,0);
При компиляции сообщение
"statp_c.c",22 Error[100]: Undeclared identifier: 'd_30CDE3'
Где объявляется этот идентификатор?
Добавлено: 17 янв 2012, 15:14
Равиль
На месте переменной d_30CDE3 должен быть номер читаемого дискрета. Похоже что вы просто скопировали использование функции dep_DiscretRead из исходных файлов созданных Разработчиком, а там номера дискретов задаются как глобальные переменные в одном из сгенерированных файлов.
Добавлено: 17 янв 2012, 16:40
Б.Е.Г.
Спасибо. Но где тогда будет название параметра?
Добавлено: 17 янв 2012, 17:40
Равиль
Там же, в сгенерированных Разработчиком файлах, есть соотвествие названия глобальной переменной ( d_30CDE3). В начале работы компонента считываются таблицы с парами номер-название параметра (таблица Din) и по этим парам и соотвествию устанавливается правильное значение глобальной переменной (d_30CDE3), равное номеру дискрета.
Добавлено: 18 янв 2012, 02:24
Б.Е.Г.
Прошу прощени, но я ничего не понял: где и как я должен задать имя параметра, которое отобразится в конфигурации компонента, и которому при конфигурировании задам номер дискрета в базе дискретов.
Я написал маленький С-блок, который проглатывается компиляторлом, но не имеет конфигурационных таблиц:
dep_DiscretRead(&DBlock0_out ,5,0);
vd1=DBlock0_out.value;
dep_DiscretWrite(6,vd1,FALSE,0);
Подскажите, как надо было бы написать.
Добавлено: 26 янв 2012, 15:54
vadim
Чтобы в с-блоке использовать конфигурационные параметры, нужно придерживаться следующих правил:
1. С-блок должен вызываться из блока-диаграммы;
2. С-блок должен получать номера дискретов из блока-диаграммы через коннектор и писать в свои переменные;
3. В с-коде в качестве параметра функции dep_DiscretRead использовать переменные с-блока, которые через коннектор получают номера дискретов.
Например у Вас есть блок-диаграмма "Д" и с-блок "С". На панель "диаграмма" у "Д" добавьте элемент "Номер дискрета" и с-блок "С". Соедините "Номер дискрета" с терминалом с-блока "С". На панель "панель" с-блока "С" добавьте число и соедините его с терминалом коннектора (убедитесь что число настроено на вход). Далее в коде на панели "Диаграмма-С" с-блока используйте название псевдонима числа в качестве параметра функции dep_DiscretRead.
Добавлено: 27 янв 2012, 00:55
Б.Е.Г.
Спасибо, Vadim! Исе понятно, но беда в следующем:
У меня прлг7рамма управления насосами объета сч 10 группами насосов.
Для каждой группы вводятся 12 уставок. Итого 120 параметров. Изобразить на одной диаграмме их невозможно. Невозможно, также иметь с_блок со 120 терминалами. Прошу прощения, что сразу не написал об этом.
Скажите пожалуйста, Ваш вариант - единственный, или все таки можно обойтись одним толькоь с_блоком. Может где-то можно ввести определение номера параметра в виде, скажем, t_ABCDEF ? Аброкадабру ABCDEF готов составлять вручную
PS. Диаграмму можно разбить на 10-15 блоков, но так не хочется использовать этот некрасивый вариант..
Добавлено: 30 янв 2012, 13:45
vadim
Можно создать с-блок который на вход получает номер первой уставки. В с-блоке создается цикл выполняющий одинаковые действия над всеми уставками. Номер очередной уставки получается инкрементом номера первой уставки.
На диаграмму нужно добавить 10 номеров дискретов и 10 копий с-блока и соединить каждый номер с соответствующим с-блоком.
В данном случае с-блок можно заменить блоком-диаграммой.
Предполагается что уставки одной группы расположены в возрастающем порядке рядом друг с другом. В конфигурации должно появиться 10 номеров уставок (начальный для каждой группы).
Добавлено: 30 янв 2012, 15:10
Б.Е.Г.
Спасибо. Мысль мне понравилась.
Добавлено: 02 фев 2012, 10:30
Б.Е.Г.
В моем проекте много блоков, необходима разбивка по библиотекам. В какой-то момент сообщение: "Неправильное размещенрие блоков"
Перерыл help, ничего не нашел.
Какие же требования к размещению блоков?
Попутно - как определить до компиляции, что lib слишком велика?
Добавлено: 02 фев 2012, 10:42
vadim
По поводу сообщения "Неправильное размещение блоков". Библиотеки не должны использовать блоки друг друга в обоих направлениях. То есть если блоки одной библиотеки используют блоки другой, то ничего страшного в этом нет. Но при этом, если хотя бы один блок второй библиотеки использует хотя бы один блок из первой, то вы увидите данное сообщение.
Ответ на второй вопрос - никак. Определить, что lib слишком велика может только компилятор во время компиляции.
Добавлено: 05 мар 2012, 03:59
Б.Е.Г.
При запуске контроллера D-182 с компонентом PWB2, контроллкр свалился в минимальный
режим с ошибкой:
1 ##Îøèáêà çàãðóçêè áèáëèîòåêè 52736 PWB2_0 01.01.1980 8:09:26:818 0106
2 Îøèáêà çàãðóçêè áèáëèîòåêè 44816 PWB2_0 LibID 01.01.1980 8:09:26:819 0606
3 Ôàòàëüíàÿ îøèáêà êîìïîíåíòà 34480 PWB2_0 CompID 01.01.1980 8:09:26:819 0601
Состояние памяти:
Свободно в РПЗУ 193,15;
ОЗУ 244,0
Под таблиы 28,12 из 32.
Вопрос: что такое ошибка 0106 и в чем причина отказа?
Добавлено: 08 мар 2012, 06:17
Б.Е.Г.
При сборке проекта регулярно получаю сообщение:
"не могу открыть файл С:\out\00020024\out.txt"
Выбор у меня один - остановить сборку, хотя программа сообщает "Остановлено пользователем"
После этого запустить сборку невозможно, приходится перезагружать "Разработчик". Иногда после перезагрузки сборка проходит, иногда снова "Не могу..."
ПРошу объяснить, что это значит?
Добавлено: 08 мар 2012, 06:24
Б.Е.Г.
Почему сборка каждый раз начинается сначал, зачем заново компилируются блоки и библиотеки, которых изменения не касаются?
У меня сборка длится минут 5-7, даже если я изменил одну букву в одном блоке.
Добавлено: 08 мар 2012, 08:33
Б.Е.Г.
Наконец получил "ОК", но
LibIni.hex - 16443
LibIni1.hex - 24389
Как же можно уменьшить размер библотеки?
Добавлено: 11 мар 2012, 13:07
Равиль
На всякий случай хочу заметить, что размер библиотеки проверяется в программе "Конфигуратор" в меню Администратор/Копирование файлов. Если размер библиотеки инициализации превышает допустимый (8192 байта), то нужно разбивать компонент на более мелкие компоненты.
Добавлено: 12 мар 2012, 05:24
Б.Е.Г.
Равиль, спасибо, но:
1. Программа - одно целое, и ни одна часть ее не может работать без остальных. Посоветуйте, пожалуйста: как можно связать части, используя общие массивы данных.
2. Вы ответили на последний вопрос, а я задал несколько вопросов, на которые нет ответа.
Добавлено: 12 мар 2012, 16:06
Равиль
0106 - расшифровывается как ##Ошибка загрузки библиотеки. Аргумент - номер библиотеки. Причины могут быть разные - например отсутствие этой библиотеки в контроллере.
С сообщением "не могу открыть файл ..." не сталкивался, ничего сказать не могу.
Действительно в Разработчике сборка всегда начинается сначала - это особенность программы.
Два компонента можно связать только через дискреты, аналоги или счетчики.