回复:【不欲勿施】【S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作

已锁定

芳季

西门子1847工业学习平台

  • 帖子

    14774
  • 精华

    100
  • 被关注

    817

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2021-11-19 08:40:03

38楼

展开查看
以下是引用不欲勿施13478405725在2021-11-18 18:55:20的发言 >34楼

子程序的头尾两个网络确实是为了将Temp数据从V区取回和存回V区。刚才想将其做成子程序,无奈L区不支持间接寻址。

以下是引用芳季在2021-11-18 18:34:52的发言 >:他的意思是每个子程...

引用详细内容:

他的意思是每个子程序之前都有一个引导程序带头,指引指程序使用的地址

介绍一个我的设想,你看看行不行。

主程序调用一个没有参数的子程序,这个子程序里面的L已经是有值的,只不过这是上一次主程序调用某子程序的时候遗留下来的值。由于没有人可以再追索上一次是哪个子程序,所以说L区的值都是随机的。一定要先赋值后使用。

然而,在你的全扫描机制下,上一个子程序自然可以知道是哪个子程序。无形中L区成为了同级子程序之间坚实的桥梁。子程序之间根本不需要通过全局资源或者父级程序传递参数。

至此,可以在每个子程序的某几个字节里面录入子程序身份标识和内存申请要求等。然后主程序第一开始的地方用8级深度的各级子程序初始化这几个字节。扫描完了常规程序之后,常规程序第一扫描周期不干常规的事情,仅仅为了排队申请可用内存。到扫描结束之前主程序8级深度再初始化一次这些字节,结束第一扫描周期。主程序分析内存的用量是否超过物理空间,进行stop处理。

至此,由于实施了全扫描,每一个子程序的每一次调用都申请到了一片V区。并在第一次扫描中把所有有关数据写入了属于自己的V区里面。该申请独立空间的有一片独立空间,该申请共用空间的又若干子程序使用同一片V空间。可变长度申请的,安排最大使用长度。不需要空间的不分配空间。

接下来的扫描,就完完全全正常工作了。所有L资源可能成为了历史。分配任务完成L区不再使用,或者只用作自己的临时作用。

其实我的意思好像是你的前后两个子程序压入了用户子程序里面,然后v4000等的东西用L的横向传递代替了。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7567条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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