如何在 FC1 (DP_SEND)中使用“CHAR”型变量?

例如,用户正在使用 FC5 AG_SEND 或 FC1 DP_SEND 传输数据。对于必须指定为 ANY 型指针的形参(如 FC1 的“SEND”),BYTE 是唯一允许用作 VARTYPE 的数据类型。在 STEP 7 的帮助或在线帮助中,为形参“SEND”指定了下述内容:n

只有下列情况才可以将 ANY 作为 VARTYPE:n

  • 对于 FC1,从块版本 V3 开始:BYTEn
  • 对于 FC1,块版本 V2.x 及以前版本:BYTE、WORD 和 DWORD。

在无符号的程序中,按如下方式参数化形式操作数上的 ANY 指针:n

SEND:= P#DB42.DBX0.0 BYTE 20

这种方式的通讯运行完美。n

在有符号的程序中,编译器跳到实际可用的 VARTYPE 或数据块中声明的数据类型。如果用户使用包含 CHAR 型变量的数据块(如图 01 所示),将用 VARTYPE “CHAR”代替 VARTYPE “BYTE”并断开通讯。n

在 FC1 中形式操作数上的指针内,不能将“CHAR”数据类型当作 VARTYPE 使用。如果用户不能将数据类型改为“BYTE”型,而是必须使用“CHAR”数据类型, 为了解决这个问题,我们建议用户不要对整个符号区进行寻址。n

示例:
如图 01 所示,用户使用 CHAR 型的变量 ARRAY [1..20],并且如图 02所示,用户在整个符号区寻址。此时通讯不能进行。形参“DataBlock”.Variable 的参数对应 ANY 指针 P#DB42.DBX0.0 BYTE 20,编译器使用 VARTYPE “CHAR”。n

如何在 FC1 (DP_SEND)中使用“CHAR”型变量?
图 01n

如何在 FC1 (DP_SEND)中使用“CHAR”型变量?
图 02n

然而,如图 03 所示,如果用户不对整个符号区寻址,因此没有全部用完 ARRAY [1..20],则编译器使用 VARTYPE“BYTE”,这样通讯将正常工作。n

如何在 FC1 (DP_SEND)中使用“CHAR”型变量?
图 03n

然而,如果在该示例中必须传送全部 20 个字节,则用户必须在 DB42 中增加 ARRAY 变量。例如:CHAR 型的数组 ARRAY[1..25]。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc337845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论