首页 理论教育 基本指令常见问题解答

基本指令常见问题解答

时间:2026-01-23 理论教育 东北妞 版权反馈
【摘要】:表5-13 沿指令的区别2.为什么沿指令不生效?表5-16 自复位定时器示例5.如何根据实际情况选择合适的移动指令?答:有以下几种方法:图5-3 ARRAY[]实现变长数组的处理程序1)使用数组的变量下标 该方法参见第4.6章节的常见问题5,以及下面的例1。2)使用MOVE_BLK_VARIANT指令 该方法参见第5.1.11章节的常见问题6中例子。读到的40001和40002组合为16#3A004680,将其通过ROL指令实现高低字颠倒后,得到16#46803A00,该数值通过DWord_to_Real指令,得到需要的浮点数值。

1.4种沿指令的区别是什么?

答:4种沿指令的区别见表5-13。

5-13 沿指令的区别

图示

2.为什么沿指令不生效?

答:可能原因如下:

1)沿指令的上一扫描周期变量使用了临时变量。

2)多处沿指令的上一扫描周期变量的地址重复。

3)沿指令的上一扫描周期变量的地址和其他地址冲突。

要求沿指令中上一扫描周期变量使用全局变量、FC/FB的INOUT、FB的静态变量。具体使用见表5-14。

5-14 沿指令上周期扫描结果

图示

3.为什么定时器不计时?

答:可能原因如下:

1)定时器的输入位需要有电平信号的跳变,定时器才会开始计时。如果保持不变的信号作为输入位是不会开始计时的。TP、TON、TONR需要IN从“0”变为“1”启动,TOF需要IN从“1”变为“0”启动。

2)定时器的背景数据块重复使用。

3)只有在定时器功能框的Q点或ET连接变量,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET,定时器才会开始计时,并且更新定时时间,见表5-15。

5-15 定时器使用

图示

(续)

图示

4.如何编程自复位定时器并产生脉冲?

答:正确答案见表5-16,同时附上两种常见错误编程方式。

原因:S7-1200CPU定时器的时间更新发生在定时器功能框的Q点或ET连接变量时,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时,即如果程序中多次使用同一背景DB的Q点,或者既使用定时器功能框的Q点或ET连接变量;又使用背景DB的Q点,这两种情况都会造成定时器在一个扫描周期内的多次更新,可能造成定时器不能正常使用的情况。

5-16 自复位定时器示例

图示

5.如何根据实际情况选择合适的移动(MOVE、MOVE_BLK、MOVE_BLK_VARIANT)指令?

答:正确答案见表5-17。

5-17 推荐使用的移动指令

图示

6.如何实现变长数组的处理?

答:有以下几种实现方法:

1)使用MOVE_BLK_VARIANT,如图5-1所示。

2)使用VariantGet和VariantPut,如图5-2所示。

3)定义接口为ARRAY[∗]数据类型,如图5-3所示。

以下程序完成相同的功能:INOUT为元素为INT类型的变长数组,在程序中使用FC21将数组的每个元素处理后送回INOUT。示例程序请参见随书光盘中的例程《Program》项目FC20_VARIANT、FC21、FC22_VARIANT_GET/PUT、FC23_ARRAY∗。(https://www.xing528.com)

图示

图5-1 MOVE_BLK_VARIANT实现变长数组的处理程序

图示

图5-2 VariantGet实现变长数组的处理程序

7.如何实现S7-1200CPU的间接寻址?

答:有以下几种方法:

图示

图5-3 ARRAY[∗]实现变长数组的处理程序

1)使用数组的变量下标 该方法参见第4.6章节的常见问题5,以及下面的例1。

2)使用MOVE_BLK_VARIANT指令 该方法参见第5.1.11章节的常见问题6中例子。

3)使用PEEK/POKE指令 PEEK/POKE指令只能用于SCL中,并且只允许访问I区、Q区、M区、非优化访问的DB区,这种方式的间接寻址不关注变量的数据类型,只关注变量的绝对地址。

当指令中的引脚dbNumber(DB块号)、byteOffset(变量的字节地址)、bitOffset(位变量的位偏移量)为变量时,可以实现间接寻址。示例程序请参见随书光盘中的例程《Pro-gram》项目FC18_PEEK、FC19_POKE_BLK。

例1:将CPU集成I点(I0.0~I1.3),保存至BOOL数组,如图5-4所示。

图示

图5-4 例1程序

例2:将DB1~DB10的每个DB块的第一个DBW0送入MW100~MW118,如图5-5所示。

8.如何将通过通信得到高低字颠倒的浮点数转换为正常浮点数?

答:例如通过MODBUSRTU,得到地址为40001和40002的两个Word变量,将这两个

图示

图5-5 例2程序

Word变量数值交换后,当作一个DWord变量来使用,DWord_to_Real指令可以将其转换为对应的浮点数,如图5-6所示。读到的40001和40002组合为16#3A004680,将其通过ROL指令实现高低字颠倒后,得到16#46803A00,该数值通过DWord_to_Real指令,得到需要的浮点数值。

图示

图5-6 DWord_to_Real程序

9.如何实现模拟量和工程量之间的互相转换?

答:将NORM_X和SCALE_X联合使用,可以实现模拟量输入转换为工程量,如图5-7所示,以及工程量转换为模拟量,如图5-8所示。

图示

图5-7 模拟量输入转换为工程量程序示例

图示

图5-8 工程量转换为模拟量输出程序示例

注意:

实例为输入输出范围为4~20mA或者0~5V等单极性模拟量,如果是±10V等双极性模拟量,需要将MIN引脚从0改为-27648。

10.如何测量程序的扫描周期?

答:在OB1的任意位置,使用如图5-9所示的程序,两边的变量均为LREAL类型,右边的输出即为程序的扫描周期,单位是秒,图中显示扫描周期为1.255ms。

图示

图5-9 测量程序的扫描周期程序示例

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

我要反馈