Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 24 из 24

Тема: Какой синтаксис инициализации массива структур

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

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а как же примеры из оскат, создается структура, создается VAR_GLOBAL CONSTANT и в нем объявляется такой пользовательский тип данных или вопрос не в этом
    Да вся соль как раз в том, что у меня не все элементы структуры являются константами. Мне от изменений нужно защитить только некоторые (содержащие номера регистров сервопривода).

    Codesys не дает целостного механизма работы по Modbus если нужно обмениваться достаточно большим количеством переменных. Если использовать таблицу каналов, каждый канал имеет свой индекс, к нему привязана переменная. Если обмен по флагу - нужны задержки и я ХЗ как нормально проверить что все данные записаны (пробовал вешать на циклическую задачу с малым временем вызова - все-равно бывают факты пропуска).
    Если использовать "приложение" ModbusChannel вроде все хорошо, НО (огромное такое) в качестве аргумента ModbusChannel принимает iChannelIndex и нужно придумать связку Переменная -> К***** а ее нет. В переменную данные записал но хрен-то я знаю номер канала к которой привязана переменная.
    БОлее-менее OwenCommunication, там нет каналов - чисто регистры устройства. Но к переменным нужно привязать адреса регистров, чтоб можно было в цикле отправлять данные и не париться, что я собственно и сделал. Такая вот структура (примерно, прошу не пинать)
    Код:
    TYPE MB_DWORD :
    STRUCT
    	iChannelIndex	: INT;
    	uiDataAddr		: UINT;
    	uiDataCount		: UINT := 2;
    	unData			: U_DW2W;
    END_STRUCT
    END_TYPE
    И потом собираю все регистры в Массив устройства (тут уже я подумываю о FB с закрытыми свойствами, но это тож не сильно поможет). И полю uiDataAddr определяю регистр памяти устройства. Но если, случайно, эти значения изменятся.... все сломается...
    Код:
    TYPE ST_SERVO_RW :
    STRUCT
    	wInputSignal: ARRAY[0..7] OF MB_SWORD :=
    		[
    			(uiDataAddr := 500),
    			(uiDataAddr := 501),
    			(uiDataAddr := 502),
    			(uiDataAddr := 503),
    			(uiDataAddr := 504),
    			(uiDataAddr := 505),
    			(uiDataAddr := 506),
    			(uiDataAddr := 507)
    		];
    	wdwLevInSignal: MB_DWORD 	:= (uiDataAddr := 508);
    	wdwOutSignal: MB_DWORD 	:= (uiDataAddr := 510);
    	wP0_ConMode: MB_SWORD 	:= (uiDataAddr := 0);
    	wP2_EncTypeRes: MB_SWORD	:= (uiDataAddr := 2);
    	wP205_Gear: MB_SWORD 		:= (uiDataAddr := 205);
    	wP206_Gear: MB_SWORD 		:= (uiDataAddr := 206);
    	wP225_Gear: MB_SWORD 		:= (uiDataAddr := 225);
    	wP226_Gear: MB_SWORD 		:= (uiDataAddr := 226);
    	wP525_Coin: MB_SWORD 		:= (uiDataAddr := 525);
    	wP700_IntPosP: MB_SWORD 	:= (uiDataAddr := 700);
    	wP765_IntPosDZT: MB_SWORD	:= (uiDataAddr := 765);
    	wP770_IntPosSw: MB_SWORD 	:= (uiDataAddr := 770);
    	stHoming: HOME_POS_REGS;
    	stIntPos: ARRAY[0..15] OF INT_POS_REGS := 
    		[
    			(unIntPos := (uiDataAddr := 701),	wIntPosACDC := (uiDataAddr := 749), wIntPosSPD := (uiDataAddr := 733)),
    			(unIntPos := (uiDataAddr := 703), 	wIntPosACDC := (uiDataAddr := 750), wIntPosSPD := (uiDataAddr := 734)),
    			(unIntPos := (uiDataAddr := 705), 	wIntPosACDC := (uiDataAddr := 751), wIntPosSPD := (uiDataAddr := 735)),
    			(unIntPos := (uiDataAddr := 707), 	wIntPosACDC := (uiDataAddr := 752), wIntPosSPD := (uiDataAddr := 736)),
    			(unIntPos := (uiDataAddr := 709), 	wIntPosACDC := (uiDataAddr := 753), wIntPosSPD := (uiDataAddr := 737)),
    			(unIntPos := (uiDataAddr := 711), 	wIntPosACDC := (uiDataAddr := 754), wIntPosSPD := (uiDataAddr := 738)),
    			(unIntPos := (uiDataAddr := 713), 	wIntPosACDC := (uiDataAddr := 755), wIntPosSPD := (uiDataAddr := 739)),
    			(unIntPos := (uiDataAddr := 715), 	wIntPosACDC := (uiDataAddr := 756), wIntPosSPD := (uiDataAddr := 740)),
    			(unIntPos := (uiDataAddr := 717), 	wIntPosACDC := (uiDataAddr := 757), wIntPosSPD := (uiDataAddr := 741)),
    			(unIntPos := (uiDataAddr := 719), 	wIntPosACDC := (uiDataAddr := 758), wIntPosSPD := (uiDataAddr := 742)),
    			(unIntPos := (uiDataAddr := 721), 	wIntPosACDC := (uiDataAddr := 759), wIntPosSPD := (uiDataAddr := 743)),
    			(unIntPos := (uiDataAddr := 723), 	wIntPosACDC := (uiDataAddr := 760), wIntPosSPD := (uiDataAddr := 744)),
    			(unIntPos := (uiDataAddr := 725), 	wIntPosACDC := (uiDataAddr := 761), wIntPosSPD := (uiDataAddr := 745)),
    			(unIntPos := (uiDataAddr := 727), 	wIntPosACDC := (uiDataAddr := 762), wIntPosSPD := (uiDataAddr := 746)),
    			(unIntPos := (uiDataAddr := 729), 	wIntPosACDC := (uiDataAddr := 763), wIntPosSPD := (uiDataAddr := 747)),
    			(unIntPos := (uiDataAddr := 731), 	wIntPosACDC := (uiDataAddr := 764), wIntPosSPD := (uiDataAddr := 748))
    			
    		];
    END_STRUCT
    END_TYPE

  2. #2

    По умолчанию

    Вот это прикол - мне к-а-н-а-л в сообщении затерли. Оставили только К****

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,910

    По умолчанию

    Но если, случайно, эти значения изменятся.... все сломается...
    Очень странная фраза, на мой взгляд.
    Значения могут измениться "случайно" только из-за segfault, но тогда уже маловероятно, что какая-то соломка поможет.
    И это не особенность CODESYS - это везде так.

    Можно только уменьшить вероятность этой ситуации с помощью обдуманного проектирования ПО, выработке и следованию стандарту разработки, предпочтения простого и понятного кода громоздким конструкциям (типа использования ООП там, где он не дает каких-то реальных преимуществ), использования статического анализатора, тщательному тестированию и т.д.

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Вот это прикол - мне к-а-н-а-л в сообщении затерли. Оставили только К****
    Это вордфильтр форума так исторически работает.

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. ПЛК 110, модбас и массивы структур.
    от lttn в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 7
    Последнее сообщение: 17.10.2019, 22:01
  2. Синтаксис Если()
    от Nikel097 в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 21.11.2017, 19:43
  3. Ответов: 4
    Последнее сообщение: 05.09.2012, 06:17
  4. инициализация массива структур
    от drvlas в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 16.12.2010, 18:31
  5. Ответов: 6
    Последнее сообщение: 05.04.2010, 08:06

Ваши права

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