从零开始学习CANoe(四)—— 设计panel

article/2025/10/14 22:27:13

相关文章

从零开始学习CANoe(一)—— 新建工程
从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
从零开始学习CANoe(三)—— 系统变量的创建和使用
从零开始学习CANoe(四)—— 设计panel
从零开始学习CANoe(五)—— CAPL 测试节点
从零开始学习CANoe(六)—— XML 测试节点
从零开始学习CANoe(七)—— .NET 测试节点
从零开始学习CANoe(八)—— IG 模块
从零开始学习CANoe(九)—— 断点调试(Debug)
从零开始学习CANoe(十)—— 信号发生器(Signal Generator)
从零开始学习CANoe(十一)—— Statistics Window
从零开始学习CANoe(十二)—— Trace Window
从零开始学习CANoe(十三)—— Logging Window

设计第一个panel
1,将这个文件夹下的素材拷贝到我们的工程下。

å¨è¿éæå¥å¾çæè¿°

2、打开panel designer


3,另存为下列途径下,起名为Control.vxpm


4、拖着控件右下角可以调节大小

5,选中 Group Box 控件 ,在面板中需要的地方双击左键 可以放置一个控件

å¨è¿éæå¥å¾çæè¿°

6,在上一步骤基础上,选中Properties 更改控件名字。

å¨è¿éæå¥å¾çæè¿°

7,再添加几个控件,如下图。

å¨è¿éæå¥å¾çæè¿°

8,添加一个Switch 控件

9,按照下图设置属性

å¨è¿éæå¥å¾çæè¿°
10,右键选择 Fit image Size 可以 调增控件图片的大小。

å¨è¿éæå¥å¾çæè¿°

11,添加一个Trace Bar控件

å¨è¿éæå¥å¾çæè¿°
12,按照下图设置属性


13,添加一个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的

å¨è¿éæå¥å¾çæè¿°

14,添加第二个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的


15,添加两个Static Text 说明下图的两个控件

å¨è¿éæå¥å¾çæè¿°

16,选择 Add Panel,将上面创建的panel加载到工程中。

å¨è¿éæå¥å¾çæè¿°

17,如下图所以看以看到Control panel已经被添加了,

å¨è¿éæå¥å¾çæè¿°

18,然后可以run下工程,操作下control panel,看下write窗口打印的结果。

19,然后可以run下工程,操作下control panel,看下write窗口打印的结果。

å¨è¿éæå¥å¾çæè¿°

20,为了统一名称,我们把上一个博客中test.can更改为 Engine.can ,代码如下:

/*@!Encoding:ASCII*/
On key 'a'
{@Engine::EngineStateSwitch = 0;write("close the engine...");@Engine::EngineStateSwitch = 1;write("open the engine...");@Engine::EngineSpeedEntry =1000;
}on sysvar sysvar::Engine::EngineStateSwitch
{$EngineState::OnOff = @this;if(@this)   {$EngineState::EngineSpeed = @sysvar::Engine::EngineSpeedEntry;write("EngineSpeed is %f...", @this);}else$EngineState::EngineSpeed = 0;  
}on sysvar sysvar::Engine::EngineSpeedEntry // 
{if(@sysvar::Engine::EngineStateSwitch)  //{$EngineState::EngineSpeed = @this;write("EngineSpeed is %f...", @this);}
}


21,我们再再Light 节点上新建一个simulation can ,名字为Light.can

å¨è¿éæå¥å¾çæè¿°

22,Light.can 中的代码如下

/*@!Encoding:1252*/
variables 
{msTimer tFlashLightFrequency;const int gFlashLightFrequency = 500;int gHazardLightsStatus = 0;
}
on timer tFlashLightFrequency
{//定时器实现的功能是:500ms闪烁灯gHazardLightsStatus = (gHazardLightsStatus == 1 ? 0 : 1);$LightState::FlashLight = gHazardLightsStatus;setTimer(this, gFlashLightFrequency);write("current light state is : %d ...",gHazardLightsStatus);
}
on sysvar sysvar::Lights::HazardLightsSwitch
{if (@this){gHazardLightsStatus = 1;setTimer(tFlashLightFrequency, gFlashLightFrequency);}else{cancelTimer(tFlashLightFrequency);gHazardLightsStatus = 0;}$LightState::FlashLight = gHazardLightsStatus;
}


