Отвечает Игорь Петров:
123.png
Отвечает Игорь Петров:
123.png
А я думаю надо делать явно
w := BYTE_TO_WORD(b - 1);
иначе
16#ffff
"минимально необходимый".
И что является минимально необходимым для 1?
BYTE, SINT или USINT? (все три типа занимают 1 байт и могут принимать значение 1)
Я понимаю, что "можно написать USINT#1". Но кто-нибудь реально так пишет?
Много ли кто знает, что так вообще можно написать?
Если честно, я склоняюсь к модели "делать все вычисления в знаковых типах".
Но если так делать, то dword_var := dword_var + 1; начинает ругаться "вы тут приводите DINT к DWORD'у" И тут
- либо разрешать такое приведение (делать так, чтобы не ругалось)
- либо требовать запись dword_var := TO_DWORD(dword_var + 1); Выглядит, конечно, неуклюже.
- либо переучивать всех на DINT тип: dint_var := dint_var + 1; "математически" правильно, но чего-то я сомневаюсь в осуществимости.
Я бы предположил, что USINT, поскольку 1 - это положительное (так что не имеет смысла делать его SINT) целое число (так что не BYTE, который bit string).
Но лучше уточнить у первоисточника (IEС-61131 можно без особых проблем нагуглить).
В том-то и дело, что в стандарте не сказано как должно работать.
Я пересмотрел ещё раз
IEC STANDARD 61131-3 Second edition 2003-01, Part 3:Programming languages
Там по поводу typed literals сказано только то, что они есть.
Правил вычисления там нет.
Разве что сказано, как работает деление отрицательных чисел, и что в результате 0/0 должно получаться 0.
А я думаю есть еще один хороший источник - это OSCAT
Я раньше тоже не совсем понимал зачем там все переменные (которые мне попадались, за всю библиотеку не скажу) знаковые. А константы имеют вид INT#1. Сейчас сам так пишу.
Не уверен, что мое наблюдение будет полезным, но все же выскажусь.
В моем ПРУ-проекте переменная показаний энкодера имеет тип WORD, в ПЛЦ_ПРГ я присваиваю это значение переменной типа INT. Никаких ошибок ни при компиляции, ни при работе не возникает. Т.е. без всяких дополнительных преобразований. Просто делаю ПЛЦ_ПРГ_vol (INT) := ПРУ_vol (WORD). Естественно 16#FFFF в ПРУ-перемнной отображаются в ПЛЦ-ПРГ как -1. Результат устраивает.
Вопрос к В.Ситникову. Что будет, если во время работы ШД поменять quantity в SteppersConfig_PruMemoryTransfer не передергивая enable ?
Последний раз редактировалось Вольд; 25.01.2017 в 13:36.
Добрый вечер.
STEPPER2_Enc_PRU0_stepper_accel_ramp : WORD;
STEPPER2_Enc_PRU0_stepper_decel_ramp : WORD;
Нет ли возможности сделать эти переменные DWORD, ибо надо получить космическое ускорение.