Страница 1027 из 1047 ПерваяПервая ... 275279279771017102510261027102810291037 ... ПоследняяПоследняя
Показано с 10,261 по 10,270 из 10464

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

  1. #10261

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    4 BYTE, это DWORD, а структуру вы пытаетесь поместить во 2 регистр предыдущего DWORD.
    Не понимаю. Почему ж в другом проекте я делал так:
    * Набивал в конфигурации ПЛК по 4 байта (DWORD)
    * Читал их как хотел из панели: чётно или нечётно, и панель всё читала.

    А тут откуда-то вылезают дырки в самой структуре в CodeSys, а не в панели.
    Я ща начал при помощи SizeOf() подгонять всё под количество полей в своей структуре.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  2. #10262

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Не понимаю. Почему ж в другом проекте я делал так:
    * Набивал в конфигурации ПЛК по 4 байта (DWORD)
    .
    А саму структуру CSSetTimesBE, скрин можете выложить?

  3. #10263

    По умолчанию

    Да, конечно. И можно на "ты", без проблем.
    Как я понял, CodeSys в своих структурах округляет новые поля (вложеные структуры), если они начинаются с нечётного адреса.

    Код:
    (* Структура данных для интервалов времени настроек объектов на панели оператора или в другом месте.
    Занимает 4 (ЧЕТЫРЕ) регистра *)
    TYPE CSSetTimesBE :
    STRUCT
    	TimeBeginHour	: WORD;		(* Регистр 1, Время начала интервала: Часы *)
    	TimeBeginMinute	: WORD;		(* Регистр 2, Время начала интервала: Минуты *)
    	TimeEndHour		: WORD;		(* Регистр 3, Время конца интервала: Часы *)
    	TimeEndMinute	: WORD;		(* Регистр 4, Время конца интервала: Минуты *)
    END_STRUCT
    END_TYPE
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  4. #10264

    По умолчанию

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

  5. #10265

    По умолчанию

    Ура! Я разобрался с этим выравниванием. В итоге число регистров и 520 стало 542 штуки. ИП-320 это нормально сожрала.
    Так что всё ОК: проблемы были именно с выравниванием структур, а не с конфигурацией ПЛК.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  6. #10266

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Ура! Я разобрался с этим выравниванием. В итоге число регистров и 520 стало 542 штуки. ИП-320 это нормально сожрала.
    Так что всё ОК: проблемы были именно с выравниванием структур, а не с конфигурацией ПЛК.
    Тоже попался на этом размере структур. Причём в эмуляции такая структура имеет размер 2 байта, а после загрузки в ПЛК - уже 4

  7. #10267

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Тоже попался на этом размере структур. Причём в эмуляции такая структура имеет размер 2 байта, а после загрузки в ПЛК - уже 4
    Угу! Я вчера в итоге через SizeOf и Эксель подбирал структуры так, чтобы адреса совпадали =)
    Ну, образно вижу что по Экселю должно быть 118, а по ПЛК - 120. Значит где-то WORD дополнился. Иду его искать по чётным и нечётным адресам. Нахожу. Проверяю ещё раз. Совпадает - отлично.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  8. #10268

    По умолчанию

    Здравствуйте, коллеги.
    Прошу помощи, в оптимизации кода. Возможно ли данный код привести к циклу чтобы реализовывать любое количество START_MOTOR
    Код:
    	IF Conveyors[2].motorSensor THEN
    		START_MOTOR1(inStart:=Conveyors[1].motorStart, inReset:=Conveyors[1].motorStop);
    		Conveyors[1].motorSensor := START_MOTOR1.OUT;
    	END_IF
    	IF Conveyors[3].motorSensor THEN
    		START_MOTOR2(inStart:=Conveyors[2].motorStart, inReset:=Conveyors[2].motorStop);
    		Conveyors[2].motorSensor := START_MOTOR2.OUT;
    	END_IF
    	IF Conveyors[4].motorSensor THEN
    		START_MOTOR3(inStart:=Conveyors[3].motorStart, inReset:=Conveyors[3].motorStop);
    		Conveyors[3].motorSensor := START_MOTOR3.OUT;
    	END_IF
    я пытаюсь делать в цикле но при любом Conveyors[i+1].motorSensor = TRUE все START_MOTOR срабатывают
    Код:
    	FOR i := 1 TO count - 1 DO
     	  IF Conveyors[i+1].motorSensor THEN
    		START_MOTOR(inStart:=Conveyors[i].motorStart, inReset:=Conveyors[i].motorStop);
    		Conveyors[i].motorSensor := START_MOTOR.OUT;
    	  END_IF
           END_FOR

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

    По умолчанию

    Цитата Сообщение от senkos Посмотреть сообщение
    Здравствуйте, коллеги.
    Прошу помощи, в оптимизации кода. Возможно ли данный код привести к циклу чтобы реализовывать любое количество START_MOTOR
    Код:
    	IF Conveyors[2].motorSensor THEN
    		START_MOTOR1(inStart:=Conveyors[1].motorStart, inReset:=Conveyors[1].motorStop);
    		Conveyors[1].motorSensor := START_MOTOR1.OUT;
    	END_IF
    	IF Conveyors[3].motorSensor THEN
    		START_MOTOR2(inStart:=Conveyors[2].motorStart, inReset:=Conveyors[2].motorStop);
    		Conveyors[2].motorSensor := START_MOTOR2.OUT;
    	END_IF
    	IF Conveyors[4].motorSensor THEN
    		START_MOTOR3(inStart:=Conveyors[3].motorStart, inReset:=Conveyors[3].motorStop);
    		Conveyors[3].motorSensor := START_MOTOR3.OUT;
    	END_IF
    я пытаюсь делать в цикле но при любом Conveyors[i+1].motorSensor = TRUE все START_MOTOR срабатывают
    Код:
    	FOR i := 1 TO count - 1 DO
     	  IF Conveyors[i+1].motorSensor THEN
    		START_MOTOR(inStart:=Conveyors[i].motorStart, inReset:=Conveyors[i].motorStop);
    		Conveyors[i].motorSensor := START_MOTOR.OUT;
    	  END_IF
           END_FOR
    Наверное плюс один не везде выставляете
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  10. #10270

    По умолчанию

    Start motor должен быть массивом, а у вас один параметр при изменении кода.

    Не заметил что это fb.

    Тогда другой вариант... А если в коде первоначальном fb с цифровым индексом заменить на один и тот же fb, как себя поведёт программа? Если так же как программа с циклом, то проблема где то там...
    Последний раз редактировалось МихаилГл; 04.02.2024 в 07:21.

Страница 1027 из 1047 ПерваяПервая ... 275279279771017102510261027102810291037 ... ПоследняяПоследняя

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

Ваши права

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