ABB PLC 新手入门------经典程序示例
1. 模拟量输入转换
对于4-20mA转换为对应量程,ABB的模拟量输入模块DI810是可以直接设置的,无需做转换算法,此处我们通过程序写算法来实现。
首先新建一个库,添加名称:
然后在新建的库里面添加功能块:
打开功能块编写程序(ST格式): InputInt:=Input;
if InputInt InputInt>InMaxRange then InputInt:= InMaxRange; end_if; InRange:=InMaxRange-InMinRange; OutRange:=OutMaxRange-OutMinRange; Output:=(InputInt-InMinRange)/InRange*OutRange+OutMinRange; 8 定义的变量如下: 代码: 接下来我们在程序中调用自己写的功能块: 2.点击此处找到自己写的库函数中的功能块: 1.打开程序,右击选择插入功能块: 3.插入后如下: 8 最后,下载到仿真器测试,效果如下: 0~16384对应0-100,因此输入8192,则输出为50,测试正确。 顺便再介绍下ABB PLC中的变量定义及其属性: 属性 类型 名称 变量名称和西门子不一样的是不是以M或者开头,可以任意单词定义;类型是一样的,都有整形,浮点数,字符串等;属性如下图: 各种属性 各属性区别如下: ? no attribute---重启后数据不保持,替换为初始值;若未设置初始值, 会获取这个数据类型的默认值。 ? retain----------热重启数据可以保持;冷重启不保持,替换为初始值。 ? coldretain ----热重启和冷重启数据都能保持,此属性在结构化数据类 型中重写了保持属性。 ? constant ------常量,在编译下载之后无法改变此值,此属性在结构化 数据类型中重写了保持属性。 ? hidden----------在OPC Server中不可见。 因此,在上图中的两个变量CompAirOk和SimLocal,它们的区别在于CompAirOk在HMI上是可以使用的,而SimLocal无法再HMI上使用(HMI通过OPC连接) 8 2. 浮点数累加精度问题 在处理浮点数累加的过程中,当值很大的时候,比如12345678.9,这时候我们在每1S加0.01,会出现累加的值不准确的情况。 此时我们需要对累加值拆分处理,下图是处理累计里程数, 距离累加(mm) 编码器计算走过的距离 里程数转换成m 当累加值超过10m,清零再次累当累加值超过10m,把当前累加值保存 加,也就说保证浮点累加不超过10 到中间变量BURLenAcc,并把累加值 (mm)清零,重新开始累加距离(mm) 最终显示Appsw.BURRollLen就是当前值 BurLenDisplay(m)加上保存的中间值BURLenAcc 8 3. 顺控 按启动按钮(startbutton)顺控开始执行,一段时间(warmdelay)后当满足一定条件(LevelCompare)执行,共执行3步然后结束顺控,中间可以按停止按钮(Stopbutton)来结束顺控。 打开程序,插入SFC: 编写顺控图,共5步骤: S1-S5共5步骤;Tr1-Tr5为每一步跳至下一步骤的条件: Tr1的条件,后面亦如是 在顺控中,会默认有一些变量我们可以使用,如下: SequenceName.Reset::bool类型,顺控回到初始步 SequenceName.Hold::bool类型,顺控被锁定,但Reset不受影响 SequenceName.DisableActions::bool类型,当前步的所有动作不会执行 SequenceName.X::bool类型,当前步激活的时候为1 8