技术论坛

200smart的多段曲线程序

作者 主题
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
主题:200smart的多段曲线程序
精华帖精华帖星级2级 推荐帖


只看楼主 只看精华 楼主 2017-10-11 15:02:59

http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1390941&b_id=66&b_sid=0&s_id=88&num=23&myreply=1#anch

在TIA V14 SP1的更新中,多段曲线的已经被做成指令了(PolyLine)

多段曲线在过程控制中很有用,可以将计划曲线与实际曲线进行比对,200smart没有多段曲线库,自己编写了一个,先说一下逻辑:

1,将界面中的配方通过直线插补运算,把曲线数值存储到以VB100为起始地址的存储区(instances);

2,设置初始点Y坐标为VD2,默认初始点的X坐标为0;(如VD2=25.0℃)

3,设置第一点Y坐标为VD6,X坐标(相对初始点)为VW10;(如VD6=75.0℃,VW10=12时间单位)

4,设置第二点Y坐标为VD12,X坐标(相对第一点)为VW16;(如VD12=100.0℃,VW16=15时间单位)

5,设置第三点Y坐标为VD18,X坐标(相对第一点)为VW22;(如VD18=115.0℃,VW22=10时间单位)

……本例最多可设置8段曲线,如果需要16段曲线,只需将字节移位改为字移位即可;

6,配方设置完成,置位按钮M0.0,启动插补运算,每个扫描周期处理一段曲线,以平均分配CPU资源。





置位M0.0后,观察VD100以后的连续存储区,曲线数据已经按配方运算完成,逻辑正确。

其实也就是逻辑正确,要做成库块,还得把全局变量换成in_out接口,也是接触200编程不久,还在熟悉中,有一点点体会就赶紧记录下来,怕久不久不用又忘了。


大道至简,知易行难
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1429593&b_id=64&s_id=0&num=16

至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 1楼 2017-10-11 18:32:12

期待你可以把曲线通过通讯写进去仪表或者伺服驱动器的凸轮曲线里头。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 楼主 2楼 2017-10-12 15:09:30

其实,不论是过程控制,或是运动控制,直线插补都不如S形曲线圆滑,N个线段都不如一条S形曲线来得优美!

刚刚在excel中模拟了S形曲线的算法:

Y=a+b/(1+e^-X)

它一样可以在200程序中实现,敬请期待!



大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 3楼 2017-10-12 17:20:39

你这个“直线插补”是不是指插值?已知的坐标上的两个点,按照线性规律,从一个坐标求出另外一个坐标。从程序里我没看出来。

如果是两点式线性插值,我有库程序做好的哦。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 楼主 4楼 2017-10-12 23:59:22
以下是引用芳季在2017-10-12 17:20:39的发言 >3楼

你这个“直线插补”是不是指插值?已知的坐标上的两个点,按照线性规律,从一个坐标求出另外一个坐标。从程序里我没看出来。

如果是两点式线性插值,我有库程序做好的哦。

是的,就是知道两点的坐标,把这两点之间的数据补“全”。这个全是相对的,线仍然是由点构成的。

它有个正式的名称,就叫插补。

我的这个程序每一个插补数值都是相对于前一个数值的迭加,而不是相对于原点的计算。

for指令应该放在子程序第二段的第三行,虽然放在第一行不影响逻辑,但循环体多了两行不需要循环的指令,所以逻辑上还不够清晰,影响阅读。反正语句不多,照着写一个,运行一下,就知道效果了!

芳侠有做好的了?我搜搜看看,也学习一下。




大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 5楼 2017-10-13 00:16:34
以下是引用看雪001在2017-10-12 23:59:22的发言 >

是的,就是知道两点的坐标,把这两点之间的数据补“全”。这个全是相对的,线仍然是由点构成的。

它有个正式的名称,就叫插补。

我的这个程序每一个插补数值都是相对于前一个数值的迭加,而不是相对于原点的计算。

for指令应该放在子程序第二段的第三行,虽然放在第一行不影响逻辑,但循环体多了两行不需要循环的指令,所以逻辑上还不够清晰,影响阅读。反正语句不多,照着写一个,运行一下,就知道效果了!

芳侠有做好的了?我搜搜看看,也学习一下。



哦。这个好像我还没上上。正在试验。其实也只是线性转换。官方库没有对双整数的插值,而我很多使用的都是双整数,所以自己做。

主要用途是对两个相邻时间点采样的轴位置,之间的某一指定时刻,估算其位置值。

例如相隔10毫秒采样到两个轴位置为400和440。当有一个中断发生并测量到时间戳是在这两次采样之间的第3毫秒。那么,这时候轴位置应该是……估计是413。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 楼主 6楼 2017-10-13 09:45:21
以下是引用芳季在2017-10-13 00:16:34的发言 >

哦。这个好像我还没上上。正在试验。其实也只是线性转换。官方库没有对双整数的插值,而我很多使用的都是双整数,所以自己做。

