S7-1200 Step7 V12学习体会-间接寻址

LionAL99

  • 帖子

    153
  • 精华

    4
  • 被关注

    1

论坛等级:游侠

注册时间:2007-03-20

普通 普通 如何晋级?

发布于 2013-11-04 14:58:24

4楼

在S7-1200的tep7 V11的编程中,有3种方法实现间接寻址,分别是FieldRead / FieldWrite(适用于LAD编程)以及PEEK / POKE指令(适用于SCL编程),另有直接对数组下标变址寻址的间接寻址指令(适用于LAD/SCL编程)。
1) FieldRead及FieldWrite指令
此指令适用于LAD编程,且需预先定义数组,其通过改变数组下标实现读取或写入不同数组元素,从而实现间接寻址,例子下图所示。
先在DB1中建立1个Bool型数组arrayBool1[0..15] of Bool,即此数组中元素为Bool型,下标从0开始,共16个元素。





说明:1.1 可用于间接寻址的变量类型很多,可通过图中“FiledRead”处下拉框选择,未选择前此处显示“???”,选择后即为待读取的数组中元素类型,如上图,数组arrayBool1中元素类型为Bool;
1.2 输入“INDEX”为待读取的数组的下标,注意其可为常数或变量,若为变量,则该变量须为Dint型,否则会编译出错;
1.3 输入“MEMBER”为待读取数组的第1个元素,如数组下标从0开始,则此处须为arrayBool1[0],如若数组下标从-2开始,则此处须为arrayBool1[-2],否则会编译出错;
1.4 输出“VALUE”为读出数组中规定元素值后传送至此,即将此值写入VALUE中,此处要求其数据类型与读取的数组元素类型一致;
1.5 FieldWrite指令与此类似,为将VALUE值写入数组MEMBER[INDEX]中。

总结:FieldRead及FieldWrite需要配合数组进行操作以实现间接寻址,此指令在SCL编程时直接用数组下标来取值,如下所述。
2) SCL/LAD中MEMBER[INDEX]语句
在SCL或LAD编程时,可直接采用MEMBER[INDEX]语句,表示数组MEMBER的第INDEX个元素,实现简化间接寻址,如下两图所示,分别为SCL及LAD编程时采用数组下标间接寻址。



说明:2.1 #wordWelderDnSignalMap为FC的Output参数,#wordTemp为FC的word型Temp参数, atTemp1为其变量覆盖(以Bool型数组覆盖),wordWelderDnSignal为FC的In参数;
2.2 下标index类型不限于Dint(LAD中需指定为Dint),此例中index类型为int;
2.3 可传送多种类型,只要保持数组中元素数据类型与待赋值变量数据类型一致即可。



如上图,利用MOVE指令传送数组元素。

3) PEEK / POKE指令(适用于SCL)
以上间接寻址均需要数组参与,如果想对非数组变量(如I,Q,M区的位,字节,字及双字变量)进行间接寻址,需使用PEEK及POKE指令。
3.1 PEEK指令
PEEK指令共有对Bool操作的PEEK_BOOL指令,对Byte操作的PEEK指令(默认),对字操作的 PEEK_WORD指令及对双字操作的PEEK_DWORD指令;
PEEK_BOOL指令有4个参数,其它PEEK指令参数为3个,如下图所示。



PEEK_BOOL指令参数说明如下:
area:定义读取数据存储区。16#81为I区,16#82为Q区,16#83为M区,16#84为DB区
dbNumber:定义DB编号,或area参数不为16#84,此值必须为0
byteOffset:定义欲读取的字节编号
bitOffset:定义欲读取的位编号
指令返回值:读取相应类型数据的结果
相对于PEEK_BOOL,其它PEEK指令除没有bitOffset参数外,余参数含义皆一致。



说明:第1条指令将M5.2数据写入数组变量arrayWelderInterlockStatus第1个元素中,数据为Bool型
第2条指令将MB4数据写入变量wordWelderInterlockStatus中,数据为Byte型

3.2 POKE指令
POKE指令共有3个:对Bool类型数据操作的POKE_BOOL指令;对字节,字及双字操作的POKE指令,以及对字节,字及双字批量写入的POKE_BLK指令。




POKE指令参数含义如下:
area:area:定义待写入数据存储区。16#81为I区,16#82为Q区,16#83为M区,16#84为DB区
dbNumber:定义DB编号,或area参数不为16#84,此值必须为0
byteOffset:定义待写入的字节编号
value:待写入数值
POKE_BOOL指令参数含义如下:
bitOffset:定义待写入的位编号
其它参数与POKE参数含义相同。
POKE_BLK指令参数含义如下:
area_src:源数据格式,16#81为I区,16#82为Q区,16#83为M区,16#84为DB区
dbNumber_src:定义源数据区DB编号,若源数据为DB区,则此值为0
byteOffset_src:定义源数据区字节编号
area_dest:目标数据格式,16#81为I区,16#82为Q区,16#83为M区,16#84为DB区
dbNumber_dest:定义目标数据区DB编号,若目标数据为DB区,则此值为0
byteOffset_dest:定义目标数据区字节编号
count:定义需传送的字节数
POKE指令一般不需返回值,如果有,只是作为指令是否执行成功标志。
以下为各POKE指令在SCL中应用。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15117条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。