回复:在WINCC如何控制一个控件以某一点为圆心按指定半径做圆周运动

n次看你的背影

  • 帖子

    2321
  • 精华

    73
  • 被关注

    53

论坛等级:奇侠

注册时间:2008-03-11

普通 普通 如何晋级?

发布于 2012-11-09 21:17:07

2楼

也是出于兴趣,按照斑竹思想,写了点脚本测试了一下,对象的角度a如果是(0-360),激活后对象的x,y坐标会乱跑。后来又理解分析了一下cos()和sin()函数,终于明白斑竹的思想是正确的,(0-360)应该化成(0-2π=0-6.283)的弧度值,后来再测试了一下,呵呵,结果对了。也许楼主可以参考一下:
1、组态图



2、x坐标的脚本
#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
static int x=500; //对象的x坐标的静态值
static float a=0; //对象的弧度静态值
int r=100 ; //对象的旋转半径,可以用变量来赋值

if (a<628300) { a+=12566; } //inc 2% , 一个圆周等于2π=6.283,扩大10万倍换成整数进行比较
if (a>=628300) { a=0; } //back ,当弧度数等于2π时,赋初始值

SetTagFloat("a",a/100000); //把当前的弧度数赋给内部变量a,给Y坐标使用
x=500+r*cos(a/100000); //计算对象x坐标值,
SetTagDWord("X",x); //把对象当前x坐标的值赋给内部变量X,在画面上显示

return x; //返回对象当期的x坐标
}

3、y坐标的脚本
#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
static int y=200; //对象的x坐标的静态值
float a; //中间变量
int r=100; //对象的旋转半径,可以用变量来赋值

a=GetTagFloat("a"); //读取把当前的弧度数赋给变量中间a
y=200+r*sin(a); //计算对象x坐标值,
SetTagDWord("Y",y); //把对象当前x坐标的值赋给内部变量X,在画面上显示

return y; //返回对象当期的x坐标
}

圆周运动动画视频录像
点击此处查看附件
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32643条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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