Блок Сложения¶
Описание: Блок функции «Сложение» производит арифметическую операцию сложения (вычитания) со значениями, поданными на входы. Тип операции задается для каждого входа отдельно, путем изменения свойств соответствующей входу ножки. Операция выглядит как: (знак операции)значение на входе 1 + (знак операции)значение на входе 2 + …. + (знак операции)значение на входе n, где n - число входов блока (см. свойства блока).
Примечание: тип операции задается в свойствах «ножки» входа блока.
Пример:
- (+)10 + (+)5 = 10+5 = 15;
- (+)10 + (-)5 = 10-5 = 5;
- (-)10 + (+)5 = -10+5 = -5;
- (-)10 + (-)5 = -10-5 = -15:
Свойства блока: (ПКМ по блоку - Свойства ( Alt + P ))
Общие свойства: см. Редактирование свойств блока.
Тип данных: допускаются любые типы данных из предложенных.
Количество входов: в данном пункте предоставляется возможность изменения количества входов соответствующего блока.
Показывать выход переполнения: управляет наличием выхода of
, который выдает логический признак возникновения переполнения. Это свойство не влияет на выполнение операций устройством. Выход of
рекомендуется использовать для выполнения специально запрограммированных действий при переполнении.
Обработка переполнения: при выполнении операции выполняется проверка на переполнение выхода, т.е. результирующего значения за диапазон значений выбранного типа данных. В такой ситуации рассчитанное значение не может быть верным математически.
Существуют следующие способы обработки переполнения:
- «Игнорировать» - выход получает только младшие биты данных от полученного результата. Не рекомендуется использовать, за исключением реализации циклических счетчиков, когда переход счетчика через максимальное значение в 0 специально нужен, или когда старшие биты значения не нужны, достаточно младших битов.
- «Установить 0» - выход устанавливается в 0. Рекомендуется использовать при использовании значения 0 как признак аварии;
- «Выставить граничное значение» - выход получает значение, ближайшее к истинному значению, на границе диапазона значений выбранного типа данных. Это наиболее логически правильный и рекомендуемый способ, особенно для значений, суммируемых за некоторое время работы устройства;
- «Настройки проекта» - ссылка на один из первых трех способов, указанный в настройках проекта. Эта опция позволяет централизованно управлять этим свойством.
При наличии нескольких операций в одном блоке, т.е. более чем 2 входов – ситуация переполнения последовательно анализируется при выполнении операций:
- выход
of
равен 0, если переполнения нет при выполнении всех операций (на выходе математически правильное значение), иначе устанавливается 1; - при 2 и 3 способе обработки при возникновении переполнения блок пропускает выполнение следующих операций, т.к. все биты, в т.ч. младшие, приняли математически неправильные значения. Поэтому при пропуске следующих операций в 3 способе обработки и возникновении ситуации переполнения несколько раз в разные стороны (например, сначала вверх, затем вниз) выдаваемое значение будет соответствовать первой по порядку ситуации переполнения;
- при 1 способе обработки при возникновении переполнения блок продолжает выполнение следующих операций. При выполнении вычитания первого входа значение вычитается из 0, блок выполняет на одну операцию больше в сравнении со сложением первого входа. При этом вычитании также обрабатывается переполнение.
Внимание: при 2 и 3 способе обработки переполнения, в случае возникновения переполнения, результат зависит от порядка выполнения операций, т.е. подключение входов в другом порядке приводит к изменению результата. В том числе, возможно, что при каком-то варианте подключения переполнение не происходит, а в другом – происходит, при одинаковых входных значениях. Этого можно избежать с помощью выбора в блоке типа данных с большей разрядностью, чем типы данных значений на входах. В таком случае переполнение практически не может случиться (для переполнения потребуется слишком большое количество входов). При использовании типов данных с плавающей запятой вероятность переполнения значительно уменьшается. Но имеются побочные эффекты, которые могут привести к неожиданным результатам.
Следует иметь ввиду:
- при увеличении порядка значения снижается его точность из-за увеличения дискретности, например 4-байтовое число порядка 17000000 имеет дискретность 2, т.е. сложение 1 к нему может не изменить результат!
- обработка младших разрядов, выходящих за предел разрядности, может зависеть от реализации в устройстве. В большинстве устройств вычисления реализуются по стандарту IEEE 754, но это не гарантировано.
Пример выполнения блока для 1-байтового беззнакового
типа данных, значения ограничены диапазоном от 0 до 255:
Способ обработки переполнения |
Операция 1 входа |
Значение 1 входа |
Операция 2 входа |
Значение 2 входа |
Операция 3 входа |
Значение 3 входа |
Выход | Выход of |
Игнорировать | + | 0 | + | 255 | + | 0 | 255 | 0 |
Игнорировать | + | 0 | + | 255 | + | 1 | 0 | 1 |
Игнорировать | + | 128 | + | 128 | + | 3 | 3 | 1 |
Игнорировать | + | 1 | - | 1 | + | 255 | 255 | 0 |
Игнорировать | - | 0 | + | 1 | + | 100 | 101 | 0 |
Игнорировать | - | 1 | + | 1 | + | 100 | 100 | 1 |
Игнорировать | - | 1 | + | 128 | + | 255 | 126 | 1 |
Установить 0 | + | 0 | + | 255 | + | 0 | 255 | 0 |
Установить 0 | + | 0 | + | 255 | + | 1 | 0 | 1 |
Установить 0 | + | 128 | + | 128 | + | 3 | 0 | 1 |
Установить 0 | + | 1 | - | 1 | + | 255 | 255 | 0 |
Установить 0 | - | 0 | + | 1 | + | 100 | 101 | 0 |
Установить 0 | - | 1 | + | 1 | + | 100 | 0 | 1 |
Установить 0 | - | 1 | + | 128 | + | 255 | 0 | 1 |
Граничное значение | + | 0 | + | 255 | + | 0 | 255 | 0 |
Граничное значение | + | 200 | + | 200 | + | 1 | 255 | 1 |
Граничное значение | + | 128 | - | 28 | + | 200 | 255 | 1 |
Граничное значение | + | 1 | - | 1 | + | 255 | 255 | 0 |
Граничное значение | - | 0 | + | 200 | + | 55 | 255 | 0 |
Граничное значение | - | 1 | + | 1 | + | 100 | 0 | 1 |
Граничное значение | - | 1 | + | 128 | + | 255 | 0 | 1 |