IF VigiSet[i] > 89 THEN VigiSet[i] := 89; ELSIF VigiSet[i] < 30 THEN VigiSet[i] := 30; END_IF Есть более NOTколхозные методы... Читать далее
Подскажите, iMac a1418(2012) медленно грузится. Изначально вышел из строя родной диск, заменен на ssd. Но установка системы... Читать далее
Приветствую. Пришел очень странный телефон. Samsung A226. Со слов клиента медленно заряжается. Проверил, и правда потреба... Читать далее
Всех приветствую. Подскажите пожалуйста. Volkswagen Tiguan 2.0TDI 2013г. Клиент приехал с жалобой типа ему отшивали ЕГР и... Читать далее
Добрий день, Alfa Romeo Stelvio 2019 q4 сріляли подушки безпеки заблокований бензонасос,можливо хтось знає як розблокувать?... Читать далее
iPhone 6s менял u2 после вышло поиск и нет сети, модем катнул кп модема заменил. Из-за самого u2 может быть ? ... Читать далее
Комментарии: 19
Rustem
Указатели читай. И массив там будет с числом ячеек = размеру переменной. Или union пользуй и промеж.переменную, которую потом отдай в модбас в формате word допустим.
Berkeman
Что за команда такая, union? На практике никогда ранее не сталкивался Своими словами
Andrew
Объединение. Ты смотришь на одну и ту же область памяти, но представляешь ее разными типами Это не команда, а dut
Berkeman
Типа M0 UNION M1 ... UNION M7 := D0? Что?
Andrew
Data user type
Kirill
Кстати очень прикольная тема. В дельте есть, но, сука ее нельзя сунуть в системные функции, где на выход идет массив.
Rustem
Это структура/объединение. В ней две переменные разного типа, но по факту это одна область. Допустим массив из двух вордов и реал. Пишешь в реал тег, а считываешь массив вордов и отдаешь в модбас. Так как модбас с вордами стандартно. Если хочешь с байтами, то массив байтов и тусуй их перед отправкой. По сути те же указатели но упакованы для пользователя.
Andrew
Можно больше двух переменных) Сейчас компуктер запущу
Rustem
Ну практически только с 2мя пользовал.
Andrew
TYPE REAL_2WORD_4BYTE : UNION re : REAL; w2 : ARRAY [0..1 OF WORD; b4 : ARRAY [0..3] OF BYTE; END_UNION END_TYPE re, w2, и b4 смотрят на одно и то же место в памяти
Berkeman
О, офигенно удобная штука. Это как модбас в овене же
Andrew
я максимум с mb вот такое делал
Rustem
Удобно. Но если сделать указателем, то меньше гемора при переносе проекта на другой ПЛК где не поддержано Юнион. Но такого я ещё не встречал.
Berkeman
Указатель на что?
Andrew
FUNCTION SWAP_REAL : REAL VAR_INPUT IN : REAL; END_VAR VAR P : POINTER TO DWORD; P1 : POINTER TO DWORD; END_VAR // цель - поменять местами слова в real // поскольку к REAL нельзя применить битовый сдвиг, то // получаем указатель на входное значение P := ADR(IN); // получаем указатель на результат P1 := ADR(SWAP_REAL); // дальше работаем с памятью как с DWORD P1^ := ROL(P^, 16); в кодесисе точно работает) union в 61131-3 же определён
Rustem
То есть это не просто расширение?
Andrew
Блин. Уже комп погасил)) Вроде оно в стандарте определено