【WinCC“脚本”专题】不懂数据类型,又怎能用好C脚本?

WinCC的C脚本的编程语言符合ANSI-C标准,它的数据类型与ANSI-C的数据类型一致。要用好C脚本,当然要对各种数据类型了然于胸了。

一、ANSI-C数据类型

所谓"数据类型"是按照所定义的变量的性质、表示形式、所占据的存储空间等特点来划分的。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,如图1所示。

1、基本数据类型

祝贺已超 1 万工控人加入 PLC 工业自动化精 英群

"基本数据类型"的值不可以再分解为其他类型,它包括:整型、实型、字符型和枚举类型。其中实型数据又分为单精度浮点数类型和双精度浮点数类型。

在基本数据类型中,其前面可以有"修饰符",使其更准确的适应各种情况的需求,修饰符如下:

  • signed:有符号

  • unsigned:无符号

  • long:长型符

  • short:短型符

其中,所有上述4中修饰符均可以修饰字符型和整型两种基本类型,而long还可以用于double型。C中根据ANSI标准而组合的数据类型的字长和取值范围,如下表所示。

若干注意事项:

(1)整型数默认是有符号的,所以int、short、long int定义的变量为有符号整型数,其前面的signed可以省略;

(2)为了使用方便,C编译程序允许使用如下的整型简写形式:

  • short int 简写为:short

  • long int 简写为:long

  • unsigned short int简写为:unsigned short

  • unsigned int简写为:unsigned

  • unsigned long int简写为:unsigned long

2、构造类型

在C语言中,构造数据类型包括数组类型、结构类型和联合类型。构造数据类型采用基本数据类型来构造一个新的数据类型。一个构造类型的数据可以分解成若干个"成员",每个"成员"都是一个基本数据类型或已定义的构造类型。

3、指针类型

指针是一种特殊的数据类型,其值用来表示某个变量在内存中的地址。指针是C语言中非常重要的一部分,是C语言的精华。

4、空类型

空类型一般以void来声明,主要用在没有返回值的函数声明中。一般来说,C语言中的函数都需要向调用者返回一个函数值,这个返回的值具有一定的数据类型。如果函数没有返回值,那么也不能不指定数据类型,而需要设置为空类型。

二、WinCC脚本中变量的声明和使用

在WinCC的C脚本中,声明和使用变量的方法和其他C语言开发环境下是类似的。

1、局部变量的声明和使用

在"函数"或"动作"的函数体内部定义的变量即为局部变量,如图2所示。它们的生命周期只局限于定义它们的函数体内。

局部变量的声明和使用规则和其他C语言开发环境一样,由"类型+变量名"构成。以图2为例,分别定义了整型数组a[5]、短整型i、字符型a1、无符号整型m等。

2、全局变量的使用

全局C变量定义在函数的"函数名"前,运行系统中的每一个函数和动作都能访问全局C变量。

全局C变量在某一个函数的"函数名"前定义,如图3所示。若要在其他"函数"或"动作"中访问该全局变量,则首先要用关键字"extern"声明它,然后就能够正常使用该变量了(编译时不会发生编译错误)。

全局变量只能在一个地方定义,且当其值发生变化时,所有访问到它的函数和动作都能识别到其变化。

三、WinCC变量和C脚本变量的关系

WinCC的变量即定义在"变量管理器"中的变量,它的变量数据类型如图4所示。除了"原始数据类型"和"文本参考"数据类型外,其他数据类型都能与C语言的基本数据类型找到对应。

C脚本中,经常要读写WinCC的变量,可调用"内部函数"的"tag"目录下的函数来实现,如图5所示。

图5中,通过调用函数"GetTagWord"将WinCC变量"X坐标"读入并赋值个C脚本的变量"i",经过运算后,在将"i"的值通过函数"SetTagWord"写入WinCC变量"X坐标"中。

在应用中,需要注意C脚本变量的数据类型要和所访问的WinCC变量的数据类型要尽量一致,且调用对应类型的set或get函数。以图5为例,WinCC变量"X坐标"的数据类型为无符号16位数,则应将C脚本中的"i"声明为"unsigned"类型,且应调用"Word"类型的set或get函数。

祝贺已超 1 万工控人加入 PLC 工业自动化精 英群

文章来自网络,已找不到原创,侵权立删

西门子TIA博途

1.S7-PLCSIM Advanced使用入门

2.使用PLCSIM Advanced仿真博途PID

3.使用PLCSIM Advanced仿真博途Modbus_TCP

4.使用PLCSIM Advanced仿真博途S7-1500 OPC UA

西门子TIA博途SCL学习

1.西门子PLC用TIA博途SCL语言写的一个产生随机实数的指令块(学习1)

2.TIA博途SCL编程学习2_sin(x)

