CANoe中XML编程常用标签语法 ——控制语句 if else 和 for循环

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CANoe中XML编程常用标签语法 ——控制语句 if else 和 for循环相关的知识,希望对你有一定的参考价值。

相关文章

CANoe中XML编程常用标签语法


前言

  • 这一节,我们简单了解下XML中的流程控制语法 if elsefor 循环


if else

①,CAPL XML 的 逻辑判断是Choice ,语法如下图:


②,在XML TEST NODE中加载如下的 xml 文件:

下面测试代码实现的功能逻辑是:

  • 当 信号 RLCR_1_SysSt = 0 ,在报告中打印 signal is Off
  • 当 信号 RLCR_1_SysSt = 1 ,在报告中打印 signal is On
  • 当 信号 RLCR_1_SysSt = other ,在报告中打印 signal is unexpected value
<testmodule title="XML Debug" version="1.1">
	<testcase ident="" title="if else test">
	  <choice title="siganl RLCR_1_SysSt">
		<if title="SysSt_Off">
		  <condition>
			 <cansignal name="RLCR_1_SysSt"><eq>0</eq></cansignal>
		  </condition>
		  <body>
			<comment>signal is Off</comment> 
		  </body>
		</if>		
		<if title="SysSt_On">
		  <condition>
			<cansignal name="RLCR_1_SysSt"><eq>1</eq></cansignal>
		  </condition>
		  <body>
			<comment>signal is On</comment> 
		  </body>	  
		</if>		
		<else>
			<comment>signal is unexpected value</comment> 
		</else>
	  </choice>
	</testcase>

</testmodule>

③,测试结果如下图:



在xml if else 中调用 capl function

①,用 varset_bycapl 标签包裹 capl function

<testmodule title="XML Debug" version="1.1">
	 <preparation>
		<vardef name="crash" type="int">0</vardef>
	  </preparation>
	<testcase ident="" title="if else test">
	  <choice title="siganl RLCR_1_SysSt">
		<if title="SysSt_Off">
		  <condition>
			 <cansignal name="RLCR_1_SysSt"><eq>0</eq></cansignal>
		  </condition>
		  <body>
			<varset_bycapl name="crash">
			  <caplfunction name="func1" title="func1"/>
			    <caplparam name="v" type="int">0</caplparam>
			</varset_bycapl>
		  </body>
		</if>
		
		<if title="SysSt_On">
		  <condition>
			<cansignal name="RLCR_1_SysSt"><eq>1</eq></cansignal>
		  </condition>
		  <body>
			<varset_bycapl name="crash">
			  <caplfunction name="func2" title="func2"/>
			    <caplparam name="v" type="int">1</caplparam>
			</varset_bycapl>
		  </body>	  
		</if>
		
		<else>
			<comment>signal is unexpected value</comment> 
		</else>
	  </choice>

	</testcase>

</testmodule>


for 循环

①,CAPL XML 的for 循环,语法如下图:


②,下面代码是循环打印5次 ***:

<testmodule title="XML Debug" version="1.1">
	<testcase title="for loop test" ident="">

			 <preparation>
				<vardef name="looptimes" type="int">0</vardef>
			 </preparation>
			    <for_loop title="..." loopvar="looptimes" stopvalue="5" startvalue="0" increment="1">
					  <comment>***********************</comment> 
			   </for_loop>
</testcase>	
</testmodule>


While 循环

①,CAPL XML 的While 循环,语法如下图:


②,xml 脚本如下:

  • 信号 RLCR_1_SysSt 和 RLCR_1_BlkSts 都为0 ,则进入循环,否则跳出循环 如果是逻辑或 可以用
    or,逻辑与用的就是and
  • 默认,执行1000次循环,自动跳出循环,所以加个wait 标签
<testmodule title="XML Debug" version="1.1">
	<testcase ident="" title="While test">
	  <while_loop title="...">
		<condition>
		  <and>
			<cansignal name="RLCR_1_SysSt"><eq>0</eq></cansignal>
			<cansignal name="RLCR_1_BlkSts"><eq>0</eq></cansignal>
		  </and>
		</condition>
			<body>			
				<comment>************************************</comment> 
				 <wait title="Wait" time="100ms"/>
			</body>
	  </while_loop>  
	</testcase>
</testmodule>

③,执行结果如下,当RLCR_1_BlkSts 等于1了,循环立马跳出来了:

总结

这节主要讲了几个CAPL中 XML语法的逻辑控制语法,说实话,我自己在项目中基本没用过,纯属对技术的追求,写下这个博客,有些同学问我 可以在 XML中,循环调用某个test case吗?事实上,我尝试了,不行。但是可以调用 CAPL function.
不足之处,欢迎指正。

  • 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于CANoe中XML编程常用标签语法 ——控制语句 if else 和 for循环的主要内容,如果未能解决你的问题,请参考以下文章

CANoe中XML编程常用标签语法 —— 变量,系统变量的定义和读取

CANoe中XML编程常用标签语法 —— 变量,系统变量的定义和读取

CANoe中XML编程常用标签语法 ——CAN报文周期检测/错误帧检测/信号改变检测。。。

CANoe中XML编程常用标签语法 ——CAN报文周期检测/错误帧检测/信号改变检测。。。

Capl编程xml标签语法 —— CAN报文周期检测/错误帧检测/信号改变检测。。。

CANoe DLL编程—— 创建CANoe适用的DLL以及调用