技术论坛

[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型

作者 主题
游民

经验值: 133
发帖数: 9
精华帖: 1
主题:[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型


只看楼主 楼主 2021-05-12 10:30:12

为啥要用脚本语言

CTRL 语言是WinCC OA 的内置脚本语言,很容易上手,他的语法跟C语言很相似,但是没有C语言中复杂的指针操作,很多小伙伴会想,为什么WinCC OA 要自己实现一套脚本语言,直接使用C不就得了?


WinCC OA 是使用C/C++作为其核心语言的一款SCADA软件, C/C++语言是编译型语言,性能高,但我们使用这种类型的语言去实现SCADA的时候,会有一些问题,项目中的一丁点修改就需要重新编译,小项目还好,大项目编译起来是非常浪费时间的,尤其是SCADA软件讲究的就是支持工程师快速的修改并实现,这是软件设计中很重要的一个设计原则,依赖倒置原则,简要来说就是我们要将一些容易变化的代码,抽象出来,使整个系统耦合度更松,基于这个WinCC OA 团队基于C++实现了CTRL 语言,让我们非常方便的进行组态,同时CTRL封装了很多软件的专业性技术,使得我们更容易上手


对于语法的学习 建议大家参照官方文档 ,文档中有很详细的说明, 本篇文章主要针对于,日常我们用到的数据类型/结构 做一个简单整理


常用数据类型:

anytype

int

long

float

double

bool

char

string

langString


注:   WinCC OA 中float 与double 是等价的

        langString  用于界面的多语言实现

        anytype 顾名思义 任何类型, 系统会根据上下文做类型推导

 


动态数组 每种基本类型都能衍生出一个动态数组类型



dyn_anytype

dyn_int

dyn_long

dyn_float

dyn_double

dyn_bool

dyn_char

dyn_string

dyn_langString

   


对于数组的操作 WinCC OA 提供了很多函数,大家不妨自己试一下,动态数组是一个日常我们经常用到的数据类型

注:对于数组的遍历,需要注意,OA默认从1开始(大多数语言从0开始),这可能跟工控人员的操作习惯有关

            dyn_string fruitList;

            dynAppend(fruitList,"apple");

            dynAppend(fruitList,"banana");

            dynAppend(fruitList,"orange");

            // 注意遍历操作 从1开始

            for(int i = 1;i<=fruitList.count();i++)

            {

            DebugN(fruitList[i]);

             

            }

  所有的基础数据类型 也有动态二维数组 dyn_dyn_double ,这里就不一 一说明了.      

Mapping

Mapping 直译过来 映射的意思  是一个非常重要的数据结构,简而言之,他就是一个键值对,( 键:就是存的值的编号;值:就是要存放的数据),使用起来就跟查字典差不多,很多书籍也说这是一种字典结构(这里只是笼统的说,实际上根据实现的不同,有很多细分的叫法,这里不详细说明)

对于mapping的使用建议相关函数都要了解

使用WinCC OA 的mapping 数据类型 能够很容易的组织自己的逻辑结构,同时与其他系统交互时mapping数据类型与jsong格式的数据很容易进行转换,便于大家做接口与扩展


/ /这里使用mapping 组织自己的逻辑结构

        mapping OACoder;

        OACoder["name"]="eric";

        OACoder["age"]=18;

        

        mapping address;

        address["city"]="DALIAN";

        address["area"]="HIGH TECH";

        

        OACoder["addr"] = address;


线程操作:
对于一些耗时的任务 我们应该单独封装起来 启用一个单独的线程进程操作

WinCC OA 的多线程操作非常简单

通过startThread()函数 传递需要运行的函数名,就可以完成一个线程的操作


void myFunction()

{

  int a;

  for (a = 0; a < 10; a++)

    DebugN(getThreadId(), a);

}

  

main()

{

  startThread("myFunction");

  startThread("myFunction");

}





WinCC OA 玩家..
以下网友喜欢您的帖子:

  
重要声明:

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

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1695320&b_id=65&s_id=0&pno=

至圣

经验值: 18890
发帖数: 2107
精华帖: 0
回复:[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型


只看楼主 1楼 2021-05-12 11:50:32

楼主有么有,这个脚本语言的手册啊


 
以下网友喜欢您的帖子:

  
至圣

经验值: 23738
发帖数: 3384
精华帖: 52
回复:[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型


只看楼主 2楼 2021-05-12 12:02:47
以下是引用天芯在2021-05-12 11:50:32的发言 >1楼

楼主有么有,这个脚本语言的手册啊

wincc oa 不是西门子针对大客户的吗?   我怕学了也没机会用


不忘初心
以下网友喜欢您的帖子:

  
奇侠

经验值: 5198
发帖数: 637
精华帖: 6
回复:[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型


只看楼主 3楼 2021-06-06 00:10:33
以下是引用锋言锋语在2021-05-12 12:02:47的发言 >2楼

wincc oa 不是西门子针对大客户的吗?   我怕学了也没机会用

以下是引用天芯在2021-05-12 11:50:32的发言 >1楼:楼主有么有,这个脚...

引用1楼详细内容:

楼主有么有,这个脚本语言的手册啊

会有机会的!!!


QQ群592162017,电气绘图、自动化维护交流!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
[WinCC OA 学习分享][六]Ctrl脚本 重要数据类型
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。