STEP7-Micro/win软件使用第三讲——编程基础

返回查看 S7-200 热线工程师岗前内部培训:STEP7-Micro/win软件使用第三讲--编程基础 视频

主要内容:
1.变量和存储区
2.寻址方式

(1)S7-200扫描流程
(扫描流程图)

在扫描周期刚开始的时候,CPU会把数字量的输入读取到过程映象输入寄存器,然后接着去执行主程序里面的语句,如果中断的事件满足的时候会优先去执行中断的程序,如果主程序中调用有子程序的时候,会去执行调用子程序的操作,执行子程序里面的内容,接着会去做一些通讯的工作,比如和上位机的通讯,Profibus的通讯等,CPU还会做一些自检诊断,确保CPU的部件、程序的存储器及其他的扩展模块都处于正确的运行状态中,最后在扫描周期的结尾,会把过程映像写到输出。下面来看一个具体的程序:

以下是一个典型的S7-200程序,该程序涉及到了过程映像区、模拟量输入输出、V区、M区、计数器、定时器、SM特殊存储器、局部变量子程序、中断程序等。

第一条语句是采集模拟量的输入信号,将信号放到VW0中;

第二条语句检测到I0.0有上升沿的时候开始做计数;

第三条语句是如果I0.2导通的时候语句调用一个子程序,子程序里面是做一个变量和6400的加法运算;

执行完子程序后会继续向下扫描,在扫描周期过程当中使用了一个中断,是I0.0下降沿中断,如果在整个扫描周期范围之内,检测到有I0.0下降沿中断事件到来的时候会去优先处理中断,中断是写在INT_0中的,中断程序是把M0.0置位,也就是说当有I0.0下降沿到来的时候M0.0被置位;

第五条语句是做一个模拟量的输出,将变量VW4里面的值传送给AQW0;

第六条语句是定时器的操作,在I0.3导通的时候做一个5s的定时,使网络7中的Q0.0导通。以上便是所有程序指令执行的过程。

在编写S7-200程序的时候需要注意一些参数,如对于用户程序的大小,不同型号CPU的存储容量是不同的,编程时需考虑到程序的容量不能超过存储区的大小。另外还有用户数据大小、输入输出过程映象寄存器、模拟量输入输出以及定时器、计数器等都有数量的限制,在编写程序的时候都需要考虑这些参数。

(2)程序编译和运行错误

程序编译错误:当下载程序时,S7-200会编译程序。如果S7-200发现程序违反了编译规则,会停止下载并产生一个错误代码。可以在修正错误后再次下载程序。

错误代码可以在手册的附录中找到,里面有编译规则错误,如程序太大,非法指令,缺失FOR等,当CPU报程序编译错误的时候可以根据错误代码去查找错误的内容以及解决的方法。

程序执行错误:在程序执行过程中有可能产生错误。这类错误有可能来自使用了不正确的指令或者在过程中产生了非法数据。例如:一个编译正确的间接寻址指针,在程序执行过程中,可能会改为指向一个非法地址。当实时程序问题发生时,SM4.3会在CPU处于RUN模式期间置位。

在系统手册的附录中同样可以找到对程序执行错误代码的解释,如常见的间接寻址错误、读写实时时钟的错误等。

(3)存储区

S7-200 CN系列PLC的数据存储区分为如下几类:

(4)数据块定义

当有一些重要的数据不需要做变化而是需要长期保存时,我们可以将这些数据写入数据块中。数据块的定义方式很简单:如定义VB0,后面写上248,这样就定义了VB0的值为248;定义VB1,后面写上249、250、251,则是定义了VB1为249,VB2为250,VB3为251。同样也可以定义字、双字的存储区,也可以直接写编程的地址,CPU通过后面的数值自动判断数据类型。当数据块被下载到CPU中时,数据将会得到永久的保存。

热线常问问题:数据块中的数据需要做断点数据保持设置吗?

答:不需要。只要将数据块下载到CPU中,其中定义的值将会得到永久保存。

(5)局部存储区

局部存储区通常用在子程序中,用于暂存程序运行的中间结果,也可用来在子程序和调用它的程序之间传递参数。在用梯形图编程时,编程软件保留最后四个字节,也就是说局部存储区一共64个字节,最后四个字节是保留的,不可使用。

子程序可能有要传递的参数(变量和数据),这时可以在子程序调用指令中包含相应参数,它可以在子程序与调用程序之间传送。子程序中的参数必须有一个符号名、一个变量类型和一个数据类型。子程序最多可传递16个参数,传递的参数在子程序局部变量表中定义。

上图是子程序的局部变量表,在变量表中需要定义符号名,选择变量类型、数据类型,从而建立起局部变量表。

热线case分析—局部变量使用

在子程序中做一个常开点对一个线圈进行置位,在主程序中调用两次子程序,在第一次调用的时候M0.0导通M0.1置位是正确的,但是在第二次调用中,M0.2并未导通M0.3也发生了置位,出现了状态错误,这就需要子程序中的输出变量要先进行初始化设置。

(局部变量使用IN-OUT图)

还有另外一种解决方法:在子程序中定义局部变量的时候可以将变量类型选择为IN-OUT类型,这样就可以避免出现错误的状态。

(6)特殊存储器

上图是SMB0特殊存储器,在程序中经常用到的SM0.0就是SMB0的最低位,在程序调用中如果用到SM0.0,则这一位是始终为1的;SM0.1仅在用户程序首次扫描时为1,常用于调用初始化子程序;SM0.4可以提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0;SM0.5提供了一个周期为1秒的时钟脉冲,0.5秒为1,0.5秒为0。

(7)符号地址

在做一个项目的时候,如果程序中使用的都是绝对地址,如I0.0或V0.0,这种地址在阅读一个程序的时候比较困难,如果我们能对这些地址做一个符号上的定义,那么程序的可读性就会得到增强。S7-200的符号表可以定义和编辑符号名,在符号名得到正确的编辑和定义之后,在程序中就可以用符号地址访问变量。符号名的最大长度为23个字符。

首先,定义一个符号开关"switch",地址为I0.0,定义一个符号泵"pump",地址为Q0.0。

在程序中,用一个常开点控制一个线圈,在程序中写I0.0时,I0.0会产生一个定义—"开关",写Q0.0时会产生一个定义—"泵",这样就可以知道变量的用途,便于阅读程序。

(8)I/O寻址

对于CPU224XP,它本体上的数字量输入点是从I0.0—I1.5,没有用到的I1.6、I1.7也占用了,在添加扩展模块时,数字量输入点只能从I2.0开始,本体上数字量输出点是从Q0.0—Q1.1,Q1.2—Q1.7被占用,扩展模块上只能从Q2.0开始,对于扩展模块也是同样的道理。在本体上模拟量是2入1出,输入是AIW0和AIW2,输出时AQW0,但是AQW2也是被占用的。对于模拟量的扩展模块而言,模拟量的输入只能从AIW4开始,模拟量的输出时从AQW4开始,模拟量的扩展模块在使用AQW4的时候也占用了AQW6,下一个模拟量的模块只能从AQW8开始。

(9)间接寻址

间接寻址是指用指针来访问存储区数据。指针以双字的形式存储其他存储区的地址。只能用V存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。如果要使用间接寻址,应该用"&"符号加上要访问的存储区地址来建立一个指针。当指令中的操作数是指针时,应该在操作数前面加上"*"号。


上篇:STEP7-Micro/win软件使用第二讲——系统块设置

下篇:STEP7-Micro/win软件使用第四讲——基本指令使用