• 自动化系统
  • 驱动技术
  • 低压电气
  • 工业服务
  • 其他
工业自动化软件 PLC和组件HMI人机界面通信与网络组件过程控制系统过程仪表及分析仪器工业识别工业信息安全
SIMATIC S7-1500系列
SIMATIC S7-1200系列
SIMATIC S7-200 SMART
SIMATIC S7-200系列
SIMATIC S7-300系列
SIMATIC S7-400系列
LOGO!
ET200
SIMATIC S5
工业自动化软件
工业电源
WinAC
TDC/SYMADYN D
更多
常问问题

在 STEP 7 (TIA Portal) 软件中,为什么在 SCL 编程时 DInt 格式的加法运算结果不能够正确显示?

star star star star star
5.0 分
  • 故障诊断
  • DINT
  • PORTAL
  • scl
文档编号:98278626| 文档类型:常问问题| 发布时间:2023年11月07日
  • 0
  • 769
  • 695
此FAQ描述了在STEP 7 (TIA Portal)的SCL语言中,DInt加法运算结果不能正确显示的原因

描述
在数学运算中,不建议将已定义数据类型和未定义数据类型的常数进行混合运算。这可能导致不必要的隐性转换,从而导致不正确的值。

下 面的例子给出了一条指令运算来解释这种错误的发生。在这里,将已定义数据类型的常数 ("int#1") 和未定义数据类型的常数 ("50000") 相加。在这种情况下,已定义数据类型的常数决定了这个加法的执行方式。数值 50000 首先被转换成 Int 数据类型,这将产生一个负的十进制数值 ("-15536")。然后运算结果 ("-15535") 被转化成 DInt 数据类型,再被分配给变量  "dint_var"。

  • dint_var := int#1 + 50000;

使用菜单命令 "Software (rebuild all blocks)" 编译之后,这个加法结果会得到信息 “常数值超出允许范围”。

解决
在指令中改变常数的数据类型,要么都是未定义数据类型,要么都是定义数据类型。在未定义 数据类型的条件下,这些常数会被定义成当前 CPU 最常用的数据类型 (例如 S7-1500 中常用"LInt" ) 。随后执行加法,如果必要就转换为 DInt 类型。如果都定义了数据类型,最常用的数据格式决定了运算结果。所以在这个例子中,Int#1 首先被转换成 DInt#1,然后按照 DInt 进行运算。

举例

  • dint_var := 1 + 50000;
  • dint_var := Int#1 + dint#50000;

图 01 显示了三个加法的结果。


图 01

上述运算结果也可以使用一个整数变量和一个未定义数据类型的常数。数值 50000 转换成一个整数 (结果是 -15535),以 "int_var" 格式相加再转化为 "dint_var"。


图 02

创建环境
本问题中所涉及的图片建于 STEP 7 (TIA Portal) V13+Upd 2.

关键字
消息 619:247


您可以前往全球资源库查看此文档:

https://support.industry.siemens.com/cs/cn/zh/view/98278626


推广Service Portal Home首页
  • 评论
  • 分享

    扫码分享

  • 收藏
  • 点赞
  • 纠错
 

隐私政策更新提示

欢迎您来到西门子数字化工业支持中心网站!我们使用cookies来确保您能最好地使用我们的网站,进行网站分析并根据您的兴趣定制内容。我们有时会与第三方共享cookie数据。继续浏览本网站,即表示您同意我们使用cookies。您亦可以参考西门子数据隐私政策以了解更多相关信息。

同意并继续浏览
提示
您即将前往“全球技术资源库”。
“全球技术资源库”的用户名与本地支持中心(下载中心、技术论坛、找答案、1847工业学习平台)的用户名不通用。如果需要在全球技术资源库下载文档,您需要重新登录或注册。
确定
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。