wingwf2000
级别: 探索解密
精华主题: 0
发帖数量: 20 个
工控威望: 116 点
下载积分: 559 分
在线时间: 12(小时)
注册时间: 2010-09-26
最后登录: 2024-04-13
查看wingwf2000的 主题 / 回贴
楼主  发表于: 2019-07-20 09:12
间接访问就是用指定存储器的地址或索引或ID来读写存储器的内容,这里是使用索引的方式,因为输入的数据不是存储器的实际地址,西门子的存储器地址比较复杂,按类区别,一般得不到存储器的地址,但存储器的索引也就是存储器的号则经常使用,一般情况下在S7-300、400中需要用STL指令写,梯形图是不支持的,但STL不容易学,也容易出错,所以用SCL写了这个库,然后在梯形图中使用,方便了程序的编写。
其中S7-300_1中是编译过的库,S7-300_4中的是SCL源代码,由于高级语言的结构性太强,所以编译后的代码肯定没STL直接写的那么高效,但高级语言出错机会小,另外就是编译后的库不太好监控,因为编译后变成了STL格式。
注意:字MW0的索引是0,字MW1的索引是1,虽然一般不会这样用,因为字的边界或起点一般定在偶数,所以参数里的索引事实上指字的起点地址,对于双字也是一样的;对于Q、DB、I区的字和双字也是这样的;所以若是循环使用连续的字或双字时,要注意字的索引和双字的索引的增量分别是2和4,如果增量是1的话,就会导致前后的操作发生数据重叠。
[ 此帖被wingwf2000在2019-07-26 00:19重新编辑 ]
附件: 间接访问.rar (224 K) 下载次数:460
网站提示: 请不要用迅雷下载附件,容易出错
wingwf2000
级别: 探索解密
精华主题: 0
发帖数量: 20 个
工控威望: 116 点
下载积分: 559 分
在线时间: 12(小时)
注册时间: 2010-09-26
最后登录: 2024-04-13
查看wingwf2000的 主题 / 回贴
1楼  发表于: 2019-07-20 09:14
在编译SCL时可以关闭地址溢出的检查选项,会减小编译后的STL代码量,但可能传入的参数超范围时导致错误,建议还是打开地址检查选项,使程序更健壮
wingwf2000
级别: 探索解密
精华主题: 0
发帖数量: 20 个
工控威望: 116 点
下载积分: 559 分
在线时间: 12(小时)
注册时间: 2010-09-26
最后登录: 2024-04-13
查看wingwf2000的 主题 / 回贴
2楼  发表于: 2019-07-20 09:17
程序分为对I区、Q区、M区和DB区的位、字节、字、双字的读、写,其中对位的读写又分两种,一种是给出位所在字节的地址和位的位号,另一种是直接给出位的编号,也就是字节地址*8+位号,这样便于在循环时自动修改位地址
wingwf2000
级别: 探索解密
精华主题: 0
发帖数量: 20 个
工控威望: 116 点
下载积分: 559 分
在线时间: 12(小时)
注册时间: 2010-09-26
最后登录: 2024-04-13
查看wingwf2000的 主题 / 回贴
3楼  发表于: 2019-07-20 09:18
呵呵,西门子的I区也是可以写的哦,只是下个周期时新数据会覆盖上次修改的数据,但有时可能会用到修改I区数据的功能