PLC暂停程序的写法

PLC暂停程序的写法
PLC暂停程序的写法

PLC暂停程序的写法

【一家之言1】现在暂停大多有两种形式,一种是接触暂停后程序接着暂停前继续往下运行.另一种是暂停按下时程序当前步骤走完.接触暂停后程序接下一个动作走.用中断指令,或条件转移指令,不过暂停能在程序中写很复杂,在定位程序中更复杂.

【一家之言2】不管是中断还是子程序调用,其返回方式都不宜使用按钮来返回,毕竟这是人为地干预程序的自动执行,你无法确定中断程序\子程序当前的执行状态,可能这时候某些寄存器或存储单元的数据已经被调用的程序更改了,直接转换程序执行方向有可能出错或导致程序执行混乱,所以直接外部干预是不可取的。事实上,程序暂停操作有其他的更好的方式。

动作复杂的话暂停功能是比较困难的,好的设备程序暂停是必不可缺的一个功能。

【一家之言3】我见过两种思路:

一,暂停时刻记录所有的输出状态(如果有定位移动,暂停键按下后,当前定位结束以后停止),再启动时检查所有的输出口(用块比较指令),和暂停之前相同,再启动下一步动作。当然,每一步的动作必须是独立完成,而且能分别控制,才有可能任意步骤停止,再启动和每一步的启动条件串联就可以了。

二,程序结构是用移位指令控制的,每移位一次,接一个动作,暂停就加在移位条件里(当然还有其他很多条件)。这种结构思路清

晰,但是一旦动作逻辑都形成了,就很难更改,因为动作是移位控制的,很难中间加上别的动作。如果要加,后面的所有的动作都要往后挪,修改的工作量很大,可维护性也较差。

这都是纸上谈兵,具体起来要复杂得多得多。精确定位控制也能中间停止,如果要这样控制那就更加复杂了。

【一家之言4】对于PLC程序的暂停,我是采用中断方式作控制的,一旦按暂停按钮,即进入中断程序,再次按运行按钮,程序退出中断,返回正在执行的程序步。

【一家之言5】还可用转移方法:一旦安暂停按钮,使某点值1(如M1.0=1),M1.0的常开点连接JMP转移指令,去处如:11,在11处编程:按运行按钮,使M1.0=0。这样程序退出转移处,回原程序。

但是完善的工艺程序不需要考虑程序的暂停,暂停在程序里做好的!一般的程序不能随机暂停(中断的性质是随机的,所以不建议用中断做暂停),只能在执行完某个完整的程序段才能暂停!

PIC——MCC18中断写法

PIC——MCC18中断写法 MPLABC18 不自动把中断服务程序放在中断向量处。通常将GOTO 指令 放在中断向量处,从而把控制权转交给相应的中断服务程序。PIC18 系列的低 优先级中断入口地址在0x0018 地址,下面的代码是在入口地址处放置一个向 量函数,这个向量函数里就是一个内嵌汇编的GOTO 指令,GOTO 到低优先级 的中断服务函数InterruptHandlerLow。//----------------------------低优先级中断入 口-----------------------------------1#pragmacodeInterruptVectorLow=0x18//用#pragma 伪指令定义一个名字叫InterruptVectorLow 的段,并把这个段放到0x18 地址起 始的代码空间2voidInterruptVectorLow(void)//低优先级中断向量函数3{4 _asm5gotoInterruptHandlerLow//内嵌汇编指令6_endasm7} 8#pragmacode//这里不是多余的,它是告诉连接器回到默认的代码段,如果不 加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。而 LKR 文件里定义了向量区最多到0x29 地址,所以如果没加此行通常会报错 910#pragmainterruptlowInterruptHandlerLow//这里使用interruptlow 这个关键词 来声明InterruptHandlerLow 这个函数是低优先级中断服务函数,用了关键词后,这个函数将会由编译器自动产生基本的现场保护,并且这个函数的返回将是使 用RETFIE 返回的。111213voidInterruptHandlerLow(void)14{15/*低优先级服务 函数的代码写在这里*/16}PIC18 系列的高优先级中断入口地址在0x0008 地址, 下面的代码是在这个入口地址处放置一个向量函数,这个向量函数里就是一个 内嵌汇编的GOTO 指令,GOTO 到高优先级的中断服务函数InterruptHandlerHigh。 //----------------------------高优先级中断入口----------------------------------- 1#pragmacodeInterruptVectorHigh=0x08//用#pragma 伪指令定义一个名字叫

