回复:题2

伊默

西门子1847工业学习平台

  • 帖子

    4259
  • 精华

    118
  • 被关注

    220

论坛等级:至圣

注册时间:2003-10-24

白金 白金 如何晋级?

发布于 2005-04-13 09:00:58

0楼

试着回一下:) 新建一个数据块
1:DBB0—DBB34(我现在改成用字节存储了,呵呵)内存放了这35个灯泡执行的顺序; 在数据块中建立一个二维数组DATA:ARRAY[0..34][0..CONST] OF WORD,其中CONST为可定义的常量,代表在一个循环内这35个灯泡之中的一个可能被点亮次数的最大值,这里我假设CONST=2,即在一个循环中灯泡最多可能被点亮3次。DATA[0][0]表示一号灯泡在一个循环中第一次被点亮的时间,DATA[0][1]表示一号灯泡第二次被点亮的时间,DATA[0][2]表示一号灯泡第三次被点亮的时间;若DATA[0][0]为零则表示一号灯泡在该次循环中不会被点亮,其他灯泡的数据依次类推。接下来也还是用间接寻址的方式,先读出要被点亮的灯泡号码,再从二维数组读出它要被点亮的时间,直到DATA[X][Y]为零则表示该X号灯泡已经执行完毕。
2:利用JL和JU指令配合. 每一次读出当前要执行的事件的编号,再调用.假设这35个事件用FC1--FC35来表示,则
装载当前要执行事件的编号
JL C35
JU C1
JU C2
........
JU C34
C1: CALL FC1
JU END
C2: CALL FC2
JU END
...........
C35: CALL FC35
END: NOP 0
3:可以利用分时调用(相当于一个分频器),这里我假设分二次调用. 新建两个FC:FC40,FC41. 然后把FC1---FC17放在FC40中调用,FC17--FC35放在FC41中调用. 接下来在OB1中有
AN M0.0
= M0.0
A M0.0
CC FC40
AN M0.0
CC FC41
当然如果这样觉得扫描周期还长的话,则可以用四分频,八分频,甚至更多.

我的思路就是这些,当然这还只是纸上谈兵而已,要想完全写出一个完善的程序出来还是得花些功夫的,请同行门指正,谢谢!
I can do it
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。