PLC
数组
字符串
函数重载
06/09 2014
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
SFC
接口
全局变量
06/01 2014
IEC 61131-3 规定了可编程控制器编程语言的 语法 和 语义 。这一套统一的编程语言分如下两类:
两种文本语言。 IL (Instruction List) 和 ST (Structured Text)
两种图形语言。 LD (Ladder Diagram) 和 FBD (Function Block Diagram)
顺序功能图(SFC)元素 用来结构化描述可编程控制器程序和功能块的内部组织。
配置元素 用来支持将可编程控制器程序安装到可编程控制器系统中。
符合 IEC 61131-3 的可编程控制器程序应满足如下要求:
对于特定的语言,只使用该标准规定的特性。
不使用语言的扩展特性。
不依赖于对 实现相关 的任何特别解释。
Android
Linux
事件
进程
操作系统
05/27 2014
通过分析和修改Android 源码,分析 Android App 启动过程的时间消耗及性能瓶颈。
本文包括源码编译与运行、源码修改与调试、数据收集与分析。分析了 App 启动过程中, Activity Manager Service
、Binder
、Launcher
和MainActivity
扮演的角色以及消耗的时间。
源码编译与运行
环境配置
环境要求可以在从 文档 查询得到。以下在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
Objective-C
iOS
事件
05/25 2014
IOS 软键盘的行为是直接由开发者控制的,操作系统只提供很少的管理策略。这造成了很麻烦的问题:
关闭软键盘也需要编程。
软键盘造成的界面遮挡需要开发者处理。
当然也有一些好处。在Android中,靠输入法中按键只能提交字符,比如QQ只能先确定输入,再执行发送;而在IOS中,输入法是直接由开发者控制,IOS版QQ可以在软键盘中直接执行发送。
以下记录IOS软键盘编程中一些问题的解决方案。
MySQL
SQL
引用
排序
字符串
数据库
05/13 2014
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。有些命令不同的RDBMS中不一致,以MySQL为例。
数据库
05/12 2014
本文给出了关系数据模型中各部分的定义,以及模型中存在的约束。
接着给出在该模型上的关系代数及其演算。
SQL
排序
磁盘
集合
数据库
05/11 2014
数据库概述
数据库与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的客户机-服务器体系结构中,客户机与查询服务器(事务服务器、SQL服务器)之间首先建立ODBC(open database connectivity),它提供了一组API。(存在面向java的JDBC标准)。
数据模型有多种:关系数据模型、对象数据模型、分层数据模型、网状数据模型。基于这些数据模型,可以把DBMS分为:关系模型、对象数据模型、对象-关系数据模型、层次数据模型、网状数据模型。