Страница 1030 из 1044 ПерваяПервая ... 305309309801020102810291030103110321040 ... ПоследняяПоследняя
Показано с 10,291 по 10,300 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #10291

    По умолчанию

    Цитата Сообщение от Easy_Enemy Посмотреть сообщение
    ... было написано маппирование, а управление - через циклы и аттрибуты через точки
    А вот и проблема.. есть выход, который управляет сигналом на открытие. В "конфигурации ПЛК" назвал его Flap1Open (пробовал там же переносить в глобальные и прибивать гвоздями через AT - тоже самое). В функции карты присвоил его в массив Ven[1].Flap.Open:=Flap1Open (почему-то не наоборот). Так нормально работает функция управления на открытие, но в режиме калибровки значение на сам выход не записывается. Но, если поменять местами Flap1Open:=Ven[1].Flap.Open, то режим открытия работать перестает, а вот в калибровке - выход включается, но не выключается по таймеру (функция - одна и та же). Чертовщина..
    Последний раз редактировалось Easy_Enemy; 12.02.2024 в 21:00.

  2. #10292

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Кривой кодесис, глючный Овен, да?
    А всего-то - убрать лес. И сразу будут видны деревья.
    Помимо небольшой оптимизации и пары интересностей с CASE - проблема не особо решилась. То есть, я так понимаю, из вышестоящих (управляющих систем) - обращение к переменным примерно то же, что моя "кровь из глаз", но, как минимум ясна структура (система, номер, девайс, атрибут). При обработке 20+ разных систем - становится понятнее. Мне не в падлу расписать. Как минимум, Вы за 10 минут поняли "что-куда" и поправили. По быстродействию: утверждать не могу, пока доделки не будут доделаны - нельзя запустить тест на скорость цикла ПЛК. Кодесис 2.3 - банально, старый. К овену претензий нет, кроме, немного усложненной документации.

  3. #10293

    По умолчанию

    Цитата Сообщение от Easy_Enemy Посмотреть сообщение
    А вот и проблема.. есть выход, который управляет сигналом на открытие. В "конфигурации ПЛК" назвал его Flap1Open (пробовал там же переносить в глобальные и прибивать гвоздями через AT - тоже самое). В функции карты присвоил его в массив Ven[1].Flap.Open:=Flap1Open (почему-то не наоборот). Так нормально работает функция управления на открытие, но в режиме калибровки значение на сам выход не записывается. Но, если поменять местами Flap1Open:=Ven[1].Flap.Open, то режим открытия работать перестает, а вот в калибровке - выход включается, но не выключается по таймеру (функция - одна и та же). Чертовщина..
    Режим калибровки надо ставить ДО блоков кода управления выходами. Иначе значения управления, записанные в коде калибровки перезаписываются значениями, полученными от кнопок управления визуализации (я же приводил вам код выше)

  4. #10294

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Вот просто фрагмент:
    Код:
    IF Close THEN
    	IF Close AND NOT xClose THEN
    		xClose:=TRUE;
    		xOpen:= FALSE;
    		t_Pos:=TIME();
    	ELSIF Close AND xClose THEN
    		Pos:= Pos -  0.00258 * (TIME_TO_REAL(TIME() - t_Pos));
    		t_Pos:=TIME();
    		IF Pos < 0 THEN Pos:=0;
    		END_IF;
    	ELSE
    		xClose:=FALSE;
    	END_IF;
    END_IF
    Это чего? удаляем

    Код:
    IF Close THEN
    	IF NOT xClose THEN
    		xClose:=TRUE;
    		xOpen:= FALSE;
    		t_Pos:=TIME();
    	ELSIF xClose THEN
    		Pos:= Pos -  0.00258 * (TIME_TO_REAL(TIME() - t_Pos));
    		t_Pos:=TIME();
    		IF Pos < 0 THEN Pos:=0;
    		END_IF;
    	ELSE
    		xClose:=FALSE;
    	END_IF;
    END_IF
    Просто ELSE
    А как думаете это когда то будет? А тут нету проблемы? Вы решайте.
    Похоже это к предыдущему IF...
    Да, интересно смотреть чужие коды, много нового узнаешь. Иногда полезно.

  5. #10295
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от Easy_Enemy Посмотреть сообщение
    нельзя запустить тест на скорость цикла ПЛК. Кодесис 2.3 - банально, старый.
    Возможно, не КДС, а Вы такой старый что поленились дочитать до конца документацию https://owen.ru/uploads/373/plc1xx_p...ation_v2.0.pdf раздел 3.8
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #10296
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Вот просто фрагмент:
    Код:
    IF Close THEN
    	IF Close AND NOT xClose THEN
    		xClose:=TRUE;
    		xOpen:= FALSE;
    		t_Pos:=TIME();
    	ELSIF Close AND xClose THEN
    		Pos:= Pos -  0.00258 * (TIME_TO_REAL(TIME() - t_Pos));
    		t_Pos:=TIME();
    		IF Pos < 0 THEN Pos:=0;
    		END_IF;
    	ELSE
    		xClose:=FALSE;
    	END_IF;
    END_IF
    скорее всего это родилось из этого и неуемного желания использовать метод тыка: "а вдруг заработает"
    Код:
    	IF Close AND NOT xClose THEN
    		xClose:=TRUE;
    		xOpen:= FALSE;
    		t_Pos:=TIME();
    	ELSIF Close THEN
    		Pos:= Pos -  0.00258 * (TIME_TO_REAL(TIME() - t_Pos));
    		t_Pos:=TIME();
    		IF Pos < 0 THEN Pos:=0;
    		END_IF;
    	END_IF;
            xClose := Close;
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #10297

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    скорее всего это родилось из этого и неуемного желания использовать метод тыка: "а вдруг заработает"
    Именно так..

    Цитата Сообщение от capzap Посмотреть сообщение
    Возможно, не КДС, а Вы такой старый что поленились дочитать до конца документацию https://owen.ru/uploads/373/plc1xx_p...ation_v2.0.pdf раздел 3.8
    Предпочитаю просто ставить временные метки по интересующим местам, со времен микроконтроллеров, но - да, не читал. Эт я к тому, что, пока все не будет дописано - нет особого смысла.

    Цитата Сообщение от 1exan
    Режим калибровки надо ставить ДО блоков кода управления выходами. Иначе значения управления, записанные в коде калибровки перезаписываются значениями, полученными от кнопок управления визуализации (я же приводил вам код выше)
    Пробовал, уже потом подумал про ошибку маппирования. Визуализация не мешалась, если ничего не трогать)

    Вообще, выяснил следующее: функции работают (шаги шагают, таймеры таймерят) и, если указывать имена самих выходов - все отлично работает. То есть, если заглянуть в функцию map, то видно, что и переменная, которая должна передавать значение на выход так же переключается ( Ven[1].....open). Фактически, все свелось к тому, что нельзя запихать выход в массив. То есть, можно это обойти, если это простые дискретные выходы через ADR, но, видимо не канает с быстрыми..

  8. #10298

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Это не будет работать в любом случае
    А по поводу времени цикла, смотрите, если в середине написания кода цикл превысит разумные пределы, а за это время цикла Вы возьмётесь когда будет все написано, не обидно ли будет все переделывать?
    С простыми дискретными - работает. Там можно сделать так: " Ven[3].Flap:= ADR(%QB3.0); " , а потом присвоить управление номеру бита нужного выхода, то есть у нас управление по прямому адресу, только что проверил. А вот с фастами, из-за того, что это чистый BOOL в CdS 2* - нельзя, ADR хочет BYTE +. Сейчас просто найду, с чем можно поменять местами эти заслонки. В целом - вопрос решен. Хотелось бы, все-таки разобраться, как можно быстрые дискретники удобно обрабатывать, но уже потом.. Спасибо всем за помощь, безусловно, появилась пища для размышления.

    Цитата Сообщение от capzap Посмотреть сообщение
    А по поводу времени цикла, смотрите, если в середине написания кода цикл превысит разумные пределы, а за это время цикла Вы возьмётесь когда будет все написано, не обидно ли будет все переделывать?
    Можно сказать - намеренно: время - да, съедает, но, в основном - "учение через боль" лучше усваивается, иначе обленюсь)
    Последний раз редактировалось Easy_Enemy; 14.02.2024 в 21:23.

  9. #10299
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Цитата Сообщение от Easy_Enemy Посмотреть сообщение
    можно сделать так: " Ven[3].Flap:= ADR(%QB3.0);
    ни чего не понял, Flap это структура, начинающаяся с REAL, как Вы присваиваете ей(конкретно реалу) байт с дискретными переменными управления на открытие и закрытие?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  10. #10300

    По умолчанию

    Цитата Сообщение от Easy_Enemy Посмотреть сообщение
    ...
    Фактически, все свелось к тому, что нельзя запихать выход в массив. То есть, можно это обойти, если это простые дискретные выходы через ADR, но, видимо не канает с быстрыми..
    Вероятность того, что структуры ваших внутренних объектов совпадут с типами и расположением физических входов и выходов в контроллере - приближается к нулю. Поэтому я например делаю так:

    Объявляю глобальные переменные физических входов и выходов типа такого:
    Код:
    	DI_1	AT %IX0.0	:	BOOL;	(*	Дискретный вход 1	*)
    	DI_2	AT %IX0.1	:	BOOL;	(*	Дискретный вход 2	*)
    	DI_3	AT %IX1.0.0	:	BOOL;	(*	Дискретный вход 5	*)
    	DI_4	AT %IX1.0.1	:	BOOL;	(*	Дискретный вход 6	*)
    	DI_5	AT %IX1.0.2	:	BOOL;	(*	Дискретный вход 7	*)
    	DI_6	AT %IX1.0.3	:	BOOL;	(*	Дискретный вход 8	*)
    ...
    
    	DO_1	AT %QX2.0	:	BOOL;	(*	Дискретный выход 1	*)
    	DO_2	AT %QX2.1	:	BOOL;	(*	Дискретный выход 2	*)
    	DO_3	AT %QX2.2	:	BOOL;	(*	Дискретный выход 3	*)
    	DO_4	AT %QX2.3	:	BOOL;	(*	Дискретный выход 4	*)
    	DO_5	AT %QX3.0.0	:	BOOL;	(*	Дискретный выход 5	*)
    	DO_6	AT %QX3.0.1	:	BOOL;	(*	Дискретный выход 6	*)
    ...
    (можно конечно забить имена прямо в конфигурацию, но мне так удобнее, и нет проблем при смене конфигурации).

    В отдельной программе, которая выполняется в отдельной задаче со свободным циклом выполнения делаю их присваивание/чтение:
    Код:
    	arBlock[1].	xInStart	:=	DI_5	;	(*  *)
    	arBlock[1].	xInStop 	:=	DI_6	;	(*  *)
    ...
    
    	DO_5	:=	arBlock[1].	xOutStart	;	(*		*)
    	DO_6	:=	arBlock[1].	xOutAlarm	;	(*		*)
    ...
    Уж не знаю, насколько это "медленней" по сравнению с работой со входами/выходами через байты - но подозреваю, что несущественно.
    Но при этом вы не привязаны к расположению входов/выходов в структурах и можно в любой момент "отключить" физические входы/выходы для, например, 'эмуляции процесса

Страница 1030 из 1044 ПерваяПервая ... 305309309801020102810291030103110321040 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •