东莞西门子代理商
STOP 模式
在STOP 模式下用户程序不执行。所有输出都设为适当的值以保证控制过程处于安全状
态。CPU 作以下检查:
• 是否有硬件问题(例如,模板故障)?
• 是否将缺省设置用于CPU或是否有参数设置?
• 编程的启动特性的条件是否满足?
• 系统软件是否有问题?
在STOP 模式下,CPU 还可以接收全局数据并可进行被动的单向通讯,实现这些通讯需要
对已组态的连接使用通讯SFB 并且对没有组态的连接使用通讯SFC。
存储器复位
CPU 存储器可在STOP 模式下被复位。可以用钥匙开关(MRES)或通过编程器(例如,在下
载用户程序前)手动复位存储器。
复位CPU 的存储器使CPU 回到它的初始状态:
• 在工作存储器和RAM装载存储器中所有的用户程序以及所有的地址区都被清除。
• 系统参数及CPU和模板的参数被复位为缺省设置。而复位前设置的MPI参数仍保留。
• 如果插入了存储卡(FlashEPROM),CPU将存储卡中的用户程序复制到工作存储区(如果存储卡中有适当的组态数据,则所复制的数据包括CPU和模板参数)。
诊断缓存区、MPI 参数、时间以及CPU 运行时间计数器数器都不复位
在CPU 启动用户程序处理之前,必须先执行起动程序。通过在起动程序中编写起动OB,
可以为循环程序指定初始设置。
有三种起动类型:暖起动、冷起动和热起动。只有S7-400 CPU 有热起动。这必须用STEP
7 直接在CPU 参数中设置。
STARTUP 模式的特性如下:
• 处理起动OB中的程序(OB100暖起动,OB101热起动,OB102冷起动)。
• 不能执行时间驱动OB或过程驱动程序。
• 定时器被更新。
• 运行时间计数器数器起动运行。
• 禁止信号模板的数字输出(可通过直接访问置位)。
暖起动
除非系统要求存储器复位,否则暖起动总是允许的。在以下情形之后,暖起动是唯一可能
的选项:
• 存储器复位
• 在CPU位于STOP模式时下载用户程序
• I堆栈/B截栈溢出
• 终止暖起动(由于掉电或改变模式选择开关的设置)
• 在热起动前的中断超过了选择的时间限制。
手动暖起动
以下可以触发手动暖起动:
• 模式选择开关
(CRST/WRST 开关——如果有——必须设置为CRST)
• 编程器上相应的命令或通讯功能。
(如果模式选择开关设为RUN 或RUN-P)
自动暖起动
自动暖起动在上电后可由以下情形触发:
• 电源掉电时CPU不在STOP模式。
• 模式选择开关设为RUN或RUN-P。
• 上电后没有编程自动热起动。
• 在暖起动过程中CPU被电源掉电中断(与编程的起动类型无关)。
CRST/WRST 对自动暖起动没有影响。
没有后备电池的自动暖起动
如果CPU 在没有后备电池的情况下运行(免维护操作是必要的),在电源接通后或电源从关
电到上电后,CPU 存储器自动复位并执行暖起动。用户程序必须装载到一个Flash(闪
存)EPROM(存储卡)。
热起动
CPU 处于RUN 模式掉电,随着电源恢复,S7-400 CPU 运行完整的初始化例行程序,然
后自动执行一个热起动。在热启动过程中,用户程序从它被中断的地方继续执行。掉电前
没能执行完的用户程序部分就是剩余循环。剩余循环也可以包含时间驱动和中断驱动程序
部分。
只有在STOP 模式下没有进行用户程序的修改(如,重新装载修改过的块)以及没有其它理
由作暖起动时才允许作热起动。手动和自动热起动都可以。
手动热起动
只有当CPU 中设置了适当的参数并且由以下原因造成停机时才有可能执行手动热起动。
• 模式选择开关从RUN转化STOP。
• 用户编写的STOP程序或在调用了未装载的OB后停机。
• 通过编程器或通讯功能的命令引起的STOP模式。
手动热起动可由以下事件触发。
• 模式选择开关
CRST/WRST 必须设为WRST。
• 编程器或通讯功能中相应的命令(模式选择开关设为RUN或RUN-P)
• 当CPU参数中设置了手动热起动。
自动热起动
在以下情形下电源上电可触发自动热起动:
• 电源掉电时CPU不在STOP或HOLD模式。
• 模式选择开关设为RUN或RUN-P。
• 在CPU参数中设置了上电后执行自动热起动参数。
CRST/WRST 开关对自动热起动没有影响。
电源掉电后的可保持数据区
S7-300 和S7-400 对电源掉电再上电的反映不同。
S7-300 CPU(除CPU318 以外)只能暖起动。使用STEP 7可以指定位存储器、定时器、计数器和数据块区域具有保持功能以避免由于电源掉电而丢失数据。当重新上电时,执行连
同存储器在内的自动暖起动。
S7-400 对重新上电的反应依据参数设置而定,可以是暖起动(跟随保持或非保持上电),也
可以是热起动(只能是跟随可保持上电)。
起动失败
如果在起动过程中出现错误,则起动失败并且CPU 转为或保持STOP 模式。
失败的暖起动必须再重复进行。起动失败后,暖起动和热起动都是可以执行的。
在以下情形下,起动(暖起或热起)不执行或失败:
• CPU的钥匙开关设为STOP
• 请求存储器复位
• 插入的存储卡中带有非STEP 7程序(如STEP 5)
• 在单处理器模式下插入多个CPU
• CPU不能识别用户程序中的OB,或该OB已被禁用。
• 上电后,如果CPU发现用STEP 7生成的组态列表中所列的模板实际上没有全部插上(参
数的预置值和实际值不同)。
• 如果评估模板参数时出错。
在以下情形下热起动不执行或被失败:
• CPU存储器被复位(存储器复位后只能暖起动)。
• 超过中断时间限制(这一时间是指包括剩余循环在内的起动OB被执行与现有RUN模式
之间的时间)。
• 模板组态已改变(例如更换模板)。
• 参数赋值只允许暖起动。
• 在CPU处于STOP模式下装载、删除或修改块。
操作顺序
CPU 在STARTUP 和RUN 期间的操作要点:
1. 通过I/O 模板将硬件中的所有外设输出切换到安全状态(缺省值=0)。不管用户程序是
否使用了过程映像区内的输出还是使用了过程映像区外的输出。
如果使用的信号模板具有替换值功能,则可以对输出特性进行赋值,例如将输出设置
为保留上次有效值。
2. 有必要处理剩余循环。
3. 当中断OB 次调用后,当前的过程映像输入表对这些中断OB 依然有效。
4. 在用户程序的循环中,本地外设输出以及分布式外设输出的状态通过下列步骤决
定- 使用可进行参数赋值的输出模板,使能替换值输出或保持上次有效值。
- 对于热起动:激活CPU 的起动参数“Reset ourputs during hot restart”,以便使其
输出一个0(对应于缺省设置)。
- 在起动OB 中预置输出(OB100,OB101,OB102)。
5. 在没有后备的S7-300 系统中,只能保持那些设置为保持功能的DB 区
在RUN(运行)模式,CPU 执行循环、时间驱动和中断驱动程序如下:
• 读入过程映像输入表。
• 执行用户程序。
• 输出过程映像输出表。
只有在RUN 模式下才能使用全局数据通讯(全局数据表),为组态连接使用通讯SFB 以及
为非组态连接使用通讯SFC 在CPU 之间进行主动的数据交换。
下表所示为在不同的操作模式下可能的数据交换:
通讯类型 CPU1的模式 数据交换的方向 CPU2的模式
全局数据通讯 RUN ←→ RUN
RUN → STOP/HOLD
STOP ← RUN
STOP X STOP
HOLD X STOP/HOLD
单向通讯 RUN → RUN
调用通讯SFB RUN → STOP/HOLD
调用通讯SFB的双向通讯 RUN ←→ RUN
单向通讯 RUN → RUN
调用通讯SFC RUN → STOP/HOLD
调用通讯SFC的双向通讯 RUN ←→ RUN
←→表示 数据交换可双向进行
→表示 数据交只能单向进行
X表示 数据交换不可能
HOLD(保持)模式是一种特殊模式。它只用于起动过程中或RUN 模式下的测试目的。HOLD
模式意味着:
• 所有定时器被冻结:不处理定时器和CPU运行时间计数器,监控时间停止,时间驱动
层的基本时钟脉冲停止。
• 实时时钟运行。
• 输出未使能,用于测试目的可直接使能。
• 输入和输出可被置位和复位。
• 如果在HOLD模式下,有后备电池的CPU出现掉电,当电源恢复时CPU转为STOP但不
执行一个自动热起动或暖起动。没有后备电池的CPU当电源恢复时执行一个自动暖起
动。
• 可以接收全局数据,可以为组态连接调用通讯SFB的被动单向通讯以及为非组态连接调
用通讯SFC的被动单向通讯(见表中RUN模式)。
1 引言
可编程序控制器(programmablecontroller)简称plc是以微处理器为基础的新型控制装置,是将计算机技术应于工业控制领域的崭新产品。它集逻辑运算、顺序控制、定时、计数、算术运算功能为一体。还可以与其他计算机进行通信联网,这种通信不但包括不同的plc之间的数据交换,还包括plc与计算机之间的通信。本文介绍笔者使用vb6.0实现plc与上位机之间的通信,使运行人员通过油机配电屏的显示可以监测并控制远端设备的工作。
2 系统构成
本系统采用plc采集模拟信号、数据处理,通过串行通信口上传到计算机,计算机对传上来的数据进行分析、分类记入数据库,实时显示在配电屏上并提供数据查询。plc为s7-224,串行通信接口的信号线采用rs-485,此信号线为半双工,即不能接收和发送。将plc置于run状态,就可以将plc中存于发送缓冲区中的数据及信号送入上位机的串口,上位机通过串口通信程序接收这些数据后显示并通过数据库控件adodc的绑定,把数据记录到数据库,从而完成数据的采样。本工程所需采集的数据包括日常量、故障量和设备动作量。对于日常量需每时每刻的数据显示在配电屏的主控制平面上,以便工作人员观察实时数据,不需要把日常量都记入数据库,只需隔一段时间记录一次(在这里每隔半小时记录一次),对于故障量和设备动作量要求只要设备发生故障或动作就要记录到数据库,以便工作人员查询。
3s7-200的通信方式与通信参数的设置
s7-200的通信功能很强大,有多种通信方式可供用户选择,包括单主站方式、多主站方式、使用调制解调器的远程通信方式等。本工程选择step7-micro/win32支持的通信硬件pc/ppi电缆,它所支持的波特率有9.6kbps和19.2kbps,支持的协议为ppi协议,即点对点接口协议,基于开放系统互联模型osi。ppi是主/从协议,网络上的s7-200cpu均为从站,其他cpu、simatic编程器或td200为主站。s7-200 cpu的通信端口采用rs-485信号标准的连接口,pc/ppi电缆把s7-200计算机连接起来,通过使用接收中断、发送中断和字符中断等指令,自由端口通信可以控制s7-200cpu通信口的操作模式。本工程使用的是自由端口模式,允许在cpu处于run模式时通信口0使用自由端口模式,通过设定smb30的值,我们可以选择波特率、奇偶校验、每个字符的数据位和协议。cpu处于stop模式时,停止自由端口通信,通信口强制转换成ppi协议模式,此时,就可以向cpu中输入plc程序,实现编程软件对plc的编程和控制功能。在这里的通讯过程采用主从方式,即计算机为主机,plc为从机,只有主机计算机发送请求报文后,从机plc才向pc返回发送缓冲区中的数据。
4自由端口模式下plc的通信
由于本工程使用的是pc/ppi电缆,要在plc的程序中考虑电缆的切换时间。plc接收到请求报文到它返回发送缓冲区的数据的延迟时间必须不小于电缆的切换时间。波特率为9600bps时,电缆的切换时间是2ms。在本工程的程序中是用定时中断实现切换延时的。
定时中断子程序:
network title ’定时中断程序int_2
ld sm0.0
dtch 10
xmt vb200, 0
当程序运行到“启动定时中断”(即atch int_2,10)的语句时,就会跳到如上所示的中断子程序中,sm0.0是特殊存储器,该位始终为1,即只要plc处于run状态,这一开关即是接通的。xmtvb200,0语句是用来发送数据到串口的,此时发送的是存储在以vb200为首地址的连续的存储空间中的数据,是通过端口0发送的。
为了提高通信的可靠性,我们需要使用到异或校验,即在通信的双方都将每一帧的每一个字符作异或校验,将两者进行对比,如果不相同则可以判定通信有误。
network1 network title ’求异或校验码的子程序fcs
ld sm0.0
movb 0, #xorc
bti #numb, #numi
for #temp1, +1, #numi
movb 0, #xorc ’用来把异或校验码
清零, 用bti#numb,
#numi将字节数
转换为整数
network2
ld sm0.0
xorb *#pnt, #xorc
incd #pnt
network3
next
for到next语句指明了一个循环,从这一帧的个字符开始(不包括起始字符)到该帧中后一个字符作异或运算。通过调用这个子程序可以计算所指定的数据存储空间内的字符的异或校验码,如果在上位机中的vb程序中也有计算校验码的子程序,那么就可以比较这两次计算的校验码是否相同。可以使用语句(callfcs, &vb102, vb99,vb90)来调用该子程序,其中&vb102是指出子程序fcs进行校验的起始地址,vb99是用来存储需要异或的字节数,而vb90是用来存储计算出来的校验和。假设把从上位机接收到的校验码存储在vb91中,比较vb90和vb91中的数据就可以检验这次通信是否正确。同样,我们可以使用这个子程序计算从plc中发送的数据的校验码,把它送到上位机中某一特定的地址中,在上位机中比较两个数据是否正确(在上位机的计算异或校验码的vb程序将在后面给出)。
因为报文的起始字符和结束字符只有8位,接收的报文数据区内出现与起始字符和结束字符相同的字符的几率很大,这就可能会是数据区字符与起始字符或结束字符发生混淆,为了避免这种情况,可以在发送数据前对数据作一下处理,把数据字符转换为bcd码,在s7-200中专门提供了整数与bcd码的转换指令,可以使用语句(ibcdvw200)就把输入的整数转换为bcd码,结果送入了vw200中。上位机接收到后需要将其转换回整数。
在初始化时要注意自由端口通信协议的设定,一定要使通信过程中的波特率,数据位,奇偶校验及停止位与上位机vb以及通信线上中设定的参数相同,否则将不能实现通信过程,要么接收不到数据,要么会出现“下标越界”的错误。
5上位机的通信部分采用vb语言编程
上位机通信接口部分采用vb语言来编写, 在vb中专门有一个控件microsoft commcontrol(简称mscomm控件)用来提供串行通信。在编程过程中只要设置mscomm控件的属性,就可以实现串行通信。mscomm控件一般不包括在常用的工具框中,需要在右边的工具框的空白处点击鼠标右键,选择components选项,就会出现components对话框,在其中的controls标签下就会找到microsoft comm control6.0,选定它, 点击确定就可以把这一控件加入到右边的工具框中, 图标为。
用鼠标拖动这个图标到bbbb中,即可设置其属性。在此控件众多的属性当中,需要重新定义的属性只有commport(传输数据的通信端口号)、settings(设置数据传输的波特率、奇偶校验、数据位以及停止位,注意,此参数一定要与plc通信程中设置的参数相一致)、portopen(设置通信端口的状态)、bbbbbmode(读取接收缓冲区的格式)等。本工程采用事件驱动方式处理接受信息,即把rthreshold属性设置为非零的值,此时只要接收字符或传输线发生变化就会产生串口事件oncomm。通过查询commevent属性可以捕获这些通信事件。
在vb中实现异或计算的程序及注释如下:
nbyte(1)=ubound(sdata)+1 ’送数据区字节数
fcs=nbyte(1) ’校验码初始化
for i=2 to ubound(sdata)+2
nbyte(i)=sdata(i - 2) ’待发送数据报文数
组的数据区
fcs=fcs xor nbyte(i) ’异或运算, 求校验码
next
nbyte(i)=fcs ’送校验码
其中sdata为发送的数据数组的变量名称,for-next语句实现所发送的数据每一位都进行异或运算。这样就可以把发送数据的异或校验码送到plc中,在plc比较两次计算出的校验码是否相同,从而提高通信的可靠性。
本工程中把计算机向下发送控制命令的部分写成自定义函数send(xi)(i从1到6),在每一个需要发送控制命令的按钮处调用此函数,只是在send中参数设置为不同的控制数。
图1 设备动作状态接收表
图1为模拟一个油机配电屏控制面,该软件可以对三相输出电压、电流、功率因数这些实时信号进行采集、显示并存储,并对设备的动作状态、故障情况采集到数据库中。该控制面上方有一系列的控制按钮,点击某一按钮就会向下位机发送相应的控制命令,控制下位机动作。
在通信过程中,由于计算机为主机,而plc为从机,plc只有在接收到计算机发送的信息后,才发送数据。计算机发送数据的次数并不是与其接收数据次数是一一对应的,计算机每点击一次发送控制命令的按钮(请参看图1)后,plc就要向计算机传输存于其缓冲区内的所有数据,而每引发一次oncomm事件只能传输8个字节,假如plc的发送缓冲区中一共右50个数据,那么每要求向上传送一次数据,就会相应的引发7次oncomm事件,每引发一次oncomm事件程序就会一直执行到endsub为止。这一点可以通过在发送数据的程序中加入测试语句 “debug.print‘start’”,在endsub前加一测试语句“debug.print‘end’”来验证,我们可以清楚的在立即窗口中发现每一个start后有7个end。