带有字符串类型的CAPL关联数组
之后 paper 这样: variables { char[30] translate[ char[] ]; } 这完全是论文中的示例.当我尝试将值放入此关联数组时,问题就会出现.例如: on preStart { translate["hello"] = "hola"; } 给我一​​个汇编错误:"错误1112 at(89,23):操作数类型不兼容" 我做错了什么? 版本:我正在使用向量CAPL浏览器 Canalyzer版本11.0 sp2 解决方案 使用关联字段(所谓的地图),您可以在不使用过多内存的情况下执行1:1分配给其他值的值.关联字段的元素是钥匙值对,因此可以通过键快速访问一个值. 以与普通字段相似的方式声明了一个关联字段,但是键的数据类型是用方括号编写的: int m[float]; // maps floats to ints float x[int64]; // maps int6
2 2024-03-17
编程技术问答社区
CAPL-将4个原始字节转换为浮点数
capl -vector. 我收到消息ID 0x110,其中包含当前信息: 0x3e6978d5-> 0.228 目前,我可以阅读数据并保存到Enviroment变量中以在面板中使用: putvalue(llow_current,this.long(4)); 但是我不知道如何将十六进制4个字节转换为float变量,因为我无法使用地址或铸造(float * x =(float *)&vbuffer;) 如何在CAPL脚本中进行此转换?谢谢. 解决方案 通常,您的DBC文件应包含从原始值(在您的情况4B长)到物理值的转换信息,以因子的形式和偏移定义: 因此,您的电流物理价值应如下计算: phys_val =(raw_value *因子) +偏移 注意:如果定义负偏移,则实际上在上面的等式中减去它. ,但看来您没有DBC文件,因此您需要找出因素并自行抵消(如果您有2个示例原始值并知道它们的物理等效物,那么它将像查找线性方程参数一样容
28 2023-10-30
编程技术问答社区
从Python中调用CAPL函数
我正在使用Canalyzer工作,我找不到如何调用包含参数的CAPL函数.如果我将num放在functions_call.Call(num)中不起作用. def call(num): print 'calling from CAN' x=int(num) functions_call.Call() return 1 解决方案 我不久前遇到了一个类似的问题,一些谷歌搜索使我遇到了以下申请注: medien/cmc/application_notes/an-and-1-117_canoe_canalyzer_as_a_com_server.pdf ...结帐部分" 2.7调用CAPL功能". 要总结一下,请确保将您的CAPL函数的参数声明为"长",.e.g:以下内容似乎对我有用: void function1(long l) { write("function1() called with %d!", l); }
162 2023-06-27
编程技术问答社区
如何在不使用VB脚本的情况下,通过命令提示符打开一个特定的CANoe配置?
是否有可能通过命令提示符打开特定的CANoe配置? 我尝试通过使用命令: 通过命令提示符打开sample.cfg之类的配置. C:\Users\Downloads\Sample>CANoe64 sample.cfg 使用此命令,我可以启动CANoe应用程序,但不能使用指定的配置. CANoe应用程序从默认配置开始. 解决方案 您可以简单地提及 C:\Users\Downloads\Sample>sample.cfg 这将打开独木舟注册版本中的配置.
42 2023-03-28
编程技术问答社区
如何在CANoe/CAPL中包含一个.h或.dll文件
我希望将标题.h或.dll文件集成在CAPL(concretly visa32.dll,visa.h或sicl.h)中以控制万用表34461a.如何将.h文件或.dll文件包含在独木舟中? 我创建了一个称为万用表的ECU模块.谢谢, 解决方案 包括CAPL中的外部DLL是可能的,但是您需要为要使用的所有功能创建一个包装器. 看一下具有此类包装器的Directorty.这是一个MSVC项目,导出了一些简单的功能,例如int f(int a, int b) {return a+b;}. 您需要要做的是将库文件(visa32.dll,visa.h)添加到此capldll项目中,并为您要从独木舟调用的所有功能定义包装器.例如,如果您在Visa32.dll中具有int visa_init(double arg),则将创建一个包装器: int CAPLEXPORT far CAPLPASCAL capl_visa_init(double arg) { return
94 2022-10-30
编程技术问答社区
使用CAPL在不断循环中运行Blf文件进行仿真
我想使用 CANalyzer 中的重播块运行 .blf 文件.我想在一个恒定循环中运行这个文件以进行仿真.是否可以使用 CAPL,或者即使没有 CAPL,也可以有人指导我如何做到这一点. 解决方案 循环回放日志文件不需要 CAPL. 右键单击重播块 在“常规"选项卡中,启用“重复输出发送模式"
476 2022-08-15
编程技术问答社区
如何通过CAPL访问.dll文件?
我已经尝试了以下代码. int CAPLEXPORT far CAPLPASCAL capl_visa_init(double arg) { return visa_init(arg); } CAPL_DLL_INFO CAPL_DLL_INFO_LIST[] = { {"my_visa_init", (CAPL_FARCALL)capl_visa_init, 'D', 1, "F", "\000"}, .... {0,0} }; 对于此代码,我收到“解析错误".我该如何解决?我需要包含一个头文件吗? 解决方案 为了让 CAPL 编译器和 CAPL 浏览器能够识别 DLL,您必须将其链接到 CAPL 程序.为此,您可以在 CANoe 的选项对话框中输入 DLL.在这种情况下,您拥有的所有 CAPL 程序都可以使用 DLL.另一方面,您可以使用 #pragma library 命令在 CAPL 程序的包含部分中输入 DLL.在这种情
1108 2022-08-09
编程技术问答社区
linUpdateResponse与Output-How are they different for LIN simulated nodes?
在LIN模拟从节点中,output和linUpdateResponse有什么区别? 来自 output 文档: To reconfigure response data of LIN frame. In that case RTR selector has to be set to 0. The LIN hardware responds to the next request of the specified frame with the newly configured data. 所以,我可以重新配置输出,下次(真的?)硬件应该会说我已经成功覆盖了它,对吧? 来自 linUpdateResponse 文档: Updates the response data of a specific LIN frame. 让我设置特定帧 ID 的数据长度 (dlc) 和数据内容. 它们有何不同?是否有可用示例?我不太明白如何在提供的示例中使用后者. 解决方案
332 2022-08-09
编程技术问答社区
CAPL中的日志写输出到文件
有没有一种简单的方法可以将我写入的内容写入写入窗口并将其记录到文件中?或者我是否需要手动单独创建一个字符数组并打开一个文件以将 char[] 写入?我希望至少能够使用正则表达式写入文件,但我没有从文档中找到太多有用的信息. 解决方案 看起来 writeToLogEx(char format[], ...) 可以做我想做的事,但它会输出到测量设置中的 Logging Block.因此,如果我不设置通道块,我将拥有一些我不想要的页眉和页脚数据以及 CAN 流量. 向量的例子: char timeBuffer[64]; getLocalTimeString(timeBuffer); writeToLogEx("===> %s",timeBuffer); 正则表达式选项: "%ld","%d" decimal display "%lx","%x" hexadecimal display "%lX","%X" hexadecimal display (upper case)
742 2022-08-09
编程技术问答社区
如何用CAPL读取csv中的浮点?
我有一个.csv文件,我想以其格式读取数据,而不是字符串. 如果可以,这是将文件保存在读取器中的函数. fileGetString(readbuffer,elcount(readbuffer),readHandle)!=0) 我的数据以这种格式: Temperature;12.25;15.65;-25.12;80; Time;1;2;4;7; 我想在缓冲区" Temperature[i]"中节省温度 并在时间" Time[i]"的时间上做同样的事情 我该如何在CAPL中执行此操作? 我知道我可以读取每个数据,例如字符串并铸造到整数或float执行某些操作,但是我想优化代码并以其格式读取每个数据. 解决方案 您可以使用strtod()将字符串转换为浮点数. 只是为了娱乐,这是完整的示例: on start { dword fh; char text[255]; double Temperature[4], Time[4]; int
194 2022-08-09
编程技术问答社区
CAPL编程使用定时器作为延迟
我一直在编写一个 CAPL 脚本,该脚本会在一定延迟后在每个频道(2 个否)上发送消息.我想使用 SetTimer() 和 mstimer::isRunning 函数生成以下延迟.我可以使用 setTimer 函数,但我不知道如何使用 mstimer::isRunning.代码如下: Variables{ message * temp = {DLC=8}; mstimer timer1; } on timer timer1{ //Do nothing } onstart{ for(noofChannel=1;noofChannel
4330 2022-08-09
编程技术问答社区
使用CAPL和CANalyzer在按下按钮时发送周期性的CAN信号
我正在尝试将一组 CAN 帧发送到 CAN 总线.我使用 CAPL 进行编程,使用 CANalyzer8.5 进行模拟,使用面板设计器创建按钮.我的要求是首先使用 PANEL 设计器创建一个按钮.只有在按下按钮时,它才会开始向总线发送周期性的 CAN 帧.我对如何实现它有点困惑.到目前为止,我已经设法使用 CAPL 编写了两个单独的程序.第一个程序在启动时定期发送数据.按下按钮时,第二个代码仅发送一次数据.我想合并两个代码以在按下按钮时开始定期发送. 第一个代码 /*@!Encoding:1252*/ includes { } variables { msTimer mytimer; message 0x100 A={dlc=8}; message 0x200 B={dlc=8}; message 0x300 C={dlc=8}; message 0x400 D={dlc=8}; } on start { setTimer(mytimer,50); }
1038 2022-08-09
编程技术问答社区
计时器是否在运行,而循环是活动的?
这是我的代码: setTimer(delay, (SEEDKEY_MAXTRY * SEEDKEY_FREQ) + (LOGIN_MAXTRY * LOGIN_FREQ)); do { // waits, until all operations have been executed; } while(isTimerActive(delay)); 我确切地知道执行我的命令需要多长时间,所以我将计时器 delay 设置为显式值.我必须等待,直到我返回一些值. 模拟卡在这一点上,我的面板进入 Windows-“无响应",我可以结束模拟的唯一方法是通过任务管理器. 我认为唯一的解释是,当我在 do ... while 语句中时,计时器需要更多时间,或者根本不执行.(与 while {} 相同) 有人可以证实这个想法,或者通过给我一个解决我的问题来证明我错了吗? 解决方案 好吧,我总能找到解决方法,因为 CAPL 在 stackoverflow 上不太
234 2022-08-09
编程技术问答社区
CAPL中除了testwaitfortimeout()之外的延迟函数
我有一个控制 GPIB 电源的 CAPL 测试节点.该 CAPL 生成一个每 3 ms 修改一次的信号.我的 CAPL 如下所示: ... testcase wavGenerator() { GPIBWrite(myDevice, "VOLT", voltValue); testwaitfortimeout(3); ... } 问题是这个 testwaitfortimeout() 函数会在测试报告中生成一个注释,并且由于我对每个测试用例使用这个函数 2000/3000 次,我以一个巨大的测试报告结束. 我已经尝试实现一个函数来生成像 waitfortimeout() 那样的“延迟",如下所示: void delay(int ms) { float refTime; refTime = timeNowFloat(); while(timeNowFloat()
4354 2022-08-09
编程技术问答社区
使用CAPL在CANoe中通过ISO-TP(传输协议)传输数据
将 CAPL 与 CANoe 结合使用,通过 CAN 上的 ISO-TP 传输大量数据.是否有一个例程可以处理嵌入在 CAPL 中的数据分段,还是我需要编写自己的解释? 解决方案 看看 OSEK_TP CANoe 演示.它展示了如何通过 ISO-TP(传输协议,ISO 15765-2)传输和接收数据.有关实现细节,请参阅 nodeA.can 文件和 OSEL_TP API 参考. 这是最小的例子: 创建和配置连接: long handle; handle = CanTpCreateConnection(0); // 0 = Normal mode CanTpSetTxIdentifier(handle, 0x700); // Tx CAN-ID CanTpSetRxIdentifier(handle, 0x708); // Rx CAN-ID 发送数据: BYTE data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
700 2022-08-09
编程技术问答社区