Codesys/Beckhoff/Inovance PLC 2个任意长度WSTRING组合

1.创建一个Function:

FUNCTION AnyLenWCONCAT    :    UINT

2.定义输入引脚:       

VAR_INPUT
	pSrcWStr1 				: 	POINTER TO WSTRING;		(* 要组合的字符串1,在个在最终输出的联合字符串的前面 *)
	nSrcWStr1Size			:	UDINT;					(* 字符串1的变量类型长度 *)
    pSrcWStr2 				: 	POINTER TO WSTRING;		(* 要组合的字符串2,在个在最终输出的联合字符串的后面 *)
	nSrcWstr2Size			:	UDINT;					(* 字符串2的变量类型长度 *)
    pDstWStr  				: 	POINTER TO WSTRING;		(* 联合后的字符串 *)
    nDstWStrSize     		: 	UDINT;					(* 联合后字符串的变量长度 *)
END_VAR    

3.定义内部使用的变量:

VAR                 		
     i						:	UINT;
	                    	
	 nLenOfWstring1			:	UINT;
	 nLenOfWstring2			:	UINT;
	 nWstring1Size			:	UDINT;
	 nWstring2Size			:	UDINT;
	 nDstWstringSize		:	UDINT;
	                    	
	 nWsToWord				:	WORD;
END_VAR

 4.代码:

(* 获取声明的Wstring变量长度 *)
nLenOfWstring1 	:=	nLenOfWstring2 := 0;
nWstring1Size 	:= 	(nSrcWStr1Size - 2) / 2;
nWstring2Size	:=	(nSrcWstr2Size - 2) / 2;
nDstWstringSize	:=	(nDstWStrSize - 2) / 2;

(* 初始化 *)
AnyLenWCONCAT := 0; 
FOR i := 0 TO TO_UINT(nDstWstringSize - 1) BY 1 DO
	pDstWStr^[i] := 0;
END_FOR

(* 获取Wstring1数据的有效长度 *)
FOR i := 0 TO TO_UINT(nWstring1Size - 1) BY 1 DO
	nWsToWord := pSrcWStr1^[i];	
	IF nWsToWord = 0 THEN
		nLenOfWstring1 := i;
		EXIT;
	END_IF
END_FOR

(* 获取Wstring2数据的有效长度 *)
FOR i := 0 TO TO_UINT(nWstring2Size - 1) BY 1 DO
	nWsToWord := pSrcWStr2^[i];	
	IF nWsToWord = 0 THEN
		nLenOfWstring2 := i;
		EXIT;
	END_IF
END_FOR

(* 组合 *)
IF nLenOfWstring1 < 1 THEN
	IF nLenOfWstring2 < 1 THEN
		AnyLenWCONCAT := 0;
		RETURN;
	ELSE
		FOR i := 0 TO nLenOfWstring2 - 1 BY 1 DO
			pDstWStr^[i] := pSrcWStr2^[i];
		END_FOR
	END_IF
ELSE
	FOR i := 0 TO nLenOfWstring1 - 1 BY 1 DO
		pDstWStr^[i] := pSrcWStr1^[i];
	END_FOR
	IF nLenOfWstring2 >= 1 THEN
		FOR i := nLenOfWstring1 TO TO_UINT(nDstWstringSize) BY 1 DO
			pDstWStr^[i] := pSrcWStr2^[i - nLenOfWstring1];
		END_FOR
	END_IF
END_IF

AnyLenWCONCAT := nLenOfWstring1 + nLenOfWstring2;  

5.实际使用实例:

AnyLenWCONCAT(pSrcWStr1:= ADR(wsSrc1), nSrcWStr1Size:= SIZEOF(wsSrc1), pSrcWStr2:= ADR(wsSrc2), nSrcWstr2Size:= SIZEOF(wsSrc2), pDstWStr:= ADR(wsDst), nDstWStrSize:= SIZEOF(wsDst));

6.测试结果展示:

1).输入1为空的情况下:

2).输入2为空的情况下: 

3).输入1/2均有值的情况下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awby1228

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值