3.TIA博途SCL编程学习3_两个数的计算器

4.TIA博途SCL编程学习4_选择法排序

5.TIA博途SCL编程学习5_一串数字的加法

6.TIA博途SCL编程学习6_数组逆序

7.西门子TIA博途S7-1200/1500学习7间接寻址指令PEEK的使用

8.TIA博途SCL编程学习8_计算N天后的日期

9.TIA博途SCL编程学习9_百鸡百钱

10.TIA博途SCL编程学习10_字符串日期转换成DATE数据类型

11.TIA博途SCL编程学习11_多条件与运算

12.TIA博途SCL编程学习12_数组求和两种算法比较

13.TIA博途SCL编程学习13_电机正反转加点动

14.TIA博途SCL编程学习14_填表格

15.TIA博途SCL编程学习15_素数判断

16.TIA博途SCL编程学习16_歌德巴赫猜想验证

17.TIA博途SCL编程学习17_选择法排序

18.TIA博途SCL编程学习19_分数段人数统计

19.TIA博途SCL编程学习19_分数段人数统计

20.TIA博途SCL编程学习20_换钱

21.TIA博途SCL编程学习21_4个数字中的3个数字的排列组合

22.TIA博途SCL编程学习22_奖金计算

23.TIA博途SCL编程学习23_求最大公约数和最小公倍数

24.TIA博途SCL编程学习24_一串数字的加法

25.TIA博途SCL编程学习25_找出1-1000之间的完数

26.TIA博途SCL编程学习26_小球反弹高度

27.TIA博途SCL编程学习27_猴子吃桃

28.TIA博途SCL编程学习28_一个分数序列加法

29.TIA博途SCL编程学习29_五位数分解

30.TIA博途SCL编程学习30_捡鸡蛋

31.TIA博途SCL编程学习31_HelloWorld

32.TIA博途SCL编程学习32_幂

33.TIA博途SCL编程学习33_水仙花数

34.TIA博途SCL编程学习34_完数

35.TIA博途SCL编程学习35_另类比大小

36.TIA博途SCL编程学习36_自然数反转

37.TIA博途SCL编程学习37_数字加密

38.TIA博途SCL编程学习38_三种方法求最大公约数

39.TIA博途SCL编程学习39_友好数

40.TIA博途SCL编程学习40_平方回文数

41.TIA博途SCL编程学习40_斐波那契数列

42.TIA博途SCL编程学习41_大数乘法

43.TIA博途SCL编程学习42_三位数的组合

44.TIA博途SCL编程学习43_新娘和新郎

45.TIA博途SCL编程学习44_韩信点兵

46.TIA博途SCL编程学习45_过桥问题

47.TIA博途SCL编程学习46_分鱼问题

48.TIA博途SCL编程学习47_跳跃游戏

49.TIA博途SCL编程学习47_狼追兔子

50.TIA博途SCL编程学习50_扑克牌顺子判断

51.TIA博途SCL编程学习51_邮票组合

52.博途SCL编程实例泵顺启逆停的状态机

53.TIA博途SCL编程学习52_邮票组合抓捕交通肇事犯

54.TIA博途SCL编程学习53_求车速

55.TIA博途SCL编程学习54_公式法计算圆周率(Π的近似值)

WinCC中的画面模板应用实例及其组态实现方法

罗克韦尔AB软件学习视频下载

WinCC 输入/输出域没有所需要的预定义输出格式该怎么办?

在WinCC中如何使用VBS读取变量归档数据到EXCEL

西门子S7-1500作为智能设备共享功能

WinCC冗余项目使用

S7-1500 和S7-400 S7双边通信(TIA博途和STEP7)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432354.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux运维:在线/离线安装Telnet客户端和Telnet服务

Linux运维:在线/离线安装Telnet客户端和Telnet服务 前言1.1 在线安装Telnet1.2 离线安装Telnet1.3 Telnet服务有关的命令 💖The Begin💖点点关注,收藏不迷路💖 前言 Telnet是一种用于远程登录到其他计算机的协议&…

Application

