一、PLC基础
- PLC的5种编程语言标准:SFC(Sequential Flow Chart,顺序流程图)、ST(Structure Text,结构化文本)、FBD(Function Block Diagram,功能块图)、LD(Ladder Diagram,梯形图)和 IL(Instruction List,指令表)。
- IEC61131-3技术标准:
graph LR
A[IEC61131-3] --> B(公共元素)
A[IEC61131-3] --> C(编程语言)
B --> D(软件模型)
B --> E(程序组织单元)
B --> F(编程模型)
B --> 数据外部表示
B --> 变量
B --> SFC
D --> 配置Configration
D --> 资源Resource
D --> 任务Task
D --> 存取路径Access Path
D --> 全局变量Global Variable
E --> 函数Function
E --> 功能块Function Block
E --> 程序Program
C --> G(文本编程语言)
C --> H(图像编程语言)
G --> 结构化文本ST
G --> 指令表IL
H --> 梯形图LD
H --> 功能块图FBD
- PLC特别是在多任务条件下的采样,存在着很大的抖动(Jitter)和不确定性。
- 整型变量限定值域:
<变量名>: 整形类型(<下限>..<上限>);
VAR
nSTATE:INT(0..1023);
END_VAR
- 常数表示:
<类型>#<数值>
2#1001_1100 //二进制表示法
- 普通变量定义:
<标识符>:<数据类型>:=<初始值>
7.选择类操作:
Result:=SEL(G,IN0,IN1); //G=0,输出IN0,;G=1,输出IN1
Result:=LIMIT(Min,IN,Max); //对输入变量IN进行上下限幅。
- 比较类操作:
= 等于
<> 不等于
>= 大于等于
二、SFC编程
- SFC语言的基本构成概念是“步”和“转移”。
graph TD
Init --> |trans0 转移条件0| Step0
Step0 --> |trans1 转移条件1| Step1
- 动作限定符:在“步”的“动作”区域之间插入一些特定的符号,约定当一个步激活的时候,这些符号后面的那些动作如何执行。其中“动作”指的是步的行为。
三、ST编程
- 事实上,采用SFC和ST进行搭配编程在产品开发中很有效,SFC用于构建软件的逻辑框架,而ST则用于描述各种具体的实现。
四、面向对象的PLC编程技术
- THIS和SUPER指针主要应用于功能块的拓展和继承。
- 接口是一种数据结构,将功能块的方法和属性等函数的原型集合起来
- 进行流水灯的设计实现
五、OpenPLC开发
stage4详解
- 调用stage4函数,输入参数为symbol_c类型的tree_root和const char* 类型的builddir
- 调用new_code_generator函数,输入参数为stage4out_c类型变量s4o的地址和const char* 类型的builddir,输出为visitor_c* 类型的变量generate_code
六、matiec源码编译
编译流程
- IDE编写SFC和ST混合程序,生成XML文件,然后调用xml2st龚俊将xml文件转为ST文件plc.st
- 将plc.st输入matiec,输出一系列C文件
- 通过服务器139中/root/.zeranoe/mingw-w64/x86_64/bin/路径下的交叉编译工具链将上述C文件编译成一个so文件
- 该so文件下载到runtime进行运行
matiec原理
- iec2c编译程序生成标准C代码,并且C代码与输入的IEC 61131-3代码一致
- iec2iec编译程序生成与输入的IEC 61131-3代码一致的IEC 61131-3代码
- 可以通过
$./configure; make来编译/生成这些编译程序 - 编译工作的各个阶段:
- 阶段1 词法分析 由stage1_2/iec_flex.ll完成
- 阶段2 语法解析 由stage1_2/iec_bison.yy完成
- 阶段3 词义分析 开源代码目前只做到类型检查
- 阶段4 代码生成 生成ANSI C代码
- 阶段5 Bin代码生成 未集成到matiec编译器中。必须由用户显式调用
- gcc语法树的缺陷:gcc语法树没有很好的文档记录,对这棵树进行语义检查可能是噩梦
Flex和Bison(词法分析和语法分析)
- 词法分析:把输入分割成一个个有意义的词块,成为记号(token)
- 语法分析:确定这些记号是如何彼此关联的。
例如 a = b + c;,词法分析器把这段代码分解为这些记号:a,=,b,+,c,;。接着语法分析器确定b+c是一个表达式,而这个表达式被赋给了a。
七、VMware ubuntu下搭建runtime运行环境并加载本地so文件
- 在VMware ubuntu下载runtime源代码
- 修改start.sh脚本文件,添加临时环境变量(添加libCoummModule.so的路径)
export LD_LIBRARY_PATH=$LD_LIBRARYPATH:/root/runtime/runtime_application/lib
- 执行
./start.sh - 在本地打开SugonRI2.0
- 点击在IDE左下方的扫描按钮获取ubuntu中启动的runtime
- 继续点击登录
- 然后点击运行
如果VMware ubuntu和本地无法连接的处理方法:
修改虚拟机中网络适配器的网络连接模式为仅主机模式