菜鸟:
400PLC 控制 6SE70
SFC15 RECORD 中用的是临时变量 数据类型:ANY
ANY里面的数据不知道从那来的
望高手指点!
斑竹:
老外的程序搞得很复杂,但是很严谨,仔细看看
菜鸟:
看了十几天了,就一个简单正反转通过400PLC 控制 6SE70
甲:
确认下是局部变量还是全局变量,局部变量可程序上部的变量表中,全局变量搜索下看看。
菜鸟:
在临时变量里面!
乙:
老外的程序一般都是这样不直接用I/O,一般是将输入赋值中间量(M,DB,#),输出再把中间量(M,DB,#)赋值到输出。
菜鸟:
这个程序是Siemens 奥钢联编的看起太累了,那位高手能指点下有什么方法吗?
AN #Simulation
JNB _015
CALL "DPWR_DAT" SFC15
LADDR :=#LADDR
RECORD :=#ControlAny
RET_VAL:=#RET_VAL_DPWR_DAT
名称 数据类型 地址
TEMP 中 ControlAny Any 20.0
IN_OUT中PPO Status Struct
Control Struct
程序段 1 Source "Any" building
L P##PPO
LAR1
L W [AR1,P#0.0]
T #DBNumber
L D [AR1,P#2.0]
T #StartAddress
LAR1 P##StatusAny
L B#16#10
T LB [AR1,P#0.0]
L B#16#2
T LB [AR1,P#1.0]
L 12
T LW [AR1,P#2.0]
L #DBNumber
T LW [AR1,P#4.0]
L #StartAddress
T LD [AR1,P#6.0]
LAR1 P##ControlAny
L B#16#10
T LB [AR1,P#0.0]
L B#16#2
T LB [AR1,P#1.0]
L 12
T LW [AR1,P#2.0]
L #DBNumber
T LW [AR1,P#4.0]
L 12
SLD 3
L #StartAddress
+D
T LD [AR1,P#6.0]
这一段是不是我要找程序给6SE70变频器启动和停止?
大虾 :
ControlAny 应该是20开始的临时变量,临时变量:是一种在块执行时,用来暂时存储数据的变量,这些数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行介绍,堆栈重新分配,临时变量中的数据将丢失。
临时变量的使用原则:使用前先赋值,再使用。临时字变量也是有地址的,你在TEMP区里查看这个字变量的地址,是20.0,那么这个字变量在功能块里可以用LW 20来寻址,如果要使用其中的位,比如第3位,可以用L 20.3来寻址,所以程序里应该有相关的赋值,
高手:
嗯。程序中应该对L20.0之后的数据进行了写操作。
等于是先整理好了所有数据,后来一个SFC15全部写出去了。
换谁都应该这么做。
能把德国人的程序发来一起看看吗?学习一下看看有多复杂。
丙:
感觉楼主的程序是PLC和70变频器进行报文通信的程序,老外的做法一般是先在临时变量区进行变量定义,而后对定义的变量进行操作后把操作结果保存在临时变量区,而后再用ANY这种类型对定义好的临时变量区进行操作,把操作结果写到需要的地方,数据读操作一般也是这中方式。
菜鸟:
这个就是 PLC和70变频器进行报文通信的程序,我就是找不到程序是怎么发047E 047F 让电机启动与停止。
丁:
看楼主贴出的程序里边没有控制变频器启停的逻辑啊,好像只是对报文数据进行刷新的程序,再没有其它程序了吗?
斑竹:
估计你找不到,应该是没有这样写的指令,若果有,说明这程序也很烂, 根本就不值得学习
这只是一个与变频通讯的程序 ,只管刷数据,与启停逻辑没有关系。
这是10几年前,DP刚开始用的时候的老套路了,针对DPV0,固定报文结构PPO,采用SFC14/15一致性刷新数据的编程方法,到后期DPV1用户自定义结构的报文允许后,就不必这么编程了,尤其是西门子的驱动。
仍旧采用这种程序的好处就是能够兼容第三方带DP接口的驱动器,虽然硬件配置还是要修改,但程序可以基本不改,只要对方严格的遵守Profidrive的规约。
高手:
我刚才又看了一眼你贴的程序。
这个FB有输入接口 #DBNumber
和 #StartAddress
是在一个#DBNumber指定的DB块中, #StartAddress开始的前面6个字是接收的状态数据区,接在后面的是控制数据区。