电动机功率 | 4kW | 外形尺寸 | 6mm |
---|---|---|---|
应用领域 | 环保,食品/农产品,地矿,包装/造纸/印刷,纺织/印染 | 重量 | 2kg |
西门子S7-1200PLC系统有五种不同模块,分别为 CPU 1211C、CPU 1212C 、 CPU 1214C、CPU1215C和CPU1217C。其中的每一种模块都可以进行扩展,以*您的系统需要。可在任何 CPU 的前方加入一个信号板,轻松扩展数字或模拟量 I/O,同时不影响控制器的实际大小。
![]() |
参考价 | ¥433 |
订货量 | 1 |
更新时间:2019-06-18 10:44:29浏览次数:189
联系我们时请说明是化工仪器网上看到的信息,谢谢!
西门子S7-1200PLC模块吉林代理商
西门子S7-300/400参数类型Pointer的应用
1.参数类型Pointer
使用参数类型Pointer(指针),可以在调用逻辑块时,将变量的地址作为实参传送给声明的形参。Pointer可以直接指向一个数据块中的变量,例如P#DB2. DBX4.0。Pointer只能用于形参中的IN、OUT(不能用于FB)、IN_OUT变量。
Pointer占6个字节(见图4-26),字节0和字节1中的数值用来存放数据块的编号。如果指针不是用于数据块,DB编号为0。字节2~5与图4-25中的寄存器间接寻址的双字指针的的格式相同。
图4-26 参数类型POINTER
Pointer的实参可以采用指针形式,例如P#M50.0和P#DB2. DBX4.0,也可以采用地址形式,例如将P#M50.0简写为M50.0,编译时STEP 7会将它自动地转换为指针格式。
ANY和Pointer分别为10B和6B,不能用32位的累加器1直接访问它们,因此在OB1中调用块时,CPU将ANY和Pointer的实参暂时保存在OB1的临时局部数据区中。
2.FC1的程序设计
【例】 将同一地址区中相邻的若干个字累加。地址区的起始地址由参数类型为Pointer的输入参数Start_Addr提供。在项目“寄存器间接寻址”(见随书光盘的同名例程)中生成FC1,其局部变量如表4-5所示。
表4-5 FC1的局部变量
下面是FC1中的程序,*条指令中的P##Start_Addr是OB1的局部数据区中保存参数Start_Addr的实参的地址,指令中的P#表示指针,第2个#号表示局部变量。
L P##Start_Addr //输入的地址指针送累加器1
LAR1 //累加器1的指针值送地址寄存器AR1
L 0
L W[AR1,P#0.0] //取指针第1个字内的数据块编号(见图4-26)
=I
JC _001 //不是数据块(编号为0)则跳转
T #DB_No //保存数据块的编号
OPN DB[ #DB_No] //用间接寻址打开指针的数据块
_001:L D[AR1,P#2.0] //取指针内数据区的起始地址(图4-26中的第2~5个字节)
LAR1 //保存到AR1,AR1指向要累加的数据的起始地址
L L#0 //32位整数0装入累加器1
T #Result //累加和清零
L #Number //循环次数装入累加器1的低字
BACK T #Sycle_C //暂存循环计数值
L W[ AR1,P#0.0] //取数据
ITD //转换为双整数
L #Result //取累加和
+D //累加
T #Result //保存累加和
+ AR1 P#2.0 //地址值增加两个字节,指到下一个字
L #Sycle_C //循环计数器值装累加器
LOOP BACK //若循环计数器值的内容减1后非0,跳转到标号BACK
3.OB1的程序设计
生成共享数据块DB2,在DB2中生成用于保存累加和的双整数Sum(见图4-29),以及有5个整数元素的数组Aray。下面是OB1调用FC1的程序,分别累加DB2和M区中的5个字:
CALL FC 1
Start_Addr :=DB2.DBX4.0 //数据区起始地址
Number :=5 //需要累加的字数
Result I_DB2:DBD0 //保存运算结果的双整数
CALL FC
Start_Addr :=P#M 10 0 //数据区起始地址
Number :=5 //需要累加的字数
Result :=MD20 //保存运算结果的双整数
4.程序状态监控
在CPU运行时打开FC1,启动程序状态监控(见图4-27),监控累加器1(STAND-ARD)、AR1和间接寻址(INDIRECT)的地址值。累加器1中的数字用十六进制格式显示。
*次调用FC1时,执行完*条指令后,累加器1中为16#870000a8,即2#1000 0111 0000 0000 0000 0000 1010 1000,由图4-26和表4-3可知,这是地址P#V21.0,即*次调用FC1时OB1的局部变量LB21的地址。
第4条指令读取Pointer的实参的*个字(数据块编号),判别是不是数据块。如果非零(表示是数据块)则用16位存储器间接寻址(DB[#DB_No])打开该数据块。用指令“L D[AR1,P#2.0]”来读取Pointer实参的2~5个字节(数据区的起始地址DBX4.0)。将该地址送入AR1后,AR1指向DB2. DBX4.0,监控区中的AR1列显示DB4.0。FC1中标号BACK下面的第2条“L W[AR1,P#0.0]”指令取出的是DB2. DBW4的值。
为了验证V区是调用FC1的OB1的局部数据区,在FC1的第2条指令处设置一个断点。执行完第2条指令后,CPU进入HOLD(保持)模式。
此时打开CPU模块信息对话框的“堆栈”选项卡,选中B堆栈中的OB1,点击“L堆栈”按钮,打开OB1的局部数据堆栈对话框(见图4-28)。此时可以看到指针常数P#DB2. DBX4.0的值16#0002 8400 0020存放在从OB1的局部数据字节LB21开始的6个字节中。
图4-28 L堆栈中的局部变量
图4-29 DB2中的数据与运算结果
图4-30 变量表中的数据与运算结果
5.程序运行的监控
生成和打开名为“VAT累加”的变量表,在变量表中生成6个变量。图4-29和图4-30给出了两次调用FC1被累加的5个字和累加的结果(双整数)。
参数类型是为逻辑块的形参定义的数据类型,用于在调用逻辑块时传递参数。除了简单数据类型和复杂数据类型之外,还可以使用下列参数类型:
(1) Timer与Counter
使用参数类型Timer(定时器)和Counter(计数器),可以在调用逻辑块时,分别将定时器和计数器的编号(例如T3、C21)作为实参传递给块的形参(见图4-16)。
(2) Block
使用参数类型Block_FC、Block_FB、Block_DB和Block_SDB,可以在调用逻辑块时,分别将FC、FB、DB和SDB(系统数据块)作为实参传送给块的形参。块参数类型的实参应为同类型的块的地址编号(例如FB 2)或块的符号名。
参数类型Timer、Counter、Block只能用于块的输入参数(IN)的形参。
西门子S7-1200PLC模块吉林代理商