Указатели перешли из "C". Тяжело они до меня до ходили, т.к. весьма абстрактны. А вот в ассемблере они очень понятны, т.к. он прозрачен. За видио спасибо. Покурю).
Про пример индексного доступа через указатель. В коде для CDS2.3, наверное, строку изменения адреса надо сделать второй. Иначе если массив в коде вызова индексируется с 0..(iElementArray -1), то элемент массива с индексом "0" будет пропущен, так как указатель при вызове функции будет указывать на первый элемент массива.
В CDS3.5, как выяснилось, обращение к массиву через Указатель происходит с начального индекса "0", независимо от диапазона индексов реального массива. Т.е если реальный массив имеет индексы 10..100, то значения индексов через Указатель должны быть 0..90. Из видео это не очевидно.
Автор, было бы интересно рассмотреть работы со счетчиками через прерывания, работу энкодера так же. В Инете вообще нет видео по аппаратной теме прерывании по всяким событиям.
Я с вами полностью согласен - это было бы интересно. Но у наших ПЛК c CODESYS V3.5 "прерывания" (ExternalEvent в терминах CODESYS) пока что не поддержаны. Если в будущем мы поддержим такой функционал (я надеюсь, это произойдет - у нас довольно много запросов от клиентов на управление шаговыми двигателями, работу с энкодерами и т.д) - то я обязательно сделаю видео.
Честно говоря не понял (начало видео) почему указателю prDataArrya, который указывает на адрес первой и единственной переменной типа Real, а не на массив Real, и как к этому указателю применить индекс. Или на это надо смотреть с точки зрения предположения повторяемости однотипных переменных начиная с указателя на первый их элемент в случае применения индекса? prDataArrya: POINTER TO Aarray [1..100] of REAL? Поясните пожалуйста.
"На это надо смотреть с точки зрения предположения повторяемости однотипных переменных начиная с указателя на первый их элемент в случае применения индекса" - совершенно верно.
Здравствуйте. Допустим добавили в проект устройства модбас мастер, библиотека HCFA. Дали ему имя - master. Добавили слейф, имя slave. Далее канал имя ReadW. У него есть параметр с именем input и скорей всего структура размером в 9 слов (word) . Если правильно понимаю, выделяется ресурс, подключается исполнительный код вот это всего. Возможно ли получить ссылку на параметр input ?
Добрый день. Я не видел библиотеки, о которой вы говорите, так что затрудняюсь сходу ответить. Можете связаться со мной в понедельник по почте (e.kislov@owen.ru) и прислать ваш телеграм - можно пообщаться там по этому вопросу.
Разобрался. Это скорей всего входная значение функции что бы взять адрес переменной)). Скорей всего так)) Решил пока вот так. Потому что контроллер с типом Union не захотел работать PROGRAM STIO //Получаем состояние входов выход VAR_INPUT WIO: input; //Из модбаса END_VAR VAR tt: POINTER TO IO; //Временная переменная IO:REFERENCE TO IO; //Переменные со входов выходов только чтение END_VAR tt := ADR( WIO); //Начальный адрес IO REF=tt^; //Разименовываем адресс и присваиваем этот адрес ссылке входов выход в структуре
Доброго времени суток! Верно ли (в плане быстродействия), что ссылками имеет смысл передавать переменные размером более 32(64) бит, а всё, что имеет меньший размер, быстрее передать через копирование?
Добрый день. Это хороший вопрос, но ответа у меня нет. Я могу только предположить, что для переменных размеров в 32/64 бита в плане быстродействия не будет фиксируемой пользователем разницы между передачей по значению и передачей по ссылке.
Спасибо! Отличное видео! Разобраны все моменты, с которыми пришлось ранее столкнуться при изучение ссылок и их отличия от указателей.
Спасибо за предложенную тему. =)
спасибо за ссылку на статью про ссылки))
Указатели перешли из "C". Тяжело они до меня до ходили, т.к. весьма абстрактны. А вот в ассемблере они очень понятны, т.к. он прозрачен. За видио спасибо. Покурю).
Давно эта тема интересовала, спасибо!
Про пример индексного доступа через указатель. В коде для CDS2.3, наверное, строку изменения адреса надо сделать второй. Иначе если массив в коде вызова индексируется с 0..(iElementArray -1), то элемент массива с индексом "0" будет пропущен, так как указатель при вызове функции будет указывать на первый элемент массива.
В CDS3.5, как выяснилось, обращение к массиву через Указатель происходит с начального индекса "0", независимо от диапазона индексов реального массива. Т.е если реальный массив имеет индексы 10..100, то значения индексов через Указатель должны быть 0..90. Из видео это не очевидно.
@@Alexandr_Nazarov спасибо за cправедливое замечание.
Автор, было бы интересно рассмотреть работы со счетчиками через прерывания, работу энкодера так же. В Инете вообще нет видео по аппаратной теме прерывании по всяким событиям.
Я с вами полностью согласен - это было бы интересно. Но у наших ПЛК c CODESYS V3.5 "прерывания" (ExternalEvent в терминах CODESYS) пока что не поддержаны. Если в будущем мы поддержим такой функционал (я надеюсь, это произойдет - у нас довольно много запросов от клиентов на управление шаговыми двигателями, работу с энкодерами и т.д) - то я обязательно сделаю видео.
Честно говоря не понял (начало видео) почему указателю prDataArrya, который указывает на адрес первой и единственной переменной типа Real, а не на массив Real, и как к этому указателю применить индекс. Или на это надо смотреть с точки зрения предположения повторяемости однотипных переменных начиная с указателя на первый их элемент в случае применения индекса? prDataArrya: POINTER TO Aarray [1..100] of REAL? Поясните пожалуйста.
"На это надо смотреть с точки зрения предположения повторяемости однотипных переменных начиная с указателя на первый их элемент в случае применения индекса" - совершенно верно.
Здравствуйте. Допустим добавили в проект устройства модбас мастер, библиотека HCFA. Дали ему имя - master. Добавили слейф, имя slave. Далее канал имя ReadW. У него есть параметр с именем input и скорей всего структура размером в 9 слов (word) . Если правильно понимаю, выделяется ресурс, подключается исполнительный код вот это всего. Возможно ли получить ссылку на параметр input ?
Добрый день. Я не видел библиотеки, о которой вы говорите, так что затрудняюсь сходу ответить. Можете связаться со мной в понедельник по почте (e.kislov@owen.ru) и прислать ваш телеграм - можно пообщаться там по этому вопросу.
Разобрался. Это скорей всего входная значение функции что бы взять адрес переменной)). Скорей всего так))
Решил пока вот так. Потому что контроллер с типом Union не захотел работать
PROGRAM STIO //Получаем состояние входов выход
VAR_INPUT
WIO: input; //Из модбаса
END_VAR
VAR
tt: POINTER TO IO; //Временная переменная
IO:REFERENCE TO IO; //Переменные со входов выходов только чтение
END_VAR
tt := ADR( WIO); //Начальный адрес
IO REF=tt^; //Разименовываем адресс и присваиваем этот адрес ссылке входов выход в структуре
Доброго времени суток! Верно ли (в плане быстродействия), что ссылками имеет смысл передавать переменные размером более 32(64) бит, а всё, что имеет меньший размер, быстрее передать через копирование?
Добрый день. Это хороший вопрос, но ответа у меня нет. Я могу только предположить, что для переменных размеров в 32/64 бита в плане быстродействия не будет фиксируемой пользователем разницы между передачей по значению и передачей по ссылке.