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

已锁定

OAplayer

  • 帖子

    9
  • 精华

    1
  • 被关注

    26

论坛等级:游民

注册时间:2018-06-14

普通 普通 如何晋级?

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

1127

3

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 学习分享][六]Ctrl脚本 重要数据类型 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC OA (原PVSS)

共有340条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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