首页 理论教育 编程初学者常遇到的问题汇总

编程初学者常遇到的问题汇总

时间:2023-07-01 理论教育 版权反馈
【摘要】:保持存储区最大为10240字节,是设置为“保持”的M存储区和DB块的总空间。如果要“保持”的数据超过10240字节,可以借助于“仅存储在装载内存中”的数据块,在程序中执行“WRIT_DBL”指令,将更多要保持的数据存储到装载存储区的DB块中。因此,在进行计算处理后可能会出现浮点数值相同,但其对应二进制表示不同的情况,导致明明数值相等,比较却显示不相等。图4-54 设置IEC检查8.如何设置S7-1200 CPU数据存储区的保持性?

编程初学者常遇到的问题汇总

1.STP指令执行后S7-1200 CPU如何恢复RUN模式?

答:“STP”是CPU停止指令。一经执行,CPU切换到停止模式,无法再通过指令使CPU运行。可以使用TIA博途软件在线工具中“RUN”来启动CPU,或者CPU重新上电(参考图3-14,当“上电后启动”组态为“暖启动-RUN模式”时)。

2.保持存储区不足时,是否能扩展?

答:不能扩展。保持存储区最大为10240字节,是设置为“保持”的M存储区和DB块的总空间。如果要“保持”的数据超过10240字节,可以借助于“仅存储在装载内存中”的数据块,在程序中执行“WRIT_DBL”指令,将更多要保持的数据存储到装载存储区的DB块中。当程序需要调用这些数据时,再执行“READ_DBL”指令将数据从装载存储区复制到工作存储区中。

注意:

考虑到装载存储器的写寿命,不建议频繁操作“WRIT_DBL”指令。

3.如何比较两个浮点数是否相等?

答:浮点数和其他基本数据类型不同,不是按位计算出唯一的值,而是根据IEEE754-1985的固定格式计算出的,以REAL类型为例,计算公式如图4-49所示。

978-7-111-58391-2-Chapter04-80.jpg

图4-49 REAL类型计算公式

REAL类型的2进制表示:第31位符号位s、第30位~第23位指数e、第22位~第0位尾数mi从0开始,表数尾数m从左到右的尾数,mi表示每一位的值0或1。当e=m=0时REAL值为0.0,e=0、m=其他值或者e=255时,该REAL值无效。

简单地说,浮点数值和其二进制表示并非一一对应。因此,在进行计算处理后可能会出现浮点数值相同,但其对应二进制表示不同的情况,导致明明数值相等,比较却显示不相等。因此,建议如果需要比较两个浮点数相等,比较它们的差值在一定范围内(例如±1.0e-6)即认为相等,如图4-50所示,″DB7″.Static_5和“DB7”.Static_6浮点数表示均为3.14,但是它们的二进制形式不同,利用普通的浮点数比较无法真实反映基本相等的事实。

978-7-111-58391-2-Chapter04-81.jpg

图4-50 浮点数比较相等

4.如何在TIA博途软件中输入不可打印的字符

答:在ASCII码中,从16#00-16#1F与16#7F为不可打印字符,例如回车;其余为可打印字符,例如字母、数字、标点。在TIA博途中可以直接输入可打印字符,如果是不可打印字符,有以下两种输入方式:

(1)’$’+字母/标点

只有个别常用的不可打印的字符可以这样输入,见表4-22。

4-22 有效的ASCII控制字符

978-7-111-58391-2-Chapter04-82.jpg

(2)’$’+ASCII码/UNICODE码

所有字符都可以表示为’$’+ASCII码/UNICODE码的格式。

例:’$02’为“STX”,WCHAR#’$22BF’为“⊿”。

5.如何根据变量形式的数组下标,实现变址寻址?

答:举例说明,通过程序实现将数组中的每一个元素的数值乘以2,再移动至另一相同结构的数组的相同位置的元素中,如图4-51、图4-52所示。示例程序请参见随书光盘中的例程《Program》项目FC4_ARRAY_MOVE。

978-7-111-58391-2-Chapter04-83.jpg

图4-51 数组使用示例引脚定义

978-7-111-58391-2-Chapter04-84.jpg

