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 Linux 事件 进程 操作系统

通过分析和修改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 软键盘弹出和隐藏

Objective-C iOS 事件

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

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

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

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

SQL 命令手册

MySQL SQL 引用 排序 字符串 数据库

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。有些命令不同的RDBMS中不一致,以MySQL为例。

关系数据模型

数据库

本文给出了关系数据模型中各部分的定义,以及模型中存在的约束。 接着给出在该模型上的关系代数及其演算。

概念建模与数据库设计

SQL 排序 磁盘 集合 数据库

数据库概述

数据库与DBMS软件构成 数据库系统,为一组用户提供服务,称为 幕前角色 (数据库管理员、设计者、最终用户、系统分析员、应用程序员)。除了数据库用户,还有 幕后工作者 (DBMS系统设计者、实现者、工具开发者、操作和维护人员)提供支持。

数据模型包括三部分:高层的概念数据模型、低层的物理数据模型、之间的表示数据模型。

数据库三层模式体系结构:内层为内模式,描述物理存储结构;概念层为概念模式,描述数据库结构;外层/视图层为外模式/用户视图,描述特定用户感兴趣的一部分数据库。

SDL(storage definition language)定义内模式,VDL(view definition language)定义外模式,DDL(data definition language)定义定义概念模式,而DML(data manipulation language)定义了数据操纵的集合。SQL(structed query language)是一种综合性的关系数据库语言,包括DDL, VDL和DML语言的功能。

DML有两种类型。高层的非过程DML,是面向集合的(set-oriented,set-at-a-time),属于描述性的语言;低层的DML是面向过程的(record-at-a-time)。交互式的DML称为 查询语言

DBMS的组建模块如下图: dbms components

在DBMS的客户机-服务器体系结构中,客户机与查询服务器(事务服务器、SQL服务器)之间首先建立ODBC(open database connectivity),它提供了一组API。(存在面向java的JDBC标准)。

数据模型有多种:关系数据模型、对象数据模型、分层数据模型、网状数据模型。基于这些数据模型,可以把DBMS分为:关系模型、对象数据模型、对象-关系数据模型、层次数据模型、网状数据模型。

上一页 下一页