前言:

得益于计算机的发明及高速发展,21世纪是充满智能、科技、便捷的世纪。无人驾驶、人工智能、物联网,这些概念已耳熟能详,而它们背后则是利用编程实现的复杂逻辑。作为新时代的我们,生活已经和“编程“密不可分了,例如常见的C、C++、Python、Java等编程语言。

Vector公司与时俱进,在CANape这款强大的测量和标定工具里,采用专门的编程语言——CASL(Calculation and Scripting Language),方便汽车工程师进行数据分析和开发。今天我们就来聊聊这位强大又低调的选手,并和它做个朋友!

CASL的语法与C编程语言非常相似(但也有不同处:CANape不使用指针),允许开发人员集成自己的C代码或Simulink模型。所以说,大家在使用之前基础的C语言编程知识还是要掌握的~为了方便使用,CANape提供了智能感知输入、代码块和各种内置函数组。

图1 智能感知输入

在CASL中,主要运用函数和脚本,来解决各种不同的任务。从简单的计算,例如,添加信号,直至CANape的自动化。

Tips:
CASL与编程语言CAPL可不一样哦,后者是在CANoe和CANalvzer环境中使用的。CAPL是一种面向事件的编程语言,即程序节点用于指定事件,并在何时执行以及反应。而CASL是一种信号导向的语言。

基本概念:

1)What Are Functions

在测量过程中,函数被同步处理,主要用于实时测量或者对于加载测量文件的各种计算和应用。例如,函数可以是数学公式或程序代码,其中变量代表信号或参数。

通常有在线和离线两种使用场景:

  • Online applications(在实时测量过程中):
    》测量虚拟信号计算
    》允许对外接设备读写

  • Offline applications(访问现有的测量文件)
    》测量文件虚拟信号计算
    》执行数据挖掘

图2 虚拟函数使用场景

下面我们来看看函数的语法结构

图3 函数语法结构

当一个函数被调用时,参数可以被传递给函数。参数通常作为引用传递给函数,因此既可用于输入,也可用于输出。

除了通过参数传递从函数发出结果外,还可以使用返回控制结构(return也是关键字)的路径。默认情况下,返回double类型的值,字段或向量(数组)不允许作为返回值。

CANape对自身预定义和用户定义函数进行了区分,称为库函数和工程函数。

图4 函数分类

2)What Are Scripts

脚本是程序代码的一部分,可在编辑器窗口中编写,并在调用时顺序处理。脚本用于自动化或控制CANape中的联合活动,例如测量和其他系统相关序列的开始和停止,它独立于测量运行。它们也可以用来调用在Microsoft Visual Studio或MATLAB/Simulink中生成的外部模型。

图5 脚本示例

此外,可以在CANape运行时,使用命令行选项控制脚本行为。

两者区别:


1.流程优先级不同。脚本以较低进程优先级执行,相对于测量是异步运行的。另一方面,函数以高进程优先级执行,并与测量同步执行。与函数相比,脚本具有更广泛的预定义函数组,如附加文件和脚本函数、Flash函数、诊断和数据挖掘函数。


2.与脚本不同,函数不能使用断点进行调试,因为它们具有高优先级。不过我们可以使用以下命令在Write窗口中输出调试信息Write()、Writef()、Print()或Printf()。


3.脚本不需要函数头和函数体。程序代码可以简单地直接写入编辑器,然后按编码顺序处理。


4.函数必须是函数编辑器导出格式( * .cne)或者是ASCII文本格式 ( * .txt);脚本必须为脚本格式(*.scr or *.cns)。


5.函数可以被保存到工作目录中的CANape.ini配置文件中,但脚本文件被保存为独立文件。

说了这么多,

我们如何编辑呢?

全局变量、函数、脚本均可在CANape的函数编辑器中创建、编辑和编译。函数编辑器主要分为树视图、列表视图、编辑器窗口、消息窗口,可以在CANape中直接打开。

图6 函数编辑器

