00常规编程技能培训项目文档.docx
- 文档编号:3310096
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:34
- 大小:1.24MB
00常规编程技能培训项目文档.docx
《00常规编程技能培训项目文档.docx》由会员分享,可在线阅读,更多相关《00常规编程技能培训项目文档.docx(34页珍藏版)》请在冰豆网上搜索。
00常规编程技能培训项目文档
1、BSCX模块的各参数功能------------------------------------------------------2
2、CSCX模块各参数功能--------------------------------------------------------4
3、数据类型------------------------------------------------------------------7
4、IEC基础模块库-------------------------------------------------------------11
5、定时器--------------------------------------------------------------------12
6、通讯辅助函数--------------------------------------------------------------13
7、SFC段落-------------------------------------------------------------------17
8、累积函数------------------------------------------------------------------19
9、AIALM报警模块-------------------------------------------------------------22
10、蒸汽补偿-----------------------------------------------------------------23
11、MOTOR_PULSE二位式电机控制模块--------------------------------------------30
12、智能卡通讯模块-----------------------------------------------------------31
常规编程技能培训
为了使工程公司新员工具备岗位所涉及的常规编程能力,特整理以下要点,以供参考。
1、BSCX模块的各参数功能
单回路控制模块(BSCX)可用的成员如下表所示:
最常用的成员介绍:
SwSV是给定值切换开关,当SwSV=ON时回路给定为外给定,并可通过ESV成员进行给定;SwSV=OFF该单回路为内给定,并可通过SV成员或者监控画面中的回路面板进行给定。
SwAM是回路的手自动切换开关,当该成员为ON时,回路投入自动运行;当它为OFF时则可对回路的输出手动赋值。
SwTV是回路的输出跟踪开关,当该成员为ON时,回路的输出跟踪成员TV的信号(即MV=TV)。
BSC回路工作原理如下:
模拟量输入信号的测量值进入回路后首先根据其质量码FLAG信息判断是否存在报警,然后根据给定值切换开关SwSV的状态来选择回路是外给定还是内给定:
如果外给定,则回路给定值取ESV成员的值;如果内给定,则回路给定值取SV成员或监控画面中回路面板中SV的值。
同时将得到偏差值,即SV-PV,如果该差值超过偏差报警限则产生偏差报警。
如果需要对回路进行输入补偿,则可通过IA引脚实现,输入补偿后信号将通过PID参数进行调节(即比例、积分、微分),如果有输出补偿要求的,则可通过OA引脚完成。
当然,回路的PID调节和补偿必须是在回路投自动的情况下才能完成,即将手自动切换开关SwAM打到自动(为ON)。
如果此时跟踪开关SwTV为OFF,那么信号通过输出限幅后由回路的MV引脚进行输出。
如果SwAM为OFF的,即回路为手动控制时操作员在监控画面上可手动调节MV值的大小。
若跟踪开关SwTV为ON,则MV直接输出TV引脚的值。
控制模块成员变量的引用格式如下:
g_bsc[n].member
其中,g_bsc[n]是系统变量,代表自定义单回路,序号n为回路序号;member是回路的成员。
例如,我们需要将自定义回路1打到手动控制状态,则可以表示为:
g_bsc[1].SwAM=OFF;
我们需要将自定义回路2打到自动控制状态,并将外给定其设定为TAG_ESV(sfloat类型),则可以表示为:
g_bsc[2].SwAM=ON;
g_bsc[2].SwSV=ON;
g_bsc[2].ESV=TAG_ESV;
2、CSCX模块各参数功能
串级回路控制模块(CSCX)可用的成员如下表所示:
成员
说明
类型
补充说明
SwCas
串级/单回路切换开关
bool
ON—串级
SwSV
内/外给定开关
bool
ON—外给定
SwAM
手/自动开关
bool
ON—自动
InSwNeg
内环正/反作用开关
bool
ON—反作用
ExSwNeg
外环正/反作用开关
bool
ON—反作用
SwTV
输出跟踪开关
bool
ON—跟踪
InSwDT
内环微分方式开关
bool
ON=dPV/dtOFF=dErr/dt
ExSwDT
外环微分方式开关
bool
ON=dPV/dtOFF=dErr/dt
InMV
内环控制量
sfloat
InMV=最终输出
ExMV
外环控制量
sfloat
ExMV=InSV-ExOA
InSV
内环内给定值
sfloat
ExSV
外环内给定值
sfloat
ExESV
外环外给定值
sfloat
InKP
内环比例常数
sfloat
Kp*2=1/P
ExKP
外环比例常数
sfloat
Kp*2=1/P
InTI
内环积分时间
int
单位为0.1秒
ExTI
外环积分时间
int
单位为0.1秒
InTD
内环微分时间
int
单位为0.1秒
ExTD
外环微分时间
int
单位为0.1秒
TV
输出跟踪量
sfloat
InIA
内环输入补偿
sfloat
ExIA
外环输入补偿
sfloat
InOA
内环输出补偿
sfloat
ExOA
外环输出补偿
sfloat
InER
内环偏差报警值
sfloat
ExER
外环偏差报警值
sfloat
ML
输出限幅下限
sfloat
限幅作用在手自动后,跟踪前
MH
输出限幅上限
sfloat
InKV
内环可变增益
sfloat
ExKV
外环可变增益
sfloat
CSC回路的工作原理如下:
串级回路控制模块其实是由两个单回路模块构成,如上图所示上面的回路表示串级的外环回路,下面的回路表示串级的内环回路,当实现串级回路时,外环的输出作为内环的设定值。
串级回路控制模块的工作原理与单回路的工作原理类似。
控制模块成员变量的引用格式如下:
g_csc[n].member
其中,g_csc[n]是系统变量,代表自定义串级回路,序号n为回路序号;member是回路的成员。
3、数据类型
SControl支持的变量数据类型为:
布尔型、字、双字、整型、无符号整型、长整型、无符号长整型、浮点型、半浮点型、数组、结构;
在信息技术和数码技术领域中,1个字节等于8个二进制位,用于表示信息的数量的单位。
每个二进制位,可用来代表两种状态之一,如电路的开/断等。
我们把开关量定义为bool型,进入DCS系统的模拟量定义为sfloat型。
sfloat的结构:
sfloat型数据占2个字节,有16位。
1位符号位,符号位0表示正数,1表示负数;
3位整数位,由二进制算法可知最大可以表示十进制数的7;
12位小数位。
所以半浮点数据类型能表示的数据范围是-7.9997~+7.9997。
那用半浮点数据类型来表示模拟量数据不是容易超限吗?
不会的!
因为我们进入DCS的模拟量数据是经过无因次化的百分数来表示的。
也就是说用半浮点数的0—1来表示模拟量量程的0—100%。
满量程是1,也就不会超过7.9997。
例如有个温度信号量程是0-100℃,如果采集温度是50℃,那就用0.5来表示,如果采集温度是90℃,那就用0.9来表示。
为什么用半浮点而不用浮点数来表示模拟量呢?
因为浮点数字节数比半浮点数多一倍,而计算机的内存容量是有限的,因此用半浮点数据类型表示数据比较节省系统资源,也能提高系统的运算速度。
因此用半浮点数据类型表示数据比较节省系统资源,也能提高系统的运算速度。
数据类型的定义:
用户可以用数据类型编辑器生成自己的数据类型,并可以在任何编辑变量类型的地方使用。
在工程菜单下打开数据类型编辑器,系统内已预定义了部分数据类型,这些数据类型只读,无法修改或删除。
如果需要定义新的数据类型,点击添加,用户可以自定义数组和结构类型。
数组是有序数据的集合,数组中的每一个元素都属于同一个数据类型。
用一个统一的数组名和下标唯一地确定数组中的元素。
在这里,我们可以定义数组的类型,然后在变量编辑器中定义数组。
例:
我们要对5个温度位号比较大小,并将最大值输出。
要求使用ST语言完成该算法。
分析:
我们可以采用冒泡法对位号排序,得到其最大值。
所以我们要定义一个数组,并将各位号赋值给数组的各成员,以便使用循环语句进行比较运算。
首先,数组名称为“TT”,类型为“数组”。
定义数组成员,元素个数是5个,元素类型是SFLOAT型。
点击确定,出现下面的对话框。
这样我们就新建了一个数组类型,在变量编辑器中就可以定义数组了,如下图:
图2-30定义数组
在ST段落中,COMPARET[0]即为该数组的第1个成员,COMPARET[0]为该数组的第1个成员。
如果成员都是同一种数据类型的,类型可以定义成数组。
但是如果成员不是同一种数据类型,只能定义成结构。
例:
5个泵的开关和一个流量信号作为一个整体控制对象的五个成员,需要进行一些复杂的控制运算,定义6个中间变量,而工艺装置中这样的对象有好几个,那可以新建一个结构类型,成员是5个泵的开关和一个流量信号,后面定义中间变量时,定义成数据类型为结构就可以了。
比如结构名称为STR,类型为结构。
定义结构成员,元素个数是6个,5个成员类型是bool型,1个成员类型是sfloat。
点击确定,出现下面的对话框。
模入量就是一个结构数据类型,它包含了半浮点数据类型的成员,如PV、SV、MV;还有报警使能SwAm等BOOL型成员。
4、IEC基础模块库
熟练运用IEC基础模块,包括:
比较运算、定时器(RS/SR/R_TRIG/F_TRIG/TOFF/TON/TP)、逻辑运算、算术运算、转换运算、选择运算、线圈、触点等;
各模块的说明详见SCCONTROL帮助主题,有以下几点是初次接触图形化编程容易出现的错误,需要特别注意。
A、不同数据类型的数据不能直接进行比较或运算,需要转换成相同类型的数据,SFLOAT型与FLOAT型数据转换规则一般为:
sfloat型转化成float型(SFLOAT_TO_FLOAT),乘以sfloat的量程后等于float数值;float型除以float的量程后,转化成sfloat(FLOAT_TO_SFLOAT),等于sfloat的数值。
例如一个sfloat型的数据aaa(量程为0~200)与一个float型数据bbb做加法运算,需要将aaa转换成float,然后乘以200后与bbb相加。
(也可将bbb转换成量程为0~200的sfloat型,再与aaa相加,此时需要将bbb的量程设置为0~200),建议对不同类型数据的运算,都将其它类型的数据转换成float型数据后再进行运算。
B、模块的EN/ENO引脚为模块的使能角,即当EN角为ON时,该模块才起作用,此时该模块的ENO引脚输出为ON。
建议除了MOVE模块以外的模块,不采用EN/ENO引脚进行逻辑或其它运算。
C、不同段落的程序执行的先后顺序和运算周期可以在段落管理中调整:
同一段落中的语句执行顺序为从左到右,从上到下。
5、定时器
每一块主控卡提供256个100毫秒定时器(timerms[n])、256个秒定时器(timers[n])、256个分定时器(timerm[n]),与SCCONTROL中的定时器模块(TOFF/TON/TP)中的定时器不同的是:
主控卡提供的定时器基准为主控卡内的时钟芯片,计时精确;而定时器模块(TOFF/TON/TP)中的定时器会受到控制周期的影响。
一般控制控制系统的扫描周期设置为500ms,所以100毫秒定时器的实际只能用作500ms定时器,即timerms[n]实际都是以0、5、10……5的倍数来计时的。
主控卡一旦冷启动后,所有的定时器都开始计时,所以在引用定时器时需要注意定时器的复位;定时器数据类型为uint型,其量程范围为0~65535,在写程序时必须注意不超过其上限。
6、通讯辅助函数
对于一个较大的系统,有时无法做到将程序需要调用的位号集中在一个控制站中。
这里,就需要进行数据的站间调用。
为了实现在控制站间交换数据,在每个控制站中开辟了16片接收数据区,每片数据区对应一个控制站,用于描述每个控制站的共享数据;每个控制站还有一片发送数据区,用以发送共享数据。
发送数据区有128*4个字节描述为LONGg_msg[128](在SCControl中数据类型为DWORD)。
为了最灵活经济的使用这片数据区,系统定义了一系列函数处理各种数据类型从数据区的放入和取出。
通过sendmsg和getmsg执行发送和接收工作。
假如现在系统中有4个控制站,其中2号站需要调用1号站的一些数据,那么,让我们一起来看看实现数据交换的步骤:
首先,在1号站内编制一段程序,通过程序把需要被调用的数据存放在本站点的发送数据区中,然后把这些共享数据发送到系统的过程控制网上。
这一次的数据发送是采用广播式的发送,也就是不特别指明发送到哪一个控制站中。
以上为被调用数据的站点上进行的操作。
接着,在接收数据的2号控制站中我们也要编制一段程序,将指定的1号控制站发送的数据接收到本站点中。
接收过来的数据可以在本站点中任意使用。
例:
地址为2的控制站中有以下的一些数据需要在地址为4的控制站中使用,这些数据分别是:
地址2号控制站中氧化炉温度TI-101,空气流量FI-101,反应罐液位LI-101,电机1状态DI-101,电机2状态DI-102,电机3状态DI-103,电机4状态DI-104。
经分析,需要发送的数据有模拟量位号3个,开关量位号4个。
根据系统规定,模拟量位号在系统内以2字节的半浮点(sfloat)数据类型存放,开关量以布尔(bool)数据类型存放。
对于g_msg变量,每一个g_msg分别可以利用它的高16位和低16位存放2个半浮点型或整型的2字节变量;若是布尔型的数据,g_msg的每一位可以存放一个布尔量,也就是每个g_msg变量可以存放32个布尔量(开关量);对于像浮点型(float)这样的本身就占用4个字节的变量,每个g_msg只能存放一个。
在这里,根据题目要求,我们使用两个g_msg变量,其中的一个g_msg存放题目中要求的2个模拟量位号,正好占用了4个字节,另一个g_msg存放题目中的另一个模拟量位号(2个字节)和4个开关量(4位)。
发送:
在地址为2的控制站中,编写一段程序,程序中,将3个模拟量和4个开关量分别存放在2个g_msg变量中,为了方便起见,程序中使用了g_msg[0]和g_msg[1]。
然后将这两个g_msg发送出去。
SETSFLOST模块的功能是在输入的32位DWORD型变量的指定位置设置16位的sfloat值,再赋给输出值。
输入引脚X上连接了一个DWORD变量,输入引脚SF上连接的就示需要在其他站点上被调用的数据位号,输入引脚SERIAL上连接的数字表示该半浮点位号在双字的g_msg变量中存放的位置序号(0表示放在低16位,1表示放在高16位)。
将所需的数据存储在DWORD变量指定位置后,将数值改变后的DWORD变量从输出引脚Y输出。
SETBIT模块的功能与前面的模块类似,是在输入的DWORD型值的指定位置设置开关数据,再赋给输出值。
也就是,在已存在的DWORD型值的某一位上设置开关数据,其余不变,然后输出。
输入引脚X上连接了一个DWORD变量,输入引脚Q上连接的就示需要在其他站点上被调用的数据位号。
输入引脚SERIAL上连接的数字表示该布尔型位号在双字的g_msg变量中存放的位置序号(0表示放在最低位,31表示放在最高位)。
将所需的数据存储在DWORD变量指定位置后,将数值改变后的DWORD变量从输出引脚Y输出。
SENDMSG模块的功能是通知发送消息的个数。
SIZE定义消息的个数,消息内容放在g_msg[]中。
注意:
SIZE的值应为g_msg[]中序号的最大值加1。
根据上述分析,则发送站的图形化组态程序如下:
接收:
接着我们需要在接收数据的站点—地址4号控制站编写接收数据的程序。
本站点需要接收的数据就是地址2号控制站发送出来的两个g_msg变量—g_msg[0]和g_msg[1]。
GETMSG为从其他控制站取消息的函数。
GETMSG模块的功能是从其他控制站取传送过来的消息。
STATION引脚为控制站号,填写控制站的地址。
SERIAL引脚为消息序号,填写所接收的msg序号。
MSG引脚输出的是接收到的消息。
MSG为DWORD型。
GETSFLOST模块的功能是从输入的32位DWORD型值的指定位置取16位的SFLOAT型值。
其中,在计算机中,SFLOAT型用定点表示法表示。
SERIAL=0,取低16位;SERIAL=1,取高16位。
输入引脚X上连接了一个DWORD变量,即为取数据的数据源。
输入引脚SERIAL上连接的数字表示从双字的变量中取半浮点数的位置序号(0表示从低16位取数,1表示从高16位取数)。
取出的半浮点数从输出引脚Y输出。
GETBIT模块的功能与前面的模块类似,是从输入的DWORD型数据的指定位置取BOOL数。
输入引脚X上连接了一个DWORD变量,即为取数据的数据源。
输入引脚SERIAL上连接的数字表示从双字的变量中取布尔数的位置序号(0表示从最低位取数,31表示从最高位取数)。
取出的布尔数从输出引脚Q输出。
同时,我们定义本程序所要用到的一些变量,这里我们将他们定义成私有变量。
根据上述分析,则接收站的图形化组态程序如下:
数据从网络上接收到本控制站后,通过上面的方法将数据取出来放在指定的变量中以后,在本控制站就可以任意的调用这些数据的实时值了。
注意:
对于工程设计,应尽量将同一程序需要调用的数据安排在同一控制站中,以减小数据站间的传送量,节约系统资源。
且站间数据通讯有一定的延时,不可应用于时间响应要求较高的联锁、控制等。
7、SFC段落
在SFC中,除了常规的变量定义和应用之外,我们可以通过一些SFC段落特殊变量来实现更高的控制要求。
在这里我们主要介绍控制变量、复位、禁止转换、强制步进、操作使能等。
控制变量:
控制变量是用来控制运行的。
当选中的变量状态为“ON”时,该段落程序运行;当变量状态为“OFF”时,该段落程序禁止运行。
复位变量:
状态为ON时,SFC程序起始步被设置为激活步,其它步都强制变为不激活状态,顺控程序从头开始重新执行。
当控制变量为OFF时,复位变量无效。
注意:
复位变量在被赋值为ON后的一个程序周期之后会自动复位。
在SFC中必须存在该复位变量,即使程序中未使用到也必须在此定义。
否则程序编译无法通过。
禁止转换:
变量为ON时,当前激活步将一直保持执行而不管紧接的转换条件是否满足,转换条件测试将不进行。
强制步进:
变量为ON时,当前激活步不管转换条件是否满足,都变为不激活状态,按顺序的下一步变为激活状态。
该变量在被赋值为ON后的一个程序周期之后会自动复位。
控制变量、复位变量、禁止转换、强制步进变量之间存在优先级的问题。
控制变量的优先级最高,其次是复位变量,再次是禁止转换变量,强制步进变量的优先级最低。
比如,当控制变量为OFF时,即使复位变量为ON,整个程序和该变量也不会马上复位,而是等待控制变量变成ON后才执行相应的动作。
又比如,当禁止转换条件成立的时候,若强制步进变量为ON,则此时程序不会强制步进,该强制步进变量将一直保持为ON状态直至禁止转换条件不成立为止。
操作使能:
变量为ON时,步中的操作才被执行。
需要注意的是,如果使用了该操作使能变量的话要注意其初始值为OFF,即不允许进行步中的操作。
8、累积函数;
累积问题是控制方案中的常见问题,尤其是对于流量信号,往往会有累积量的要求。
实现流量累积的两个办法:
模拟量组态中的流量累积、程序实现。
模拟量组态中的流量累积
当信号点所取信号是累积量时,选中累积复选框,在时间系数项、单位系数项中填入相应系数,在单位项中填入所需累积单位。
系数的计算方法如下:
工程单位:
单位1/时间1(工程单位指瞬时流量的单位)
累积单位:
单位2(累积单位指流量累积值的单位)
时间系数=时间1/秒单位系数=单位2/单位1
例如:
工程单位:
kg/h(kg为单位1,h为时间1)
累积单位:
kg(单位2)
所以时间系数为h/s=3600
单位系数为kg/kg=1
程序中的流量累积实现
通过定义累积型变量,用模块Total_Accum进行累积。
例:
流量信号FQI_2051(量程0~5000kg/h),自定义8字节变量FQ2051,单位kg。
我们使用Total_Accum模块来完成流量的累积:
当然,我们在ST语言中也可以使用相应的函数来实现。
比如使用structstructAccumTOTAL_ACCUM(structstructAccumx,SFOLATy)函数来实现流量的累积;使用structstructAccumSUB_ACCUM(structstructAccumx,structstructAccumy)函数来实现累积量的清零。
在系统工作时,对采集的模拟量位号首先转换成不带量程不带单位的无因次数,也就是说,FQI_2051首先被转换成0~100%之间的数,由于位号的下限为0,所以FQI_2051直接除以量程即可,比如某一秒钟FQI_2051的实际值为2500kg/h,这个数字在我们的系统中除以量程5000,被转换成0.5(即50%)后进行运算处理。
TOTAL_ACCUM实际上是对这样的一组百分数每秒钟累加一次。
实际运算的时候,是按照下面的公式进行的:
累积量FQ2051=FQI_2051第一秒瞬时值/量程+FQI_2051第二秒瞬时值/量程+FQI_2051第三秒瞬时值/量程+……+FQI_2051第N秒瞬时值/量程。
累积的结果放在FQ2051中,但是我们需要查看的累积值是对实际流量进行累积的结果,也就是需要把每一个流量的瞬时信号还原成实际测量值,所以系统进行处理时,要将累积计算的结果FQ2051乘以量程除以系数然后再显示在操作站上。
但是请注意,这样的累积模块只能直接使用在流量信号下限为0的场合。
当出现了下限非0的流量信号需要进行累积的时候,我们可以对流量信号进行处理,用二维折线表的方式处理输入流量信号,将流量小信号切除,例如,某流量计实际显示量程为10~100m3/h,则在I/O测点中定义量程为0~100m3/h,采用如下的折线表,将0~10m3/h的流量切除,此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 00 常规 编程 技能 培训 项目 文档