1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Чтение данных из глобальных переменных в цикле Codesys

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Модераторы: Глоб.модераторы, специалисты по PLC

Ответить

Автор темы
Gordan007
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 09 дек 2015, 14:57
Имя: Подкорытов Алексей Александрович
Страна: Россия
город/регион: Иркутск
Благодарил (а): 2 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение Gordan007 »

Здравствуйте, подскажите, имеется список глобальных переменных в Codesys 3.5. Для того, чтобы считать и передать с них данные приходится писать например <имя списка>.<переменная в этом списке>, но можно ли как то пройтись по ним в цикле.
например FOR i:=1 TO 10 DO
<имя списка>.
Снимок1.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

leon78
эксперт
эксперт
Сообщения: 1146
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 49 раз
Поблагодарили: 134 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение leon78 »

Есть вероятность, что через какие-нибудь системные функции можно, но я бы не стал туда лезть.
В Кодесис есть UNION - можно к одной область памяти привязать переменные разного типа.
Делаете структуру с полями как глобальные переменные, и UNION, объединяющий эту структуру и массив.

Отправлено спустя 1 минуту 52 секунды:
Есть даже хитрость, как путь обращения к полям структуры сократить viewtopic.php?p=155350
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
Аватара пользователя

vodav
освоился
освоился
Сообщения: 290
Зарегистрирован: 28 авг 2014, 09:30
Имя: Воднев Александр Васильевич
Страна: РФ
город/регион: Томск
Благодарил (а): 22 раза
Поблагодарили: 33 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение vodav »

С помощью указателя адреса это делается легко и непринужденно.
VAR_GLOBAL
TYPE AIc :
STRUCT
tc_00: word;
tc_01: word;
- - -;
tc_(i): WORD;
end_struct
end_type;
END_VAR
var
pt:POINTER TO WORD;
dt:array[0..i] of word;
cnt: int;
END_VAR
pt := ADR(AIc.tc_00);
for cnt:=0 to i
pt:=pt+cnt;
pt^:=dt[cnt];
end_for;

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Чтение данных из глобальных переменных в цикле Codesys

Сообщение Sergy6661 »

Gordan007 писал(а): 30 окт 2024, 12:19 но можно ли как то пройтись по ним в цикле.
Да легко, объявите массив, более того по вашему тексту похоже что массив объявлен, но не работает и это странно,т.к должно работать и у меня все прекрасно работает.
В Кодесис есть нюансы с адрессацией, но не похоже, что это ваш случай, посему код в студию.

Хотя посмотрев внимательней стало все понятно- вы полю структуры присваиваете элемент массива в классическом 1м варианте (тяжкий китайский код), а во втором варианте при попытке написать индусский код вас заругал компилятор, т.к синтаксис не правильный.

leon78
эксперт
эксперт
Сообщения: 1146
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 49 раз
Поблагодарили: 134 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение leon78 »

У топикстартера не структура, а просто список глобальных переменных с именем AIc
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Чтение данных из глобальных переменных в цикле Codesys

Сообщение Sergy6661 »

leon78 писал(а): 31 окт 2024, 09:00 У топикстартера не структура, а просто список глобальных переменных с именем AIc
В КДС 3 список глобальных переменных по факту структура.

leon78
эксперт
эксперт
Сообщения: 1146
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 49 раз
Поблагодарили: 134 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение leon78 »

Общего только написание через точку.
Если убрать прагму

Код: Выделить всё

{attribute 'qualified_only'}
, то можно получить доступ без названия списка глобальных переменных.
В структуре вы сами задаёте порядок полей в памяти. Есть ли уверенность, что глобальные переменные лежат в памяти в том же порядке, в котором они описаны в списке глобальных переменных?
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Автор темы
Gordan007
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 09 дек 2015, 14:57
Имя: Подкорытов Алексей Александрович
Страна: Россия
город/регион: Иркутск
Благодарил (а): 2 раза

Чтение данных из глобальных переменных в цикле Codesys

Сообщение Gordan007 »

leon78 писал(а): 31 окт 2024, 09:00 У топикстартера не структура, а просто список глобальных переменных с именем AIc
У меня AIc это список глобальных переменных где каждый элемент этого списка является элементом типа структуры TAI_SET
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

Чтение данных из глобальных переменных в цикле Codesys

Сообщение keysansa »

Gordan007 писал(а): 31 окт 2024, 14:22 является элементом типа структуры TAI_SET
А что такое TAI_SET - мы должны догадаться? )

Отправлено спустя 8 минут 4 секунды:
leon78 писал(а): 31 окт 2024, 13:11 Если убрать прагму
Строгая типизация - для автоматизации - больше плюс, чем минус в автоматизации.
Просто надо грамотно пользоваться группами глобальных переменных.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

Sergy6661
специалист
специалист
Сообщения: 655
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 20 раз
Поблагодарили: 89 раз

Чтение данных из глобальных переменных в цикле Codesys

Сообщение Sergy6661 »

leon78 писал(а): 31 окт 2024, 13:11 Есть ли уверенность, что глобальные переменные лежат в памяти в том же порядке, в котором они описаны в списке глобальных переменных?
Да, именно так все и лежит, по порядочку в списке, только мин. адресация=> Byte.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

Чтение данных из глобальных переменных в цикле Codesys

Сообщение keysansa »

Sergy6661 писал(а): 31 окт 2024, 21:37 Да, именно так все и лежит, по порядочку в списке, только мин. адресация=> Byte.
Абзац...
Выходим на высокоуровневое программирование, но начинаем себе создавать проблемы с расположением переменных в памяти...
При этом, что сейчас нет задачи рассчитать движение луны вокруг земли в 64кБ памяти.

ЗЫ. Если уж надо такая заморочка, создайте переменные как указатели на нужные типы данных, в первом цикле присвойте им адреса нужных глобальных переменных и пользуйтесь на здоровье, хоть массивом, хоть структурой, хоть списком.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»