发新话题
打印

科威PLC芯片组开发实例(十)

科威PLC芯片组开发实例(十)

实战攻坚!

下面我们讲讲该在TMS用户驱动子程序里面写些什么代码。

首先笔者得说说科威PLC的输入端口采样原理,为什么要进行输入端口采样呢?答案很简单,就是为了滤波。在PLC实际运行过程中,X端口可能会因为现场干扰收到一些毛刺信号,这些毛刺信号如果不进行处理,就会影响到PLC对X端口的状态的判断,那么我们必须得剔除掉这些毛刺,使系统工作在一个稳定的环境。
我们规定,如果连续采样8次X端口的值都是一致的,就判断此刻X端口的状态是实际的输入状态,这个也就是为什么我们把INPUT_CNT这个变量设置为8的原因。

还是老规矩,笔者贴出TMS的代码并为大家分析:
TMS
TMS:                        MOV        C,KEY_SET                        ;1
                                MOV        P4.3,C                                ;2
                                MOV        C,PLC_PRO_ERR                ;3
                                CPL                C                                        ;4
                                MOV        P4.2,C                                ;5
                                MOV        A,INPUT_CNT                ;6
                                JNZ                TMS1                                ;7
                                RET               

TMS1:                        DEC        A                                        ;8
                                MOV        DPTR,#XINPUT                ;9
                                ADD        A,DPL                                ;10
                                MOV        DPL,A                                ;11
                                MOV        A,DPH                                ;12
                                ADDC        A,#00H                                ;13
                                MOV        DPH,A                                ;14       
                                MOV        A,P3                                ;15
                                MOVX        @DPTR,A                        ;16
                                DEC        INPUT_CNT                        ;17
                                RET

1.        第1~5句:这4条语句是给RUN/SET和ERR两个灯赋状态的。在原理图中看到,由于ERR的LED与实际的P4.2中间反了一次向,故此在程序中也需要对此端口反向赋值。
2.        第6句:取INPUT_CNT当前值赋给寄存器A
3.        第7句:这句是一句跳转指令,作用是看对X输入端口当前的8次采样完成了没有,如果完成了,就直接返回,在SCAN用户驱动子程序会对其X0~X7寄存器的值进行更新;如果8次采样没有完成,则跳转到TMS1中进行X输入端口采样。
4.        第8~16句:将P3端口的值(即当前X输入端口的采样值)存放到从#XINPUT+7开始到#XINPUT一共8个单元。值得注意的是,完成8次采样的时间为2.5ms * 8 = 20ms。也就是说,从第1次采样开始到8次采样结束需要20ms的时间。结束时,#XINPUT~#XINPUT+7这8个单元的地址已被填充,等待SCAN用户驱动子程序的处理。这段程序通过改变采样指针DPTR的DPH和DPL,使其指向不同的外部寻址单元,这个小技巧希望大家能够熟练掌握。
5.        第17句:将INPUT_CNT减1。不要忘记这句话,否则你的程序将始终填充#XINPUT+7这个单元的数据,采样指针永远也指不到#XINPUT+6和其以下的单元。

好了,TMS就给大家分析完了,下一讲笔者将给大家讲述最后一个部分:SCAN。

本帖首发中国工控网科威PLC论坛,转载请声明!

TOP

发新话题
管理员信箱:lvhangye@163.com 管理员QQ:466929121