|
上一篇我用高级语言展示了一下指针的概念,很多人反应看不懂,所以这一节,我结合1200 PLC来讲解指针与数组应用。 在实际应用中,我们经常需要对连续通道的模拟量进行采集转换。假设有3个连续通道的模拟量,IW100,IW102和IW104,即使转换的过程一样,但是还是需要写3条转换公式。如果有30个连续通道,就要写30条转换公式,显然是一个很繁琐的过程,这时候指针就显示出它的用武之地了,下面详细介绍在这个例子中的指针应用。 
图1 模拟10个连续模拟量通道 
图2 声明一个word类型数组 从图2中,声明了一个word类型的数组,数组大小为10,范围为0..9 。我们仔细观察这个偏移量,发现每个数组变量的偏移量间隔为2。这是因为我们声明的是word,占了两个Byte,所以在内存里面,每个变量间隔为2 。 现在我们的问题,是如何把MW100到MW118赋值给AIArr这个数组,一种最简单的办法是,写10条公式,一个一个赋值过去,比如AIArr[0]:=MW100,AIArr[1]:=MW102,整个过程很要命,最简单的方法当然是通过指针命令 POKE_BLK来实现,具体实现如下: 
图3 POKE指令 在上面SCL指令,有两个地方需要注意,第一个是数据区域类型,见下图。第二个是Count,一定要以Byte类型来计算,假设是10个Word类型,Count设置为20,如果10个Real类型,Count应该设置多少呢?请读者自行思考。 
图3 数区域类型 我们来看一下程序运行效果 
图4 MW区域值 
图5 AIArr数据 可以明显看到,两者的结果是一样。现在我们要对模拟量通道的数字量值转化为真实值。如果10个模拟量通道的转换公式是一样的,可以很方便的采用数组+循环来实现,声明一个数组用来存储真实值,如下所示: 
图6 真实值数组声明 从上图,我们可以看到,RealArr的起始地址是20,数组之间的偏移量为4。请读者自行思考为什么是这样?? 
图7 数字量值转真实值过程 从上图中发现,通过FOR循环可以很方便的实现数字量转换为真实值。虽然两者类型不一样,但是PLC内部实现了隐式强制转换。 
图8 转换效果 结束语今天就讲到这里,欢迎大家留言拍砖,下节课开始讲通信。 欢迎大家关注另外一个平台,gongz hao 为 plcteacher,后面PLC方面的文章,都迁移到那里,方便阅读。 来源:PLC布道师
|