Спасибо, всем
Вид для печати
Спасибо, всем
Евгений Кислов Я их тебе когда-то слал. Ща найду, вставлю сюда.
WhyNot В ПЛК немного не так, как в программировании на компах. Тут важно НЕ забывать о том, что каждая программа-задача повторяется бесконечно вся целиком.
Поэтому если ты напишешь FOR с 1 по 254 - то он прокрутится за один вызов задачи и за этот вызов задачи ПЛК будет пытаться опросить разом всех.
FORом должен служить сам вызов задачи, как уже подсказали: заводим некую переменную "Шаг", и каждый вызов задачи крутим её, опрашивая устройство с нужным номером шага.
Вот что делал я для OCL. Скриншоты мутные, попробую пояснить принцип.
Сначала я делал большую копипасту - для каждого шага. И закручивал это в большой CASE. Было много-много кода!
Вложение 58938 Вложение 58939
Потом мне это захотелось оптимизировать. Я вспомнил про массивы объектов из СИ, и сделал себе структуру для описания одного запроса вместе с его FB SerialRequest:
Вложение 58940
Потом объявил константный массив всех-всех запросов (Евгений Кислов - тут где-то помог твой ответ о том, как это делать и объявлять и на лету структуры инициализировать):
Вложение 58941
А дальше оставалось завести ту самую переменную "Шаг" (ioMBReqStep) и увеличивать её на 1, если опрос был успешным:
Вложение 58942
Спасибо за разъяснение!
Ребят всем привет!
Как разбить строку WSTRING на байты и потом собрать обратно?
Если через компоненты в дереве проекта - используйте объединение (UNION), чтобы представить WSTRING как массив вордов (будьте внимательны с размерностью массива).
Если через библиотеку OwenCommunication - то ничего преобразовывать не надо, под указатель на отправляемые данные можно сразу положить строку.
Мне бы подошла возможность указать ADR(переменная) и затем нужные байты забрать и в массив байтов все загнать. Ну и потом из массива байт собрать обратно
Через Юнион я думал. Но уменя длинна разная. Где-то 3-4 символа (8байт) а где-то 50 символов. Уже 100байт. Вот думаю может через обращение к памяти можно байты забрать проще. И в массив все это собрать мне нужно. Сейчас имею данные за 1 раз свыше 10000 байт. Те 10килобайт