恩,好的。感谢Zane班的提醒,其实我认为坛友们在技术交流的时候都应该温和一些、没有必要激进!我肯定不愿意跟任何人吵架!和气生才、和气生财,呵呵.........
我觉得用OB3x来做谐波函数发生器没有必要,没有必要动用循环中断!
楼主的疑惑,很难准确给它建立一个数学模型,我上面的数学模型只是举了一个例子。前段时间有位坛友提过类似问题,如下:
-------------------------------------------------------------------------------------------------------------------------------------------------
http://www.ad.siemens.com.cn/club/bbs/post.aspx?myreply=1&b_id=4&a_id=900683&s_id=26&num=12#anch此贴可见!
[quote]
以下是引用lightroat在2011-09-08 09:29:38的发言:多谢各位
1、关于模拟量。据个例子说假如当前模拟量输出为8v,在10s钟内将模拟量输出有8v平滑下降为2v,如何实现这个功能?
-------------------------------------------------------------------------------------------------------------------------------------------------
我也去思考了,一开始也是想用OB3x循环中断的方式来处理,后来仔细考虑过后,我认为用#OB1_PREV_CYCLE累计时间来做跟灵活一些,不需要准确计算每次的增减量,因为OB1的扫描周期是在变化的,如果OB3x循环中断的周期大于扫描周期,那么斜波函数就没有用#OB1_PREV_CYCLE的方式来的平滑,像类似的算法并非要放到复杂的循环中断里面去处理,在OB1下面的任何地方都可以做处理!那么对上面这个具体的例子,我的数学模型和算法是这样的:
[quote]
以下是引用n次看你的背影在2011-09-08 10:07:00的发言:楼主,给你提供一些参考思路:
1、"在10s钟内将模拟量输出有8v平滑下降为2v",这个就要写点代码了。首先要有一个条件来触发执行这个算法功能;如果这条斜线尽量要平滑的话,你可以写一个类似的数学表达式V=(8000.0-0.6Tadd)/1000.0,可以用#OB1_PREV_CYCLE这个变量,条件触发开始对每个周期累计#OB1_PREV_CYCLE这个值存放到Tadd,当这个累计时间等于大于10000ms时,结束这个条件,并结束这个算法功能。程序设计思路和数学模型有了,代码我就不写了,楼主你自己写代码吧!