Та нет, простой таймер и я могу написать))) я сам уже разобрался, спс)))
Та нет, простой таймер и я могу написать))) я сам уже разобрался, спс)))
Здравствуйте, коллеги.
Попал мне в руки ПЛК 150. Экспериментирую и осваиваю CoDeSys.
Прочитал:
Сделал:
http://www.owen.ru/forum/attachment....1&d=1363171181
Собственно вопрос: А что я сделал не так?
Преобразование "REAL_TO_DWORD" очевидно, но непонятно зачем.
Вдогонку:
В списке адрес %QD7.0, а на панели "Базовые параметры" - %QB7
Вопрос 2: Чем чревато отличие в одной букве?
Последний раз редактировалось Асутупист; 13.03.2013 в 14:03.
Аккуратнее с такими «очевидностями».Преобразование "REAL_TO_DWORD" очевидно, но непонятно зачем.
Согласно руководству, вторая буква (D) это дескриптор размера, а не типа. И по такому определению на адрес %QD должны приниматься любые 32-битные значения, в том числе с плавающей запятой. Тем не менее, компилятор при обращении вот так по адресу допускает только целочисленные. То бишь баг или в руководстве, или в компиляторе.
Преобразование REAL_TO_DWORD здесь неуместно, т.к. дробная часть будет отброшена. Рекомендую избегать прямого обращения к таким адресам и присваивать имена в окне конфигурации.
Спасибо.
Потерю дробной части наблюдал воочию.
Да... уж. Я, например, ошарашен тем, что к DINT компилятор в упор не хочет применять побитовые логические операции. Потом вычитал, что таки да, нужен BYTE, WORD, DWORD. И делаю тупое присваивание dw := di, чтобы потом покрутить полученное двойное слово.
С другой стороны, такая строгость системы иногда и спасает таких как я, читающих мануалы в последнюю очередь![]()
То же самое с INT и SINT. Потому что негоже биты в знаковых типах дёргать. Где вам это понадобилось вообще?ошарашен тем, что к DINT компилятор в упор не хочет применять побитовые логические операции
Да просто выделить младшее слово, например. Я, к примеру, забрасываю DINT куда-то по словам.
Кроме того, бывают ситуации, когда просто однотипные операции делаю с разными типами. А разница между DWORD и DINT для переменных, которые по смыслу не бывают отрицательными - нулевая. Вот и бывает, что объявляю переменную DINT (за кумпанию с другими), а она, ну, может быть от 0 до 999999999. Пофиг, будет ли DWORD или DINT, так ведь? И вдруг выделить из нее некое поле операцией AND - низзя!
Конечно, все решаемо. Я не жалуюсь. Я просто ответил на вопрос.