C语言和梯形图的转换
一种梯形图内嵌高级语言进行混合编程的实现方法

一种梯形图内嵌高级语言进行混合编程的实现方法专利名称:一种梯形图内嵌高级语言进行混合编程的实现方法技术领域:本发明属于计算机信息技术领域,涉及一种梯形图内嵌高级语言进行混合编程的实现方法。
背景技术:长期以来PLC在工业控制领域有着广泛的应用,梯形图是PLC程序设计的主要手段,有着使用简单,直观明了的优点。
然而PLC主要是用于逻辑控制,因此梯形图在进行逻辑控制程序设计时简单易用,但随着被控设备功能越来越复杂,简单的逻辑控制已无法满足设备控制的需要。
因此为了满足增强PLC功能的实际需要,往往需要在原有逻辑控制中增加智能算法,但是梯形图实现算法的过程过于复杂。
计算机高级编程语言(如C语言),在编写算法时具有功能强大的特点。
因此若能将计算机高级编程语言编写的算法嵌入梯形图,将极大地提高梯形图算法设计的能力,可增强梯形图功能。
通过该技术可为设备控制系统的智能化带来便利。
发明内容本发明的目的在于针对现有的梯形图适合实现逻辑控制程序设计,而复杂的算法实现困难,为其提供了一种梯形图内嵌入计算机高级语言实现混合编程的方法,实现将高级语言编写的算法模块嵌入梯形图,由梯形图实现算法模块的调用达到增强梯形图功能的目的。
本发明解决技术问题所采取的技术方案为1. 一种梯形图内嵌高级语言进行混合编程的实现方法,其特征在于该方法包括以下步骤步骤1.在梯形图设计环境中以控件方式增加高级语言算法模块,具体是步骤1-1.新增一个算法模块控件并将其添加到梯形图设计环境中,在使用时将算法模块控件拖拉到需要插入算法模块的位置,并给出需要调用的函数名称;步骤1-2.在文件中编辑高级语言模块代码,函数名和梯形图算法模块控件中描述的函数名必须一致;所有函数均没有形参,数据传递通过公共数据区完成;步骤2.高级语言程序预处理,具体是步骤2-1. PLC中数据区分配;在PLC的内存中,选择一块专用的公共数据区来表示PLC软元件值,在PLC引擎程序中定义了一个字节数组用来表示这个专用公共数据区,通过宏表示各类数据区在公共数据区中的起始地址;步骤2-2.转换字节类型数据将程序中字节类型数据转换成地址访问数据的方式;步骤2-3.转换位类型数据位类型数据操作包括赋值和位值判断;对于赋值操作,赋值0和1分别通过位的与运算和或运算实现;位的值判断通过将相应的位和1作与运算,其它位和0作与运算的结果来判断位的值;步骤2-4.将预处理后的高级语言程序写入文件,从而生成高级语言程序文件;步骤3.嵌入高级语言模块的梯形图程序编译,具体是步骤3-1.转换成IL指令在IL指令集中增加算法模块调用指令,然后把梯形图程序转换成IL指令;步骤3-2.定义用来翻译算法模块调用指令的宏,宏带有形参,在使用宏时被实例化成需调用的函数名;宏定义体中采用PLC支持的机器指令实现;步骤3-3.将IL指令翻译成宏,在编译前通过宏替换生成PLC支持的机器指令,具体是首先遍历所有的IL指令,然后将IL指令翻译成对应的宏,在编译前由编译器自动实现宏替换;步骤3-4.代码编译通过任何支持目标平台的编译器对生成的机器指令集和高级语言代码进行统一编译,编译后的可执行文件下载到PLC中即可运行。
6.梯形图编程规则与技巧、转换、常用程序段

