Table of Contents |
---|
Overview
All protocol modules support the scaling of item values . This allows us in order to publish data based on calculated formula instead of raw device data. Any item can be scaled, with the exception of Boolean (bit) and String items. After scaling, the original item data type will be changed to Double.
To apply scaling to an item, use the following syntax as the OPC item name:
Note |
---|
It is possible to lose data precision due to data type conversion |
Table of Contents | ||||
---|---|---|---|---|
|
Linear Scaling
Register{SL,LR,HR,LE,HE}
...
Code Block |
---|
Register{SL,LR,HR,LE,HE} |
...
Register is the tag or register name in the end device
SL is the linear scale identifier and must appear first after the open bracket.
LR is the low raw value.
HR is the high raw value.
LE is the low engineering value.
HE is the high engineering value.
...
To calculate scaled data after reading from
...
device:
...
ScaledValue = (Raw-LoRaw)/(HiRaw-LoRaw)(HiEGU-LoEGU)+LoEGU
Example: 40001{SL,0,4095,0,100}
If the device returns a raw value 1000 the scaled value should will be:Scaled
ScaledValue = (1000 - 0)/(4095 - 0)(100 - 0) + 0 = 24.42
This sample shows how the raw data of 1000 was calculated with SL formula to generate the result of 24.42.
...
To calculate raw data before sending to device:
Raw RawValue = (ScaledScaledValue-LoEGU)/(HiEGU-LoEGU)(HiRaw-LoRaw)+LoRaw
Example: 40001{SL,0,4095,0,100}
If a scaled value of 60 was written to the device then , the actual data value written to the device will be:Raw
RawValue = (60 - 0)/(100 - 0)(4095 - 0) + 0 =
...
2457
...
Square Root Scaling
Code Block |
---|
Register{SQ,LR,HR,LE,HE} |
LowRaw, HighRaw, LowEGU, HighEGU in "{SQ,LR,HR,LE,HE}"
Validate lows are lower than highs.
Register is the tag or register name in the end device
SQ is the square root scale identifier and must appear first after the open bracket.
LR is the low raw value.
HR is the high raw value.
LE is the low engineering value.
HE is the high engineering value.
...
To calculate scaled data after reading from device:
...
Formula: ScaledValue = SQRT((Raw-LoRaw)/(HiRaw-LoRaw))*(HiEGU-LoEGU)+LoEGU
Example: 40002{SQ,0,4095,0,100}
If device returns a raw value of 1000, the scaled value should will be:
Scaled ScaledValue = SQRT((1000 - 0)/(4095 - 0))(100 - 0) + 0 = 49.42
...
To calculate raw data before sending to device:
Formula: Raw = ((Scaled-LoEGU)/(HiEGU–LoEGU))^2(HiRaw-LoRaw)+LoRaw
Example: Device1. 40002{SQ,0,4095,0,100}
If a scaled value of 60 was written to the device then the actual data value written to the device will be:
Raw = ((60 - 0)/(100 - 0))^2*(4095 - 0) + 0 = 1474.2
Above sample shows how the scaled data of 60 being written to device as actual raw value of 1474.2.
Note |
---|
It is possible to lose data precision due to data type conversion |
Gain/Offset Scaling
Code Block |
---|
Register{SG,Gain:Offset} |
Gain, Offset in "{SG,Gain:Offset}"
Validate Gain is not Note: Gain must not be zero.
Register is the tag or register name in the end device
SG is the gain/offset scale identifier and must appear after the open bracket.
Gain is a multiplier.
Offset is an addition.
...
To calculate scaled data after reading from device:
...
Formula: ScaledValue = (RawValue * gain) + offset
Example: Device1. 40003{SG,2.5:1}
If the device returns raw value of 1000 the scaled value should will be:
Scaled ScaledValue = 1000 * 2.5 + 1 = 2501
This sample shows how the raw data of 1000 was calculated with the SG formula to generate the result of 2501.
...
To calculate raw data before sending to device:
...
Formula: RawValue = (
...
ScaledValue - offset) / gain
Example: Device1. 40003{SG,2.5:1}
If a scaled value of 60 was written to the device then the actual data written to the device will be:
Raw RawValue = (60 - 1)/2.5 = 24.4
The above sample shows how the scaled data of 60 was written to the device as actual raw value of 24.4.
Note |
---|
It is possible to lose data precision due to data type conversion |
Inverse Scaling
Code Block |
---|
Register{SI:Inverse} or Register{SI} |
Inverse in "{SI:Inverse}" or “{SI}”
Validate that Item raw value is not zeroNote: The item raw value must not be zero.
Register is the tag or register name in the end device
SI is the inverse scale identifier and must appear after the open bracket.
Inverse is a divider and is optional.
By The default inverse for “{SI}” the inverse is 1. {SI} is the same as {SI:1}.Below is the SI formula used to
To calculate scaled data after reading from device:
...
Formula: ScaledValue = Inverse/
...
RawValue
Example: 40003{SI:2}
If the device returns a raw value of 1000 the scaled value should will be:
Scaled ScaledValue = 2/1000 = 0.002
This sample shows how the raw data of 1000 was calculated with the SI formula to generate the result of 0.002.
...
To calculate raw data before sending to device:
...
Formula: RawValue = (1/
...
ScaledValue) * Inverse
Example: 40003{SI:2}
If a scaled value of 0.5 was written to the device then the actual data written to the device will be:
Raw RawValue = (1/0.5) * 2 = 4
...
4
...