23,点击 Light 里面的下面的那个按钮Hazard Flasher,可以看到write窗口在500ms间隔的打印0和1

å¨è¿éæå¥å¾çæè¿°

设计第二个panel
1,新建一个panel,起名为Display

å¨è¿éæå¥å¾çæè¿°

2,添加如下图的Group Box

å¨è¿éæå¥å¾çæè¿°

3,添加一个仪表盘 控件,用来显示当前速度值

å¨è¿éæå¥å¾çæè¿°

4,添加一个输入输出控件,用来显示当前速度值

å¨è¿éæå¥å¾çæè¿°
5,添加一个 图片控件

å¨è¿éæå¥å¾çæè¿°

6,添加一个Switch控件,用作左边的车灯

å¨è¿éæå¥å¾çæè¿°

7,按下图完成配置

å¨è¿éæå¥å¾çæè¿°

8,添加有车灯,按下图完成配置

å¨è¿éæå¥å¾çæè¿°

9,再在 dispaly 节点,添加一个 simulation can ,命名为display.can ,代码如下图

/*@!Encoding:1252*/variables 
{const long kOFF = 0;const long kON = 1;int gDebugCounter = 0;
}on message EngineState 
{  // engine state receivedif (this.dir == RX){@sysvar::Engine::EngineSpeedDspMeter = this.EngineSpeed / 1000.0;}
}on message LightState 
{gDebugCounter++;if (this.dir == RX){SetLightDsp(this.HeadLight,this.FlashLight);if(gDebugCounter == 10){write("LightState RX received by node %NODE_NAME%");gDebugCounter = 0;}    }else{if(gDebugCounter == 10){write("Error: LightState TX received by node %NODE_NAME%"); gDebugCounter = 0; }}
}SetLightDsp (long headLight, long hazardFlasher)
{if(headLight == kON) {if(hazardFlasher == kON) {@sysvar::Lights::LightDisplay = 7;} else if(hazardFlasher == kOFF) {@sysvar::Lights::LightDisplay = 4;}}else if(headLight == kOFF) {if(hazardFlasher == kON)  {@sysvar::Lights::LightDisplay = 3;} else if(hazardFlasher == kOFF) {@sysvar::Lights::LightDisplay = 0; }}
}

10,下图是完成后的最后效果图。

å¨è¿éæå¥å¾çæè¿°

————————————————
版权声明:本文为CSDN博主「蚂蚁小兵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34414530/article/details/109244135


http://chatgpt.dhexx.cn/article/9DrJ2SRF.shtml

相关文章

winform无边框在panel上拖动窗口位置,改变窗口大小

将窗体的FormBorderStyles属性设置为None 窗体上放一个新的panel,设置Dock属性为Fill 创建变量 private bool isMouseDown false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction MouseDirection.None;//表示拖动的方向&#x…

C# Winform Panel 内控件大小不随Panel大小改变设置

