作者 | 主题 |
---|---|
holdkcsxyz 至圣 经验值:13223 发帖数:1852 精华帖:22 |
楼主 2021-01-05 19:14:43
主题:更新对S7-200Smart的认识4-结尾杂谈 更新对S7-200Smart的认识4-结尾杂谈 可能涉及间接寻址,滤波,字符串简单处理等 (一)还是间接寻址 1:地址==阿拉伯数字编码 由于VB0;IB0;QB0等地址都是确定的阿拉伯常数,这就足够了;Smart下位机逻辑层面程序可以没有任何关于V区;Q区;I区的任何标志信息, FC接口可以只含有这些区域阿拉伯数字编码地址,局部变量临时缓存L区还是要用来做缓存容器的. Smart任何程序接口都可以是如以下例程一样用各个区域纯阿拉伯数字身份证堆叠出来,不过如果没有注释和数据结构接口定义的话则很难读懂. 很多人谈知识产权保护,这种方式或许也是一个方法。不过一个用甜点Smart做的小项目,无论是工艺复杂度以及功能复杂度很难有太多值得保密的可能性,也难说. 1.1如图切换M0.0的状态轮询调用网络2;网络3的实际效果除了时钟源切换的些许卡顿(如果将时钟源逻辑全扫描几乎无卡顿)外几乎一模一样. 1.2如下图:分享布尔量的延迟滤波函数FC(绝对时钟;相对时钟两种),以前很多工程师都分享过类似功能,主要功能是将一个信号的前沿和后沿都同时扩充一点延时. 以下例程的时序以及空间方面都有考量过,但不一定是时序短,空间优。在CR60上测试OK,可能有错漏,仅供参考. 绝对时钟滤波注释: 函数名称Time_Abs_Bool_Filter也是一个地址所以接口指针尽量不要和函数名重复因此函数接口地址定义成Time_Abs_Bool_FilterP (1):全局绝对时钟毫秒数277.8个小时后归零,选择十亿作为圈数是因为两个双字时钟毫秒相加值不会超过有符号双字上限且容易在HMI上设置.还可以保证如果原始双字时钟毫秒数不归零符号改变时的逻辑完整. (2):全局绝对时钟圈数按有符号单字32767可保证1039年不溢出 函数接口定义: 函数接口变量读写 Time_Abs_Bool_FilterP:双字 滤波函数入口指针唯一接口参数 FC读写接口变量 用户接口 公共全局变量只读 时钟毫秒:双字 全局时钟毫秒 FC只读公共全局 全局时钟 时钟圈数:单字 全局时钟圈数 FC只读公共全局 全局时钟 时钟圈量:双字 全局时钟每圈毫秒个数量程默认十亿 FC只读公共全局 全局时钟 滤波数量:单字 全局滤波个数等价FOR循环数 FC只读公共全局 用户可设 私有全局变量只读 滤波入点:布尔 待滤波点 FC只读私有全局 待滤波点 超时设置:双字 滤波毫秒差值设置 FC只读私有全局 用户需设 超圈设置:单字 滤波圈数差值设置应付超过277个小时设置 FC只读私有全局 用户需设 私有全局变量读写 滤波出点:布尔 已滤波点 FC读写私有全局 已滤波点 滤波入缓:布尔 滤波入点的上次扫描值 FC读写私有全局 上次缓存 滤波动时:双字 滤波点一到零或零到一切换时的时钟毫秒 FC读写私有全局 用户不管 滤波动圈:单字 滤波点一到零或零到一切换时的时钟圈数 FC读写私有全局 用户不管 私有局部变量只读 滤波循缓:单字 临时缓存纯粹由FOR循环指令机制自身 FOR循环指令负责用户不管 1.3如下图分享绝对时钟源函数:绝对时钟源函数FC注释:建议在1ms中断OB中调用绝对时钟源函数。 1.4相对滤波采用简单的相对时钟详见以下综合例程。滤波延时/阀门超时等这类应用总不会有超过21亿毫秒以上的相对延时需求的,当然也不一定. 终定版布尔量延时滤波(只读数据安排在最后部分)修订验证OK版.PDF .pdf改.Smart后打开. FC包含绝对/相对两种延时功能,均可以提取成库,FC严格遵循局部变量先赋值后使用,同时严格考虑全局传局部,局部返全局的时序. 貌似私有全局只读变量安排在结构体最后部分更合理些,可以减少一次指针加减运算. |