S7-300中DI怎么转换为I
大家好,我请教各位朋友,S7-300中双整数(DI),怎么转换为整数(I)假设我的双整数是MD0,我怎么转换为整数呢,有哪为朋友知道,请帮帮忙...
大家好,我请教各位朋友,S7-300中双整数(DI),怎么转换为整数(I)假设我的双整数是MD0,我怎么转换为整数呢,有哪为朋友知道,请帮帮忙
展开
2013-09-09
展开全部
直接用mov指令即可,你可以试一下mov指令输入在符号表中定义为dint,mov输出侧定义为int,300中没有200的转换指令是源于300的mov指令的强大。如果是real型转换成int,你可以将real用round指令转换成dint,然后用mov指令转换成int,这在300系统中通过dp方式外挂200模块,写200模块的地址中会用到。
2013-09-09
展开全部
以西门子的做法就是 直接读取低字 如您的双整数为MD0,那么直接读取MW2 ,L MW2包括西门子的SCL中的转换也如此,SCL中,实现该功能的指令为DINT_TO_INT。实际上,西门子指望用户自己去确保您的DINT数据需要在INT的数据范围内,当然,如果您选用STL或者LAD,那么您需要自行处理符号位。以我个人的处理方式,我会对于数据进行判断,当数据大于INT的值域范围时,会输出最大或者最小值。Good Luck~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-09
展开全部
但你如果双整数是带符号的,你这样就不行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-09-19
展开全部
一般在模拟量输出或特殊显示时用到“DI->I”。
如:从AI读取一个I,再I -> DI -> 浮点数,经过一个算法(算法里用到浮点数。如:cos(x)),输出一个浮点数F,再 浮点数 -> DI ->I ,最后把I送到模拟量输出模块。
标准的做法是:
第一步:检测DI中存放的数据范围,大于32767或小于-32768的,都直接输出最大值或者最小值。
第二步:在数据范围内的,首先要保留31位上的符号值,然后写入16位上,直接读取高字就可以了。
大多数程序员就直接读取高字,而不做上述的工作,因此这些程序中是存在数据溢出的风险的。
如:从AI读取一个I,再I -> DI -> 浮点数,经过一个算法(算法里用到浮点数。如:cos(x)),输出一个浮点数F,再 浮点数 -> DI ->I ,最后把I送到模拟量输出模块。
标准的做法是:
第一步:检测DI中存放的数据范围,大于32767或小于-32768的,都直接输出最大值或者最小值。
第二步:在数据范围内的,首先要保留31位上的符号值,然后写入16位上,直接读取高字就可以了。
大多数程序员就直接读取高字,而不做上述的工作,因此这些程序中是存在数据溢出的风险的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询