Так и будет, только задом на перёд :rolleyes:
Код:CLI_GI_0000:= BYTE_TO_WORD(PACK(
HMI_DI_80,
HMI_DI_81,
HMI_DI_82,
HMI_DI_83,
HMI_DI_84,
HMI_DI_85,
HMI_DI_86,
HMI_DI_87));
Вид для печати
а так правильно будет?
Код:CLI_GI_0000:= BYTE_TO_WORD(PACK(
HMI_DI_0080,
HMI_DI_0081,
HMI_DI_0082,
HMI_DI_0083,
HMI_DI_0084,
HMI_DI_0085,
FALSE,
FALSE));
Ребята ну подскажите еще раз пж. как в ST это реализовать??
Вложение 38901
Добрый день. Искал по форумам, но похожих тем не нашёл. Если было - извините.
В связи с тем, что проекты всё чаще стали попадаться однотипные - решил перейти с LD на ST для оптимизации разработки. Потому как описывать руками по 50+ одинаковых действий для разных входов выходов очень геморно, и решил перейти на циклы.
Первым делом решил загнать все отдельные переменные в массивы, для удобства. И понял что ни где не описано как реализовывать перебор адресов для цикла. Ну т.е. для массива можно указать порядковый номер как переменную типа INT и потом её просто увеличивать. А как в адрес вставить такую переменную не понятно.
Вот как пример то, с чем я сейчас работаю - есть массив переменных типа BYTE для Modbus. Они прописаны в настройках ПЛК. И есть массив, куда я хочу их все собрать, что бы не обращаться к каждой переменной отдельно. Всего переменных 120, с %QB6.1.0 до %QB6.120.0, однако указать часть адреса как динамическую переменную не получается.
Представлял что должно получится что-то вроде этого:
HMI_Array: ARRAY [0..120] OF BYTE;
n := INT;
IF n<= 120 THEN
HMI_Array[n] := %QB6.[n].0;
n++;
ELSE
n := 0;
END_IF
Кто-то сталкивался с такими задачами? В какую сторону смотреть?
Заранее спасибо :)
Можно сделать и без копирования
При объявлении массива HMI_Array использовать ключевое слово АТ с указанием адрес первого элемента 8bits
Вложение 38903
И работать с элементами массива HMI_Array
Вложение 38904
Не знал что так можно объявлять. Спасибо))