一个使用CP进行通讯的程序

描述

前段时间读一位网友给发来的程序,发现了一个使用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。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分