西门子PLC程序(工艺给控制条件部分)(DOC)

XXXXXXXXXX项目反渗透系统控制条件 1 目的 本章节主要提供XXXXXXXXXXXXXXXXX反渗透系统的控制条件。 2 超滤系统控制条件 2.1 范围 该系统主要包括以下几个部分: ①超滤的预处理装置,包括:多介质过滤器(3台)、自清洗过滤器(1台)、换热器(1台) ②超滤装置:三套(每套含UOF4膜组件50支) ③超滤反洗水泵:2台 ④超滤反洗加药装置:反洗酸投加(1套)、反洗次氯酸钠投加(1套) 2.2 主要设备说明 若没有特别说明,以下过程为系统转到自动状态时的运行条件。 2.2.1 多介质过滤器+UF 控制方式: ①过滤产水状态与中间水管液位计高液位联锁报警停车(高液位设为m); ②UF反洗状态与中间水罐液位计低液位联锁报警停车(低液位设为m); ③UF过滤产水状态(进入过滤状态5min后)与UF产水流量变送器下限联锁报警下限联锁报警(下限设为设定产水流量的80%); ④UF过滤产水状态(进入过滤状态5min后)与UF产水流量变送器下限联锁报警上限联锁报警(上限设为设定产水流量的150%); ⑤UF反洗状态(进入反洗状态15s后)与UF反洗进水流量变送器下限联锁

报警(下限设为设定为m3/h); ⑥UF反洗状态(进入反洗状态15s后)与UF反洗进水流量变送器上限联锁报警(上限设为设定为m3/h); 2.2.2 UF反洗水泵 电机功率:15kw,变频控制 设备数量:2台(1用1备) 控制方式: ①与中间水罐液位计低液位联锁报警停车(低液位设为m); ②自动控制,自动时受UF程序控制设备的启动和停止; ③手动控制,可在现场操作箱面板上控制启停,也可在主控画面上进行启停。 2.2.3 UF反洗酸投加计量泵 电机功率:0.75kw 控制方式: ①与储酸罐液位计低液位联锁报警停车(低液位设为m) ②手动控制,可在现场操作箱面板上控制启停,也可在主控画面上进行启停。 2.2.4 UF反洗次氯酸钠投加计量泵(加药计量泵) 电机功率:0.75kw 控制方式: ①与储药罐液位计低液位联锁报警停车(低液位设为m) ②手动控制,可在现场操作箱面板上控制启停,也可在主控画面上进行启停。 2.3 仪表说明 1、UF入口总管压力变送器 数量:1台 输出:4~20mA信号 量程:0~1.0MPa