图4-52 数组使用示例程序

6.形如P#DB1.DBX0.0BYTE 10这种指针的含义?

答:P#DB1.DBX0.0BYTE10的意思是DB1.DBX0.0作为起始地址,指针指向该地址开始的连续10个字节,并且要求DB1是非优化访问的DB块。

7.如图4-53、图4-54所示,为什么同样的指令有时不报错,有时报错?

答:MOVE指令输入为WORD数据类型,输出为INT数据类型,如图4-53所示,该指令所在块设置IEC不检查,则程序没有任何错误;如图4-54所示,该指令所在块设置IEC检查,则输入输出数据类型不兼容。

978-7-111-58391-2-Chapter04-85.jpg

图4-54 设置IEC检查(www.xing528.com)

8.如何设置S7-1200 CPU数据存储区的保持性?

答:S7-1200CPU中,数据可以存储在位存储区(M),全局DB和背景DB中。TIA博途软件可以设置变量的“保持”特性。如果变量未设置为保持,则CPU重启后变量恢复为初始值;如果设置为保持性,则CPU重启时保持断电前的状态。设置保持性的步骤如下:

(1)位存储区(M)

双击项目树中相应PLC站点下的“PLC变量>显示所有变量、默认变量表”,如图4-55所示,单击窗口中工具栏图标978-7-111-58391-2-Chapter04-86.jpg,可以设置M存储区的保持性空间。保持性位存储区M总是从MB0开始向上连续指定的字节数。

978-7-111-58391-2-Chapter04-87.jpg

图4-55 设置M区保持性

设置M区保持性步骤如下:

978-7-111-58391-2-Chapter04-88.jpg “保持”工具,打开保持性存储器设置窗口。

②“从MB0开始的存储器字节数” 图中表示从MB0~MB9连续10个字节为保持性存储区的空间。

③“保持性存储器中的当前可用空间(字节)” 显示保持性存储器(M和DB)的总剩余存储空间。

(2)全局数据块

用户可以定义全局DB的单个或所有变量的保持性状态,对于优化DB和标准DB中变量的保持性设置不一样,见表4-23。

4-23 DB块变量保持性的设置

978-7-111-58391-2-Chapter04-89.jpg

在优化DB中,对于数组、结构、PLC数据类型等复杂数据类型的变量,保持性设置应用于整个结构变量,无法对结构中的元素进行单独的保持性设置。设置结构变量的保持性属性,如图4-56所示。

设置复杂数据类型变量保持性步骤如下:

①优化DB中,可分别设置单独变量的保持性。

②复杂数据类型变量的保持性应用于整个结构变量。

(3)背景数据块

FB的访问方式不同,则背景DB中变量的保持性设置也不同。优化访问FB根据接口区参数“保持”列设置为“保持”、“非保持”或“在IDB中设置”而不同,如图4-57所示;标准访问FB的数据保持性需要在背景DB的“保持”列进行统一设置。

978-7-111-58391-2-Chapter04-90.jpg

图4-56 设置结构变量的保持性属性

978-7-111-58391-2-Chapter04-91.jpg

图4-57 设置优化访问FB的变量保持性

设置优化访问FB的变量保持性步骤如下:

①“非保持” 若选中该项,则背景DB中相应变量不保持,CPU重启后变量恢复为初始值。

②“保持” 若选中该项,则背景DB中相应变量保持,CPU重启时变量恢复为断电前的状态。

③“在IDB中设置” 若选中该项,则背景DB中需要统一设置“在IDB中设置”变量的保持性。

注意:

不能定义FB接口区InOut参数中复杂数据类型(ARRAY、STRUCT或STRING)变量的保持性,通常这种情况是非保持性的。

9.为什么打开的全局库无法编辑?

答:按照第4.5.2章节的方式打开全局库,会发现全局库中的字体有阴影,参考图4-39,此时库中的元素只能使用,无法编辑。原因是库的默认打开方式是只读,以避免对用户的库元素的误修改。如果需要编辑库,则在打开时取消勾选“Open as read-only”,如图4-58所示。

978-7-111-58391-2-Chapter04-92.jpg

图4-58 打开全局库

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