(1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变。

Panel控件

今天小编来给大家介绍一下panel控件; 首先来看一下panel控件是什么? 是什么: Panel 控件提供了一种用于组织控件的分组机制。Panel 控件可被递归嵌套在 Form 控件(Panel 控件最外面的容器)中。面板呈现它本身包含的控件。 面板上…

UI的Panel面板

1.Panel panel控件又叫面板,该面板实际就是一个容器,在其上可放置其他UI控件 当移动该面板时,放在其中的UI控件会随着移动,这样更加合理与方便地移动与处理一组控件 当面板被创建时,会默认包含一个Image(Script) Sour…

Unity Panel 控件

Panel 容器组件又叫面板组件,实际上就是一个容器,在其中可以放置其他的UI元素。 注意,在Unity中,子物体的位置是相对于父物体的,而非绝对位置 在Panel的参数区中,除了空间位置这个常用参数外,我…

Linux系统之部署Linux管理面板1Panel

Linux系统之部署Linux管理面板1Panel 一、1Panel介绍1.1Panel简介2.1Panel特点 二、本地环境规划1.本此实践目的2.本地环境规划 三、检查本地环境1.检查操作系统版本2.检查系统内核版本 四、部署1Panel1.创建安装目录2.一键部署1Panel3.检查1Panel服务运行状态4.检查1Panel监听…

javasocket编程(javasocket通信)

Java网络编程-JavaSocket编程是什么呢? Socket传输模式 Sockets有两种主要的操作方式:面向连接的和无连接的。面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺序时…

(Android)JavaSocket编程,文件上传到服务器,客户端Android,服务器端J2SE

SD卡中有encrypt.png文件 在E盘可以看到,从模拟器SD卡中发送来的文件 服务器端代码,我这里是使用CMD命令演示的。服务端等待客户端连接,然后接收客户端的数据。包括文件名,大小,和文件数据。 import java.io.Buffered…

Java Socket实现文件传输

阿里云双11服务器优惠(年度最佳优惠): A:1核2GB 1M 服务器年69元 B:1核2GB 1M 服务器三年180元 C:2核4GB 1~10M 服务器三年567元(强烈推荐) D:4核8GB 1~10M 服务器三年10…

Java Tcp(Socket、ServerSocket)

TCP所提供服务的主要特点: 面向连接的传输;端到端的通信;高可靠性,确保传输数据的正确性,不出现丢失或乱序;全双工方式传输;采用字节流方式,即以字节为单位传输字节序列&#xff1b…

【Socket】Java Socket通信(一)

前段时间在网上学习了Java Socket的应用编程。 端口 用于区分不同应用程序端口号范围065535,其中01023为系统所保留IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础http:…

java socket编程总结

java socket编程总结 说明一、TCP/IP协议模型二、获取IP相关信息InetAddressInetSocketAddressURL 三、TCP编程四、UDP编程五、关于TCP与UDP 说明 更新时间:2020/12/01 17:17,更新完基本内容 java的socket编程做一个总结,主要是面向Tcp和Ud…

Java Socket网络编程,你要的实验,我都有

JAVA Socket编程 目录 JAVA Socket编程多人聊天室客户端源代码服务器端源代码运行展示 邮件发送客户端运行展示 在线云笔记客户端窗口服务器端代码运行展示 多人聊天室 客户端源代码 import java.awt.BorderLayout; import java.awt.HeadlessException; import java.awt.event…

【Java高级】初探socket编程 ——JavaSocket连接与简单通信

新学期生活开始一段时间了,要继续学习一些新的技术(这里指socket /doge),目标是尝试完成一个在线即时聊天的小程序(尽量不咕)。会更新一系列socket编程的技术文章,欢迎关注交流~ 那么千里之行&…

Java--Socket通信(双向,有界面)

服务端: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

JAVA 网络编程 Socket

网络:相互连接的计算机,带来的好处有共享资源,交换数据 IP地址:定位计算机地址 通常由网络地址主机地址组合 查看本机IP地址:电脑左下角输入CMD,回车在CMD界面输入ipconfig 127.0.0.1 测试本机网络配置 …

初识Java Socket编程

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。…

Java socket详解,看这一篇就够了

刚给大家讲解Java socket通信后,好多童鞋私信我,有好多地方不理解,看不明白。特抽时间整理一下,详细讲述Java socket通信原理和实现案例。整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理,后慢慢接近生产…

递归下降文法C语言实验报告,递归下降分析法的简单例子的c语言实现

我们举的简单例子是 G[s]: S → a | ∧ | (T) T→T, S | S 转化为LL1文法 S →a |∧| (T) T →ST T→,ST| ε c语言代码实现 #include char scaner(char*input,int* p); void S(char*input,int* p); void T(char*input,int* p); void T1(char*input,int* p); void error(); int…

C++:编译实验之递归下降分析器

一、实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解。 2.根据文法的产生式规则消除左递归,提取公共左因子构造出相应的递归下降分析器。 二、实验内容 根据课堂讲授的形式化算法,编制程序实现递归下降分析器,能对常见…