Показано с 1 по 10 из 18

Тема: Как правильно объявить структуру?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    ограничение заключается в запрете размещения элементов структуры по прямым адресам
    Вот эта штука сильно осложняет жизнь Нет ли какого либо обходного пути? Проблема такая - в var_global пара сотен переменных на которые забиндены адреса в modbus slave. Тяжело работать с таким количеством имён, вот если бы их как-то разделять на секции по устройствам (часто одинаковым) или по назначению, структуры бы подошли идеально, но...

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    А зачем увлекаться прямым заданием глобальных переменных, неужели нельзя проще в самом слейв-устройстве присвоить имя каждому каналу, вот и будет Вам группировка по секциям и точно так же в процессе работы они станут глобальными переменными
    Это плохая идея. Слейв там один, через него идёт обмен с сенсорной панелью и скадой. А теперь представьте что вы поменяли тип CPU, у вас ес-но слетел PLC Configuration и вам надо заново при помощи мыши заполнить всю эту богодельню (повторяю, около 200 переменных только обмен с сенс. панелью). Переменные однозначно надо описывать в VAR_GLOBAL, много проще переправить адреса в текстовом файле если что.

    Как образец реальный кусок обмена с паналью на конкурирующей системе (не CoDeSys, физ. адреса не нужны):
    =========================
    Код:
    TYPE
        PI : STRUCT
            PB        : REAL := 0.0;
            TI        : REAL := 0.0;
            DBand  : REAL := 0.0;
            FMT     : REAL := 0.0;(*Full movement time - s*)
            MinBreakTime    : REAL := 0.0; (*ms*)
            MinPulseTime    : REAL := 0.0; (*ms*)
        END_STRUCT;
    END_TYPE
    
            netPID : PI; // PI regulator of the network circuit
            b1PID : PI; // PI regulator of burner 1
            b2PID : PI; // PI regulator of burner 2
    =========================
    CoDeSys:
    Код:
    	iHWSPump1manSt		AT %QX6.4.0.0: BOOL;(*B24*)
    	iHWSPump2manSt		AT %QX6.4.0.1: BOOL;(*B25*)
    	alarmFlowIHWS		AT %QX6.4.0.2: BOOL;(*B26*)
    	alarmMot1IHWS		AT %QX6.4.0.3: BOOL;(*B27*)
    	alarmMot2IHWS		AT %QX6.4.0.4: BOOL;(*B28*)
    
    _здесь выкинут кусок переменных других устройств_
    
    	iHWSHiLimit		AT %QW6.45.0: WORD;(*W38*)
    	iHWSLoLimit		AT %QW6.46.0: WORD;(*W39*)
    	IHWSdelay		AT %QW6.47.0: WORD;(*W40*)
    
    _здесь выкинут ещё кусок ещё других устройств_
    _и снова булевские_
    
    	IHWSMan3WayLess	AT %QX6.140.0.2: BOOL;(*B2111*)
    	IHWSMan3WayMore	AT %QX6.140.0.3: BOOL;(*B2111*)
    _и т.д.
    Как бы это примерно могло выглядеть в CoDeSys:
    Код:
    iHWS : STRUCT (*Насос ГВС*)
    	pump1manSt		AT %QX6.4.0.0: BOOL;(*B24*)
    	pump2manSt		AT %QX6.4.0.1: BOOL;(*B25*)
    	alarmFlow		AT %QX6.4.0.2: BOOL;(*B26*)
    	alarmMot1		AT %QX6.4.0.3: BOOL;(*B27*)
    	alarmMot2		AT %QX6.4.0.4: BOOL;(*B28*)
    	man3WayLess		AT %QX6.140.0.2: BOOL;(*B2111*)
    	man3WayMore		AT %QX6.140.0.3: BOOL;(*B2111*)	
    	hiLimit			AT %QW6.45.0: WORD;(*W38*)
    	loLimit			AT %QW6.46.0: WORD;(*W39*)
    	delay			AT %QW6.47.0: WORD;(*W40*)
    END_STRUCT;
    
    iNet : STRUCT (*Насос сети*)
    	pump1manSt		AT %QX6.3.0.1: BOOL;(*B17*)
    	pump2manSt		AT %QX6.3.0.2: BOOL;(*B18*)
    _И Так Далее._
    
    END_STRUCT;
    Нет, жить можно, но когда за месяц проходят через руки несколько проектов на одну тему но с разными вводными - рехтование каждый раз общей свалки малость удручает. И просто думаешь - а вдруг я пропустил что-то очевидное, что используют другие.

    P.S. - Мда, чем больше я на свою-же статью смотрю, тем больше понимаю что основное зло не столько в запрете на структуры, сколько в самих физ адресах... Ладно, не важно.

Ваши права

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