开关量输入输出通道与顺序控制-3(NE).ppt
工业系统的驱动与控制顺序控制,工程训练中心,开关量通道的输入输出 DI/O工程训练*,2-2,2.1 开关量通道的读写控制“PC采集卡”的控制系统,人-机界面,工业系统,机-机界面,数据通道,端子板(电气接口),线接好后,不再改变,要改变的是控制流程,如何控制?,开关量通道的输入输出 DI/O工程训练*,2-3,2.1 开关量通道的读写控制“PC采集卡”的控制系统数据通道,被控对象,控制流程或者算法,开关量通道的输入输出 DI/O工程训练*,2-4,2.1 开关量通道的读写控制采集卡的工作原理,采集卡的操作 寄存器读写 端口读写,地址偏移量offset,寄存器的地址 基地址Base 偏移量offset,由所用的寄存器确定,由板卡跳线确定,工 业 系 统,PC 总 线,开关量通道的输入输出 DI/O工程训练*,2-5,2.1 开关量通道的读写控制DI/O通道的工作过程,inportb(port),outportb(port,0 x15),0 x15,00010101,11110110,0 xF6,如果不发送00010100,1号灯一直亮,必须用outportb重新改变其状态,00010101信息0V。5V载体,开关量通道的输入输出 DI/O工程训练*,2-6,2.1 开关量通道的读写控制控制系统中几个常用的C语言函数,键盘输入:while(!kbhit()/*如果没有按下任意键继续*/while(bioskey(0)延时:delay(milliseconds)延时若干毫秒sleep(seconds)延时若干秒,开关量通道的输入输出 DI/O工程训练*,2-7,训练内容1:观察演示程序的DI/O操作训练系统接线示意(P109),6线,2线,6线,开关量通道的输入输出 DI/O工程训练*,2-8,训练内容,2光电对管遮光控制LED(P110训练(1),开关量通道的输入输出 DI/O工程训练*,2-9,总结:训练内容2程序,main()int DI6,DO6,I,DI_out,DO_out;for(i=0;i6;i+)DOi=0;DO_out=creat_DO(DO);/*初始化,使红色LED熄灭*/outportb(BASE_ADDRESS+13,DO_out);clrscr();while(!kbhit()DI_out=inportb(BASE_ADDRESS+6);creat_DI(DI,DI_out);/*获取光电对管状态*/for(i=0;i6;i+)DOi=DI5-i;DO_out=creat_DO(DO);outportb(BASE_ADDRESS+13,DO_out);/*输出*/outportb(BASE_ADDRESS+13,0);/*清零*/,开关量通道的输入输出 DI/O工程训练*,2-10,训练内容,3脉冲列计数(P110训练(2),开关量通道的输入输出 DI/O工程训练*,2-11,训练内容2:脉冲计数器脉冲的计数方法,整个脉冲:0 1,1 0看上升沿:0 1看下降沿:1 0,一个周期算完成一次遮挡,开关量通道的输入输出 DI/O工程训练*,2-12,训练内容2:脉冲计数器难点:多计数或少计数,解决的办法覆盖整个时间段:每个循环只DI一次,并把本次获得的值存为下次计数判断使用。使用中断方式,每次循环DI输入2次或2次以上将会出现少计数,开关量通道的输入输出 DI/O工程训练*,2-13,Y,训练内容3:脉冲计数器程序流程图,DI:输入当前的对管状态判断号光路是否遮断,计数器 counter,号光路是否通断次(与上次比较),计数器countercounterDO输出counter,保存本次的对管状态,按键了么?(结束指令),N,Y,Y,结束输出结果,.,main()int DI6,DI_out,I;i=0;clrscr();printf(Type Any Key to Endn);while(!kbhit()DI_out=inportb(BASE_ADDRESS+6);creat_DI(DI,DI_out);/*if(now_di2=0)i=0;*/*清零*/while(DI1=0)/*判断光1是否被遮挡*/if(DI0=1)DI_out=inportb(BASE_ADDRESS+6);creat_DI(DI,DI_out);if(DI0=0)i+;/*光0被遮挡,计数器加1*/DI_out=inportb(BASE_ADDRESS+6);creat_DI(DI,DI_out);printf(i=%dn,i);,开关量通道的输入输出 DI/O工程训练*,2-15,编程要领,需要解决的问题是什么?抓住主要问题如何解决?理清思路,画出流程图编写代码:力求简洁,不要写一堆无效代码,以免影响思路模块化代码调试多写多练,开关量通道的输入输出 DI/O工程训练*,2-16,2.2 开关量通道用于顺序控制顺序控制的基本知识,顺序控制:使工业系统按事先规定的时间或者条件顺序地动作。工步:执行器的一个动作开关量用于顺序控制:“开”、“关”、“启动”、“停止”、危险报警,开关量通道的输入输出 DI/O工程训练*,2-17,2.2 开关量通道用于顺序控制顺序控制的实现,时间控制:delay(milliseconds);sleep(seconds);定时器中断:8253、8254条件控制:逻辑判断if.elseswitch()case 1:case 2:default:,开关量通道的输入输出 DI/O工程训练*,2-18,2.2 开关量通道用于顺序控制电机控制系统举例,一个系统包含3台电机,分别为M1、M2、M3。系统启动时,3台电机按顺序启动,关闭时按相反顺序进行。每台电机有一个指示灯,启动正常运转时指示灯亮。另外有3个指示灯表示系统状态:系统正常运转时,绿灯亮;如果系统负荷较大时,系统发出警告,黄灯亮;系统超负荷工作,系统错误报警,红灯亮。,开关量通道的输入输出 DI/O工程训练*,2-19,2.2 开关量通道用于顺序控制电机控制系统模拟,光电对管03:输入负荷load(00 x0F)光电对管4:系统启动开关光电对管5:系统关闭开关LED02:电机13的工作指示灯LED3:系统正常(load 10)LED4:警告(10 load 13)LED5:错误报警(load 13),开关量通道的输入输出 DI/O工程训练*,2-20,2.2 开关量通道用于顺序控制电机控制系统流程图,开始,顺序关闭3个电机并熄灭指示灯,系统启动?,顺序启动3个电机,并点亮指示灯,正常,系统关闭?,负载 10,负载 13,警告,报警,点亮工作状态指示灯,Y,N,Y,Y,N,N,Y,N,开关量通道的输入输出 DI/O工程训练*,2-21,第二次作业,任选一道DIO通道顺序控制的题目,画出程序流程图,并编写程序(P111)包装机楼梯照明系统电梯LED闪烁自动洗衣机要求使用DI/O实验板模拟,开关量通道的输入输出 DI/O工程训练*,2-22,第二次作业包装机,有一个工业包装流水线,每一箱装6件产品,箱子装满时打包机开始动作,完成一个包装箱需6个动作。提示:绿色LED1对应产品,每遮挡一次表示装了一件产品,挡了6下后,对应6个红色LED依次发光,表示打包完成。,开关量通道的输入输出 DI/O工程训练*,2-23,第二次作业楼梯照明系统,一幢楼房从底层到顶层有6盏楼梯照明灯,每一盏灯都有红外接收装置检测是否有人经过该灯的照明区域。若有人经过,灯自动亮,持续3分钟后熄灭。编写程序,模拟一个人从底层到顶层,顺次经过6盏照明灯时,灯自动亮,3分钟后熄灭。提示:真实模拟可以使用gettime()函数。,开关量通道的输入输出 DI/O工程训练*,2-24,第二次作业电梯,两层电梯,用户在任何一层呼叫,电梯门开,用户进入后按关门按钮,电梯门关闭,电梯起动,到达目的层后停止,电梯门开,人离去后15秒电梯门自动关闭。提示:先定义一组动作,如遮挡光电对管0表示开电梯门,遮挡光电对管1表示关门等,开关量通道的输入输出 DI/O工程训练*,2-25,第二次作业LED闪烁,利用延时程序使LED闪烁。闪烁可以有多种模式,如亮暗长短不一,或有一定的节奏,或低位每闪10次高位闪一次。,LED闪烁(1),main()short temp1=0,temp=1;while(!kbhit()temp1=inportb(0 x220+6);while(temp1=254)/*1#*/outportb(0 x220+13,temp);delay(10000);temp=temp32)temp=1;temp1=inportb(0 x220+6);if(temp1=253)break;else temp1=254;,LED闪烁(2),while(temp1=253)/*2#*/temp=21;/*(21)10=(010101)2*/outportb(0 x220+13,temp);delay(60000);temp=42;/*(42)10=(101010)2*/outportb(0 x220+13,temp);delay(60000);temp1=inportb(0 x220+6);if(temp1=251)break;else temp1=253;,LED闪烁(3),while(temp1=251)/*3#*/temp=56;/*(56)10=(111000)2*/outportb(0 x220+13,temp);delay(5000);temp=0;outportb(0 x220+13,temp);delay(100000);temp=7;/*(7)10=(000111)2*/outportb(0 x220+13,temp);delay(5000);temp=0;outportb(0 x220+13,temp);delay(100000);temp1=inportb(0 x220+6);if(temp1=247)/*4#*/break;else temp1=251;if(kbhit()temp=0;outportb(0 x220+13,temp);,开关量通道的输入输出 DI/O工程训练*,2-29,第二次作业自动洗衣机,模拟自动洗衣机的洗衣过程。提示:用LED表示每一个执行到的状态,每个状态之间用时间或者条件判断,