打印

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

[复制链接]
1550|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gonkillua|  楼主 | 2008-8-8 13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实战攻坚!

下面我们讲讲该在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论坛,转载请声明!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

10

帖子

0

粉丝