变量类型: 变量是特定类型值的占位符。变量可以在脚本和函数中声明和定义,主要分为全局变量局部变量

全局变量是CANape配置中的所有函数和脚本都可以使用的特殊数据对象。

局部变量仅在各自的函数或脚本中有效。

Tips:
全局变量是静态的。它们在两个测量之间以及加载项目之后保留它们的值。当保存配置或项目时,它们的当前值保存在参数文件中,并在加载项目时重新加载。

参数总是作为通过引用传递给函数,可以使用具有相同作用var和double前缀来修饰。

图7 相同作用前缀

关于数据类型就不做赘述了,大家自行百度啦。

接下来重点介绍一些

实用小技巧:

使用频率较多的简单语句:

测量过程开始/停止:Start(); Stop();

测量文件信号导入:FILE1.CCPsim.ampl;

测量和标定:x = CCPsim.ampl; CCPsim.ampl = x;

发送报文:CAN1.SendMessage(0x1a1,0xff,0x7f);

延时(等待)3秒:Sleep(3000);

测量缓存区或文件中对象信号值的数量:sizeof();

图8 数量获取

所选对象特定的测量值进行读写访问:mbuffer[ ];(常与sizeof结合使用)

图9 读写特定值

输出:print(); write();

图10 常见输出格式

可以从一个函数中调用另一个函数:

图11 函数调用函数

从一个脚本中调用另一个函数:

图12 脚本调用函数

从一个脚本中调用另一个脚本:

图13 脚本调用脚本

正确终止函数和脚本:
如果参数达到了某个值,则可以使用控制结构cancel来终止函数或脚本。如果在函数中使用了cancel命令,该函数将在没有返回值的情况下终止。如果在子函数或脚本中使用了cancel命令,则脚本将立即终止。
例如下图,如果在调用的对话框中选择Yes,脚本将终止。

图14 终止脚本

全局变量初始化:
可以在脚本运行时调用,以每次自动初始化全局变量的值。

图15 初始化脚本

以上可能是一些常见的例子,由于编程语句体量庞大,工程师们需要根据功能需求来选择语句。在CANape中右键可以导入自动的库函数,根据功能分类,对于不熟悉语句,鼠标悬停后按F1,可以弹出help文档,其中会显示使用例子。

图16 库函数

图17 万能help文档

在我们编写程序前,我们需要考虑以下5个步骤:

需要用程序的主要任务
决定如何以及何时执行程序
开发合适的代码
编译
测试

总结

编程世界很大,谨此抛砖引玉。小编领进门,修行还是看个人。

古人云,工欲善其事,必先利其器;北汇信息作为Vector中国的合作伙伴,始终专注于汽车电子领域的新技术和新产品,为整车厂和零部件企业提供完整的研发、测试解决方案,为工程师在汽车领域提供“趁手装备“!

心动不如行动,北汇诚意满满~

  • 注:文中部分图片来自于Vector。
  • 作者:北汇信息-起风了

