有关C脚本的问题 点击:2126 | 回复:5



wincc.5591

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 240回
  • 年度积分:0
  • 历史总积分:397
  • 注册:2005年10月22日
发表于:2006-09-21 14:36:00
楼主
在WinCC中,线段的COLOR属性编了如下C脚本:

#include "apdefap.h"
 long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 2
#define TAG_1 "HOLE_POS_FROM_WHD1_PER"
#define TAG_2 "Zone2"
#define COLOR_1 4227327
#define COLOR_2 CO_YELLOW
#define COLOR_3 16744703
#define COLOR_4 CO_CYAN
#define limit 1

// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

if (((GetTagDWord (TAG_2)) & 0x1) &&  !((GetTagDWord (TAG_2)) & 0x2))
{
static double limitValue[2] = {limit *78,limit*79};
static long value[3] = {COLOR_4,COLOR_1,COLOR_1};
return value[Check_LimitsD (GetTagDouble (TAG_1), 3, &limitValue[0])];
}
if (((GetTagDWord (TAG_2)) & 0x2) &&  !((GetTagDWord (TAG_2)) & 0x1))
{
static double limitValue[2] = {limit *78,limit*79};
static long value[3] = {COLOR_1,COLOR_2,COLOR_2};
return value[Check_LimitsD (GetTagDouble (TAG_1), 3, &limitValue[0])];
}
if (((GetTagDWord (TAG_2)) & 0x1) &&  ((GetTagDWord (TAG_2)) & 0x2))
{
static double limitValue[2] = {limit *78,limit*79};
static long value[3] = {COLOR_2,COLOR_3,COLOR_3};
return value[Check_LimitsD (GetTagDouble (TAG_1), 3, &limitValue[0])];
}
if((GetTagDWord(TAG_2)) & 0x4) 
{
static double limitValue[2] = {limit *78,limit*79};
static long value[3] = {COLOR_3,COLOR_4,COLOR_4};
return value[Check_LimitsD (GetTagDouble (TAG_1), 3, &limitValue[0])];
}
}

那位高手能帮我解释一下,程序中Check_LimitsD 函数是什么意思,他是c标准函数马?我原以为是搞这套程序的工程师编的函数,但在project function中没有找到,有知道的麻烦告诉我一下,谢谢



时代之子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 18回
  • 年度积分:0
  • 历史总积分:63
  • 注册:2004年2月09日
发表于:2007-02-25 17:24:00
1楼
修兄:

你的问题我不会,如果我找到了答案一定回复您,
但我有个类似的问题想请教您:
1
 if ((unsigned long)GetTagDouble ("vacuum39_mode"))
这一句判断什么呢,它没有表达式。

下面这个语句就好理解,就是判断变量"vacuum40"的bit值是否为1“真”,
          if(GetTagBit("vacuum40")==1) 

2 不知哪儿有wincc的C脚本的资料,或者有什么方法可以读懂Wincc的C脚本。

时代之子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 18回
  • 年度积分:0
  • 历史总积分:63
  • 注册:2004年2月09日
发表于:2007-02-25 17:25:00
2楼
另外,我的Email是felixai@163.com

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2007-02-25 20:38:00
3楼
有些函数的说明需要在Wincc的ODK手册上才能找到。
((unsigned long)GetTagDouble ("vacuum39_mode"))
这句不需要表达式,其意义在于执行GetTagDouble 函数,并将函数返回值强制转换为无符号长整形数据,也就是说,如果得到数据,那么就是非零,就可以执行了。其含义和==是一样的,只是省略了而已,你可以理解为((unsigned long)GetTagDouble ("vacuum39_mode"))<>0
看Wincc脚本,你需要具备以下资料以及方法:
1 你需要有Wincc 文档盘以及Wincc ODK手册
2 你需要熟悉微软的MSDN
3 你需要经常访问西门子德国网站阅读非中文资料。

wincc.5591

  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 240回
  • 年度积分:0
  • 历史总积分:397
  • 注册:2005年10月22日
发表于:2007-02-25 21:43:00
4楼
同意yuanle的说法
其实我对c脚本也在学习中,要深入真的太难了,要了解多方面的知识,就像yuanle说的3点

hateyou

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2014年3月31日
发表于:2015-01-17 18:17:28
5楼

楼主好,问题解决了吗?我也想知道

return value[Check_LimitsD (GetTagDouble (TAG_1), 3, &limitValue[0])];这个是什么东西。。

我是菜鸟,QQ是864139733,能向您请假吗?


热门招聘
相关主题

官方公众号

智造工程师