回复:更新对S7-200Smart的认识3-寻址方式

已锁定

holdkcsxyz

西门子1847工业学习平台

  • 帖子

    1577
  • 精华

    24
  • 被关注

    163

论坛等级:至圣

注册时间:2015-06-03

白金 白金 如何晋级?

发布于 2020-10-28 12:58:02

7楼

    在Zane版的博图环境下通过用户程序实现硬件IO自由组态的基本方法最后提出用FC加全局DB替代FB,利用全局数据比较容易实现数组化的特点,同样在原有程序基础上实现硬件IO地址用户程序可组态,也许这样编程方法会更加的灵活简单。

   最近有时间细读学习后觉得有道理,因此简单的贴个Smart编程环境下的阀门块。可通过增加循环数(阀门数量),并为新增阀门的私有全局变量区分配接近开关,启停,线圈,超时时间设置来扩展相同逻辑的IO控制。

   因此结帖贴一个间接寻址的帖子,简易实现上述n个阀门的启保停,可以看看套路,离实用可能还要修改,而且运行时间也待优化。

   实际仿真测试没问题,包含子程序中脉冲沿,计时器,局部变量的处理仅供参考;类似的间接寻址的数据传输方式Winter938等很多工程师也有很多帖子。

n个相同类型阀门的启保停控制块

n个阀门的公共数据区类型:

时钟源(双字):所有阀门公用一个时钟源ms

循环数(单字):FOR循环次数等价于要控制的阀门量

每个阀门的私有数据区类型:

阀门开(布尔):开脉冲(读写)

阀门关(布尔):关脉冲(读写)

阀开限(布尔):开限位(只读)

阀关限(布尔):关限位(只读)

阀线圈(布尔):阀线圈(读写)

开到位(布尔):开到位(开限位正确)

关到位(布尔):关到位(关限位正确)

阀状态(字节):阀状态(10种状态有8种是非常状态;2种常态)

阀超时(双字):每个阀门的超时设置时间ms

阀动始(双字):每个阀门开或关动作时记录一次动作开始时间戳ms

阀动计(双字):每个阀门开或关动作过程结束后记录动作时间差值ms

OB_1


Valve

仿真公共数据区时钟源和每个阀门超时设置

每个阀门的私有数据区类型

程序

n个相同类型阀门的控制块.PDF

程序

n个相同类型阀门的控制块+仿真块终定版 .PDF

以上改.Smart后缀名打开

文档

Valve_FC_文档.doc

       增加磁性接近开关仿真子程序---子程序严格遵循局部变量先赋值后使用,并将产生变化的局部临时变量反馈拷贝回写到对应的私有全局变量区。将阀状态字节优化成与或逻辑运算,区分阀门状态。

       阀门块Valve的终定版优化了:全局传局部;局部返全局的时序,仅供参考。

       结语:C中为解决子程序紧凑而且多次调用而不会破坏堆栈的结构1:利用函数指针(这方法在外挂子程序中用的最多,编程者希望外挂程序多次调用保证人物满血,又不希望加的程序影响游戏的其它的进程,否则游戏没得玩)或传递给子函数参数类型为各种指针类型(如数组指针,结构体指针)。 2:对于堆栈结构优化如静态局部变量(仅初始化一次)优化成堆,局部变量为栈。3:采用多线程优化局部变量释放内存的时刻,生存周期以及作用范围。初识200或SMART的的工程师一般习惯全局变量编程(不像300等直接要求要了解更多的数据结构),全局变量因为很直观,所以觉得容易入门,但复用性相对差点。深入了解200后会觉得200也很灵活无太多的束缚很自由,对向子函数传递指针等处理技巧应该会逐步加强.《子程序多处调用,但又不得同时调用的问题。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9389条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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