CASL编程?—— CANape的自动化“利器”相关推荐

  1. 爬虫 + 自动化利器 selenium 之自学成才篇(二)

    文章目录 设置元素等待 显式等待 隐式等待 强制等待 定位一组元素 切换操作 窗口切换 表单切换 弹窗处理 ❤ 系列内容 ❤ 爬虫+自动化利器 selenium 之自学成才篇(一) 主要内容:sele ...

  2. 恩施机器人编程_恩施州自动化焊接机器人专业厂家

    恩施州自动化焊接机器人专业厂家 走马塘岛跨海线路又长又陡.可实现一个变位机机器人焊接.因此大家就见到数十台乃至几百台焊接机器人另外工作中在同一生产流水线的壮阔场景.具行业更是进一步推动了国外喷涂机器人 ...

  3. 我的高效编程的秘诀:自动化你的编程工作

    我的高效编程的秘诀:自动化你的编程工作 2015-08-05 cheungmine, all rights reserved. 软件工业的目标就是把人类的生产活动流程化,自动化和智能化.作为一个程序开 ...

  4. python利器怎么编程-python等自动化脚本编程利器 Script.NET

    手册更新日期:2009-08-04 介绍: Script.NET是蓝蚂蚁工作室经过数年时间不断完善,开发出的一套用于Tcl.Python.Perl.Ruby.Lua等脚本语言的集成开发环境. Tcl( ...

  5. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...

    image.png <Python编程快速上手 让繁琐工作自动化>完整版PDF 提取码:7qm4 3.jpg 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 ...

  6. 学编程不如学自动化?

    全民编程时代,你是否想过编码的最终目的何在?或许是为了更方便地实现一些事情,或许是为了提高效率,然而与其一步一步自学编程,本文作者表示,不如直接利用已有的工具来实现自动化. 作者 | Erik Die ...

  7. codesys编程_CODESYS楼宇自动化应用案例:化学系教学楼智能排气系统

    地点:亚琛,德国 方向:楼宇自动化 问题: 一所大学化学系教学楼的排风系统迫切需要一个新型解决方案 优势: 伊顿公司正在推广SmartWire-DT连接方案,该方案是为彻底改变客户的控制面板生产方式而 ...

  8. 【编程生活】自动化数据均分助手

    自动化数据均分助手 0 这个软件是做什么的呢? 软件设计初衷 软件实现的功能 1 遍历部分--DFS的Python实现 2. 分配部分 写在最后及完整代码和软件 0 这个软件是做什么的呢? 软件设计初 ...

  9. small用于不连续数组_shell 编程进阶与自动化脚本expect的运用

    一.SHELL语句流程控制 1.过程式编程语言的流程控制 顺序执行 选择执行 循环执行 2.顺序执行 顺序执行则是最简单的流程,按照输入指令的顺序逐条执行 3.选择执行 就是根据一些判断的语句,选择性 ...

  10. 学习上位机编程:提升自动化领域竞争力的关键技能

    大家好,我是华山自控编程的朱老师. 今天我要向大家介绍一套专为自动化从业人员量身定制的零基础入门C#上位机编程系列课程.这套课程非常适合PLC工程师和电气工程师学习,作为C#上位机编程的入门课程,我们 ...

最新文章

  1. win10 如何打开telnet,ftp等服务
  2. 解决sublime text无法安装插件问题
  3. Git 搭建私有仓库
  4. 傅立叶变换学习(一)初步认识傅立叶变换
  5. 数据结构与算法--位运算
  6. leetcode内存消耗
  7. 高并发下Java多线程编程基础
  8. 信息学奥赛一本通C++语言——1021: 打印字符
  9. Google I/O 2019 行纪 —— Google 要让 AI 消除偏见
  10. Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符
  11. 自定义Exception异常
  12. python标准库之random模块
  13. EL表达式和JSTL标签
  14. 数学基础知识总结 —— 4. 常见函数图像
  15. 数据分析师出品丨采购周报模板
  16. 英语——句子结构和成分大全【学习笔记】
  17. 上海重塑能源集团股份有限公司稳步前行,助力行业蓬勃发展
  18. 《地球概论》(第3版)笔记 第二章 地球的宇宙环境
  19. Android常用布局-01
  20. java 汉字转拼音_java中将汉字转换成拼音的实现代码

热门文章

  1. 全新激光雕刻机切割机打标机写字机三轴步进电机运动控制板 控制板硬件软件全部是自己开发的
  2. 关于一些3D数学基础的习题,感兴趣的同行进来帮帮忙啦。
  3. 汇编语言INC DEC JGE JG JLE JL JNE JE 都是什么意思
  4. 汇编语言ADDC可以把C清零吗,常用汇编语言指令及解释
  5. xp系统 护眼模式
  6. STM32中使用PS2手柄
  7. 实时渲染器不止lumion,Chaos Vantage你值得一试
  8. 三星手机微信聊天记录删除了怎么恢复
  9. 391 卡信乐卡盟程序
  10. 计算机组成原理三个相关,计算机组成原理试题3