西门子6ES7223-1BH22-0XA8正规授权
一、 钢板定宽传统控制系统:
目前国内冶金板型加工企业钢板定宽控制系统大多采用机械尺测量宽度
人工进行控制的方法,该系统效率低,控制精度差,回切率高,直接影响经济效益。
二、 PLC控制系统:
根据原控制系统存在的问题,同时为实现成品钢板定宽度剪切的准确测量和控制,提高宽尺合格率,减少回切物耗,增加板边收得量,提高质量和经济效益,对原控制系统进行技术改造,现场信号采集及控制采用PLC系统;
为实现连续检测提高控制精度,宽度检测采用旋转编码器;根据远红外测温仪提供的钢板温度,对热切钢板进行温度自动放尺量补偿;
控制原理是:操作工首先通过操作盘输入预切钢板的宽度值,旋转编码器反馈回钢板实际宽度,同时远红外测温仪将检测到的钢板温度传送给PLC系统,PLC系统根据预设值、反馈值、温度值采用PI调节,输出剪切位置控制信号,控制直流电机,以jingque控制钢板宽度剪切位置。
三、 系统控制示意图:
四、 PLC控制系统主要经济技术指标:
技术指标:
1、 宽度测量和控制范围:1300mm—2300mm(原系统1300mm—2300mm)
2、 测量误差:≤±1mm(原系统≤±15mm)
3、 控制误差:≤±1mm(原系统≤±10mm)
4、 实现手动/自动无扰切换
五、 经济指标以年产量30万吨计算:
1、 减少二次回切增加的成材率效益:(按板宽1600mm,原二次回切2%)
增加成材钢板=300000×2%×1/32=192吨
效益:(按3000元/吨)=192×3000=576000元
2、 提高宽度定尺精度增加的效益:(按定尺板占产量60%计算)
300000×60%×1/800=247吨
效益:(按3000元/吨)=247×3000=741000元
3、 其他效益:
经过系统一年的运行统计,该系统在提高有效作业率,减少停车时间、
增加定尺板的产量等方面增加经济效益10万元/年左右。
,钢板定宽PLC控制系统每年增加的经济效益超过100万元以上。
一、熔盐炉自动系统综述
熔盐炉自控系统是一水硬铝管道化溶出生产线上的重要环节,控制熔盐的加热和循环,用熔盐的热量去循环加热铝矿石浆。铝矿石浆的加热至关重要,影响终产品—氧化铝的质量和产量,因此,熔盐的温度控制和循环控制非常重要。
由于熔盐炉系统在管道化工程中的重要性,同时考虑到熔盐是一种活跃的化学品,在不同的温度下有不同的形态,低温下凝固,高温下不稳定会发生化学反应,从而腐蚀管壁甚至于爆炸,所以安全、可靠、操作简便和自动化管理是系统设计的关键,因此考虑用一套双CPU冗余的PLC、两套工控机、高质量的传感器、变送器和执行机构来控制两台1200万大卡的熔盐炉、一台盐泵、一组盐阀、一个熔盐槽和其他相关设备,实现熔盐的加热和循环过程自动化、计算机操作、监控和管理的自动化控制。该系统如图1所示。
控制器PLC、工控机(包括显示器)、通讯网络和电源及关键测试点等系统中的重要部件均采用冗余结构,两套工控机和大屏幕显示器组成的两套监控操作管理台并行运行;两条冗余的ControlNet高速通讯网络同时传送数据;两套直流电源同时向控制器PLC、变送器和开关量输入模块供电,关键测试点同时设置两个传感器测试数据。
冗余设计使系统关键部件的可靠性提高了一倍,而使系统的整体可靠性大大的提高。
二、双CPU的PLC控制器
PLC控制器是系统控制的中心,采集系统的全部工况信号,实时控制相关的设备动作;同时监视生产过程参数和设备运行状态,当危险工况出现时,及时发出声光报警,当极限工况出现时,联锁保护设备,保障生产过程安全。为此,我们选择了以产品可靠性高著称的罗克韦尔自动化公司的新一代控制平台:A-B ControlLogix系列,同时考虑采用双CPU模块冗余,进一步提高系统可靠性,避免因故障出现所引起的生产停顿或安全事故。
三、两种双CPU冗余方式的比较
ControlLogix提供有两种CPU冗余解决方法,一种为纯硬件冗余,另一种为软件冗余。
硬件冗余的方法,是将两个CPU模块插在不同的两个机架上,每个机架上除了CPU模块,还要有通讯模块CNBR、热备模块SRM和两个热备模块间的连接光缆,如图2所示。
软件冗余,是将两个CPU模块插在同一个框架上,利用背板通讯,进行冗余控制,如图3所示。
从以上可以看出,纯硬件冗余的方式硬件投入较多,成本开支较大大。而软件冗余,只需增加一块CPU模块,成本增加很少,因为一般像CPU这种PLC的心脏,厂家都会配有备件,用备件来实现冗余控制,既提高了系统的可靠性和可维护性(可做到在线维护,不影响生产线运行),又不会显著增加成本开支。
单纯从可靠性方面分析,纯硬件的冗余较之软件冗余并无优势。因为增加了较多的部件、模块,这些部件和模块的故障,也会影响系统的可靠性。例如,当两个热备模块之间的连接光缆出现故障,同样会使冗余控制失效。而软件冗余,只增加了一块CPU模块,而两个CPU模块的同时故障率几乎为零。
纯硬件冗余的优点之一,就是不需要软件进行专门的编程,CPU的状态监视和控制权的转移是由两个热备模块来完成的。而软件冗余中两个CPU模块的状态监视和控制权的转移是通过软件编程解决的。因此,软件冗余编程相对比较复杂,工作量较大。
综合考虑以上因素,本熔盐炉自动系统采用软件方式实现PLC的双CPU冗余控制。两块CPU模块同时在系统中运行,一块运行于主控模式,另一块运行于热备份模式。当其中任一块CPU发生故障时另一块CPU立即监视到并发出报警,自动将正常的CPU投入主控模式。CPU的无扰动切换,使系统一直受控,确保了安全,同时,使管道化生产线一直处于正常运行的良好工况中。
四、软件实现
CPU冗余控制的软件实现编程主要从下面两方面考虑:
1、控制权的裁决和转移
两块CPU同时在线运行,一块处于主控制模式,另一块处于热备模式。拥有主控制权的CPU具有输出控制权,而热备CPU同时采集数据和保持通讯连接,但输出被禁止。
两个CPU模块互相监视对方的运行状态和通讯情况,一旦发现对方故障,立即发出报警,通过ControlNet网,传送给上位工控机,在操作管理台上显示报警。如果是主控CPU模块故障,热备CPU模块自动获得主控制权。控制权的裁决和转移的软件框图如图4所示。
2、两块CPU模块的同步控制
由于热备CPU随时准备着,一旦主CPU故障,就立即获取主控制权而成为主控CPU,因此,主CPU必须将自己的信息随时传递给热备CPU,而热备CPU必须跟踪主CPU的变化,与主CPU保持同步,这样,在两块CPU模块进行控制权的转移时,实现无扰动切换。CPU模块的同步控制程序框图如图5所示。
五、结束语
用A-B ControlLogix双CPU的PLC控制器实现的熔盐炉自动系统,已于2001年底开始成功运行于中国铝业河南分公司,运行情况良好,满足了一水硬铝管道化溶出氧化铝生产线的工艺要求。
我们的体会是,ControlLogix双CPU冗余控制的软件方式实现是一种经济、有效的方法,它成本支出不大,却能使系统的可靠性大大提高。
另外,双CPU冗余控制时,如何利用Map命令,只将具有主控制权的CPU数据通过ControlNet网传送给其他控制设备,是值得进一步研究的。
1引言
产量监控查询系统系统对整个工厂所有生产线进行实时监控,对每一条生产线的产量进行实时的存储,存储的数据通过组态王连接PLC,将PLC中掉电保持区的数据读到组态王自定义的相应变量当中,每分钟通过标准的SQL语言对数据进行存储(每分钟向SQLSERVER数据库中存储26条数据,即26条生产线的当前产量)。用户可以通过:日期、时间、时间段、车间、生产线对任何车间、任何生产线进行产量的查询;能够对任何车间、任何生产线进行月产量的统计。同时在查询出满足条件的记录后,将结果通过报表的组态显示在相应的表格当中,可以对该结果进行存储和打印。
2 系统设计
2.1系统框图
2.2设备选型设计
3 系统分析
3.1功能要求
可以任意查询一车间、二车间任何生产线(共26条生产线)任何时段的产量。具体明
细如下:
(1)每条生产线产量的数据至少能够保存四个月的储存期,以便对历史数据进行查询。
(2)要求能够查询每条生产线任意每月、任意每天、任意每小时、任意每分钟的产量。
(3)要求能够对任意每条生产线在任意时段的产量进行查询。
(4)查询出来的任何结果要以特定的格式在报表中进行组态,同时将结果打印。
(5)各生产线任意每月产量、任意每天产量、任意每小时产量、任意每分钟产量可以在电脑上用柱状图、实时趋势曲线的形式表现出来
3.2查询方式
(1)能够按照日期进行查询(格式:Year/Month/Day)
(2)能够按照时间进行查询(格式:Hour/Minute/Second)
(3)能够按照生产线进行查询(一车间:1-1、1-2;2-1,2-2;3-1,3-2;4-1,4-2;
5-1,5-2;6-1,6-2;7-1,7-2;8-1,8-2 二车间:1-1,1-2;2-1,2-2;3-1,3-2;4-1,4-2,4-3,4-4)
(4)能够按照任意时间段进行查询(格式:Year/Month/Day Hour/Minute/Second To Year/Month/Day/ Hour/Minute/Second)
(5)能够按照班次进行查询(格式:早班,中班,晚班)早班:7:30—15:30
中班:15:30—23:30 晚班:23:30—7:30
(6)能够查询任意每月任意车间、任意生产线的产量
(7)能够运用
第二步:在用户DSN 选项卡片上,单击添加按钮,出现 创建新数据源 对话框,选择SQL Server(图3)。
第三步:单击第二步的完成按钮,出现创建到SQL Server的新数据源。如图4所示。
输入数据源名称、数据源描述和SQL Server 所在的服务器名称或者IP地址。服务器名称可以是SQL Server所在的机器名称,也可以是IP地址。单击下一步按钮。
第四步:选择登录SQL Server时的身份验证方式。并输入登录SQL Server时所用到的用户名和密码。如图5所示。
这里的用户名和密码是在SQL Server中建立的。在SQL Server数据库中选择 安全性->登录,新建用户,如图6所示。
第五步:一定要选择"更新默认的数据库为"选项,否则默认数据库是master。然后选择您想要连接的数据库。其余的按默认设置,如图7所示。然后单击下一步按钮。
第六步:按默认设置,单击完成按钮(图8)。
第七步:图9给出了数据库连接的摘要信息,如果想测试一下是否能够连接到数据库,可以单击“测试数据源”按钮,会出现测试结果。
单击确定完成连接。接下来的工作就是在组态王王建立记录体、表格模板。其中连接数据库的时候,一定要输入和刚才数据源名称一致的DSN。如 dsn = wuhandsn.
4.3 表格名称创新
即使使用大型的数据库,SQL Server或Oracle,由于每天的数据量多达37440条记录,
如果将一个月,甚至是四个月的记录全部写入同一个数据库的同一个表格,则所有的数据量大的将使表格崩溃,即使数据库能够管理,查询的速度也是可想而知的。将会非常的慢。经过作者反复的思索,想出了一个巧妙的办法,就是以系统的日期作为当天的表格名称。当系统时间为00:00:00时刻时,新建一个表格,通过SQLCreateTable( DeviceID, "TableName", "TemplateName" )函数建立不同的表格。因为组态王支持字符串函数,如下所示:
StrASCII( Char );// 此函数返回某一指定的文字变量首字符的ASCII值
StrChar( ASCII );// 此函数返回某一指定ASCII码所对应的字符
StrFromInt( Integer, Base );// 此函数将一整数值转换为另一进制下的字符串表示
StrFromReal( Real, Precision, Type );// 此函数将一实数值转换成字符串形式
StrFromTime( SecsSince1-1-70, bbbbbbType );// 此函数将一个时间值转换为字符串
StrInStr( Text, bbbbbbFor, StartPos, CaseSens );// 此函数用于查找文本
StrLeft( Text, Chars );// 此函数返回指定文字变量的开始(或左的)若干个字符
StrLen( Text );// 此函数返回某一指定的文字变量的长度
StrLower( Text );// 此函数将指定文字中的所有大写字母转换为小写字母
StrMid( Text, StartChar, Chars );// 此函数从指定的位置开始,从一个文字变量中返回指定个数的字符
StrReplace( Text, bbbbbbFor, ReplaceWith, CaseSens, NumToReplace, MatchWholeWords );
//此函数替换或改变所提供字符串的指定部分
StrRight( Text, Chars );// 此函数返回指定文字变量的末端(或右)若干个字符
StrSpace( NumSpaces );// 此函数在文字变量中或表达式中产生一个空格串
StrToInt( Text );// 此函数在文字变量中或表达式中产生一个空格串
StrToReal( Text );// 此函数将一个由数字组成的字符串转换成一个能用于数字计算的实数值
StrTrim( Text, TrimType );// 此函数删除文字变量中无用的空格
StrType( Text, TestType );// 此函数检测文字变量的首字符以确定其是否为某一类型
StrUpper( Text );// 此函数将一指定文字变量中所有的小写字符转换成大写字符
在组态王中建立内存型字符变量Nabbbbble="A"+StrFromInt( \\本站点\$年, 10)+StrFromInt( \\本站点\$月, 10)+StrFromInt( \\本站点\$日, 10);Nabbbbble的构成为字母A+系统日期。将系统提供的整型变量转换成字符型变量。这样可以在数据库中建立每天的表格。每当系统日期由23:59:59跳变到00:00:00时,执行SQLCreateTable()函数,建立当天的表格,如图10所示,在SQL Server中组态王建立了A2006619日的表格。
4.4 基于Active控件的组态王条件查询
为了完成如此复杂的查询,使用了Active控件,因为组态王支持第三方控件,将所有的条件罗列出来进行排列组合,将每一种情况都考虑在内。然后通过程序来实现选择条件转换成SQLSELECT()函数工作的条件。
(1)任意查询任意生产线在任意时段的产量。因为工艺要求能够任意查询任意生产线在任意时段的产量,为了能够实现该功能,新建\\本站点\CX_Hour,\\本站点\CX_Minute,\\本站点\CX_Hour1,\\本站点\CX_Minute1变量。在以时间段进行查询时,先将以前两个变量输入的时间做为条件进行查询,将查询出记录的数据赋给在过程中自定义的中间变量。然后再以后两个变量输入的时间为条件进行查询,将查询出的结果同样赋给自定义的中间变量。将两次查询的结果求差然后,将日期,时间,车间,生产线,产量通过报表的组态添到表格当中。
(2)对于月产量的查询。需要判断输入的月份有几天,然后从该月的天开始到后进行查询,查询的时刻为每的23:59分时各生产线的产量。然后对查询出的数据进行累加,直到该月的后,然后按照特定的格式将数据填写到报表当中。在该过程中需要灵活的运用循环语句:While{}以及深刻的体会组态王的变量与数据库进行数据交换的过程。
查询的条件比较复杂,有些条件不能同时成立,因此在选择条件时,应该要互相限制,以避免出现混乱的现象。具体的程序在应用程序命令语言运行时写如下程序:
//bbbbbb Systime=StrFromInt(\\本站点\$时,10 )+":"+StrFromInt(\\本站点\$分,10 );
//===================判断 早班,中班,晚班和查询的时段===================================
bbbbbb Timestr=StrFromInt( \\本站点\$时, 10 )+StrFromInt( \\本站点\$分, 10 );
Long Timereal=StrToInt( Timestr );
if(Timereal>=730)
{ if(Timereal<=1530)
\\本站点\班次1="早班"; }
if(Timereal>1530)
{ if(Timereal<=2330)
\\本站点\班次1="中班"; }
if(Timereal>2330)
{ if(Timereal<=2359)
\\本站点\班次1="晚班"; }
if(Timereal>=0)
{ if(Timereal<730)
\\本站点\班次1="晚班"; }
\\本站点\日期=\\本站点\$日期;
\\本站点\时间=StrFromReal( \\本站点\$时, 0, "f" )+":"+StrFromReal( \\本站点\$分, 0, "f" );
if(CommFine1)
{ CommText1="通讯失败!";}
else
{ CommText1="通讯正常!";}
if(CommFine2)
{ CommText2="通讯失败!";}
else
{ CommText2="通讯正常!";}
//===================统计月产量时,查询报表的个数计算====================
if(\\本站点\Monthbbbbb==1){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==2){ \\本站点\DayNumber=28;}
if(\\本站点\Monthbbbbb==3){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==4){ \\本站点\DayNumber=30;}
if(\\本站点\Monthbbbbb==5){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==6){ \\本站点\DayNumber=30;}
if(\\本站点\Monthbbbbb==7){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==8){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==9){ \\本站点\DayNumber=30;}
if(\\本站点\Monthbbbbb==10){ \\本站点\DayNumber=31;}
if(\\本站点\Monthbbbbb==11){ \\本站点\DayNumber=30;}
if(\\本站点\Monthbbbbb==12){ \\本站点\DayNumber=31;}
//=================月产量查询的条件限定===================
if(Check6)
{ Check1=0;Check2=0;Check3=0;Check4=0;Check5=0;}
//==================查询时间和时间段不能同时有效===================
if(\\本站点\Check2)
{\\本站点\Check3=0;Check1=1;}
if(\\本站点\Check3)
{\\本站点\Check2=0;Check1=1;Check6=0;}
//====================插入表格的名称======================
Nabbbbble="A"+StrFromInt( \\本站点\$年, 10)+StrFromInt( \\本站点\$月, 10)+StrFromInt( \\本站点\$日, 10);
7 结束语
尽管台达的PLC属于小型PLC,但可靠的性能,支持485通讯等特点,同样能够完成集中控制的功能。同时配合组态软件,一样能够实现复杂的工厂监控、数据查询、打印、报表等DCS系统的功能。篇幅有限,欢迎读者联系作者深入交流。