模拟量在S7-200smart中是如何转换的
1、子例程 S_ITR:整数转换为实数(一般作为模拟量输入数据的转换)
将整数缩放为实数
此子例程的用途是将输入范围中的整数缩放为输出范围中的实数。
此子例程会读取由调用 POU 传递的值:要缩放的输入、输入范围上限 (ISH)、输入范围下限 (ISL)、输出范围上限 (OSH)和输入范围下限 (OSL)。
下一步是用 OSH 中减去 OSL,以确定存回 OSH 中的输出缩放范围。该子例程会从输入中减去ISL,并将所得的差先转换为双字,再转换为实数。之后,下一条指令将该实数乘以输出范围。
再下一步是用 ISH 减去 ISL,以计算输入缩放范围,将计算所得的值转换为双字,并再转换为实数。
该子例程用输出缩放范围除以计算所得的实数,并将结果与输出范围下限值 (OSL)相加,以确定Zui终输出值。Zui后,该子例程会将此值移动到要由调用 POU 使用的子例程的输出。
公式如下:
输出 = [(OSH - OSL) * (输入 - ISL) / (ISH - ISL)] + OSL
程序如下:可单独制作写入库中,进行使用
2、子例程 S_RTI:实数转换为整数(一般作为模拟量输出数据的转换)
将实数缩放为整数
此子例程的用途是将输入范围中的实数缩放为输出范围中的整数。
下一步是用 OSH 中减去 OSL,以确定存回 OSH 中的输出缩放范围。该子例程会从输入中减去ISL,并将所得的差先转换为双字,再转换为实数。
下一步是用输入减去 ISL,用所得的差乘以计算所得的实数输出缩放范围。
再用 ISH 减去 ISL,以计算输入缩放范围,用输出范围除以计算所得的输入锁定范围,将商舍入为双字。
之后,该子例程将根据该数据类型的界限限制检查已舍入的输出值,以确保Zui终值的准确性。在界限检查后,子例程会将双字值转换为整数,用该整数加上输出范围下限(OSL),并将所得值移动到子例程输出。
公式如下:
输出 = [(OSH - OSL) * (输入 - ISL) / (ISL - ISL)] + OSL
程序段 2 检查 Temp_D 是否小于 -32768
3、子例程 S_RTR:实数转换为实数(根据采集到的数据变量而进行转换)
将实数缩放为实数
此子例程用于将输入范围内的标准化模拟量输入缩放到输出范围内。
此子例程会读取由调用 POU 传递的值:要缩放的输入、输入范围上限 (ISH)、输入范围下限 (ISL)、输出范围上限 (OSH)和输入范围下限 (OSL)。所有输入都为实数。
下一步是用 OSH 减去 OSL,以决定输出缩放范围。之后,子例程会用输入减去 ISL,并用所得的差乘以输出范围。
下一步是用 ISH 减去 ISL,以确定输入缩放范围。
此时,子例程用该输出范围除以取消缩放的输入,以确定Zui终输出值,将该值移动至调用 POU 将使用的子例程输出。
公式如下:
输出 = [(OSH - OSH) * (输入 - ISH) / (ISH - ISL)] + OSL