主要用途是对两个相邻时间点采样的轴位置,之间的某一指定时刻,估算其位置值。

例如相隔10毫秒采样到两个轴位置为400和440。当有一个中断发生并测量到时间戳是在这两次采样之间的第3毫秒。那么,这时候轴位置应该是……估计是413。

我此前一直是使用300编程,也是没有多段曲线功能,于是就自己编写了一个,这个200的是移植了以前的思路,只是编程平台发生了改变而已,效果如下:

实际运行情况:

温度和压力的计划曲线和行动曲线基本是一致的,执行算是精准的了,这样看起来直观!



大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 楼主 7楼 2017-10-13 11:17:23

在论坛旅行久了,有时会觉得自己活在浩淼的宇宙中,只看到亿万年前另一个星球发来的光,星球之间的距离以光年计算,霍金说不要轻易回应外来星球的声音(以免暴露了自己星球的坐标而遭到宇宙攻击),黑暗森林法则存在于宇宙间。



大道至简,知易行难
以下网友喜欢您的帖子:

  
奇侠

经验值: 5313
发帖数: 617
精华帖: 0
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 8楼 2017-10-13 12:09:02

谢谢分享,已收藏。


决不为短期利益而牺牲未来
以下网友喜欢您的帖子:

  
至圣

经验值: 18073
发帖数: 1524
精华帖: 2
回复:200smart的多段曲线程序
推荐帖


只看楼主 只看精华 9楼 2017-10-13 13:56:47

分享的帖子越来越多,高手都藏有民间。


我回来了!继续努力!
以下网友喜欢您的帖子:

  
游民

经验值: 96
发帖数: 7
精华帖: 0
回复:200smart的多段曲线程序


只看楼主 只看精华 11楼 2017-10-25 16:11:12

您好,前辈,关于200smart的多段线功能,控制温度和压力的,您可以不可以给详细的指点一下啊,您发的图上看,比温度仪表的pid功能都差不多了


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序


只看楼主 只看精华 楼主 12楼 2017-10-25 19:41:07

论坛里都有资料的,兴趣和勤奋才是值得信赖的“前辈”,学习没有捷径,不可能一蹴而就,关键靠自己!

搞个人崇拜,最终的结果是斑竹吃老虎,我很愿意同爱学习的同行在此交流,有一说一。


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 76199
发帖数: 19143
精华帖: 378
回复:200smart的多段曲线程序


只看楼主 只看精华 13楼 2017-10-31 00:58:49
以下是引用芳季在2017-10-11 18:32:12的发言 >1楼

期待你可以把曲线通过通讯写进去仪表或者伺服驱动器的凸轮曲线里头。

西门子只有DP和PN可以做,其他的就别想了,不同步,怎样的时间差才可以忽略不计?


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 76199
发帖数: 19143
精华帖: 378
回复:200smart的多段曲线程序


只看楼主 只看精华 14楼 2017-10-31 01:02:16
以下是引用看雪001在2017-10-12 23:59:22的发言 >4楼

是的,就是知道两点的坐标,把这两点之间的数据补“全”。这个全是相对的,线仍然是由点构成的。

它有个正式的名称,就叫插补。

我的这个程序每一个插补数值都是相对于前一个数值的迭加,而不是相对于原点的计算。

for指令应该放在子程序第二段的第三行,虽然放在第一行不影响逻辑,但循环体多了两行不需要循环的指令,所以逻辑上还不够清晰,影响阅读。反正语句不多,照着写一个,运行一下,就知道效果了!

芳侠有做好的了?我搜搜看看,也学习一下。



以下是引用芳季在2017-10-12 17:20:39的发言 >3楼:你这个“直线插补”...

引用3楼详细内容:

你这个“直线插补”是不是指插值?已知的坐标上的两个点,按照线性规律,从一个坐标求出另外一个坐标。从程序里我没看出来。

如果是两点式线性插值,我有库程序做好的哦。

这个程序思路我认为是有问题的,增量计算没问题,但循环体是有问题的。


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 76199
发帖数: 19143
精华帖: 378
回复:200smart的多段曲线程序


只看楼主 只看精华 15楼 2017-10-31 01:06:32

直线插补和任意函数插补有什么区别?


前者是后者的一个特例而已


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 19407
发帖数: 2077
精华帖: 73
回复:200smart的多段曲线程序


只看楼主 只看精华 楼主 16楼 2018-07-12 08:21:40


看看香港飞大连的航班高度与速度记录曲线


大道至简,知易行难
以下网友喜欢您的帖子:

  
奇侠

经验值: 9086
发帖数: 2334
精华帖: 30
回复:200smart的多段曲线程序


只看楼主 只看精华 17楼 2018-07-12 08:32:26

多段曲线不平滑,插补算法不是这样子的。需要考虑前后线段的斜率。


学习ing!学习!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
200smart的多段曲线程序
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。