3 .4软PLC指令系统设计
梯形图与指令表是开发PLC用户程序使用最多的两种编程语言,虽然二者 指令的表达形式不同但表示内容都是由操作码和操作数组成。操作码提供运算的 法则,操作数提供执行运算所需的数据和地址信息。软PLC指令是以函数的形 式提供操作码和操作数。
软PLC运行系统为每条PLC指令编写了相应的指令函数,它们共同组成了 软PLC系统的指令库。为了便于以后的扩展和管理,本文在编制软PLC指令时 制定了统一的格式。
PLC指令分为基本指令和功能指令两类,前者用于对位进行简单的逻辑运 算,是编制PLC程序最常使用的指令;后者主要对字节、字等复杂数据进行处 理完成某种特定的功能。本文在参考国际标准IEC61131-3中梯形图与指令表指 令的基础上,依据SIMATIC S7-300指令系统设计软PLC系统的指令函数。
本软PLC系统共设计了 25个指令函数,其中基本指令函数16个,功能指 令函数9个。表3-2、3-3分别对每个指令函数进行了说明。
编号 |
PLC指令 |
指令函数 |
实现功能 |
1001 |
LD |
ReadInBit〇 |
读输入位状态压入堆栈 |
1002 |
LDI |
ReadInBitnot〇 |
读输入位状态取反压入堆栈 |
1003 |
A |
ReadInANDBit() |
读输入位状态与栈顶元素进行逻辑“与”运算,然 后压入堆栈 |
1004 |
AI |
ReadInANDBitnot() |
读输入位状态取反后与栈顶元素进行逻辑“与”运 算,然后压入堆栈 |
1005 |
0 |
ReadInORBit() |
读输入位状态与栈顶元素进行逻辑“或”运算,然 后压入堆栈 |
1006 |
01 |
ReadInORBitnot() |
读输入位状态取反后与栈顶元素进行逻辑“或”运 算,然后压入堆栈 |
1007 |
OutBit |
WriteOutBit〇 |
将逻辑堆栈栈顶元素状态写到对应输出地址位 |
1008 |
NOT |
LogicNot〇 |
将逻辑堆栈栈顶元素状态取反后压入堆栈 |
1009 |
S |
SetBit〇 |
将对应的输入输出位状态置“1” |
1010 |
R |
ResetBit() |
将对应的输入输出位状态置“0” |
1011 |
CopyPush |
C〇py() |
将逻辑堆栈栈顶元素复制到第二个栈中 |
1012 |
Pop |
ReleasePop() |
释放逻辑堆栈栈顶元素 |
1013 |
ANB |
AndStack〇 |
将两个堆栈栈顶元素进行逻辑“与”运算 |
1014 |
ORB |
OrStack() |
将两个堆栈栈顶元素进行逻辑“或”运算 |
1015 |
Copytofirst |
Copytofirst〇 |
将逻辑堆栈栈顶两个元素进行“与”运算 |
1016 |
CLR |
ClearStackQ |
清空逻辑堆栈中的所有元素 |
|
编号 |
PLC指令 |
指令函数 |
实现功能 |
1017 |
BAND |
LogicANDByte〇 |
将两个字节的数值进行逻辑“与”运算 |
1018 |
WAND |
LogicANDWord() |
将两个字的数值进行逻辑“与”运算 |
1019 |
BOR |
LogicORByte() |
将两个字节的数值进行逻辑“或”运算 |
1020 |
WOR |
LogicORByte() |
将两个字的数值进行逻辑“或”运算 |
1021 |
CompareByte |
ComparedByteLD(); ComparedByteAND〇 ; ComparedByteOR〇 ; |
将两个字节的数值进行比较 将比较结果压入逻辑堆栈;
将比较结果与栈顶元素进行逻辑“与”运算; 将比较结果与栈顶元素进行逻辑“或”运算; 比较运算符:==、>、<、>=、<=、!= |
1022 |
CompareWord |
C ompare dWor dLD (); ComparedWordAND〇 ; ComparedWordOR(); |
将两个字的数值进行比较 将比较结果压入栈顶;
将比较结果与栈顶元素进行逻辑“与”运算; 将比较结果与栈顶元素进行逻辑“或”运算; 比较运算符:==、>、<、>=、<=、!= |
1023 |
Move |
MoveByte(); Move Word(); MoveD Word〇 ; |
按字节赋值 按字赋值 按双字赋值 |
1024 |
Timer |
TIMER |
定时功能:用于设定输出信号的延迟时间, 当延迟时间到达到所设定的值时能流通过 |
1025 |
Counter |
COUNTER |
计数功能:用于对脉冲信号进行计数,当脉 冲数等于所设定值时能流通过 |
|
下面以基本指令函数ReadlnBitG和功能指令函数COUNTER为例,说明他 们的具体实现:
(1) ReadInBit()
读输入位指令是最常用的指令之一,当软PLC系统执行LD指令时会调用 ReadInBit〇函数。首先它按照参数访问I/O存储区域,通过字节号查询到该位软 元件所在的单元地址,然后查找位号读取该位当前状态,将其压入逻辑堆栈。具 体实现代码如下:
ReadInBit(char Channel [no])
{bool bitno =false; //清 “0”
ReadBit(Channel[no], bitno); //读取操作数(位)状态
pb—stackarea ->push(bitno); //压入逻辑堆栈
(2) COUNTER
西门子PLC计数器按计数方式的不同分为:加计数器、减计数器以及加/减 计数器。本文COUNTER采用递减方式计数,当当前值减为“0”时计数器完成 计数功能。梯形图指令中的计数器如图3.9所示。
软PLC为COUNTER类分配了存储区域m_counterAREA[]来保存计数器的 预设倌和状杰信息。计数器执行函数的运行流稈如图3.9所示。当计数器的状杰 位Curcondition[0]=FALSE (可计数状态)且Reset=0时,检测到上升沿脉冲信号 输入时,计数器的当前值m_CurValue减1。当m_CurValue= 0时计数标志位置 “1”,完成计数。若Curcondition[0]=TRUE(不可计数状态),则以预设值m_PV 初始化计数器,并使计数标志位置“0”,未完成计数。
计数器功能的实现代码如下:
{ int bitno =(C_No%8-l); //确定软兀件所在位号 char flagC=0x01;
if(Curcondition[0]==TRUE) //判断计数器的状态 {if(Lastcondition[l]== TRUE)
{ m_CurValue=m_PV; } //计数器值复位 flagC=!(0x01« bitno);
m_counterAREA[C_No/8]&=flagC;// 计数标志位置 “0”
}
else //可计数状态
{ if((m_CurValue!=0)&&(!Lastcondition[l])&&Curcondition[l]) {m_Cur Value--;}//有上升沿脉冲信号输入计数值自减
if(m_CurValue==〇y/判断计数器的当前值
{
flagC=! (0x01« bitno);
m_counterAREA[C_N〇 /8]卜 flagC; //完成计数功能
}
else
{
flagC=!(0x01« bitno);
m_counterAREA[C_No/8]&= flagC;//未完成计数功能
}
}
}
(1)软PLC指令寻址格式
软PLC指令函数是通过寻址函数获取操作数及其地址信息的。对于简单数 据软PLC运行系统提供按位(bit)、字节(Byte)的寻址方式,对于复杂数据按 字(W)、双字(DW)方式进行寻址。寻址时首先指定数据存储区域,接着指定存储 的输入、输出标识,最后指定所在字、字节以及位地址。例如:寻址“LI4.3” 表示对应I/O端子的数据存储在本地通讯存储区的输入映像区,其中“L”代表 数据的存储区域,“I”代表存储在输入映像寄存区,“4”代表数据所在字节编号, 表示取位操作符,“3”代表所取元素所在字节中的位号。
由于CPU —次至少能处理8位,所以对于按字节、字、双字寻址,软PLC
米用了头部寻址加尾部寻址的统一寻址格式。编址格式见图3.12。米用统一寻址 可避免因外部I/O采集装置的改变而对用户程序的接口函数进行修改,通过寻址 能够智能获取数据。图3.13给出了软PLC按字节的寻址方式。
|
r \ |
||
区域标识符 |
输入输出标识符 |
寻址类型 |
字节编号 |
(L,R, T,A,P,C) |
(i,Q) |
(B,W,DW) |
15 0 |
参数信息:
L,R,T,A,P,C分别为PLC数据在内存中的存储区域
I-输入映像区Q-输出映像区
B-按字节寻址W-按字寻址DW-按双字寻址
(2)软PLC指令寻址函数实现
每种寻址方式都有对应的寻址函数,如:按位寻址函数ReadBitG、按字节 寻址函数ReadByte〇、按字寻址函数ReadWord(),它们共同完成向PLC指令函 数提供操作数的任务。按位寻址函数ReadBitG的部分实现代码如下:
{ char * chr_point;
chr_point=strchr(address,将指针指向字符串中所在位号 switch(address[0]) //判断软逻辑存储区域
{case 'L':
switch(address「ll) //判断输入还是输出映像区 { case T:
CurrentBitStatus(m SercosBuffer.m SercosToPLCBufFer.m ulSercosToPL
C[atoi(address+2)],atoi(chr_point+l),bitbool);
break;
case 'Q':
…}
CurrentBitStatus(unsigned char Channelno, int bitno,bool &bitstatus) //判断当前 输入位状态
{ char flagbit=0x01; flagbit «=bitno;
if((flagbit & Channelno) == flagbit)//判断当前位状态是否为 “ 1 ” bitstatus =tme; else
bitstatus =false;
}
3. 5本章小结
本章通过分析软PLC运行系统的工作原理,划分了软PLC运行系统的任务 组成,给出了各模块的执行流程图以及部分实现代码,结合直接方式和间接方式 调度的优点实现了软PLC系统多任务之间的调度,并对软PLC存储系统、指令 系统以及寻址方式进行了设计,给出了典型的基本指令和功能指令的实现函数, 基本上实现了软PLC运行系统的功能。
本文采摘自“五轴数控加工中心软PLC控制系统的研究”,因为编辑困难导致有些函数、表格、图片、内容无法显示,有需要者可以在网络中查找相关文章!本文由伯特利数控整理发表文章均来自网络仅供学习参考,转载请注明!
2024-11
五轴加工中心和五轴钻攻中心在现代制造业中具有不可替代的地位,精度控制与故障排除是其关键技术。准确理解五轴加工中心和五轴钻攻中心的工作原理,深入探索其精度控制方法和故障排除技术,是提高设备效率,保证生产稳定的基础。而五轴加工中心和五轴钻攻中心的精度控制与故障排除是一个系统且繁杂的工… [了解更多]
2024-11
通常将评定结果与现行规范和标准进行比对和匹配来验证其合理性和正确性,主要依据规范和标准包括GB/T 1958—2017 《产品几何技术规范(GPS)几何公差 检测与验证》、 JJF 1059.1—2012 《测量不确定度评定与表示》、 GB/T 34881—2017 《产品几何技… [了解更多]
2024-11
本文利用ANSYS有限元软件建立了卧式五轴加工中心的整机分析模型,分析得出了机床在最危险工况下的变形情况,同时在实物机床上搭建了静态刚度测试平台,完成机床静态刚度的测量。对比位移数据,结果仅偏差12%~20%,验证了整机有限元分析方法的有效性,为卧式五轴加工中心的优化设计提供了方… [了解更多]
2024-11
机床整机性能测试与评估主要包括以下几个方面: (1)精度测试:包括直线轴、旋转轴的定位精度、重复定位精度、主轴端面跳动、径向跳动等指标测试,用激光干涉仪来检验机床精度是否达到设计要求。 (2)刚度测试:分为机床结构刚度和加工刚度两种,前者测试机床的整体刚度,后者测试机床在加工… [了解更多]
2024-11
数控机床的动力学特性是影响机床加工精度和效率的重要因素,结合面刚度变化及机床加工空间位置变化等因素会导致机床的动力学参数发生改变,影响机床的加工性能。为了探究五轴加工中心和五轴钻攻中心的动态特性及其影响因素,本文围绕转台轴承结合面刚度和加工空间位姿对双转台五轴机床的工作台回转系统… [了解更多]