单片机_C语言函数_中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。 (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。 80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。 80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制 (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP 具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。 在这里我们讲下注意的事项 (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。 (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。 (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。 (4)单片机复位后,TCON,SCON给位清零。 C51语言允许用户自己写中断服务子程序(中断函数) 首先来了解程序的格式: void 函数名() interrupt m [using n] {} 关键字 interrupt m [using n] 表示这是一个中断函数 m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行程序指令。 n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3 中断号中断源 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1中断 4 串行口中断 (在上一篇文章中讲到的ROM前43个存储单元就是他们,这5个中断源的中断入口地址为: 这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

在编写单片机的程序中中断服务程序中可以定义变量如果

在编写单片机的程序中,中断服务程序中可以定义变量,如果希望下一次再进入中断的时候还可以保留变量原来的值,就需要把它设置为static型的。比如,定义一个bit型变量作为某种判断的标志。关于好不好的问题,以我现有的知识,好像是解决不了的,很抱歉 一个中断的处理过程大概是这样的: 1、现行指令结束,且没有更紧急的服务请求。 2、关CPU中断,CPU不能再响应其他任何中断源的中断请求。 3、保存中断点,通常是指保存程序计数器PC中的内容,把它压入到系统堆栈中,以便在终端服务完成后返回到原来的程序中去。 4、撤销设备的中断服务请求,如果这个中断源的中断请求不撤销的话,那么在开CPU中断后,它必然将再次请求终端服务。 5、保存硬件现场。 6、识别中断源。 7、改变设备的屏蔽状态。 8、转向中断服务程序入口,一般还要在中断服务程序中通过软件才能找到具体中断源的中断服务程序入口。 9、保存软件现场,主要指保存将要被中断服务程序破坏的通用寄存器中的内容等。 10、开CPU中断,CPU可以响应其他更高级中断源的终端服务请求,中断源之间可以实现中断嵌套。 11、执行中断服务程序。 12、关CPU中断,CPU不响应任何中断源的中断服务请求。在下一次开CPU中断之前,正在运行的程序不允许被中断。 13、恢复软件现场,恢复被中断服务程序破坏的通用寄存器中的内容等。 14、恢复屏蔽状态。 15、恢复硬件现场,主要指恢复处理机状态字PSW及堆栈指针SP等中的内容,准备返回中断点。 16、开CPU中断。 17、返回到中断点。 其中红字的部分一般用硬件实现,蓝字的部分一般用软件实现,其他可以用硬件也可以用软件实现。 从上面这个过程似乎可以得到,在执行中断服务程序之前,很多东西都被保护起来了,所以执行中断程序的时候不必担心破坏什么东西。我们可以对全局变量进行操作,也可以定义一个新的变量,这只是占用了一定的存储空间和时间的问题。 恩,我也不知道自己理解的对不对,毕竟计算机系统结构是很复杂的哈,还希望大家帮忙理解一哈

中断服务程序流程图

第一讲: 第六章I/O接口原理-接口、端口、编址 回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。 重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。 讲授内容: 6. 1 输入/输出数据的传输控制方式 一、输入/输出的一般概念 1.引言 输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。因此,CPU与外部设备之间的信息交换技术比较复杂。 CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息。 2.输入/输出端口的寻址方式 微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。

根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式 这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。 方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。优点: ①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可 以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。 ②内存与外设地址的分配,可以用统一的分布图。 ③不需要专门的输入、输出操作指令。 缺点: ①内存与I/O端口统一编址时,在地址总线根数一定的情况下,使系统中 实际可以直 接寻址的内存单元数减少。 ②一般情况下,系统中I/O端口数远小于内存单元数,所以在用直接寻址方 式来寻址这些端口时,要表示一个端口地址,必须用与表示内存单元地址相同的字节数,使得指令代码较长,相应地读/写执行时间也较长,这对提高系统的运行速度是不利的。 Mortorola公司的M6800CPU等均采用这种寻址I/O端口的方式。 3. CPU与外设之间所传送的信息类型 CPU与I/O端口之间所交换的信息,可以有下列几种类型: ①数据信息:包括数字量、模拟量、开关量等,可以输入、也可以输出 ②状态信息:这是I/O端口送给CPU的有关本端口所对应的外设当前状态 的信息。供CPU进行分析、判断、决策。 ③控制信息:这是CPU送给I/O端口的控制命令,使相应的外部设备完成 特定的操作。 数据信息、状态信息和控制信息是不同类型的信息,它们所起的作用也不一样。但在8086/8088微机系统中,这三种不同类型的信息的输入、输出过程是相同的。为了加以区分,可以使它们具有不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入/输出的数据中设置特征位。

浅谈西门子PLC控制程序的保护

浅谈西门子PLC控制程序的保护 前言: 随着中国整体经济实力的加强,制造和加工工业正逐步向中国转移,这给中国国内工业装备市场带来了大量的商机,国内各行业的制造商开发和制造出大量价廉物美的设备,取得了良好的经济和社会效应。但是,也有小部分的制造商,由于其自身能力和客观因素的限制,无法及时开发出合适的产品,但利益的驱动使他们把目光瞄准了同行,抄袭和仿制同行开发成功的产品,更有甚者是整机拷贝或者克隆。由于现代工业设备大量采用PLC作为主控制系统,PLC作为整个设备的核心部件,其软件包涵了生产工艺,控制逻辑,设备数据,加工参数及信息通讯等重要内容,从而成为设备仿制者重点要获取的目标之一。纵观目前中国国内市场上应用的主流品牌PLC,虽然在设计上都采用了各种软硬件加密的手段,但破解者运用的破解手段也越来越先进,从最初的穷举法,端口侦听,软件跟踪,到现在可以通过直接复制提取内存芯片的内容来分析破解,更有甚者在互连网上公开讨论和传播破解方法和工具,因此所有产品无一例外地遭到了破解。这对中国众多的中小型OEM制造商来说是非常不利的,“我们几年的开发成果可能因此一夜之间付诸东流”当得知S7-200/300硬件加密也被破解后,一位OEM制造商无奈地说。由于仿制者的开发成本很低或几乎为零,因此开发者还没有来得及收回开发成本就陷入了低价竞争,这极大的影响了开发者开发新产品的积极性,对我国的装备工业的长远发展是十分有害的。 难道就这样束手无策,听任仿制者为所欲为了吗?答案是否定的,多年来一直关注和研究P LC控制程序保护方面的问题,笔者在实践中取得了一些经验和心得,在本文中愿意和同行们共同分享和讨论,大家共同为保护自己的劳动成果而努力。笔者多年来一直从事西门子S

计算机组成原理中断实验报告

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

西门子PLC编程图文详解

第五章 PLC 的基本指令及程序设计 ■ 5.1 PLC 的基本逻辑指令及举例 ■ 5.2 程序控制指令 ■ 5.3 PLC 编程指导 ■ 5.4 典型的简单电路编程 ■ 5.5 PLC 程序简单设计法及应用举例第五章PLC

5.1 PLC的基本逻辑指令及举例 PLC的编程语言有梯形图语言、助记符语言、逻辑功能图语言和某些高级语言。其中前两种语言用的最多,要求掌握。 本章以S7-200CPU22*系列PLC的指令系统为对象,用举例的形式来说明PLC的基本指令系统,然后介绍常用典型电路及环节的编程,最后讲解PLC程序的简单设计法。 S7-200PLC用LAD编程时以每个独立的网络块(Network)为单位,所有的网络块组合在一起就是梯形图, 这也是S7-200PLC的特点。

梯形图语言编程主要特点及格式有以下几点: 1)梯形图按行从上至下编写,每一行从左至右顺序编写,BPPLC程序执行顺序与梯形图的编写顺序一致° 2)梯形图左、右边垂直线分别称为起始母线和终止母线。每一逻辑行必须从起始母线开始画起。(终止母线常可以省略) 3)梯形图中的触点有两种,即常开触点和常闭触点,这些触点可以是PLC的输入触点或输出继电器触点,也可以是内部继电器、定时器/计 数器的状态。与传统的继电器控制图一样,每一触点都有自己的特殊标记(编号),以示区别。同一标记的触点可以反复使用,次数不限。 这是因为每一触点的状态存入PLC内的存储单元中,可以反复读写。 传统继电器控制中的每个开关均对应一个物理实体,故使用次数有限。

这是PLC优于传统控制其中的一点o

西门子PLC程序指令注意点

PLC程序详解(图文并貌) 一、时间继电器: TON 使能=1计数,计数到设定值时(一直计数到32767),定时器位=1。使能=0复位(定时器位=0)。TOF 使能=1,定时器位=1,计数器复位(清零)。使能由1到0负跳变,计数器开始计数,到设定值时(停止计数),定时器位=0。如下图: 图1:使能=1时,TOF(T38)的触点动作图 图2:使能断开后,计数到设定值后,TOF(T38)的触点动作图(其中T38常开触点是在使能由1到0负跳变后计数器计时到设定值后变为0的) TONR 使能=1,计数器开始计数,计数到设定值时,计数器位=1。使能断开,计数器停止计数,计数器位仍为1,使能位再为1时,计数器在原来的计数基础上计数。

以上三种计数器可以通过复位指令复位。 正交计数器 A相超前B相90度,增计数 B相超前A相90度,减计数 当要改变计数方向时(增计数或减计数),只要A相和B相的接线交换一下就可以了。 二、译码指令和编码指令: 译码指令和编码指令执行结果如图所示: DECO是将VW2000的第十位置零(为十进制的1024),ENCO输入IN最低位为1的是第3位,把3写入VB10(二进制11)。 三、填表指令(ATT) S7-200填表指令(ATT)的使能端(EN)必须使用一个上升沿或下降沿指令(即在下图的I0.1后加一个上升沿或下降沿),若单纯使用一个常开触点,就会出现以下错误:

这一点在编程手册中也没有说明,需要注意。其他的表格指令也同样。 四、数据转换指令 使用数据转换指令时,一定要注意数据的范围,数据范围大的转换为数据范围小的发注意不要超过范围。如下图所示为数据的大小及其范围。 (1)BCD码转化为整数(BCD_I) 关于什么是BCD码,请参看《关于BCD码》。 BCD码转化为整数,我是这样理解的:把BCD码的数值看成为十进制数,然后把BCD到整数的转化看成是十进制数到十六进制数的转化。如下图所示,BCD码为54,转化为整数后为36。

51单片机串行口中断服务程序

51单片机串行口中断服务程序 ---------------------------------------------------------------------------- //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //编程:聂小猛。该资料来自“51单片机世界”https://www.360docs.net/doc/66152274.html,/~dz2000,欢迎访问。 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数 //putinbuf(uchar c);模拟接收到一个数据 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置 //putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 //CR;发送一个回车换行 //************************************************************************* #include //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 #define uchar unsigned char #define uint unsigned int #define OLEN 64 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 2 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志有=1 bit inbufsign; //接收缓冲区非空标志有=1 bit inbufful; //输入缓冲区满标志满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //放入一个字节到发送缓冲区 putbyte(char c) {uchar i,j; ES=0; /*暂停串行中断,以免数据比较时出错? */ if (outlast==putlast ) { i=(0-TH1); do{i--;j=36; do {j--;}while(j!=0);

西门子plc各部件结构及功能

西门子plc各部件结构及功能 西门子plc各部件结构及功能德产西门子PLC的类型繁多,功能和指令系统也不尽相同,但结构与工作原理则大同小异,通常由主机、输入/输出接口、电源扩展器接口和外部设备接口等几个主要部分组成。PLC的硬件系统结构如下图所示: 1、主机 主机部分包括中央处理器(CPU)、系统程序存储器和TK6100iv5用户程序及数据存储器。CPU是西门子PLC的核心,它用以运行用户程序、监控输入/输出接口状态、作出逻辑判断和进行数据处理,即读取输入变量、完成用户指令规定的各种操作,将结果送到输出端,并响应外部设备(如电脑、打印机等)的请求以及进行各种内部判断等。西门子PLC的内部存储器有两类,一类是系统程序存储器,主要存放系统管理和监控程序及对用户程序作编译处理的程序,系统程序已由厂家固定,用户不能更改;另一类是用户程序及数据存储器,主要存放用户编制的应用程序及各种暂存数据和中间结果。 2、输入/输出(I/O)接口 I/O接口是西门子PLC与输入/输出设备连接的部件。输入接口接受输入设备(如按钮、传感器、触点、行程开关等)的控制信号。输出接口是将主机经处理后的结果通过功放电路去驱动输出设备(如接触器、电磁阀、指示灯等)。I/O接口一般采用光电耦合电路,以减少电磁干扰,从而提高了可靠性。西门子plc的I/O点数即输入/输出端

子数是信捷PLC的一项主要技术指标,通常小型机有几十个点,中型机有几百个点,大型机将超过千点。 3、电源 图中电源是指为CPU、存储器、I/O接口等内部电子电路工作所配置的直流开关稳压电源,通常也为输入设备提供直流电源。 4、编程 编程是西门子PLC利用外部设备,用户用来输入、检查、修改、调试程序或监示PLC的工作情况。通过专用的PC/PPI电缆线将西门子PLC与电脑联接,并利用专用的软件进行电脑编程和监控。 5、输入/输出扩展单元 I/O扩展接口用于将扩充外部输入/输出端子数的扩展单元与基本单元(即主机)连接在一起。 6、外部设备接口 此接口可将打印机、条码扫描仪,变频器等外部设备与主机相联,以完成相应的操作。实验装置提供的主机型号有西门子S7-200系列的CPU224CN(AC/DC/RELAY)。输入点数为14,输出点数为10;CPU226CN(AC/DC/RELAY),输入点数为26,输出点数为14。 北京天拓四方科技有限公司

单片机外部中断详解及程序

单片机外部中断详解及程序 单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。 实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。电路结构和接线不变,仅把程序改为下面的形式。 #include ;

unsigned int t=500; //定义一个全局变量t,并设定初始值为500次 //===========延时子函数,在8MHz晶振时约 1ms============= void delay_ms(unsigned int k) { unsigned int i,j; for(i=0;i

定时中断T0服务程序参考框图

软件程序: ORG 0000H LJMP MAIN ORG 000BH LJMP PIT0 ORG 001BH LJMP PIT1 ORG 0100H MAIN: MOV SP,#FH ;设堆栈指针 MOV SCON,#00H ;设置串行口为方式0 MOV TMOD,#11H ;T0和T1初始化为方式1 MOV TH0, #3CH ;置时间常数,T0和T1定时100ms MOV TL0, #OB0H MOV TH1, #3CH MOV TL1, #0B0H MOV 50H, #96H ;T0中断次数计数单元 MOV 51H,#14H ;T1中断次数计数单元 MOV R1, #00H MOV R2, #00H MOV R0, #40H ;显示缓冲单元起始地址 DISP0:MOV @R0, #00H ;显示缓冲单元清零 INC R0 CJNE R0, #4CH,DISP0 MOV 44H,#01H ;设置通道号的显示缓冲单元 MOV 48H,#02H MOV R7,#40H ;置当前通道显示缓冲单元首址 MOV 53H,#40H SETB ETO ;开中断 SETB ET1 SETB EA SETB TR0 ;启动定时器 SETB TR1 LP: MOV R7, 53H ;调显示子程序 ACALL DISP AJMP JP 定时器TO中断服务程序 PIT0: MOV TH0, #3CH ;重置时间常数 MOV TL0, #OBOH DJNZ 50H,#96H PUSH ACC PUSH 03H ACALL WDXJ ;调温度巡检子程序 POP 03H POP ACC

DH0: RET1 定时器T1中断服务程序 PIT1: MOV TH1,#3CH ;重置时间常数 MOV TL0, #OBOH DJNZ 51H,DH1 ;计数20次即定时2S MOV 51H,#14H INC R2 CJNE R2,#03H,CNL0 ;根据R2中的内容确定显示缓冲区首址 MOV R2,#00H CNL0: CJNE R2,#00H,CNL1 MOV 53H,#40H SJMP DH1 CNL1: CJNE R2,#01H,CNL2 MOV 53H,#40H SJMP DH1 CNL2: MOV 53H,#48H DH1: RETI 显示子程序 DISP: CLR P3.7 ;输出锁存 MOV R3,#01H ;置显示字位码 MOV DPTR,#TAB DISP1:MOV A,R3 MOV SBUF,A ;字位码送串行口 JNB T1,$ ;等待串行转送结束 CLR T1 ;清串行中断标志 MOV A,R7 MOV R0,A MOV A,@RO ;取代显示的数据 MOVC A,@R0 ;查表求字段码 MOV SBUF, A ;字段码送串行口, JNB T1,$ ;等待串行中断标志 SETB P3.7 ;允许输出显示 ACALL DEL ;调延时子程序 MOV A,R3 JB ACC.3,DISP2 ;4位显示完否 RL A MOV R3,A INC R7 CLR P3.7 ;输出锁存 AJNP DISP1 DISP2:RET TAB : DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH DEL: PUSH 07H ;延时子程序

西门子PLC编程手册

西门子S7-200PLC的RS485通信口易损坏的原因分析和解决办法 一、S7-200PLC内部RS485接口电路图:电路图见附件 图中R1、R2是阻值为10欧的普通电阻,其作用是防止RS485信号D+和D-短路时产生过电流烧坏芯片,Z1、Z2是钳制电压为6V,最大电流为10A的齐纳二极管,24V电源和5V电源共地未经隔离,当D+或D-线上有共模干扰电压灌入时,由桥式整流电路和Z1、Z2可将共模电压钳制在±6.7V,从而保护RS485芯片SN75176(RS485芯片的允许共模输入电压范围为:-7V~+12V)。该保护电路能承受共模干扰电压功率为60W,保护电路和芯片内部没有防静电措施。 二、常发生的故障现象分析: 当PLC的RS485口经非隔离的PC I电缆与电脑连接、PLC与PLC之间连接或PLC与变频器、触摸屏等通信时时有通信口损坏现象发生,较常见的损 坏情况如下: ●R1或R2被烧断,Z1、Z1和SN75176完好。这是由于有较大的瞬态干扰电流经R1或R2、桥式整流、Z1或Z1到地,Z1、Z2能承受最大10A电流的冲击,而该电流在R1或R2上产生的瞬态功率为:102×10=1000W,当然会 将其烧断。 ●SN75176损坏,R1、R2和Z1、Z2完好。这主要可能是受到静电冲击或瞬态过电压速度快于Z1、Z2的动作速度造成的,静电无处不在,仅人体模式也 会产生±15kV的静电。 ●Z1或Z2、SN75176损坏,R1和R2完好。这可能是受到高电压低电流的瞬态干扰电压将Z1或Z2和SN75176击穿,由于电流较小和发生时间较短 因而R1、R2不至于发热烧断。 由以上分析得知PLC接口损坏的主要原因是由于瞬态过电压和静电造成,产生瞬态过电压和静电的原因很多也较复杂,如由于PLC内部24V电源和5V 电源共地,24V电源的输出端子L+、M为其它设备混合供电可能导致地电位变化,从而造成共模电压超出允许范围。所以EIA-485标准要求将各个RS485接口的信号地用一条低阻值导线连接在一起以保证各节点的地电位相等,消除地 线环流! 当带电插拔未隔离的连接电缆时,由于两端电位不相等电路中又存在诸多电感、电容之类的器件,插拔瞬间必然产生瞬态过电压或过电流。 连接在RS485总线上的其它设备产生的瞬态过电压或过电流同样会流入到PLC,总线上连接的设备站点数越多,产生瞬态过电压的因素也越多。 当通信线路较长或有室外架空线时,雷电必然会在线路上造成过电压,其能量往往是巨大的,常有用户沮丧地说:“联网的几十台PLC全部遭打坏了!”。 三、解决办法: 1、从PLC内部考虑: ●采用隔离的DC/DC将24V电源和5V电源隔离,分析了三菱、欧姆龙、 施耐德PLC以及西门子的PROFIBUS接口均是如此。 ●选用带静电保护、过热保护、输入失效保护等保护措施完善的高挡次RS485芯片,如:SN65HVD1176D、MAX3468ESA等,这些芯片价格一般在十几元至几十元,而SN75176的价格仅为1.5元。 ●采用响应速度更快、承受瞬态功率更大的新型保护器件TVS或BL浪涌吸收器,如P6KE6.8CA的钳制电压为6.8V,承受瞬态功率为500W,BL器件则 可抗击4000A以上大电流冲击。

第5章 中断服务程序设计

第5章中断服务程序设计 中断服务程序(ISR)是嵌入式应用系统获取各种事件的基本手段,而“事件”是实时性问题的讨论基础和时间计算的起点。ISR的设计质量直接影响到系统的实时性指标和操作系统的工作效率。 只要没有关中断,中断服务程序可以中断任何任务的运行,可将中断服务程序可成比最高优先级(0级)还高的“任务”。 5.1中断优先级安排原则 中断源是系统及时获取异步事件的主要手段,其优先级安排原则如下: ●紧迫性:触发中断的事件允许耽误的时间越短,设定的中断优先级就越高。 ●关键性:触发中断的事件越关键(重要),设定的中断优先级就越高。 ●频繁性:触发中断的事件发生越频繁,设定的中断优先级就越高。 ●快捷性:ISR处理越快捷(耗时短),设定的中断优先级就越高。 中断服务程的功能应尽量简单,只要将获取的异步事件通信给关联任务,后续处理由关联任务完成。 5.2不受操作系统管理的中断服务程序 正常情况下,ISR应受操作系统的管理,因很多任务是靠ISR触发的。 但在两种情况下ISR不受操作系统管理:①没有必要;②操作系统没有对该ISR进行管理。 实时操作系统uC/OS-Ⅱ移植到ARM7体系的CPU上时,没有对FIQ进行处理,即FIQ 是不受操作系统管理的。 选用FIQ来响应实时性要求最高的高速采样操作是一个有效措施,保护现场的工作量很小(FIQ专有的8个寄存器不需要保护)。 在工程模板的系统启动文件Startup.s中,已经把汇编代码部分处理好,用户只需要用C 语言编写快速中断服务函数FIQ_Exception()即可,不需考虑保护现场和恢复现场的问题。 程序:Startup.s中队FIQ的处理 Reset ;异常向量表 LDR PC,ResetAddr ;跳转到复位入口地址 LDR PC,UndefinedAddr LDR PC,SWI_Addr ;跳转到软件中断入口地址 LDR PC,PrefetchAddr LDR PC,DataAbortAddr DCD 0xb9205f80 LDR PC,[PC,#-0xff0] ;跳转到向量中断入口地址(向量中断控制器) LDR PC,FIQ_Addr ;跳转到快速中断入口地址 ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbort Nouse DCD 0

定时器中断c语言程序

定时器中断c语言解析interrupt x using y interrupt 表示中断优先级,using表示所用工作寄存器组。 interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 其它的根据相应得单片机有自己的含义,实际上c在编译的时候就是把你这个函数的入口地址放到这个对应中断的跳转地址 using y 这个y是说这个中断函数使用的那个寄存器组就是51里面一般有4个r0 -- r7寄存器,如果你的终端函数和别的程序用的不是同一个寄存器组则进入中断的时候就不会将寄存器组压入堆栈返回时也不会弹出来节省代码和时间 外部中断INT0 void intsvr0(void) interrupt 0 using 1 定时/计数器T0 void timer0(void) interrupt 1 using 1 外部中断INT1 void intsvr1(void) interrupt 2 using 1 定时/计数器T1 void timer1(void) interrupt 3 using 1 串口中断 void serial0(void) interrupt4 using 1 单片机的C语言 HNBCC培训 电话:137******** 一,中断的概念 中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求. 中断的执行:当CPU正在执行某一程序时,若有中断响应,则CPU转而执行中断服务程序,当中断服务程序执行完毕后,CPU自动返回原来的程序继续执行. 中断服务程序的语句写法与函数的写法完全相同,所以,中断服务程序也是函数,只在函数头部有不同(后续). 中断服务程序的执行与函数的执行不同:函数的执行是有固定位置的,是通过函数的调用来完成的;而中断服务程序的执行是不固定位置的,只要有中断响应,在一定条件下都会去响应中断,即执行中断服务程序. 二,中断源 中断源:任何引起计算机中断的事件,一般一台机器允许有许多个中断源. 8051系列单片机至少有5个可能的中断(8052有6个,其它系列成员最多可达15个).下面以5个中断源为例.

西门子 PLC编程实例

这是网上擂台的题目:一台电动机要求在按下起动按钮后,电动机运行10秒,停5秒,重复3次后,电动机自动停止。同时设置有手动停机按钮和过载保护。编写梯形图控制程序。PLC可以随便选用,要有相关说明。注意:要有PLC控制电路和I/O分配表。? 1、硬件选择:一台PLC(S7-200)、一个交流接触器Z0(控 制电机运行)、2个按钮开关(SB1、SB2)及1个过流继电器(FR),电路图如下:(不包括粉色虚线框部分) 2、编程:用不同思路,可编出几种不同的控制方案,都可实现该项目要求。? (1)、最简单的编程方案,就是选用5个通电延时定时器:其3个定时10秒,用于电机启动运行,另2个定时5秒, 使电机停。具体编程也有二种方式,见下图:

上图中的方案一与方案二,同用5个定时器,完成同样的功能。 方案一是这样编程:按下启动按钮(),使断开。在此过程中,、、都是10秒的导通时间,用它们去控制,其彼此

间隔时间为5秒(即、的通导时间)。?8?1延时?8?=1,T101得电开始延时,延时10秒,T101吸合使=1、=0,使T101断电,而T102得电开始延时,5秒后T102得电吸合,使=1,=0。。。直到T105得电 方案二是这样编程:按下启动按钮(),使 =1,T101得电开始延时,延时10秒,T101吸合,使T102得电开始延时,延时5秒,T102吸合,使T103得电开始延时。。。直至T105得电延时,延时10秒后动作,使=0,=0使T101—T105皆断开,程序结束。用的常开触点与T101的常闭触点串联,用T102的常开触点与T103的常闭触点串联,用T104的常开触点与T105的常闭触点串联,三者再并联后去驱动,可达到同样的控制作用, 由上图可见,由于编程方法不同,其方案二用的指令比方案一少,显然:方案二优于方案一。 (2)、用二个定时器(T101、T102)和一个字节存储器(MB1)编程也可实现同样功能: 按下启动按钮,使MB1=0、=1,=1使T101得电开始延时,10秒T101吸合使T102得电吸和,延时5秒,T102吸合,其常闭点断开,使T101、T102失电断开,T101又得电延时。。。形成振荡器,T102每吸合一次,使MB1加1,吸合3次,MB3=3,比较器输出1使=0,程序结束。用的常开点与T101与T102

相关文档
最新文档