QQ登录

只需一步,快速开始

WINCC的项目函数调用问题

[ 复制链接 ]
WINCC的项目函数调用问题

//共4个PLC外部变量,都是int型。当按钮按下时,将其中的2个移动到另外2个位置。

1、在项目函数中建立一个MOV函数:

#pragma option(mbcs)

Void MOV(int a,int b,int a1,int b1)////////将a1、b1分别移动到a、b

{

int mm,nn;


mm=GetTagWord("a1");

nn=GetTagWord("b1");


SetTagWord("a",mm);

SetTagWord("b",nn);

}

2、在按钮按下的C脚本中编写程序

#include"apdefap.h"

void OnLButtonDown(....)//将wendua,wendub分别移动到wenduA,wenduB

{

int wenduA,wenduB,wena,wendub;//这4个都是wincc的外部变量名。


MOV(wenduA,wenduB,wena,wendub);


}

3、在计算机的属性里,勾选了全局脚本运行系统。


两边都编译通过了,但是检测数据没MOV成功。

请问是哪儿的原因?是不是全局脚本还需要去设定一个什么定时或动作激活运行?还是赋值方式错误?有这方面的基础教材吗?

我这只是按钮动作的函数,不需要周期运行。



-----很明显温度是实数,不是word。费劲巴拉的,直接用vbs:

hmiruntime.tags("wenduA").write hmiruntime.tags("wendua").read

hmiruntime.tags("wenduB").write hmiruntime.tags("wendub").read

两句话搞定了。-


-------楼主C语言基础咋样?参数传递错的一塌糊涂。---


------真细心!赞!

不过,我这只是举例。

在我实际的编程里,变量又长又丑,加上还是3个传给3个,怕大家看起来吃力。所以,我这里就简化了下,方便大家查看。

感觉是楼下的说的参数传递的问题,是吗?


--------确实是整数。

只要能用,倒是不怕麻烦的。

您说的VBS,唉,我还没使用过。还是用C吧,不怕麻烦。




---------刚学的wincc,确实只是新手。

给我具体讲讲吧?倒腾了大半天了,还没成功。


------------我这个赋值参数有大概一千个,一个个地赋值就有大概一千行,代码都超限了。

所以,想设计个函数,一行就可以赋值几个,比如3个,那样代码就不超限了。

我这样建立项目函数的过程是对的吗?


---------主要看变量名,如果是有规律的,用循环语句;如果没规律,用数组,再用循环。

就是先将乱七八糟的变量名,用数组存起来。


------你读写的变量多了,一个个的读写,你的电脑就要累死了!

c用SetTagMultiWait和GetTagMultiWait

vbs就用组。


-------我还是想把这个项目函数的问题解决掉,换了个思路,将外部变量名称直接传给函数,但是脚本里却出现编译错误,这是哪儿错了?



我定义了一个项目函数,这个函数就是专门用来mov的,将三个变量mov到另外三个变量中。

看提示呀!数据类型不匹配!

看提示呀!数据类型不匹配!


--------看提示呀!数据类型不匹配!


------能应该怎么修改呢?

着急解决这个问题哦~~多谢了


------项目函数编译保存了没有,另外形参代入不能用引号,用了引号就不是变量而是字符串常量了


---------我就是把这些变量名称作为字符串,传给函数去处理的。

重新定义了下,脚本和函数都编译没错误,但是结果还是没有。

应该怎么做呢?


--------调用的地方,之前你直接传入字符串是对的,后面定义为变量,但你并没给变量赋值,所以不对。

项目函数里引用变量不能带引号。


--------将项目函数里的所有的双引号去掉。

成功~~~

谢谢您们的指导!这是我学习使用西门子的根本。


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索