回复:如何通过input接口把数组类型数据传递到FC块去

已锁定

askab

  • 帖子

    401
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2022-05-22 15:40:10

2楼

我在FC块内的IN接口定义一个 1..100的布尔量的数组,在外部接口如何把数据块内定义好的数据类型传递过去?传递的格式是什么样的?

//////////////////////

你定义输入端为一个数据ARRAY 型 例如 ARRAY[0..99] OF BOOL  为定义100个BOOL 量型 数据。

要求输入 写 为指针定义  例如 P# DB1.DBX0.0 BOOL 100  然后用SFC20 COPY 一下就行。



上面三个图时对DP 通讯进行诊断,第一个为第一次做法, 但发现每次都需要输入类似的P#DB255.DBX0.0 BYTE 10, 

然后用SCL 做了一个数据组  DP1 就是DP1的数据 有多少个DP 从站,建立多少个DP 数据组。仅仅该DP1,DP2 序列号就行,

P#DB255.DBX0.0 BYTE 10   指针型 对应了 STORE_DATA:ARRAY[0 ..10] OF BYTE; 数组类型。

方法2  不用FC 用FB  然后直接给背景数据块INPUT 直接写入数值。  我一般就是用方法,具体如下

 例如 单按钮控制启动停止。

FUNCTION_BLOCK FB3

VAR_INPUT

button_start:ARRAY[0..20] OF BOOL:=false;

fault:ARRAY[0..20] OF BOOL:=false;

start_condition:ARRAY[0..20] OF BOOL:=false;

END_VAR

VAR_OUTPUT

run:ARRAY[0..20] OF BOOL:=false;

run_light:ARRAY[0..20] OF BOOL:=false;

END_VAR

VAR

store_start:ARRAY[0..20] OF BOOL;

i:INT;

END_VAR

FOR i:= 0 TO 20 BY 1 DO

        run[i]:=((button_start[i] AND NOT store_start[i]) XOR run[i]) AND NOT fault[i] AND          start_condition[i];

        store_start[i]:= button_start[i];

        run_light[i]:=run[i]; 

END_FOR; 

END_FUNCTION_BLOCK

DATA_BLOCK DB4  FB3

//

// Block Comment...

//

BEGIN

END_DATA_BLOCK


P#DB3.DBX0.0 BOOL 21  对应 启停 输入组 button_start:ARRAY[0..20] OF BOOL:=false;

直接用SFC20 COPY 到DB4.DBX0.0 BOOL 21   这样可以直接在WINCC 等你需要的地方使用,



大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54615条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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