前段时间读一位网友给发来的程序,发现了一个使用CP进行通讯的程序,我对CP的控制很感兴趣,就查找了下相关介绍,在这里和大家分享一下.
接受CP传出的数据
FC 12 PNIO_RECV:
工作原理
程序块 PNIO_RECV用于在 CP 的 PROFINET IO 控制器模式或 PROFINET IO 设备模式下接收数据。
1.作为PROFINET IO控制器运行
该块接收了来自PROFINETIO设备的过程数据(控制器输入)以及来自指定输入区域内的PROFINET IO设备的IO提供者状态(IOPS)。
2.作为PROFINET IO设备运行
该块接收通过PROFINETIO控制器传送的数据(已组态的IO地址)和PROFINET IO控制器的IO提供者状态(IOPS),并将其写入到PROFINETIO设备的CPU上为过程输出保留的数据区内。
IO接口定义
CPLADDR : IN 模块起始地址
MODE: IN
MODE | X0H:- IO控制器模式- IO设备模式(无并行操作)- | Y = 选择IO控制器IO设备模式;X = 选择在CHECK_IOPS中仅传送组消息还是同时在IOPS中传送状态位。 |
X1H:IO设备模式(同时使用两个模式) | ?只要CP不同时作为IO控制器和IO设备操作,就仍可继续使用版本1.0的FC | |
0YH在IOPS中传送状态位。 | 当MODE=0时,FC V2.0及以上版本的特性与FC V1.0版本相同 | |
8YH限制CHECK_IOPS中的组消息;IOPS中无状态位 | 当MODE=0和MODE = 1时,FC V3.0及以上版本的特性与FC V2.0版本相同 |
RECV IN_OUT
RECV | 存储器位区 | 指定地址和长度 |
数据块区 |
IO控制器模式: 长度应与所组态的分布式IO的总长度相匹配,据此也可传送地址间距。 长度也可以比分布式I/O的总长度短,例如,当块在OB中多次被调用时。然而,总长度必须至少能满足一次调用需要。 |
|
IO设备模式: 数据结构根据在PROFINET IO控制器链上为此PROFINET IO设备组态的输出模块的插槽的顺序获得的,并且它们的长度没有地址间距。 |
LEN INPUT
LEN | 数值 > 0用户可在CP文档中的性能数据中查找要传送的输出数据的最大总长度。 |
以字节为单位的将要传送的数据区的长度。 无论如何组态,将始终从地址0开始传送数据。请注意,包括长度为1的IO地址"0"。 |
控制器和设备模式的最大总长度可以不同 |
IO控制器模式: 1.必须在此指定设备的最高组态地址。各个区域不会归组在一起。 如果多次调用块,LEN也可能比最高地址短。应至少在一个调用中指定最高地址(比较"RECV"参数)。 2.数据将按照逻辑地址的次序进行传送(仅用于PROFIBUS DP)。 |
|
IO设备模式: 1.按在PROFINET IO控制器链上为此PROFINET IO设备组态的输入模块的插槽的顺序传送数据。2.注意事项: 必须确保此处编程的长度和PROFINET IO控制器的组态一致。为设备传送包括所有间距的整个数据区长度 |
NDR OUTPUT
0: - 1:接受数据 |
该参数指示是否无错完成该作业。 |
ERROR OUTPUT
0: - 1:错误 |
故障代码 |
STATUS OUTPUT 状态代码
CHECK_IOPS | OUTPUT | 0: 所有IOPS均设置为GOOD | 指示是否需要对IOPS状态区进行评估的组消息。 |
1: 至少一个IOPS设置为BAD | 无论MODE参数如何,始终返回CHECK_IOPS。 |
IOPS OUTPUT
数据区的地址指向下列两个位置之一: 1存储器位区 2数据块区 |
IO提供者状态每一用户数据字节传送一个状态位。要求: 在MODE参数中请求传送(MODE=0或MODE=1)。 |
长度:对于最大值,请参见本手册与设备相关的B部分的"性能数据"部分。这对控制器或设备模式有所不同 | 该参数仅在该模式下相关。长度信息取决于RECV参数中的长度(每字节一位) =(长度LEN + 7/ 8)控制器模式:地址间距也根据RECV参数进行传送。 |
设备模式:地址间距不传送。该块将启动地址0的状态传送。 注意:ANY指针的最小长度为 (长度LEN + 7/8) |
ADD_INFO OUTPUT
附加诊断信息在控制器模式中: 0: 无报警 >0: 未决报警的数目 在设备模式中,参数始终= 0 |
参数扩展注意事项: 当没有在PROFINET IO控制器上组态INPUT地址时,也更新ADD_INFO参数。这种情况下,通过长度LEN > 0 (例如,LEN = 1字节)调用PNIO_RECV块。然后传送1字节的地址间距。 |
参数扩展可用于从下列固化程序版本起的CP: 从固化程序V2.0起的CP 343-1 (EX30) 从固化程序V2.0起的CP 343-1 LeaN (CX10) 从固化程序V1.0起的CP 343-1 Advanced (GX30) |
|
在较早的固化程序版本中,保留该参数 |
例:
call fc 12 ( CPLADDR :=W#16#0100, MODE :=B#16#80, LEN :=7, IOPS :=P#DB11.DBX7.0 BYTE 1, NDR :=M 74.0, ERROR :=M 74.1, STATUS :=MW76, CHECK_IOPS :=M74.2, ADD_INFO :=MW 26, RECV :=P#DB11.DBX0.0 BYTE 7 ) |
//调用PNIO_RECV //来自硬件配置的模块地址 //控制器模式或设备模式; //不传送IOCS状态位。 //数据区长度 //DB11中的每个接收数据字节对应一个位状态 //用于返回参数NDR的地址 //用于返回参数ERROR的地址 //用于返回参数STATUS的地址 //用于返回参数CHECK_IOPS的地址 //诊断消息 //DB11中的接收数据 (7个字节) |
FC11 PNIO_SEND 给CP发出的数据
工作原理
程序块 PNIO_SEND用于在 CP 的 PROFINET IO 控制器模式或 PROFINET IO 设备模式下传送数据。
1.作为PROFINET IO控制器运行
块将指定输出区的过程数据(输出)传送到CP以便转发到PROFINET IO设备。块以状态代码形式返回PROFINET IO设备输出的IO使用者状态(IOCS)。
2.作为PROFINET IO设备运行
块读取PROFINETIO设备上CPU的预处理过程输入,并将它们传送给PROFINET IO控制器(已组态的I地址);块还将返回作为状态码的PROFINET IO控制器的IO使用者状态(IOCS)。
与FC12不同的IO只有一个:SEND IN_OUT
数据区的地址指向下列两个位置之一: | 指定地址和长度IO控制器模式:长度应与所组态的分布式IO的总长度相匹配,据此也可传送地址间距。 |
1存储器位区 2数据块区 |
长度也可以比分布式I/O的总长度短,例如,当块在OB中多次被调用时。然而,总长度必须至少能满足一次调用需要。 |
IO设备模式:数据结构根据在PROFINET IO控制器链上为此PROFINET IO设备组态的输入模块的插槽的顺序获得的,并且它们的长度没有地址间距。注意: 1.无论如何组态地址(不管所组态的最低地址如何),块将开始传送地址0上的数据。 2.不允许指定I/O区,因为在I/O可接受数据之前,必须检查IOCS是否是GOOD。 |
全部0条评论
快来发表一下你的评论吧 !