S7-300中DI怎么转换为I

2024-12-27 22:41:53
推荐回答(4个)
回答1:

直接用mov指令即可,你可以试一下mov指令输入在符号表中定义为dint,mov输出侧定义为int,300中没有200的转换指令是源于300的mov指令的强大。如果是real型转换成int,你可以将real用round指令转换成dint,然后用mov指令转换成int,这在300系统中通过dp方式外挂200模块,写200模块的地址中会用到。

回答2:

以西门子的做法就是 直接读取低字 如您的双整数为MD0,那么直接读取MW2 ,L MW2包括西门子的SCL中的转换也如此,SCL中,实现该功能的指令为DINT_TO_INT。实际上,西门子指望用户自己去确保您的DINT数据需要在INT的数据范围内,当然,如果您选用STL或者LAD,那么您需要自行处理符号位。以我个人的处理方式,我会对于数据进行判断,当数据大于INT的值域范围时,会输出最大或者最小值。Good Luck~

回答3:

但你如果双整数是带符号的,你这样就不行了

回答4:

  一般在模拟量输出或特殊显示时用到“DI->I”。
  如:从AI读取一个I,再I -> DI -> 浮点数,经过一个算法(算法里用到浮点数。如:cos(x)),输出一个浮点数F,再 浮点数 -> DI ->I ,最后把I送到模拟量输出模块。
  标准的做法是:
  第一步:检测DI中存放的数据范围,大于32767或小于-32768的,都直接输出最大值或者最小值。
  第二步:在数据范围内的,首先要保留31位上的符号值,然后写入16位上,直接读取高字就可以了。
  大多数程序员就直接读取高字,而不做上述的工作,因此这些程序中是存在数据溢出的风险的。