恭喜,你发布的帖子
发布于 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
仿真公共数据区时钟源和每个阀门超时设置
每个阀门的私有数据区类型
程序
程序
以上改.Smart后缀名打开
文档
增加磁性接近开关仿真子程序---子程序严格遵循局部变量先赋值后使用,并将产生变化的局部临时变量反馈拷贝回写到对应的私有全局变量区。将阀状态字节优化成与或逻辑运算,区分阀门状态。
阀门块Valve的终定版优化了:全局传局部;局部返全局的时序,仅供参考。
结语:C中为解决子程序紧凑而且多次调用而不会破坏堆栈的结构1:利用函数指针(这方法在外挂子程序中用的最多,编程者希望外挂程序多次调用保证人物满血,又不希望加的程序影响游戏的其它的进程,否则游戏没得玩)或传递给子函数参数类型为各种指针类型(如数组指针,结构体指针)。 2:对于堆栈结构优化如静态局部变量(仅初始化一次)优化成堆,局部变量为栈。3:采用多线程优化局部变量释放内存的时刻,生存周期以及作用范围。初识200或SMART的的工程师一般习惯全局变量编程(不像300等直接要求要了解更多的数据结构),全局变量因为很直观,所以觉得容易入门,但复用性相对差点。深入了解200后会觉得200也很灵活无太多的束缚很自由,对向子函数传递指针等处理技巧应该会逐步加强.《子程序多处调用,但又不得同时调用的问题。》
请填写推广理由:
分享
只看
楼主