)))) Никаких загадок, товарищ. Ключевое слово - "выравнивание"
Вид для печати
)))) Никаких загадок, товарищ. Ключевое слово - "выравнивание"
Yegor, а как насчет выравнивания?
Мне кажется, чтобы правильно работала такая конструкция someRealVar := ptrToReal^; размер переменных rcvBuf и someRealVar должен быть кратен 4 байтам. У Вас так или нет?
Опередили :)
Поправлю. Не размер, а содержимое в ptrToReal. Обращение к real/dword/ФБ/struct через ^ - только по адресу кратному 4.
Если дело в выравнивании, то почему работает когда я убираю SysComRead?
Забейте. Видимо, адрес указателя в экспериментах зависел от SysComRead. Да, дело в выравнивании. Жесть какая-то. Толку от таких указателей?
Как бы ни было, спасибо.
Приветствую всех! Продолжаю свой проект. Конфигурация прошла успешно. Ну пока всё выглядит именно так:). Далее пошла визуальная составляющая. У датчика есть 4 состояния: авария, порог 1, порог 2 и "неработа". Честно для меня не ясно отличия первого и последнего, но не буду упрощать ибо не дано сея право мне :) Планировалось на небольшой схемке объекта накидать "кружков-пяточков" и завязать состояние датчика с ними, а именно менять цвет. Но у "пяточков" всего два возможных цвета: норм и тревога. Так как тут быть?! Ну я нашёл 2 выхода. Первое объединить порог1 и порог2 как тревожный цвет. Авария и "неработа", как отсутствие заливки. А отсутствие порогов,аварии и "неработы" как нормальная заливка. В переменных, отвечающих за заливку, вместо переменной указать условие.Пример: имеем две переменные состояния А и В,то для заливки имеем "A AND B". Можно ли сделать так? Каков синтаксис? Нужны ли по краям скобки? Какие ограничения? Я записал,компилятор не ругнулся, но как говориться....
Есть второй вариант, с использование изображений, создания пул изображений. Но это всё влечёт лишние переменные(память). Да и "пяточки" такие мелкие,ещё в них картинку пихать!
У кого есть какие варианты решения сей проблемы?
Как я уже упомянул всё это чисто для наглядности. Для подробной информации по датчикам, при нажатии на "пяточки", будет открываться другое окно визуализации, с загрузкой параметров датчика.
А ларчик то проще открывается - вам необходимо не цвет тревоги использовать а цвет заливки. И передавать туда значение соответствующее цвету только в формате c прозрачностью.
Вечером смотрел этот вариант.Будет создаваться переменная DWORD и ей присваиваться значения цвета в ходе ветвления IF. Значения цвета в формате RGB. А именно 16#00RRGGBB. Или конкретно, вот такой цвет "Военно-воздушный синий" есть 16#005D8AA8 :)
Что можно посмотреть по созданию однотипных объектов с их данными? Т.е если будет 100 одинаковых датчиков,чтобы не вбивать всё от руки!
Структуры, массивы и циклы посмотрите в ST;-)
Доброго дня!
Имеется некоторый набор переменных D_1_1, D_1_2, D_1_3, D_1_4, D_1_5, D_1_6 типа WORD. Рассматриваем биты каждой переменной. Например "D_1_1.1" Допустим представляем как массив: D_1:ARRAY[1..6] OF WORD
Теперь как в программе обратиться к элементам через цикл FOR!?:confused:
Пробовал напрямую: FOR i:=1 TO 6 DO
IF(D_1[i].0 AND D_1[i].3) THEN
color:=16#66FF00;
END_IF
END_FOR
Компилятор матерился во всю,да и я сам понял что тут не всё так просто.
Согласно справки есть функция "CheckBounds"."Для обеспечения доступа к элементам массива при выполнении программы в приложении должна быть доступна функция CheckBounds." НУ добавил я её, а дальше что делать не пойму! Куда, что !?
ARRAY[1..6,0..7] OF BOOL попробуйте
может из этого проекта что то можно использовать http://www.owen.ru/forum/showthread....l=1#post142016
Вы сообщения конкретные называйте. У меня подобный код компилируется без проблем.Цитата:
Компилятор матерился во всю
Спасибо! Как всегда помогли ;) Почему, то в теле цикла FOR значение " i " выбегает за значение " 6 " и устанавливается в " 7 " , хотя по умолчанию "0"( эмуляция). Надо ли использовать "CheckBounds"? Как это работает? Отдельно создалось "CheckBounds(FUN)", теперь в основной "PLC_PRG" её вызываем?
------ Компиляция : Приложение: Device.Application -------
типизировать код...
[ERROR] prob_1: Visualization [Device: Plc Logic: Application](ID элемента 0): C0032: Невозможно конвертировать тип 'ARRAY [1..6] OF DWORD' в тип 'ANY_NUM'
Компиляция завершена -- 1 ошибок, 0 предупреждений
сейчас переписал по новой и всё заработало :mad:
всё, спасибо, разобрался!
да когда запускаешь эмуляцию, значение "i" в таблице переменных стоит "7". Хотя программа ещё ни разу не выполнялась! Ладно! Не важно!
Добрый день!
В продолжении работы с визуализацией возникла необходимость следующих действий. Имеется общий план расположения датчиков. Датчики отображены,допустим, как кружочки. При клике на них, открывается окно визуализации с подробной информацией. Как перейти на другую визуализацию я решил через Inputconfiguration>OnMouseClick>Изменить отображаемую визуализацию. У визуализации с подробной инфой есть свои переменные, которым будет присваиваться значения датчиков, при смене визуализаций. Я решил использовать для этой цели Inputconfiguration>OnMouseClick>Выполнить ST-код, всё там же, при клике по кружочку. Т.е кликаем,переходим,присваиваем через ST-код.
nomer_dat:=1.1;
nkpr:=N[1,1];
IF(D[1,1].0 AND D[1,1].3)THEN
colornorm:=TRUE;
sost_text:=1;
END_IF
IF(D[1,1].0 AND D[1,1].3 AND D[1,1].1)THEN
colorpor1:=TRUE;
sost_text:=2;
END_IF
IF(D[1,1].0 AND D[1,1].3 AND D[1,1].1 AND D[1,1].2)THEN
colorpor2:=TRUE;
sost_text:=3;
END_IF
IF(NOT(D[1,1].0 AND D[1,1].3))THEN
colorerr:=TRUE;
sost_text:=4;
END_IF
при компиляции пошли ошибки:
------ Компиляция : Приложение: Device.Application -------
типизировать код...
[WARNING] iodrvmodbus, 3.5.4.0 (3s - smart software solutions gmbh): UpdateSlaveFBTriggers [ModbusSlaveComPort]: C0196: Неявная конверсия из типа без знака 'UINT' в тип со знаком 'INT': возможно изменение знака
[WARNING] gazoanaliz: C0200: Отсутствует разрешение для заполнителя CmpCodeMeter
[ERROR] gazoanaliz: Таргет-визуализация [Device: Plc Logic: Application: Менеджер визуализации](Таргет-визуализация): Стартовая визуализация <Visualization1> не существует
[ERROR] gazoanaliz: Vis_ASN [Device: Plc Logic: Application](Вход элемента ID 25): [C0046: Идентификатор 'nomer_dat' не задан
Компиляция завершена -- 2 ошибок, 2 предупреждений
коментирую
//nomer_dat:=1.1;
//nkpr:=N[1,1];
далее
------ Компиляция : Приложение: Device.Application -------
типизировать код...
[WARNING] iodrvmodbus, 3.5.4.0 (3s - smart software solutions gmbh): UpdateSlaveFBTriggers [ModbusSlaveComPort]: C0196: Неявная конверсия из типа без знака 'UINT' в тип со знаком 'INT': возможно изменение знака
[WARNING] gazoanaliz: C0200: Отсутствует разрешение для заполнителя CmpCodeMeter
[ERROR] gazoanaliz: Таргет-визуализация [Device: Plc Logic: Application: Менеджер визуализации](Таргет-визуализация): Стартовая визуализация <Visualization1> не существует
[ERROR] gazoanaliz: Vis_ASN [Device: Plc Logic: Application](Вход элемента ID 25): C0231: Здесь требуется выражение типа 'BOOL'
Компиляция завершена -- 2 ошибок, 2 предупреждений
в чём причина? переменные определены глобально,текстовый лист создан. здесь есть привязка выполнения ST-кода только к данной визуализации? как можно осуществить задумку?
nomer_dat глобальная? Скорее всего нет, тогда перед ней необходимо указать какому POU она принадлежит: POU_Name.nomer_dat
то есть указать её полное имя!?
Проверьте, задана ли стартовая визуализация? А то судя по всему нет.Цитата:
[ERROR] gazoanaliz: Таргет-визуализация [Device: Plc Logic: Application: Менеджер визуализации](Таргет-визуализация): Стартовая визуализация не существует
ну да! стоило написать PLC_PRG. как всплыла подсказка со списком переменных! спс!