梯形图基本画法
梯形图基本画法
梯形图基本画法
梯形图基本画法
启动、保持和停止电路 (起-保-停电路)
A B C
SB2:正转
SB3:反转
SB1:停止
FU1 FU2
SB2 KM1
SB3
KM2
KM1
KM1
KM2
SB3
SB2
KM2 KM1
KR FU2
KM2 SB1 KR
M
控制电路
梯形图
• 确定I/O并分配 I:按钮、开关、继电器/接触器触点等 O:继电器/接触器线圈 I用X表示,O用Y表示 • 画梯形图 从电源的一端(起始母线)出发,逐一转换, 直到另一端(终止母线) 熔断器不转换 按梯形图规则调整修改
四人抢答器
电动机的顺序控制
电动机的连续运转
输入: 正转起动按钮: SB2 X000 反转起动按钮:SB3 X001 停止按钮: SB1 X002 热继电器触点:FR X003 输出: 正转接触器:KM1 Y001 反转接触器:KM2 Y002
梯形图设计
电动机的正反转控制
四人抢答器
控制要求: 出题人出问题,答题人按动开关抢答,只有最早 按动的人有输出,除此没有。出题人按复位开关 时,引出下一个问题。 I/O点数 输入 输出 答题人A:X0 抢答指示:Y0 答题人B:X1 抢答指示:Y1 答题人C:X2 抢答指示:Y2 答题人D:X3 抢答指示:Y3 复位(主持人):X4
• 设计一个三相异步电动机正反转PLC控制系 统 功能要求 接上电源时,电动机M不动作 当按下正转起动按钮SB2后,电机M正转; 当按下反转起动按钮SB3后,电机M反转; 按停止按钮SB1后,电机M停转 热继电器触点FR动作后,电机M因过载保护 而停止
C语言实现梯形图写法

