水电电工知识
电工知识|西门子S7-200PLC中,如何将大于32767的整数转换成正实数?
2016-01-13  浏览:31
水电之家讯:来自西门子技术支持热线的故事:S7-200plc中,如何将大于32767的整数转换成正实数?

铃~~~!电话响起------您好!欢迎您拨打西门子技术支持热线。

客户:我这边是个S7-200的PLC系统,226 CN PLC 的port0口做modbus主站,读取一个仪表的数据,数据能通信,但是读过来的数据不对。

工程师:根据您的描述,那么应该已经通信上了,我们可以最后再排查程序问题。首先请检查接线,引脚3是信号+,引脚8是信号-。

另外,请问有核实两边的数据存储格式是否一致吗?因为西门子plc的数据存储格式是低位高字节,按照以VW0为例,就是高8位为VB0,低8位为VB1.如果仪表那边是高位高字节,即:高8位为VB1,低8位为VB0.那么两边正好相反,即便通信上了,数据对不上是可能的。西门子的低位高字节数据存储格式示意请参见:



客户:好,我先去核实一下。= = = = = =

客户:您好,modbus通信已经没问题了。PLC这边数据已经读取进来,我想问下读到的数应该是什么格式的。我这边一个数65500,PLC这边为什么是负数。

工程师:PLC在程序中监控和运算多是以有符号整数进行的,VW或者VD的最高位是符号位,如果对于Word来说,大于32767后数据为负。

通过modbus通信过来的数都是负数是吗?刚才65500的数是多少?除了程序块监控外,状态表在线监控,数据格式选择无符号后数据读取是否正常。

客户:哦,都是大数才为负数,应该是都大于32767的。状态表里譬如VW100吧,无符号数是65500,有符号数是-35,数据格式选择无符号的就正确。

工程师:数据存储实际上都是按照二进制进行的,只是读取它时的数据格式不同而已,您可以在状态表中选择无符号数。

客户:不是啊,我就是要正数。关键是我把这个数转换成实数后还带着负号,我port 1口连了第三方的触摸屏,触摸屏上选择的是实数连接,读上来后屏那边显示的是负数,不行啊。

工程师:嗯~,请问您是怎么进行编程转换的。

客户:我就是先用I_DI,再DI_R。不行啊,大数就错了,小数才不带符号。

工程师:您先别着急,按照正常的编程方式,您的思路是正确的,可对于负数来说就不行了。可以换种思路来考虑,对于word或者d-word的格式来说,数据的最高位是符号位。那么我们最开始转换成双字的时候,去掉符号就行了。

客户:我也试过,让这个数与16#7F相乘来去掉符号位,那就不对了,数就不对了。你这也不行啊

工程师:请先不要着急,我说的不是这个方法。在转换成双字的时候不要把最高位当作符号位,如下图,先来了解符号位的定义:



通过I_DI的转化,实际上是将VW0-VD0,可是如果将VW0直接放在VW2上,同时VW0清0,直接去读取VD0是什么情况?原先VW0中的符号位,在VW2中,并不是VD0的最高位即符号位,在VD0里就是数据了。而与此同时,我们去掉了负号是吗。

举例:VW0=65500(无符号整数),经过I_DI给VD10.

对比:VD0,双字转换后的VD10,和仅仅将VW0传送给VW6后的VD4,这几个数的比较,请参见下面的实验结果:



客户:我明白了,是我把问题想复杂了,原来简单的传送就可以解决问题了。

水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 电线 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 BYBC.CN SYSTEM All Rights Reserved