Страница 1014 из 1044 ПерваяПервая ... 145149149641004101210131014101510161024 ... ПоследняяПоследняя
Показано с 10,131 по 10,140 из 10436

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

  1. #10131

    По умолчанию

    Блин, ну НЕ НАДО использовать дохрена прямых адресов!
    Я выкладывал то, как делаю я, вот здесь: https://owen.ru/forum/showthread.php?t=38622
    а) Собираю всё в ОДНУ структуру с вложенными
    б) В конфигурации ПЛК вставляю одну, первую переменную от Slave (которая у тебя "Запасная переменная 0") и её адрес назначаю указателю на структуру.
    После этого всё работает "само", и адреса тоже пересчитываются "сами".
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  2. #10132

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Блин, ну НЕ НАДО использовать дохрена прямых адресов!
    Я выкладывал то, как делаю я, вот здесь: https://owen.ru/forum/showthread.php?t=38622
    а) Собираю всё в ОДНУ структуру с вложенными
    б) В конфигурации ПЛК вставляю одну, первую переменную от Slave (которая у тебя "Запасная переменная 0") и её адрес назначаю указателю на структуру.
    После этого всё работает "само", и адреса тоже пересчитываются "сами".
    Решил полностью переписать проект, так и сделаю. Спасибо за совет!
    Только потом как мне искать адреса регистров в которых лежат эти переменные? Есть какой то программный определитель адреса?
    Последний раз редактировалось senkos; 23.11.2023 в 13:14.

  3. #10133

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Кроме того, после сильных изменений, не делаете очистить всё, компилировать всё.
    Вот это оказалось всей причиной, благодарю вас!
    Сделал очистку и компиляцию и все заработало как надо, правда вскрылись другие моменты, но я их решу уже.
    Подскажите что очищает данная Очистка? Почему codesys отправляет в плк грязный код?

  4. #10134

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Вот это оказалось всей причиной, благодарю вас!
    Сделал очистку и компиляцию и все заработало как надо, правда вскрылись другие моменты, но я их решу уже.
    Подскажите что очищает данная Очистка? Почему codesys отправляет в плк грязный код?
    Всё следует из того, что писал раньше. При больших изменениях новый код накладывается на старый, не удаляя накладки, в вашем случае старую структуру на новую.
    Одно дело добавить в конце, что то новое и другое дело менять 7 UMD на 3, где сразу всё новое наложилось на старое.
    Лучше почаще делать очистку, чем ломать потом голову, почему не работает. Кстати по поводу очистки, это уже наверно пятый раз написал за всё время.

    И ещё не вставляйте большие куски в середину программы, как вы сделали с ПИДами. В случае ошибки, у вас не только новый код не заработает, но и старый в конце может перестать работать. Дописывайте всегда в конце.
    Я бы стазу вынес опрос-присвоение структуры COMPRESSOR в новый ФБ или программу, а в пустой PLC_PRG уже писал программу с ПИДами.
    Вместо трёх ФБ PID_1, PID_2, PID_3, написал один и сделал 3 экземпляра и вместо 3 структур PID_struct_ взял одну 3 раза.
    Последний раз редактировалось kondor3000; 23.11.2023 в 13:58.

  5. #10135

    По умолчанию

    Когда все закидываю в одну структуру мне так же нужно следить чтобы тип REAL или DWORD начинались с четного регистра?
    Самому нужно выправлять это дополнительными переменными?
    Например тут переменная temp_1 выравнивает и уже все REAL начинаются с четных регистров:
    Код:
    STRUCT
    	(*  ОБЩИЕУСТАВКИ ДЛЯ ВСЕХ КОМПРЕССОРОВ  *)
    	temp_1 : WORD; 		   (* Регистр 0 *) (**)
    	t_ust_1st : WORD;	   (* Регистр 1 *)
    	t_ust_2st : WORD;	   (* Регистр 2 *)
    	t_ust_oil : WORD; 	   (* Регистр 3 *)
    	P_ust_1st : REAL; 	   (* Регистр 4-5 *)
    	P_ust_2st : REAL;	    	   (* Регистр 6-7 *)
    	P_ust_oil_min : REAL;  (* Регистр 8-9 *)
    	P_ust_oil_max : REAL;  (* Регистр 10-11 *)
    	P_ust_water : REAL;	   (* Регистр 12-13 *)
    END_STRUCT

  6. #10136

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Когда все закидываю в одну структуру мне так же нужно следить чтобы тип REAL или DWORD начинались с четного регистра?
    Самому нужно выправлять это дополнительными переменными?
    Например тут переменная temp_1 выравнивает и уже все REAL начинаются с четных регистров:
    У вас ранее всё разложено по чётным регистрам, добавляя эту структуру, у вас первые 4 WORD (тоже чётное) и далее всё опять по чётным будет.
    А вот если было бы 3 WORD, то надо было бы добавить 1 пустой.

  7. #10137

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Решил полностью переписать проект, так и сделаю. Спасибо за совет!
    Только потом как мне искать адреса регистров в которых лежат эти переменные? Есть какой то программный определитель адреса?
    Программный - нет. Я делал так, как показано в той теме: составил в Экселе табличку, где все адреса расписал и заполнил. И уже п ней программировал панель оператора. На скриншотах в той теме это было.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  8. #10138
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Когда все закидываю в одну структуру мне так же нужно следить чтобы тип REAL или DWORD начинались с четного регистра?
    Конкретно здесь (в КДС) можно не следить. Они тут будут с четных всегда - неявные поля напихаются автоматом.
    Но совет про явное указание выравнивающих полей дисциплинирует и бонусом облегчит жизнь когда будет скрещивать структуры из разных систем.

  9. #10139

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Программный - нет. Я делал так, как показано в той теме: составил в Экселе табличку, где все адреса расписал и заполнил. И уже п ней программировал панель оператора. На скриншотах в той теме это было.
    Здравствуйте.
    Подскажите пожалуйста, в Slave нужно теперь чтобы все подэлементы били WORD или DWORD для единой структуры? Или как у меня вначале WORD а потом все DWORD тоже будет корректно распределяться? Правда пришлось структуру объявить как QW -> MAIN_STRUCT AT %QW7.1.0 : MAIN_STRUCT;
    2023-11-24_10-35-22.jpg

  10. #10140

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Здравствуйте.
    Подскажите пожалуйста, в Slave нужно теперь чтобы все подэлементы били WORD или DWORD для единой структуры? Или как у меня вначале WORD а потом все DWORD тоже будет корректно распределяться? Правда пришлось структуру объявить как QW -> MAIN_STRUCT AT %QW7.1.0 : MAIN_STRUCT;
    2023-11-24_10-35-22.jpg
    Порядок не важен.
    Но когда в структуре постоянно чередуются одно- двух- и четырёх-байтовые переменные, а также другие структуры - уследить за выравниванием и "попасть" в нужную переменную по сети будет трудно

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

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

Ваши права

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