热门搜索:

浔之漫智控技术(上海)有限公司-15821971992是一家西门子模块代理商,西门子PLC模块代理商,西门子低压代理商,西门子中国总代理商,西门子四芯工业以太网电缆线浔之漫智控技术(上海)有限公司经营西门子模块代理商、西门子PLC模块代理商、西门子低压代理商、西门子中国总代理商、西门子四芯工业以太网电缆线等;西门子保内全新产品‘质保一年。一年内因产品质量问题换新产品;不收取任何费。欢迎致电咨询。

    西门子低压一级总代理商|授权代理

    更新时间:2024-05-16   浏览数:47
    所属行业:电气 工控电器 DCS/PLC系统
    发货地址:上海市松江区  
    产品数量:999.00台
    价格:面议
    货期现 货 产品认证CE 销售范围全国 质保日期质保一年 西门子产品系列自动化设备全系列 产品询价随时 产品包装全新原装正品

       西门子S7-1200PLC与HMI制作的液体混合系统程序 
    某工厂有一液体混合配液系统,工艺配方要求用带模拟量的液位计检测液体的高度,先加液体A,再按一定比例加注液体B,混合液体比例和总量可以在触摸屏上设定。
    工艺流程如下:
    1、按启动按钮后系统自动运行。
    2、打开进液泵A→
    到达液位设定值→
    关闭进液泵A→
    打开进液泵B→
    到达比例设定值→
    关闭进液泵B→
    打开搅拌电机→
    搅拌时间到达→
    关闭搅拌电机→
    完成混合,指示灯闪烁→
    按下放液按钮→
    开启放液泵→
    放液完成→
    延时时间到达→
    关闭放液泵。
    3、按下停止按钮,系统立即停止运行。

    如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢?要想知其所以然,还得从汇编开始学起。

            冒号的“DELAY”、“D1”、“D2”为语句行的名字,是为了程序的条件语句跳转用的,分号后面为注释,计算机执行时将过滤掉这些信息,较大限度减少代码长度,提高效率。

    DELAY: MOV R7,#250 ; 名字为“DELAY”的语句:意思是将CPU内部内存RAM的R7位置填写为250(原来为0,为什么是0呢?因为任何程序开始执行前都要复位,就像我们打算盘要将算子复位一样,或者我们用沙盘写字,要将沙盘抹平类似)

    D1: MOV R6,#250 ; 名字为“D1”的语句:将R6位置填写为250

    D2: DJNZ R6,D2 ; 名字为“D2”的语句:将R6位置的250减1,如果为0就继续执行下一条,不为0就继续执行D2这一句,因为R6=250,所以这个语句要原地踏步执行250次!

    DJNZ R7,D1 ; 这句没**字,因为没有别的语句要跳到这里,所以就省略了。R7同样等于250,但它不是原地踏步,而是跳回了D1,这么干,D!、D2和本句将被循环执行250遍,需要强调的是:D2语句自身每次都要执行250遍,也就是执行了250*250=62500遍!

    RET ;子程序结束(因为延时程序一般不作为独立程序存在,它只是一个子程序,也就是高级语言中的一个函数,看到这个字符,子程序将跳回到母程序,进行下一步)。

     

            这个子程序这么反复地循环指令,到底有什么意义呢?又是怎么实现的延时程序呢?说起来计算机真是有点笨,它是*数程序执行的次数来累加时间的!也就是说语句本身就是为了浪费时间!哈哈,可笑吧?这就像你没有钟表,但是你知道你跑操场一圈是一分钟,然后就绕着操场跑了60圈,时间过了正好一小时一样。

            如果是人的话,谁也不会笨到干这么累的活儿来计时,但计算机不一样,它不论静止还是运动,程序总是一拍一拍地运行着,所以它不累。

     

            那么,计算机执行一个语句耗费的时间是多少呢?

            以51型单片机为例:如果采用12MHz的晶振,运行一个机器周期为1微秒,具体为什么暂时不管。单片机的指令系统分为单周期、双周期和三周期指令(三周期实际上占用四个周期,多余一个周期浪费掉),这是有指令的内容决定的,内容多的单周期执行不完,肯定要延长了。子程序里面的MOV是单周期、DJNZ是双周期。

     

            这样,我们就可以算算这个子程序累计进行了多少个周期,然后乘以1微秒,就算出它占用的时间,也就是延时的时长了!

            **句:DELAY: MOV R7,#250 ;执行了一次,没有任何语句跳转给它,单周期。1

            *二句:D1: MOV R6,#250 ;执行了250次,全部是*四句跳过来的,单周期。250

            *三句:D2: DJNZ R6,D2 ;原地执行了250次,从*二句顺延(*二句执行完,没有其它跳转的话肯定要执行*三句)过来250次,也就是250*250=62500次,双周期*2。125000

            *四句:DJNZ R7,D1 ; 从*三句顺延过来250次,双周期*2。500

            总计:1+250+125000+500=1257501次,乘以1微秒,换算约为0.13秒。

            我们可以通过调整R6、R7的数值来调整延时的长度。事实上,8位计算机中,R6之类的工作寄存器地址较大只能放下255的十进制数值,因此要通过上述程序达到更长的延时是办不到的。

            那怎么办呢?

            我们可以再增加一个R4,让上述的程序较多可以循环255遍,这样,0.13秒的200多倍就是30秒上下了,不够的话再增加循环,又可以扩大200多倍,当然,工作寄存器的数量是有限的,因此这个延时程序也是有限的,如果还不够用怎么办呢,就目前我所学的知识,只能在母程序里面设置循环了,也就是让这个子程序在母程序里面继续循环......


    http://xhzdh007.cn.b2b168.com