PLC 程序组织单元

PLC 常量 引用 接口 数组 字符串 全局变量 类型转换

IEC 61131-3 定义的 程序组织单元 包括:功能、功能块、程序。这些程序组织单元不应是 递归 的,即对一个程序组织单元的调用不会再次引发对该类型程序组织单元的调用。

功能

功能 :执行后产生一个结果数据元素,和任意数量的输出元素的程序组织单元。

功能结果可以是多值的,即数组或结构。功能不能包含状态信息,即每次同样参数的调用应得到同样的结果。已声明的功能可以在其他程序组织单元中调用。

功能使用示例-ST语言:

VAR X,Y,Z,RES1,RES2 : REAL; EN1,V : BOOL; END_VAR

RES1 := DIV(IN1 := COS(X), IN2 := SIN(Y), ENO => EN1); 
RES2 := MUL (SIN(X), COS(Y));

Z: = ADD(EN := EN1, IN1 := RES1, IN2 := RES2, ENO => V);

PLC 中的变量语法与使用

PLC 引用 数组 作用域 全局变量

PLC语言规约在IEC 61131-3中。本文详述了变量的表示法、变量初始化、变量声明以及使用。

表示法

单元素变量

单元素变量 定义为表示单个基本数据类型数据元素的变量。这部分定义了变量的 符号表示直接表示 (数据元素与可编程控制器输入/输出/存储器结构的物理/逻辑地址的关联)。

单元素变量直接表示 由一个%,一个 地址前缀 ,一个 大小前缀 ,和一个或更多由.分隔的无符号整数组成。

*可用于地址前缀,表示 直接表示 还没有完全指定。变量地址应在 配置VAR_CONFIG...END_VAR 构造内完全指定,否则将产生 错误

位置前缀 含义 地址前缀 含义
I 输入 X/None 单个位
Q 输出 B 字节 (8位)
M 存储器 W 字 (16位)
* 未指定 D 双字 (32位)
    L 长字 (64位)

示例

%QX75 or %Q75   (* 输出的75位 *)
%IW2.5.7.1      (* 在输入的物理/逻辑层级2.5.7.1的字 *)

一个可编程控制器通过分级寻址访问另一个控制器的数据应被视为 语言扩展 。最大级数是 实现相关 的。

PLC 中的字符与直接量

PLC 事件 溢出 编译 字符串

IEC 61131-3 中规约了 PLC 语言字符的使用与数据直接量的语法,本文详述了这两部分。

字符的使用

文本/图形语言 字符集 定义在 ISO-646IRV中,同时有其他字符集的扩展,如 ISO 10646-1 定义的“拉丁-1 补充”。

标识符 是由字母、数字、下划线组成的字符串,并且由字母或下划线开始。

  • 可编程控制器编程语言是大小写不敏感的。
  • 标识符中的下划线是有意义的,然而多个连续的下划线是不允许的。
  • 标识符至少应支持6个字符。

注释 是在程序中引入文本的语言构造,并且对程序的执行没有影响。在可编程控制器语言中,注释的分隔符为(**)

嵌套的注释将被当做 错误

编译指示 是在程序组织单元中引入文本的语言构造,并且可能会对程序执行前的准备产生影响。在可编程控制器语言中,编译指示的分隔符为{}

PLC 中的数据类型

PLC 数组 字符串 函数重载

IEC 61131-3 规约了 PLC 中的数据类型,包括21种基本数据类型(basic datatype)、用于函数重载的泛化数据类型(general datatype)、以及自定义数据类型(derived datatype)。

基本数据类型

编号 关键字 数据类型 长度
1 BOOL 布尔 1
2 SINT 短整数 8
3 INT 整数 16
4 DINT 双精度整数 32
5 LINT 长整数 64
6 USINT 无符号短整数 8
7 UINT 无符号整数 16
8 UDINT 无符号双精度整数 32
9 ULINT 无符号长整数 64
10 REAL 实数 32
11 LREAL 长实数 64
12 TIME 持续时间
13 DATE 如期
14 TIME_OF_DAY/TOD 时间(当日)
15 DATE_AND_TIME/DT 时间与日期
16 STRING 可变长度单字节字符串 8
17 WSTRING 可变长度双字节字符串 16
18 BYTE 长为8的位串 8
19 WORD 长为16的位串 16
20 DWORD 长为32的位串 32
21 LWORD 长为64的位串 64

