产品规格模块式包装说明全新品牌西门子
西门子模块6ES7223-1HF22-0XA8接线方法
1.引 言
当今,在自动化的工业生产中,变频控制往往与计算机远程控制相联系在一起,从而实现电机的远程变频控制。可编程序控制器系统不仅可作为单一的机电控制设备,而且作为通用的自动控制设备,也被大量地用于过程工业的自动控制。欧姆龙较新推出的可编程控制器SYSMAC CP1H,具有“高度扩张性”的端子台型一体化[1]。与以往产品CPM2A 40 点输入输出型为相同尺寸,但处理速度可达到约10倍的性能。本课题通过控制机(即为PLC)设定比例运行参数,然后控制机通过D/A转换模件发出控制变频调速器的指令,使变频调速器带动振动磨电机按输入的速度和时间运转。基于OMRON PLC的链接通信(有通信协议),我们采用功能强大的Visual C++6.0语言来实现这种小型集散控制系统的上、下位机的通信和友好的监控界面,实现了上位机与PLC间的通信。
2.通讯软件的设计
在本项目中,上位机选用计算机, 下位机选用日本Omron公司的CP1H系列XA40DR-A可编程序控制器。在计算机外设中,RS-232串口因为其组成方式简单,编程控制方便而成为应用较为广泛的I/O通道之一。32 位下串口通信程序通常采用两种方法实现:一是利用ActiveX控件; 二是使用API通信函数。使用ActiveX控件, 程序实现非常简单, 结构清晰,缺点是欠灵活; 使用API通信函数的优缺点则基本上相反[2]。VC++6.0的MSComm是Microsoft 公司提供的简化bbbbbbs 下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法,笔者采用了这种方法。
2.1 上位机与PLC的通讯协议
HOST bbbb系统使用HOST bbbb 通信协议进行通信,上位机具有传送**权,总是首先发出命令并启动通信,HOST bbbb 通信单元收到命令交由PLC执行,然后将执行结果返回上位机,两者以帧为单位轮流交换数据。
2.2 上位机的PLC链接通讯
通信时一组传送的数据称为块,它是命令或响应的单位,从上位机发送到HOSTbbbb 单元的数据称为命令块,相应的,从HOSTbbbb单元发送到上位机的数据称为响应块。多点通信时,单帧发送的较大数据块为131 个字符,因此当一个数据块含有132 个或更多字符时,要分成两帧或多帧进行发送。多帧发送时中间帧的格式为:正文、FCS、分界符。起始帧、中间帧的长度为131 ,结束帧的长度较多为131个字符。
Omron系列的PLC 通过RS232 口与主机通信有两种方式,**种是由上位机向PLC 发送初始命令,*二种是由PLC 向上位机发送初始命令[3]。在监测系统中一般采用**种方式。有关通信协议如下所述:
2.2.1上位机→PLC 的命令格式
其中:
(1)@为起始标志符;
(2)N2 、N1 为PLC 节点标志码,由两位十进制数表示,它们用来*与上位机通信的PLC。而PLC 自己的通信节点码可由它的DM6648 和DM6653 来设置;
(3)CMD2 、CMD1 为两字节命令码;
(4)MT 为命令内容,用来设置具体的命令参数;
(5)V2、V1 为两字节的帧校验码,它是从开始符“@”到MT码结束的所有字符的ASCII 码按位异或的结果; 帧校验和是一个转换成2 个ASCII 字符的8 位数据。它把帧中每一个字符顺序地进行异或操作而得到的结果,即把帧的**个字符到正文结束的所有字符转换成二进制形式的ASCII 码后,逐个异或而得到的[4]。当发送命令时,将其加在命令格式中,作为帧的一部分发送到接收端。当接收数据时,按上述步骤重新计算FCS ,当计算结果与数据块中所带的FCS 相同时,说明传输无误,否则,说明接收到的数据不正确。
(6)“*”和“CR”两字符表示命令结束。
例如,@00WD00060500表示写一个数500到节点为0的PLC的DM0006中。
2.2.2 PLC→上位机的响应格式
其中S2 、S1 为命令结束状态码,如00 表示正常结束,01 表示RUN 模态下PLC 无法完成上位机命令,其余符号代码意义同上。实现上位机与HOST bbbb 通信单元的通信只需编写上位机程序,因为HOST bbbb 通信单元自身带有通信程序,上位机下发命令,地址相符的PLC 自动上传响应帧,所以这一部分程序不需要客户编写,但是,编写上位机的通信程序时,通信参数的设置必须保证与PLC 的通信参数一致性。
3.用VC++6.0编写串行通信程序
首先建立一个基于对话框的MFC应用程序SCommTest,支持ActiveX控件,电话形状的控件是在系统中注册过的MicrosoftCommunications Control, version 6.0,接受缺省的选项。
1.打开串口设置串口参数
在主对话框CSCommTestDlg::OnInitDialog()中打开串口,加入如下代码:
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
i f ( ! m _ c t r l C o m m . G e t P o r t O p e n ( ) ) m _ c t r l C o m m .
SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,E,7,2"); //波特率9600,偶校验,7个数据位,2个停止位m_ctrlComm.SetbbbbbModel(1); //1:表示以二进制方式检取数据m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetbbbbbLen(0); //设置当前接收区数据长度为0
m_ctrlComm.Getbbbbb();//先预读缓冲区以残留数据
2.发送数据
为发送按钮添加一个单击消息BN_CLICKED处理函数,选择IDC_BUTTON_MANUALSEND,添加OnButtonManualsend()函数,并在函数中添加如下代码:
UpdateData(TRUE); //读取编辑框内容
SendData(m_strTXData1,6);
// m_strTXData1表示发送速度命令的具体数值,6表示写数据的地址DM0006
Sleep(100);
SendData(m_strTXData2,12); //m_strTXData1表示发送时间命令的具体数值,12表示写数据的地址DM0012
3.发送命令
按照命令格式,本课题主要发送两个WD命令:
(1)数据采用十进制发送,向DM0006中写入速度指令;
(2)数据采用十进制发送,向DM0012中写入时间指令。部分程序如下:
Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)
{ CByteArray Array;
unsigned char auchMsg[45]={0}
auchMsg[0]=64; // 起始标志符
auchMsg[1]=0x0; //节点号
auchMsg[2]=0x0; auchMsg[3]=‘W‘; //命令符
auchMsg[4]=‘D‘;
auchMsg[5]=m_address/1000;
auchMsg[6]=(m_address%1000)/100;
auchMsg[7]=(m_address%100)/10;
auchMsg[8]=m_address%10;
auchMsg[9]=m_TobeSend/1000;
auchMsg[10]=(m_TobeSend%1000)/10;
auchMsg[11]=(m_TobeSend%100)/10;
auchMsg[12]=m_TobeSend%10;
LRC(auchMsg,13);
//auchMsg[13] ,auchMsg[14] ,保存FCS值
auchMsg[15]=‘*‘; //命令结束符
auchMsg[16]=13;
Array.RemoveAll();
for (Count=0;Count<17;Count++)
Array.Add(auchMsg[Count]);
m _ c t r l C o m m . S e t O u t p u t ( C O l e Va r i a n t ( A r r a y ) ) ;
4.计算校验码函数
unsigned char uchLRC = 0 ; 初始值设定
while (usDataLen——)
{uchLRC ︿= *auchMsg++; }
unsigned char high=0xF0;
//high为校验码的高位
unsigned char low=0x0F;
//low为校验码的低位
high&=uchLRC;
low&=uchLRC;
high>>=4;右移四位
if(high<=9)
high=high+48;
else
high=high+55;
if(low<=9)
low=low+48;
else
low=low+55;
*auchMsg++=high;
*auchMsg++=low;
4.结束语
此程序在VC++6.0中运行通过,并成功应用于振动磨的控制中。该系统采用OMRON XA40DR-A PLC与上位机连接组成控制系统,上位机通过串行口向PLC发出写命令及数据,PLC接受数据后,通过D/A转换模块,将模拟量发给变频器,从而实现了振动磨振动速度和时间的控制。
.故障现象
据值班电工反映,系统电源指示灯POWER亮,正常操作外部开关、按按钮时,CPU面板上ERROR报警指示灯亮,外部输出切断,当时刚好上午准备下班。下开机时,从CPU内部冒出一股浓烟,此时,PLC交流电压为247V左右。
2.故障分析及处理
当PLC控制出现下列**级错误时会引起CPU停机:CPU WAIT’ G (CPU等待)、MEMORY ERR(存储器错误)、NO END INST(无结束语句)、I/O BUS ERR(I/O总线错误)、I/O SET ERR(I/O设置错误)、I/O UNIT ERR(I/O单元错误)、SYS FAIL FALS(系统出错)等。
用编程器读出出错信息如下:COU WAIT’ G、MEMORY ERR。拆下该CPU,经查看内部线路,发现CPU内部电源部分一集成件SI-9510A已炸开,显然,CPU不能运行。可能原因是当时电源电压**OMRON产品给定电压较高值(240Va.c)7V左右或该集成件本身质量欠佳造成的。更换同型号CPU,ERROR红灯仍亮,系统不能启动,用编程器读出的出错信息依然如故。
为了防止意外和查看问题方便,我们将备用的存贮器换上,因其RAM中无用户程序。此时,能引发CPU等待的错误主要有两个方面:特殊I/O单元等待及扩展I/O单元等待。首先,我们查看了扩展单元的各部分,其电源供给正常,发现连接电缆插头松动,插好,试机,PLC CPU依然停机,但无存贮器错误显示。由于系统未进行I/O地址登记,为查找原因方便,将扩展机架“离线”操作,直接检查主板特殊单元。存贮器中RAM为空白,只要拆下坏的模板后,CPU就应运行,其RUN指示灯亮(编程器置RUN或MONIT状态)。当拆下主板上OD215模板后,RUN亮,将备用的OD215进行状态设置,替换后也亮。此时,再将原来的存贮器换上,结果编程器上蜂鸣器马上声响,又出现MEMORY ERR出错信息,可见存贮器也被烧坏。只能用备用的存贮器,重新输入原始用户程序,分段检查、试车,最后全部重新试车,系统正常,交付使用。
直此,笔者认为引起这次停机故障的可能原因是特殊I/O单元OD215损坏,又由于偶然因素如电压偏高,使CPU烧坏及存贮器损坏。
3.体会
(1)PLC控制系统设计时,其电源的稳压设计必须引起重视,以满足当地电压波动范围适合PLC规范要求,为此,我们正着手改进原电源线路
(2)程序需备份。设计者一般均有程序备份,用户手中也必须有正确的程序清单。
(3)平时应当注意何处可以购买到备件,以便及时修复机器。
1 引言
目前高层在各类城市中比比皆是。为了防止意外火灾,高层建筑一般均设有消防**泵组。但是许多设备都因无专人管理,不能定期试机运行,天长日久就会导致泵体卡死、锈死,所以经常会出现在发生火灾时设备不能充分发挥作用的情况,造成不应有的损失。通常老设备的启动/运行转换控制用的是皮碗真空式定时继电器,其定时时间误差大,橡胶容易老化破损,维护不便。电子式定时继电器也存在类似问题。我们采用OMRON公司的可编程序控制器(PLC)对消防泵组进行控制,实现泵组在备用时定期试运行,消防用水时自动启动。硬件无调整元件,,可靠性高,维护方便。而且可以很容易地根据不同需要进行扩展。这样能够有效地杜绝泵体锈死或消防用水时不能及时加压的事故。
2 工作原理
对于一座需要四台15kW消防水泵的高层建筑而言,在没有消防用水需求商,**台水泵启动(星形)10秒钟,运行(三角形)30秒后,停机待命120小时(五天)。待命期间如果没有消防用水,则*二台水泵启动10秒,运行30秒,停机待命120小时,如此周而复始地循环。在有消防用水需求时,泵组立即自动启动,加压供水,充分发挥其应用的作用。
3 硬件结构与工作过程
根据控制对象的具体情况,我们选用OMRON公司的小型可编程序控制器C20P进行控制设计。C20P属于C系列的小型机,共有20个输入/输出点。其中输入点12个,输出点8个,有晶体管、可控硅和继电器三种输出形式。我们选用继电器输出型的。P型机的内部指令十分丰富,能提供近50个定时/计数器供用户使用,对于本设计完**够满足要求。设计中输入点用了5个,8个输出点则全部用完。具体I/O分配如表1所示。
表1 系统I/O分配表输入
输入 | 水流 检测 | 低压 检测 | 高压 检测 | 启动 按钮 | 停止 按钮 | | | |
| 0001 | 0002 | 0003 | 0004 | 0005 | | | |
输出 | 0500 | 0501 | 0502 | 0503 | 0504 | 0505 | 0506 | 0507 |
| 1#泵 Y形 | 1#泵 D形 | 2#泵 Y形 | 2#泵 D形 | 3#泵 Y形 | 3#泵 D形 | 4#泵 Y形 | 4#泵 D形 |
输入信号分别为水流指示器、水压检测和手动输入。其中水压检测和手动输入各占两点。水流指示器的结构原理为:在水管内安装一个带杠杆的橡皮挡板,杠杆一端连接一个微动开关。如果管道内有水流流动,水流就冲开橡皮挡板,其杠杆推动微动开关,使触点的状态发生变化。水压采用电接点压力表进行检测。一般情况下如前述四台泵循环试机运行。一旦发生火警,打开消防喷淋头或者消防水,水流指示器的常开触点闭合,或者按动消防**启动按钮,水泵即逐台按照水压要求启动运转。实际工作中,若**台水泵投入后水压达不到所需压力,压力表低压检测触点断开,*二台水泵自动投入运行。若*二台水泵投入后仍达不到所需压力,即压力表低压检测触点仍不闭合,则*三台水泵自动投入运行。依此类推。若水压**所需压力,压力表高压检测触点闭合,则依次停后启动的水泵,直到水压稳定下来,保持水压恒定在所需的压力范围内。这样可以减小消防人员的操作难度,同时也减小了对管道薄弱环节的威胁。每一台水泵都用两只接触器分别接成星形和三角形结构,用以启动和运行。用水完毕后,水流检测触点断开或者手动按下停水按钮,则重新进入试机循环。
4 系统软件设计
PLC的软件设计一般采用梯形图的形式进行编程,直观且简单易学。C系列PLC的指令丰富,提供了48个定时/计数器供用户使用,从而给系统设计带来了很大的方便。在设计中,长时间的定时控制若采用多个定时器级连的方式实现,虽然直观,但略显繁冗。我们在程序中用定时器设计了一个1分钟的时钟作为其他计数器的输入,使得长时间的定时设计更便于实现,控制程序也就更加简洁。在消防用水时为了避免由于水压波动而导致水泵频繁起停,我们在程序中采用了“延时滤波”处理,达到了较好的效果。在为提升水压而增加后续水泵时,为了避免同时投入水泵而对电网造成过大的冲击,也采用了延时的方法,达到了预期的目的。
http://zhangqueena.b2b168.com