1.Application的生命周期 自定义Application package com.tiger.chapter06;import android.app.Application; import android.content.res.Configuration; import android.util.Log;import androidx.annotation.NonNull;public class MyApplication extends Application {//在…

OWASP Top 10 网络安全10大漏洞——A01:2021-访问控制中断

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。 A01:2021-访问控制中断 从第五位上升到top1,94%的应用程序都经过了某种形式的访问控制破坏测试,平均发生率为 3.81%且在贡献的…

《 前端 vs. 后端:挑战与机遇的对决》

前言 前端开发和后端开发是构建网站、应用程序和其他软件的两个主要方面。它们各自负责不同的任务和功能。 前端开发: 定义:前端开发是指构建用户直接与之交互的网站或应用程序的过程。前端开发主要关注于用户界面和用户体验。技术栈:前端开发通常涉及使用 HTML、CSS 和 Ja…

吴恩达深度学习笔记:深度学习引言1.1-1.6

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第一周:深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络?(What is a Neural Network) 第一门课:神经网络和深度学习 (Ne…

数据结构学习(四)高级数据结构

高级数据结构 1. 概念 之所以称它们为高级的数据结构,是因为它们的实现要比那些常用的数据结构要复杂很多,能够让我们在处理复杂问题的过程中, 多拥有一把利器,同时掌握好它们的性质,以及所适应的场合,在…

android开发者工具,最新整理

一 Java相关 1.重载函数的签名(区别是否是重载函数) 答:方法名参数类型参数顺序(返回值不是) 2.finalize的工作原理 答:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中&#…

从零开始手写RPC框架(5)

继续上一节的内容,解析代码。 目录 编码器注册中心负载均衡策略动态代理屏蔽网络传输细节通过spring注解注册/消费服务 编码器 参考LengthFieldBasedFrameDecoder解码器的协议,在协议里规定传输哪些类型的数据, 以及每一种类型的数据应该占多…

CSS字体样式值,精通web前端开发

html 1,浏览器存储的方式有哪些 2,如何解决跨域的? 3,浏览器 cookie 和 session 的认识。 4,输入URL发生什么? 5,浏览器渲染的步骤 6,页面渲染优化 7,强制缓存和协商缓存…

Docker发布镜像(DockerHub,阿里云)

目录 1、发布到DockerHub上 2、发布到阿里云镜像服务上 小结 1、发布到DockerHub上 1.地址https://hub.docker.com/注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交自己的镜像 [rootwq test]# docker login --helpUsage: docker login [OPTIONS] [SERVER]Log in…

Nvm下载安装和基本使用

下载与安装 github地址:Releases coreybutler/nvm-windows (github.com) 默认安装:安装nvm时候,全默认即可(如果自定义目录,切记 nvm的安装路径 :不要有汉字,不要有空格,不然后面会…

单片机为什么需要时钟?2种时钟电路对比?

目录 一、晶体振荡器(Crystal Oscillator)的核心知识 二、单片机为什么需要时钟电路? 三、单片机的时钟电路方案 01、外部晶振方案 02、内部晶振方案 四、总结 单片机研发设计的项目中,它的最小电路系统包含 电源电路复位…

动态规划(算法竞赛、蓝桥杯)--状态压缩DP蒙德里安的梦想

1、B站视频链接&#xff1a;E31 状态压缩DP 蒙德里安的梦想_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N12,M1<<N; bool st[N];//st[i]存储合并列的状态i是否合法 long long f[N][M];//f[i][j]表示摆放第i列&#xff0c;状态为…

第四节 JDBC简单示例代码

本文章教程中将演示如何创建一个简单的JDBC应用程序的示例。 这将显示如何打开数据库连接&#xff0c;执行SQL查询并显示结果。 这个示例代码中涉及所有步骤&#xff0c;一些步骤将在本教程的后续章节中进行说明。 创建JDBC应用程序 构建JDBC应用程序涉及以下六个步骤 - 导…

Python 全栈系列232 再次搭建RabbitMQ

说明 最近想重新上RabbitMQ&#xff0c;主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下&#xff0c;还是觉得RabbitMQ好一些。 在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章&#xff0c;觉得其实想法一直没变过。 Python - 装机系列24 消息…

Redis之事务(详细解析)

请直接看原文:不能回滚的Redis事务还能用吗 - 知乎 (zhihu.com) ------------------------------------------------------------------------------------------------------------------------------ 1、Redis事务的概念&#xff1a; Redis 事务的本质是一组命令的集合。…

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)

项目简介 本项目致力于探索和实现一种高度集成的机器人系统&#xff0c;旨在通过结合现代机器人操作系统&#xff08;ROS&#xff09;和先进的硬件组件&#xff0c;解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车&#xff0c;它具备自主导航…

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题&#xff0c;无论怎么修改&#xff0c;linux 分区老显示满&#xff0c;Use 100%&#xff0c;全部沾满。如下图的oem分区。 二、导致出现上面的原因是&#xff1a;SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…

Linux笔记--make

使用上一节的 main.c、add.c、sub.c文件进行编译&#xff0c;编译的过程有很多步骤&#xff0c;如果要重新编译&#xff0c;还需要再重来一遍&#xff0c;能不能一步完成这些步骤?将这些步骤写到makefile文件中&#xff0c;通过make工具进行编译 一个工程中的源文件不计其数&a…

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统 获取源码——》公主号&#xff1a;计算机专业毕设大全