******************************************************************************************/
void PLC_Task(void)
{
if((X1==0) M0=0;
//如果X1接通,辅助继电器M0通电。表示X1接通过。
******************************************************************************************/
void PLC_Task(void)
{ if(X1==0) M0=0;
//如果X1接通,辅助继电器M0通电。表示X1接通过。
void PLC_Task(void)
{
if(((X0==0)||(X1==0))&&((X2==0)||(X3==0)))Y0=0; //如果X0或者X1任意一个接通
//与X2与X3任意一个接通,YO动作。
else Y0=1;
//上面条件不成立,Y0断开。
}
4
4:ANDP 梯形图
C语言写法1:
/**************************************************************************************** 这里添入你的C逻辑程序。
if((X1==1)&&( M0==0))M1=0;//如果X1断开并且M0通电过,辅助继电器M1动作
if((X0==0)&&(M1==0)){ M1=1;Y0=0;}//如果X0接通并且M1也接通,M1复位,Y0动作。 }
把语句表转换成梯形图

把语句表转换成梯形图篇一:梯形图转语句表篇二:P LC语句表L在梯形图怎么表示快速学看p lc梯形图和语句表第一章认识pl c1.1p lc的基本组成1.1.1pl c的面板介绍1.1.2p lc的基本结构与组成1.2pl c的工作原理1.3pl c的编程语言1.3.1梯形图(ld)1.3.2指令语句表(il)1.3.3顺序功能图(sf c)1.3.4功能模块图语言(fb d)1.3.5结构化文本语言(st)1.4编程软件安装与使用1.4.1st ep7-mi cr o/wi nv4.0s p3编程软件的基本功能1.4.2s te p7-m ic ro/w inv4.0编程软件的安装1.4.3s te p7-m ic ro/w inv4.0编程软件的主界面1.4.4计算机与pl c通信连接1.4.5程序编辑与调试运行第二章识读西门子s7-200系列pl c编程元件及寻址方式2.1识读西门子s7-200系列pl c的编程元件2.1.1输入继电器(i)2.1.2输出继电器(q)2.1.3辅助继电器(m)2.1.4特殊继电器(sm)2.1.5顺序控制继电器(s)2.1.6变量存储器(v)2.1.7局部变量存储器(l)2.1.8定时器(t)2.1.9计数器(c)2.1.10模拟量输入映像寄存器(a i)与模拟量输出映像寄存器(aq)2.1.11高速计数器(hc)2.1.12累加器(ac)2.2识读s7-200pl c存储器的数据类型与寻址方式2.2.1基本数据类型2.2.2寻址方式第三章识读西门子s7-200系列pl c基本指令3.1识读基本逻辑指令3.1.1位触点及线圈指令3.1.2置位与复位指令3.1.3立即i/o指令3.1.4边沿脉沖指令3.2识读定时器与计数器3.2.1定时器3.2.2计数器第四章识读pl c常用基本控制程序4.1识读梯形图4.1.1如何识读梯形图4.1.2识读梯形图的具体方法4.2识读指令语句表4.2.1如何识读指令语句表4.2.2识读指令语句表的具体方法4.3识读pl c常用基本控制程序4.3.1启保停控制程序4.3.2联锁控制程序4.3.3延时通断控制程序4.3.4顺序延时接通控制程序4.3.5顺序循环接通控制程序4.3.6长时间延时控制程序4.4.7脉冲发生器控制程序4.4.8多地控制程序第五章识读步进顺序控制与编程5.1识读顺序功能图5.1.1顺序功能图的组成要素5.1.2顺序功能图的基本结构5.1.3绘制顺序功能图的注意事项5.2识读步进顺控指令的编程5.2.1步进顺控指令5.2.2单序列结构的编程方法5.2.3选择序列的编程方法5.2.4并行序列的编程方法5.3识读3台电动机的pl c步进控制程序第六章识读西门子s7-200系(来自:.c nb Ot hw In.博威范文网:把语句表转换成梯形图)列p lc的功能指令6.1识读传送指令6.1.1字节传送指令6.1.2字传送指令6.1.3双字传送指令6.1.4实数传送指令6.2识读比较指令6.2.1字节比较指令6.2.2整数比较指令6.2.3双字整数比较指令6.2.4实数比较6.3识读运算指令6.3.1加、减、乘、除指令6.3.2加1、减1指令6.4识读数据转换指令6.4.1字节与整数转换指令6.4.2整数与双整数转换指令6.4.3双整数与实数的转换指令6.4.5整数与bc d码转换指令6.5识读跳转指令6.6识读子程序指令6.7识读中断指令第七章识读电动机的p lc控制7.1识读三相异步电动机的自动正反转控制电路7.2识读单按钮控制电动机的启动与停止电路7.3识读三相异步电动机的星三角降压启动控制电路7.4识读3台电动机的星三角降压顺序启动控制电路7.5识读单管能耗制动控制电路第八章识读机械设备的pl c控制8.1识读ca6140普通车床的p lc控制8.1.1识读控制要求8.1.2主电路、pl c的i/0接线8.1.3梯形图和指令语句表8.1.4电路工作过程8.2识读x62w万能铣床的pl c控制8.2.1识读控制要求8.2.2主电路;p lc的i/0接线8.2.3梯形图和指令语句表8.2.4电路工作过程8.3识读多种液体混合装置8.3.1识读控制要求8.3.2pl c的i/0接线及i/0地址分配8.3.3顺序功能图、梯形图,指令语句表8.3.4电路工作过程篇二:pl c设计全自动洗衣机梯形图和语句表篇三:p lc梯形图程序设计基础梯形图仿真继电器控制电路电动机启、停控制电路电动机启、停控制梯形图s7-200所接输入/输出设备图与s7-200梯形图关系的图示p lc控制的基本电路1单输出自锁控制电路启动信号i0.0和停止信号i0.1持续为on的时间般都短。
指令转为梯形图后有什么变化

指令转为梯形图后有什么变化
原语句如下:
ldi0.6
ldm4.1//1-2#手动申请
rm4.1,1
old
anm30.1//1-2#补油泵未有故障
ab>vb1380,0//补油时间限制大于0
ab=vb1381,0//补油任务空闲
sm4.7,1//1-2#补油申请
movbvb1380,vb1381
图片说明:1,转换
最佳答案
写的语句表与图片说明有一点点子偏差,上面的语句表不能转换为图片说明的梯形图,原因在于你的前四个指令中,
ldi0.6
ldm4.1//1-2#手动申请
rm4.1,1
old
这四个指令的组合,形成不了图片说明的逻辑:
ldi0.6//装载i0.6;
ldm4.1//装载m4.1;
这两句只完成了装载,并没有说明这两条指令的逻辑功能,就去使能m4.1,cup是无法执行的。
正确的改为如下:
ldi0.6
ldm4.1
old
rm4.1
以下照写就可以了。
梯形图转换为执行代码的一种方法

常用 的元件类型有 : 母 线元件 、 触点元件 、线 圈元件及连接元件 。 触点元件又分常开 、 常闭等元 件。 线 圈元件是梯形 图的输 m元件。连接元件用 于 连接母线 、 触点元件及线圈元件 , 分为水平 连线 元
c p为垂直 连线元件 ,c s为非垂直连 线元件 ;或
X C p — X C s = 一 1 , Y C p — Y C s = 0 ,此时 c p为垂直连线元 件 ,c s为 非 垂 直 连 线 元 件 ;或 X C p — X C s = O , Y C p 一  ̄ C s = 0 , 此时 C p 为非垂直连线元件 , C s 为垂 直连线元件 ;或 X C p — X C s = O ,Y C p — Y C s = I ,此时 C s 为垂直连线元件 ; 或X C p — X C s = 0 , Y C p — Y C s = 一 1 , 此时 c p为垂直连线 元件 ,C s 为垂直连线元 件。 定义 2间接连接定义为 R i ( C p , R d l , R d 2 , ……
视化构建与编辑梯形 图 , 并便 于向指令表或执行代
码转换无疑是 P I c快速 开发应用 的关键之处 。本 文在分析 了已有这方面 工作 的基础 七, 给 了以面 向对象技 术为基础 的可视 化梯形 图编辑 界面 的设 计与实现 。 具体实现 中引入 了元件连通性 的邻域 汇 聚 与扩散算法实现 电路构造 , 采用输入输 的逆 向 拓扑识别元件之间的 串并联关系 , 并用二叉树来 表 达元件 的这种关 系。 通过二又树 的先序遍历 , 完成 梯形图到逻辑表达式文本的转换 。 最后采用字符处 理实现逻辑表达式文本 的化简 , 并通过 翻译 例程将 辑文本转化 为执行代码 。
被短路的结点等缺陷 , 使得 由梯形图转 为拓扑结构
SFC图到步进梯形图的转换

SFC图到步进梯形图的转换一、单一序列顺序功能图转换梯形图的方法某小车开始时停在左限位SQ2处,按下启动按钮后,小车右行至SQ1处,SQ1动作后左行返回SQ2处,然后再右行至SQ3处,然后再返回SQ2处完成一个循环,周而复始。
要求在任何时刻按下停止按钮后将本周期剩余的动作完成后返回初始位置(即SQ2处)等待。
图所示小车的顺序功能图转换为梯形图。
状态的激活使用SET指令,初始步S0用M8002初始化脉冲激活。
然后写出状态器的步进触点,表示系统工作于此状态下时的输出状况和与后续步的转换关系。
有输出的先写输出,所有的输出写完后,写出与后续步的转换关系,即S0满足转换条件X0时,激活后续步S20。
依次类推。
最末一步返回S0时通常使用OUT指令,而不是SET指小车的步进梯形图二、 选择序列顺序功能图转换梯形图的方法X3X7 X6X5X2 X12 S0M8002 X0 S26K200X4S22S23C0S24S25X1 S20S21Y0Y1M2Y2C0Y6 S0Y5三、并行序列顺序功能图转换梯形图的方法示例:十字路口交通信号灯控制程序现有一十字路口交通信号灯。
控制要求:(1)按下启动按钮后,东西红灯亮,并维持25秒。
东西红灯亮的同时,南北绿灯也亮,维持20秒后,南北绿灯闪烁3秒,之后熄灭;然后变为南北黄灯亮,2秒后熄灭。
之后,南北红灯亮,东西绿灯亮。
(2)南北红灯亮30秒后熄灭。
东西绿灯亮25秒后变为闪烁,闪烁3秒后熄灭,然后东西黄灯亮2秒后熄灭。
之后,东西红灯亮,南北绿灯亮。
(3)信号灯按以上方式周而复始地工作。
(4)按下停止按钮后,信号灯执行完一个周期后停止工作。
名称输入点名称输出点名称输出点启动按钮SB1 X0 东西红灯Y0 南北红灯Y3 停止按钮SB2 X1 东西绿灯Y1 南北绿灯Y4东西黄灯Y2 南北黄灯Y5十字路口交通灯的顺序功能图十字路口交通灯的步进梯形图物料小车构件:运料小车实物图:接线图:使用说明:用鼠标点击行程开关,然后移动鼠标可改变行程开关的位置,行程开关的初始状态是上面为常闭触点,下面为常开触点。
关于第二课题梯形图、指令的相互转换

第二课题梯形图、指令的相互转换一、实训的目的通过老师的讲授和学生自身的练习,要达到能将梯形图与指令互相转换的能力。
二、实训讲授的知识点〈一〉基本逻辑指令通过梯形图编译成指令,讲解部分基本逻辑指令,将图2-1的梯形图编译成指令。
图2-1 梯形图将上面的梯形图编译成指令,必须了解以下逻辑指令:LD:逻辑关系为从前面取信号,表示的是元件的常开触点。
使用LD指令的条件:(1)与母线相连的常开触点可以使用LD指令;(2)不与母线相连的并联块电路中,每条分支的第一个元件是常开触点的可以使用LD 指令。
LDI:逻辑关系为将此处信号断开,表示的是元件的常闭触点。
使用LDI指令的条件:(1)与母线相连的常闭触点可以使用LD指令;(2)不与母线相连的并联块电路中,每条分支的第一个元件是常闭触点的可以使用LD 指令。
AND:逻辑关系为“与”。
使用AND指令的条件:单个(指该元件不与其它元件组成并联电路)常开触点与前面的电路组成串联的可以使用AND指令。
ANI:逻辑关系为“与非”。
使用ANI指令的条件:单个(指该元件不与其它元件组成并联电路)常闭触点与前面的电路组成串联的可以使用ANI指令。
OR:逻辑关系为“或”。
使用OR指令的条件:单个(指该条支路中只有一个元件)常开触点与上面的电路组成并联的可以使用OR指令。
ORI:逻辑关系为“或非”。
使用ORI指令的条件:单个(指该条支路中只有一个元件)常闭触点与上面的电路组成并联的可以使用ORI 指令。
上面六条指令的操作元件为:X,Y,M,T,C,S。
程序步:1步。
ORB:逻辑关系指串联电路块的并联。
ANB:逻辑关系指并联电路块的串联。
操作元件:无。
程序步:1步。
OUT:驱动线圈指令。
操作元件:Y,M,S,T,C。
程序步:Y,M,S,1步;T,C,3步。
写指令时一定要将元件之间的逻辑关系交代清楚,否则PLC执行的结果将与程序的要求不相符合。
下面是图2-1梯形图的指令。
〈二〉实训课题:将梯形图编译成指令将图2-2中梯形图编译成指令,可任选一个梯形图作为考题。
C语言和梯形图的转换

|-----||------------------------------------CLR Y0------|
梯形图 |
X0
输出线圈
|
C 语言 // if( X0==1 ){ Y0=1; }
|----||-------------------------------------SET Y0------|
|
X
输出线圈
|
梯形图
C语 言 // if( X0==1 ){ Y0=0; }
|----||---|\|---|/\|---|\/|-------------------(Y0)------|
|
X0 X1
X2
X3
输出线圈
|
梯形图
C 语言 // if(X0==1&&X1==0&&X2UP==1&&X3DOWN==1){Y0=1;X2UP=0;X3DOWN=0;} else { Y0=0; }
|
|-------------
----------|SET M1|-----|
|
|
|-----||-----||-----|\|-----|-----------------------|CLR Y1|-----|
|
X2
M1
M2
|----------------------
-|SET Y2|-----|
|-----||--------------------------------------(Y// if( T00<=0 ){ Y0=1; }
梯形图 |----| >D0 K0 |-------------------------|DIV D0 D1 D2|--|
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
|
X0
M0
|------------------------------|SE
T Y0|-----|
|
|
|-----||-----||-----|\|-----|-----------------------|CLR Y0|-----|
|
X1
M0
M1
|----------------------
-|SET Y1|-----|
C 语言
// if( D0>0 ){ D2=D0+D1; }
加减乘除类同
梯形图 |-----| >D0 K0 |------------------------|SUB D0 D1 D2|--|
C 语言
// if( D0>0 ){ D2=D0-D1; }
加减乘除类同
顺序控制示例
C 语言
梯形图
|-----||-----|\|-----|------------------------------|SET M0|-----|
|
X
输出线圈
|
梯形图
C语 言 // if( X0==1 ){ Y0=0; }
|----||---|\|---|/\|---|\/|-------------------(Y0)------|
|
X0 X1
X2
X3
输出线圈
Байду номын сангаас
|
梯形图
C 语言 // if(X0==1&&X1==0&&X2UP==1&&X3DOWN==1){Y0=1;X2UP=0;X3DOWN=0;} else { Y0=0; }
|
X0 | X1 |
输出线圈 |
| 常开 | 常
闭|
|
|----||--|
|--------------------------(Y1)------|
| X2
|
输出线圈 |
C 语言 // if( ( (X0==1||X2==1)&&X1==0 )||X3==1 ){ Y0=1;Y1=1; }else { Y0=0;Y1=0; }
梯形图 C 语言
|----||---|\|---|-----------------------------(Y0)------|
|
X0 X1
|
输出线圈
|
| 常开 常
闭|
|
// if(( X0==1&&X1==0 )||X2==1 ){ Y0=1; }else{ Y0=0; }
梯形图
|----||--|---|\|---|--------------------------(Y0)------|
// if(X3==1&&M2==1&&M3==0){Y2=0;Y3=1;M3=1;} // if(X4==1&&M3==1){Y3=0;M0=0;M1=0;M2=0;M3=0;}
梯形图
|----||---|\|---|--------------------------TMR T0 K10---|
|
X0 M0
|
定时器 T0
|
|
|--------------------------SET
C 语言
// if(X0==1&&M0==0){ T0=10; M0=1;)
梯形图 C 语言
|
|-------------
----------|SET M1|-----|
|
|
|-----||-----||-----|\|-----|-----------------------|CLR Y1|-----|
|
X2
M1
M2
|----------------------
-|SET Y2|-----|
|
|-------------
----------|SET M2|-----|
C 语言
// if(X0==1&&M0==0){M0=1;Y0=1;} // if(X1==1&&M0==1&&M1==0){Y0=0;Y1=1;M1=1;} // if(X2==1&&M1==1&&M2==0){Y1=0;Y2=1;M2=1;}
|-----||--------------------------------------(Y0)------|
|
T0
输出线圈 |
// if( T00<=0 ){ Y0=1; }
梯形图 |----| >D0 K0 |-------------------------|DIV D0 D1 D2|--|
C 语言和梯型图的转换
|-----||------------------------------------CLR Y0------|
梯形图 |
X0
输出线圈
|
C 语言 // if( X0==1 ){ Y0=1; }
|----||-------------------------------------SET Y0------|
C 语言
// if( D0>0 ){ D2=D0/D1; }
加减乘除类同
梯形图 |-----| >D0 K0 |------------------------|MUL D0 D1 D2|--|
C 语言
// if( D0>0 ){ D2=D0*D1; }
加减乘除类同
梯形图 |-----| >D0 K0 |------------------------|ADD D0 D1 D2|--|