PLC 概述

PLC SFC 接口 全局变量

IEC 61131-3 规定了可编程控制器编程语言的 语法语义 。这一套统一的编程语言分如下两类:

  1. 两种文本语言。 IL (Instruction List)ST (Structured Text)
  2. 两种图形语言。 LD (Ladder Diagram)FBD (Function Block Diagram)

顺序功能图(SFC)元素 用来结构化描述可编程控制器程序和功能块的内部组织。 配置元素 用来支持将可编程控制器程序安装到可编程控制器系统中。

符合 IEC 61131-3 的可编程控制器程序应满足如下要求:

  1. 对于特定的语言,只使用该标准规定的特性。
  2. 不使用语言的扩展特性。
  3. 不依赖于对 实现相关 的任何特别解释。

Android App 启动过程分析

Android Bash GNU Java Linux PKU Python sed 事件 并行 编译 进程 操作系统 移动开发 过程调用

通过分析和修改Android 源码,分析 Android App 启动过程的时间消耗及性能瓶颈。

本文包括源码编译与运行、源码修改与调试、数据收集与分析。分析了 App 启动过程中, Activity Manager ServiceBinderLauncherMainActivity扮演的角色以及消耗的时间。

源码编译与运行

环境配置

环境要求可以在从 文档 查询得到。以下在Arch Linux中进行Android Source Building的环境配置。

安装依赖

# x86
yaourt -S --needed gcc git gnupg flex bison gperf sdl wxgtk squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt

# x64
yaourt -S --needed gcc-multilib lib32-zlib lib32-ncurses lib32-readline

# Android 工具
yaourt -S android-sdk android-sdk-platform-tools android-sdk-build-tools android-studio

增加交换空间,加 RAM 应达到 16G (另外,还需要 30G 的大小写敏感文件系统可用空间)

su
swapoff /swapfile && rm /swapfile
dd if=/dev/zero of=/swapfile bs=512M count=32
mkswap /swapfile && swapon /swapfile

安装对应版本的工具软件:

# make 3.81-3.82
yaourt -S make-3.81 

# python2
cd /usr/bin && sudo ln -sf python python2

# java SE 1.6
yaourt -S jdk6-compat

环境变量配置:

#!/bin/bash
# file: env.sh

# cache
export USE_CCACHE=1
export CCACHE_DIR=~/.ccache

# output
export OUT_DIR_COMMON_BASE=~/code/androidcore/output

# alias
alias make='make-3.81'

# java6
export JAVA_HOME=/opt/java6
export PATH=/opt/java6/bin:$PATH

配置USB访问权限:

# file: /etc/udev/rules.d/51-android.rules

# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# ...

最终环境

Linux acer 3.13.7-1-ARCH #1 SMP PREEMPT Mon Mar 24 20:06:08 CET 2014 x86_64 GNU/Linux
Python 2.7.6 (default, Feb 26 2014, 12:07:17)
gcc 版本 4.9.0 20140507 (prerelease) (GCC)
GNU Make 3.81
java SE 1.6

IOS软键盘弹出和隐藏

Android Objective-C iOS 事件 操作系统 移动开发

IOS 软键盘的行为是直接由开发者控制的,操作系统只提供很少的管理策略。这造成了很麻烦的问题:

  1. 关闭软键盘也需要编程。
  2. 软键盘造成的界面遮挡需要开发者处理。

当然也有一些好处。在Android中,靠输入法中按键只能提交字符,比如QQ只能先确定输入,再执行发送;而在IOS中,输入法是直接由开发者控制,IOS版QQ可以在软键盘中直接执行发送。

以下记录IOS软键盘编程中一些问题的解决方案。

导航: 上一页 下一页

🔝