西门子模块6ES7277-0AA22-0XA0技术数据
1 引言
在机床的控制中,经常遇到类似如工件的夹紧/放松,冷却液的启动/停止,顶针的前进/后退等等的操作。对于这类动作,操作者往往希望通过一个按钮来实现:按一下按钮,工件夹紧;再按一下按钮,工件放松;再按一下按钮,工件又夹紧;如此循环往复。把这样的按钮称为双稳态按钮,即有两种稳定状态:接通和断开,两种状态都能保持。在数控系统中,机床控制面板上一般会提供一些按键供用户自由定义,但按键的数量往往是非常有限的,对按键的分配不得不斟酌再三。如果在PLC程序中把按键做成双稳态的,一个按键身兼二职,就会使许多问题迎刃而解了。可见,PLC程序把按钮做成双稳态,还可以节省输入点的数量,这样在经济上也是很合算的。
2 构成双稳态按钮的三种方法
在PLC程序中构造双稳态按钮,有多种实现的方案,现在就介绍其中的三种方法。
2.1 通过SET和RESET指令来实现
图1 通过SET和RESET指令来实现双稳态按钮功能
图1程序中,当次按下按钮I0.0,此时条支路因串联的M0.1为常闭点,而使M0.0接通条件满足置位。第二条支路的执行条件不满足,暂且不去理会。再看第三条支路,假设持续按着按钮不释放,因支路中串联进I0.0的常闭点而使接通条件不满足,直到释放按钮I0.0,因串联的M0.0已经置位,从而使M0.1和Q0.0输出保持为“1”。当第二次按下按钮I0.0时,因为M0.0的状态为“1”,条支路执行条件不满足,第三条支路因I0.0的按下而使M0.1和Q0.0输出为“0”,M0.1由“1”变为“0”产生一个下降沿,使M0.0复位为“0”,从而使M0.1和Q0.0的“0”状态得以保持,释放按钮I0.0以后。之后对按钮I0.0的操作,又重复上述过程。可见,得到的是一个双稳态按钮。
2.2 利用PLC基本逻辑指令来实现
PLC程序是按照一定的PLC扫描周期循环往复地的执行程序代码。在每一个PLC扫描周期内,先读入输入映像区内的信号状态,执行用户程序,后刷新输出映像区的信号状态。用户程序的执行是按照代码的先后顺序自上往下依次执行的。
图2 利用PLC基本逻辑指令来实现双稳态按钮功能
图2程序中正是充分利用了PLC程序的执行的特点,现在分析一下它的工作过程。按一下按钮,使I0.1变为“1”,在个PLC扫描周期内,M0.0变为“1”,M0.1变为“1”,M0.1等于“1”会使M0.0变为“0”,但M0.0的状态变化要到下一个PLC扫描周期才会执行,可见M0.0是宽度为1个PLC扫描周期的脉冲信号。因为M0.0等于“1”,这样会使原来状态为“0”的Q0.0变为“1”。从第二个PLC扫描周期起,不论I0.1变为“0”或保持为“1”,M0.0变为“0”并稳定在“0”上,这样Q0.0通过M0.0常闭点与Q0.0常开点串联的支路保持为“1”状态。再按一下按钮,M0.0又产生宽度为1个PLC扫描周期的脉冲信号,这个脉冲信号使原来状态为“1”的Q0.0变为“0”并稳定在“0”上。如此每次按一下按钮,Q0.0就在“0”和“1”之间切换一次,形成双稳态信号。
这一段程序中使用的指令是所有PLC系统都支持的基本的指令,可以说在任何类型的PLC上都可以实现,非常具有代表性,值得借鉴。
2.3 借助于算术运算指令来实现
在数字电路中,如果把输出的“非”端反馈到D触发器的“D”输入端,则每来一个时钟脉冲,D触发器的状态就翻转一次。
图3 利用算术运算指令实现双稳态按钮功能
图3所示的程序借鉴了数字电路中的D触发器的工作原理,按钮I0.0每按下一次,就相当于给触发器的CP端输入一个触发脉冲,相加所得“和”的低位状态就翻转一次,如果Q0.0取自低位,就可得到周期性状态在“0”、“1”之间改变的双稳态信号。为了避免加法的计算结果溢出,判断如果累加到16位整数所能表示的大值32767,就重新开始累加。
3 结束语
文章开始提到的控制阀的两种状态,也可以选用具有保持功能的三位选择开关,这是一种硬件实现方案。当然可以选用本文所述的软件实现方案,殊途同归。但通过软件的方式,却节省了PLC输入点的开销,如果PLC的输入非常紧张,这是一种行之有效的方法,但若是输入点后还绰绰有余,这样做就有画蛇添足之嫌了。
硬件方案、软件方案,很难说究竟何者是佳方案。正如计算机的发展史,如果硬件非常昂贵,那就通过软件来实现这一功能;如果硬件的成本非常低了,何不充分发挥硬件的功能,这样还可以缩短一下程序代码。PLC输入点的问题正是如此,适合的才是佳的。
1 引言
可编程控制器(以下简称PLC)由于其高可靠性、编程简单、通用性强、体积小、结构紧凑、安装维护方便等特点,而在工业控制中得到了广泛应用。PLC的模块一般分为以下几大类:开关量输入模块、开关量输出模块、模拟量输入模块、模拟量输出模块。在工业控制中特别是过程控制领域中需要采集和控制的模拟量比较多,对PLC的模拟量输入、输出模块需要的较多,而模拟量输入、输出模块比较贵,增加模拟量输入、输出模块就增加了成本,降低了整个系统的性价比,限制了PLC的应用。本文提出了一种基于通讯的模拟量输入、输出模块的扩展方法力图解决这一问题。
2 基于通讯的模拟量输入、输出模块的扩展方法
(1) 模拟量输入模块扩展
这里以一路12位模拟量输入为例,模拟信号以0~5V标准电压的形式送入信号输入端,应用12位A/D转换芯片MAX187实现模数转换。MAX187是12位串行A/D,具有较高的转换速度,采样频率是75kHz,适用于较高精度的过程控制。考虑到实际工业现场中的高频干扰,在采样信号送MAX187之前还使用了低通滤波器滤波,如图1所示。
图1 低通滤波、放大器及A/D转换
MAX187具有内部参考电压,既4#管脚(REF)为4.096V,A/D转换的全量程为4.096V。而输入信号是0~5V,要加一级运放把0~5V转换成0~4.096V后送入MAX187。AT89C52的P1.3和MAX187的片选端(CS)相连、AT89C52的P1.4和MAX187的串行时钟信号端(SCLK)相连、AT89C52的P1.5和MAX187的串行数据输出端(DOUT)相连。模拟量采样的值存入单片机的内存中,再由单片机的串行口传送给PLC。A/D转换的C51程序如下:
#include
#include
sbit IC4_S = P1^4; /* AD输入端口设置*/
sbit IC4_D = P1^5;
sbit IC4_C = P1^3;
void bbbbb(void )
{ unsigned char idata i;
unsigned int idata result=0x0000;
IC4_C = 0; /* CS端为低电平*/
for(i=0;i<12;i++)
{ result = result << 1;
IC4_S = 0; /*时钟端产生时钟脉冲*/
IC4_S = 1;
if( IC4_D ) result++; /*从串行数据输出端读入A/D转换数据*/
}
IC4_C = 1; /* CS端为高电平*/
pdat[1] = result;
}
MAX187的工作时序图见图2。
图2 MAX187的工作时序图
(2) 模拟量输出模块扩展
这里以一路12位模拟量输出为例,设计中将采用12位D/A转换芯片MAX531来实现数摸转换。我们在MAX531的输出端接运算放大器,将模拟输出调节至0~5V,输出部分的硬件电路如图3所示。这里,MAX531是12位串行D/A,具有较高的转换速度,MAX531具有内部参考电压,既10#管脚(REFOUT)为2.048V,D/A转换的全量程为2.048V。而输出信号一般要求是标准的0~5V,要加一级运放把MAX531输出的0~2.048V信号转换成0~5V信号。AT89C52的P1.0和MAX531的串行时钟信号端(SCLK)相连、AT89C52的P1.1和MAX531的串行数据输入端(DIN)相连、AT89C52的P1.2和MAX531的片选端(CS)相连。PLC把要输出的模拟量通过串行口传送给单片机,存入的内存中,再由单片机完成D/A转换进行输出。A/D转换的C51程序如下:
图3 D/A转换及放大器原理图
#include
#include
sbit IC2_S = P1^0; /*DA输出端口设置*/
sbit IC2_D = P1^1;
sbit IC2_C = P1^2;
void output(unsigned int dat)
{ unsigned char idata i = 12;
IC2_C = 0; /* CS端为低电平*/
while( i-- )
{ IC2_S = 0; /*时钟端产生时钟脉冲*/
if ( dat &0x0800 ) IC2_D =1; /*从串行数据输入端读入DA转换数据*/
else IC2_D =0;
IC2_S = 1;
dat = dat << 1;
}
IC2_C=1; /* CS端为高电平*/
}
MAX531的工作时序图见图4。
图4 MAX531的工作时序图
3 PLC与扩展模块之间的通信接口及通信协议
(1) 通信接口
以松下FP1系列PLC为例来阐述PLC与扩展模块之间的通信,FP1系列PLC的通信接口采用标准9芯RS232接口,它与扩展模块之间的接线如图5所示。
图5 扩展模块与PLC的通讯连接
· 扩展模块的RXD端与PLC的TXD端联接,使扩展模块接收到PLC发出的数据;
·扩展模块的TXD端与PLC的RXD端联接,使扩展模块发出的数据被PLC接收到;
· 扩展模块的地与PLC的SG端互联,使两者的工作基准地电平相同。
上面采用的是RS232接口,PLC一次只能扩展一个模块。如果要扩展多个模块,可以采用RS485接口,现代的PLC一般都带有RS485接口。
(2) 通信协议
松下FP1系列PLC与扩展模块之间的通信协议为松下公司专用的MEWTOCOL-COM协议,该协议采用异步通信方式,其波特率有1200、2400、4800、9600、19200、38400、57600、115200bps等多种可选,且报文长度可变可固定。该协议格式分为命令消息(CommandMessage),正常响应消息(Response Message-normal),出错响应消息(ResponseMessage-error)三种。
其中:%为起始符,标记每一帧报文的开始;CR为结束符,标记每一帧报文的结束;
AD为PLC的站地址,为两位16进制数,如00则表示台PLC;
#、$、!标注该帧报文为何种类型。
Command code为命令代码,如例1中的“RD”,表示读数据区。Responsecode为响应代码一般返回接收到的命令消息中的命令代码。Error(H)和Error(L)为出错代码,是两位16进制数,可根据其值在协议中查出错误的描述。
Text code为命令参数,如例1命令消息中“D 01105 01107”,“D”表示数据寄存器,“0110501107”表示第1105号至1107号,而在例1响应消息中,“6300 44330A00”则表示DT1105至DT1107中数据分别为6300、4433、0A00。
BCC(H)和BCC(L)为前面字符串的BCC校验码的高、低位,为两位16进制数。其初值为0,从起始符开始与该帧报文中每一字节按位进行异或运算得到。
l 例1:读取DT1105至DT1107中的数据的命令消息如下:
若DT1105至DT1107中数据分别为6300、4433和0A00,PLC返回的响应消息如下:
那么, 模拟量输入扩展模块与PLC通讯的报文可如下:
表示1号模拟量输入扩展模块把模拟量采样值0FFF存入PLC的第1105个数据寄存器
模拟量输出扩展模块与PLC通讯的报文可如下:
表示1号模拟量输出扩展模块请求把PLC中第1106个数据寄存器保存的模拟量输出值读入。
若DT1106中数据为0fff,PLC返回的响应消息如下:
1号模拟量输出扩展模块就把接收到的数字量0fff转换成模拟量输出。
4 结束语
本文提出的方法已在实验室中调试通过,并多次长时间运行测试,以验证其准确性与稳定性,收到了令人满意的效果,通信十分稳定可靠。各位读者可在本文的基础上,开发出8路、16路8位、10位、12位等模拟量输入、输出扩展模块;本文使用的是松下公司已有的MEWTOCOL-COM协议,读者也可以自己编制通讯协议。本文意在提出一种低成本的PLC模拟量输入、输出模块扩展方法,如果要把它变成产品还有很长的路要走,例如,如何让用户使用得更方便,可靠性更高等等。这些都是需要完善的。