在台达DVP系列PLC中,将浮点数(如D区或R区的浮点数据)转换为整数是常见的需求,尤其在需要与整数型指令、寄存器或外部设备交互时。以下是详细的转换方法及注意事项:
一、使用ROUND指令(四舍五入取整)
功能:将浮点数按四舍五入规则转换为整数,结果存储到目标寄存器。
指令格式:ROUND Dn Dm
Dn:源浮点数寄存器(如D10)。
Dm:目标整数寄存器(如D20)。
示例:
LD M0 // 触发条件(如按钮按下)ROUND D10 D20 // 将D10的浮点数四舍五入后存入D20
应用场景:需要精确到个位的取整,如温度控制、计数显示等。
二、使用TRUNC指令(截断取整)
功能:直接舍去浮点数的小数部分,保留整数部分。
指令格式:TRUNC Dn Dm
Dn:源浮点数寄存器。
Dm:目标整数寄存器。
示例:
LD M0TRUNC D10 D20 // 将D10的浮点数截断小数后存入D20
应用场景:需要快速取整且不关心小数部分,如流程计数、步进控制等。
三、使用MOV指令(直接传输,需注意数据类型)
原理:若浮点数在R区(如R0),可通过MOV指令将其传输到D区,但需确保目标寄存器为整数类型。
限制:直接传输可能导致数据截断或错误,需结合ROUND/TRUNC使用。
改进方法:
LD M0ROUND R0 D10 // 先四舍五入,再传输到D区MOV D10 D20 // 若需进一步处理
四、使用SCALE指令(缩放并取整)
功能:将浮点数按比例缩放后取整,适用于需要线性变换的场景。
指令格式:SCALE Dn Dm Dp Dq
Dn:源浮点数。
Dm:缩放比例(如10.0表示放大10倍)。
Dp:目标整数寄存器(缩放后结果)。
Dq:可选偏移量(通常为0)。
示例:
LD M0SCALE D10 10.0 D20 0 // 将D10放大10倍后取整存入D20
应用场景:如将0.5~1.5V的模拟量转换为5~15的整数输出。
五、注意事项
数据范围检查:
浮点数范围:台达DVP系列浮点数范围通常为±3.4×10³⁸,但整数寄存器(D区)范围为-32768~32767(16位)或-2147483648~2147483647(32位,需确认PLC型号)。
风险:若浮点数超出整数范围,转换结果会溢出(显示错误值或触发PLC报警)。
精度损失:
浮点数转换为整数会丢失小数部分,可能导致精度下降。
建议:在需要高精度的场景(如PID控制),尽量使用浮点运算,仅在最终输出时转换。
指令兼容性:
确认PLC型号支持ROUND/TRUNC指令(DVP-ES/EX系列通常支持)。
若指令不可用,可通过数学运算模拟:
// 四舍五入模拟(假设D10为浮点数)LD M0ADD D10 0.5 D11 // 加0.5后截断TRUNC D11 D20
调试技巧:
使用监控功能(如WPLSoft的“监视”模式)实时查看寄存器值。
通过LED指示灯或触摸屏验证转换结果是否符合预期。
六、完整示例程序
需求:将R0的浮点数转换为整数,并存储到D10,同时监控转换结果。
LD M0 // 触发条件ROUND R0 D10 // 四舍五入取整OUT D10 D100 // 将结果输出到触摸屏或HMI(假设D100为显示寄存器)
扩展功能:
添加溢出检测:
LD M0ROUND R0 D10CMP D10 K32767 M1 // 检查是否超过32767LD M1OUT Y0 // 若溢出,触发报警灯


