64位浮点数转32位浮点数PLC程序的开发

发布时间:2024-07-30  

我们的S7-200SMART PLC不支持doublefloat数据类型,需要转换成float型才能计算使用。

图片


浮点数的定义

在编写转换程序之前,我们需要先了解IEEE浮点数的定义:

浮点数的二进制信息包括了符号(sign),指数(exponent),尾数(fraction)这三类信息

图片

浮点数的解析

通过二进制值按规则解析出浮点数

图片

64位浮点数

图片

32位浮点数

图片

当指数位不全为0或不全为1时,m=1+M

m的计算规则如下图:

图片

图片

不论是32位浮点数还是64位浮点数,都是按照上面的规则进行计算解析出浮点数的实际值。

编程实现转换

目标

流量计读取到的负累计流量,64位浮点数实际值如下

图片

利用在线计算器输入十六进制,得到转换出的Float64十进制实际值。

图片

需要将64位浮点数转换成32为浮点数,在计算器中输入十进制数值,得到转换后的十六进制数值。

图片

思路

逆向思考,要想得到同样的结果

符号位功能相同可直接对应过来

指数E需解析出同样的e(由于32位浮点数指数只有8个位,表示的最大无符号整数为255,如果将64位浮点数指数对应过来超过255,就会发生溢出错误)

尾数直接截取(仅影响精度)。

子程序

变量表

图片

  1. 初始化,复位错误位,浮点数输出清零

图片

  1. 取出指数部分,并排列成PLC可运算的整数,根据双精度浮点数的偏置和单精度浮点数的偏置,得出单精度浮点数的8位指数位的整数值。

图片

  1. 单精度浮点数指数位只有八位,范围是0-255,如果指数比255大,则错误位置位,从子程序返回;如果在范围内,就将指数位排列在输出地址的最前端。

图片

  1. 对尾数位进行处理,掐头去尾并对齐位置。将尾数位拼接至输出地址中指数位的后面,并整体右移1位,空出符号位。

图片

  1. 获取双精度浮点数包含符号位的首个字节,将原符号位与输出的符号位同步.

图片

转换过程图示

图片

转换结果

主程序调用子程序

图片

转换结果以双整型显示(SReal在变量表中类型定义为DWORD)

图片

VD2700十六进制内容与上文计算器转换出的十六进制数值一致

图片

VD2700十进制32位浮点数显示内容与64位浮点数的整数及小数点后5位相同,程序正确。

图片

超范围错误位置位验证

输入一个较大的64位浮点数

图片

将计算器中的十六进制输入进PLC中64位浮点数对应的地址中,

图片

输入的64位浮点数超出了32位浮点数所能表示的范围,输出为0并且错误位M0.0被置位。

图片

以上是一种实现64位浮点数转换为32位浮点数的一种PLC编程方法供大家参考。

总结

让我们总结一下编写64位浮点数转32位浮点数用到的PLC知识

  1. 利用指针获取数据,指针的数据类型是DINT型,&VB2616代表获取VB616的地址。

  2. PLC程序的执行顺序是从上到下,从左到右的顺序。

  3. 变量表中OUT类型的变量Error,如果在后面的程序中有不明确状态的地方,那么使用前必须进行初始化(第一段程序)。

  4. 利用逻辑运算“与”功能,保留需要的位并将不需要的位清零。(程序段2的WAND_W,利用2#111111111110000实现与指数无关的位清零。)

  5. 利用SHR_W对字中的二进制数进行移位排列。

  6. RET有条件返回指令,提前结束子程序。

  7. 移动指针已获取不同位置的数据,指针+1,指向的字节寄存器位置+1,例如指针指向VB2616,指针+1则指针指向VB2617.*LD0代表操作指针指向的实际数据。

  8. 利用MOV_B,MOV_W,MOV_DW传送指令自由排列数据。

  9. 利用SHR,SHL指令掐头去尾,即移出数据会被丢弃,补进来的数据都是0.(注意使用的是移位不是循环移位)

  10. 必须熟练掌握西门子PLC的字节排列顺序,遵循高字低位的原则,最左边是二进制的最高位,最右边是二进制的最低位。

图片

  1. 使用“字节地址”格式可按字节、字或双字访问多数存储区(V、I、Q、M、S、L 和 SM)中的数据。 要按字节、字或双字访问存储器中的数据,必须采用类似于指定位地址的方法指定地址。 如下所示,地址包括区域标识符、数据大小指定和字节、字或双字值的起始字节地址。

图片


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    指令、数据处理指令、定时器和计数器指令、数值比较指令等等。PLC(可编程逻辑控制器)可以用于编写程序的指令,控制程序中执行的操作。   PLC指令基本类型通常包括以下几种:   1. 数据传送指令:包括......
    三菱PLC内部计数器编程;三菱PLC计数器软元件的OUT、RST指令助记符与功能 内部计数器编程 C0对X011的OFF-ON次数进行增计数,当它达到设定值K10时,输出输出点C0动作,以后......
    到8时Q0.7接通。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0~Q0.7都清零,即没有一个灯亮。当按下在线控制面板上的I0.1f(即......
    Q0.1接通……如此下去当计数器计数到8时Q0.7接通。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0~Q0.7都清零,即没有一个灯亮。当按......
    时Q0.1接通……如此下去当计数器计数到8时Q0.7接通。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0~Q0.7都清零,即没......
    为2时Q0.1接通……如此下去当计数器计数到8时Q0.7接通。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0~Q0.7都清零,即没......
    时,Q0.0接通。计数器计数为2时Q0.1接通……如此下去当计数器计数到8时Q0.7接通。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0......
    。当计数器计到9时计数器C0清零。当按下在线控制面板上的I0.0f(即I0.0)接通,此时计数器,和Q0.0~Q0.7都清零,即没有一个灯亮。当按下在线控制面板上的I0.1f(即I0.1接通)此时计数器开始重新计数......
    STM32 CAN接收/发送错误寄存器如何清零?;CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线......
    PLC中编写定时器和计数器的自复位功能;CTU:加法计数器 分析:当计数值达到5,Q输出M300.0=1,在下一周期时执行复位 指令,使得计数值清零,之后Q输出M300.0=0,实现自复位计数器......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>