如何在PLC里将双字的十六进制数DW DDBFB换成无符号的数.docVIP

如何在PLC里将双字的十六进制数DW DDBFB换成无符号的数.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何在PLC里将双字的十六进制数DW DDBFB换成无符号的数.doc

如何在PLC里将双字的十六进制数DW#16#D4DB71FB换成无符号的数3571151355 如何在plc里将双字的十六进制数DW#16#D4DB71FB换成无符号的数3571151355,正是目前PLC自身不能解决的问题,以西门子S7-200为例,该PLC内的存储器存储整数的最小单元为字节,2个字节组成一个字,2个字构成一个双字,双字即为PLC存储整数的最大的存储单元。PLC对字节定义为无符号数,即字节可传递显示16进制数0~FF(即10进制数0~255),而对于字与双子存储器定义为有符号数,即:其最高位定义为存储数的符号位,当最高位=0时表示为此数为正数,当最高位=1时表示此数为负数。如将16进制正数“16#9673”送入MW0,MW0的各位值为:1001_0110_0111_0011,由于其最高位M0.7=1nbsp;,故在监视状态下,MW0显示的不是正数38755,而是负数-26781。见下图:nbsp; nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;本来是正数存入存储器里,可是存储器显示的数却变成负数,如对次数进行加减乘除运算,也是按负数进行,这给数据监视及对数据计算整理带来极大的不便。 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;如何解决字与双字在存储的数其最高位=1时,在监视状态下能显示其正数值而不出现负数值呢?请见以下解析: nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;1、对于最高位=1的字存储器,要使它不显示负数,可将它传递给双字存储器。用双字存储器显示其存数值即可解决显示正数值而不会显示负值。即:令该字的上一个字存储器=0,如:MW2nbsp;=nbsp;16#9763,可令MW0=0,监视MD0双字存储器,其MD0的显示值即为正数值,见下图中的MOV_DW的显示值。 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;2、nbsp;nbsp;对于最高位=1的双字存储器,由于PLC无四字存储器,故不能采用上述1的方法来实现正数显示,但可以采用下面的思路编程来实现: nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;用二个存储器(一个双字与一个单字)分别显示该数的前后二部分数字:用双字存储器显示该数百位以上的部分数值,用单字存储器显示该书的十位与个位2为数值。将这二个存储器数字串联相接的数字,即为该数转换为10进制数的正数值。举例:一个16进制数转换为10进制数,将转换后的数的百位以上的数字部分送入双子存储器内,其值为而转换为10进制数的百位以下的数字部分送入单子存储器内,其值为:55。则该16进制数转换为10进制的数为bsp;55。 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;编程思路:1、将16进制的双字正数送入MD1,其MD0值=MD1数÷256(即16#100)。再将MD0÷100×256——gt;VD0,nbsp;则VD0值即为MD1÷100的整数部分,将它转换为10进制数送入VD0,则VD0就不会显示负值,而且此VD0值的最小单位值1为10进制数的百位数(即=100)。nbsp;MD0÷100的余数部分加上MD1的最低字节(MB4)值—gt;MW4,再进行这样整理:MW4-100nbsp;gt;nbsp;0nbsp;则VD0nbsp;+nbsp;1,直到MW4nbsp;lt;nbsp;100为止。此时的VD0值为原MD1数转换为10进制的百位以上的数字部分,而MW4值为原MD1数转换为10进制的百位以下的十位与个位的数字部分。 nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;将双字单元的16进制数转换为无符号的10进制数的程序 nbsp; nbsp; nbsp; nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;下面是将双字的十六进制数nbsp;DW#16#D4DB71FB送入MD1,nbsp;按上面程序运行,在监视状态下,转换成无符号的正数(见网络6中的VD0与VW4), nbsp; nbsp; nbsp; nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;即:MD1nbsp;=nbsp;16#D4DB71FBnbsp;=nbsp;3571151355 nbsp;nbsp;nbsp;VD0*100+VW4=3571513×100+nbsp;55nbsp;=nbsp;3571151355 nbsp;nbsp;nbsp;nbsp;对于最高位=0的双字数,带入上程序,运行结果也是正确的,见下图: n

文档评论(0)

zhangningclb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档