Vspy工程之C Code Interface的使用(Vspy系列其三)

Vspy工程之C Code Interface的使用(Vspy系列其三)

Vspy工程之C Code Interface的使用(Vspy系列其三)1、通过C Code Interface新建vs工程

2、C Code Interface的使用

3、自动生成的函数接口解析3.1、针对vspy工程中的Function Block生成的函数接口

3.2、针对vspy工程中定义的App Signal生成的函数接口

3.3、针对vspy工程中定义的时间事件生成的函数接口

3.4、生成的通用函数接口

3.5、其他不常用的函数接口

3.6、针对vspy工程中的报文生成的函数接口

4、报文发送的函数接口4.1、_TransmitFast()函数

4.2、_Tranmit(参数)函数

4.3、GenericMessageTransmit(参数)函数

4.4、对上述三种发送函数的总结

1、通过C Code Interface新建vs工程

通过Vspy提供的C Code Interface接口,我们可以在其生成的C工程代码上进行二次编程开发,以完成更为复杂的功能需求。在已经建好的vspy工程中添加C Code Interface的vs工程的步骤如下,注意电脑需要安装上VS/VC软件。

(1)、点击工具栏”Scripting and Automation”下的”C Code Interface”,此时界面如下:

(2)、点击上图的”Add Project”,此时可以选择新建工程或者导入已有工程;我们这里以新建工程为例:点击”New Project”,输入要创建的工程名字和描述,点击ok,此时就已经完成vs工程的创建了(注意新建的vs工程,需要先打开vspy工程进行编译生成dll文件;此时才能正常调用c code interface功能)。此时界面如下:

Ps:上图中的"Output"界面用于输出我们在工程中调用"Printf()"函数输出的字符内容;可以用于调试,方便我们定位问题。

2、C Code Interface的使用

当我们按照前面步骤通过Vspy的C Code Interface创建好vs工程时,已经将该Vspy工程的所有数据信息(比如该vspy工程中的报文、定义的App Signal、Function Block等信息)写入到vs工程文件中了(在vspy.c和vspy.h这两个文件中体现);同时自动生成了工程的主函数的 Spy_Main()。

2.1、点击”C Code Inteface”界面下的”Edit”(或者双击下面的工程名),进入编辑界面

2.2、如下,可以在对应的报文类型(Rx/Tx/Db)中选择指定的报文作为报文事件、选择工程中已经定义好的App Signal作为应用信号事件、添加时间事件;

(1)、双击左侧想要添加为事件的报文或应用信号(此时右侧边框会更新显示);

(2)、点击”Event Handle Code”,就可以看到我们新增进来的事件代码函数接口;如下:

(3)、将自动生成的事件函数接口代码拷贝到SpyCCode.c中,在该接口函数里添加自己要处理的c代码;当对应的事件发生时,则会调用该函数(如对应的App Signal值有输入时触发的App Siganl事件;定时时间到达触发的定时器事件等)。

Ps:当我们对Vspy工程进行改动后,例如对报文、应用信号、事件等的新增或修改;需点击上图的”Update Support Files”,将Vspy上的改动信息同步更新到vs工程文件中去。再通过其生成的接口函数对其进行操作。

3、自动生成的函数接口解析

当我们通过Vspy的C Code Interface完成对应vs工程的生成时,该Vspy工程的所有数据信息(比如该vspy工程中的报文、定义的App Signal、Function Block等信息)也已经在vspy.c、vspy.h这两个文件中生成了。接下来,我们就针对vspy工程中自动生成的函数接口进行介绍;以便大家对函数接口的理解及调用。

[var1]

函数及变量以”FB_”开头,在Vspy 工程中定义了” OpenTurnRightAlarm”这个Function Block ;以此为例,通过C Code Interface自动生成的vs工程中包含该Block的操作函数如下,可以直接在程序中调用这些接口函数对Function Block进行操作;如**开始(_Start)/暂停(_Stop)**等操作。

[var1]

函数及变量以”AS_”开头,如下,我们在Vspy工程中创建了两个应用信号,一个是名为”Num1”的数值类型应用信号;另一个是名为”Path”的文本型应用信号。通过C Code Interface自动生成的vs工程中包含该应用信号的操作函数有:

其中,对于数值型的应用信号主要就是_Get、_Set操作接口,用于对数值型应用信号值的获取和设置;对于文本型的应用信号主要是_GetText、_SetText操作接口,用于对文本型应用信号值的获取和设置,常用于文件打开操作时文件路径的传递。

[var1]

函数以”Tmr_”开头,如下,我们在Vspy工程中创建了一个名为"TimerEvent1"的时间事件;

在”Event Handler Code”将生成的事件函数接口考到c代码中,在里面添加想要执行的周期代码;则在vspy工程启动时会周期性(上例中每500ms执行一次)地执行该事件的代码块。

对于我们创建的这个名为”TimerEvent1”的时间事件,通过C Code Interface自动生成的操作函数如下,可以通过生成的接口函数对该时间事件进行使能(_Enable_Set)、周期设置(_SetPeriod)等操作。

[var1]

如下,这些函数在通过Vspy的C Code Interface创建vs工程时在SpyCode.c中自动生成的(如主函数Spy_Main也是其中之一);可以根据需要使用这些接口函数进行功能开发。例如通过"Spy_EveryMessage"函数在接收到指定报文后进行解析或提示操作;通过"Spy_ErrorFrame"函数在检测到错误帧进行错误处理或提示等。

[var1]

(1)、SpyShowPanel()函数:用于在C代码中实现调出Panel面板;如:

SpyShowPanel(“Graphical Panels”, “Panel 1”); /调出“Graphical Panels”栏下的”Panel 1”面板/

(2)、在C代码中调用vspy工程中的诊断报文;例如我们定义了一个名为” 10 Diagnostic Session Control Job”的诊断报文;则其生成的接口函数是以DG_开头的,如下,可以根据需要调用函数接口在C代码中进行诊断工作,如开始(_Start)/停止(_Stop)操作等。

Ps:关于Vspy工程中诊断报文的定义,可以直接导入cdd诊断数据库文件(步骤可参考"vspy常用操作"一文中关于导入cdd的操作);也可以在工具栏”Spy Networks”下的”Setup Diagnostics”中进行添加;如下:

[var1]

(1)、接收报文:函数及变量以”MG_”开头,在Vspy工程中定义了”TPMS”这个接收报文,以此为例,通过C Code Interface自动生成的vs工程中包含该报文的操作函数如下(注意函数名中的HS_CAN 代表该报文所属的CAN网络,不是一定的值):

(2)、发送报文:函数及变量以”TX_”开头,在Vspy工程中定义了”BCM”这个发送报文;以此为例,通过C Code Interface自动生成的vs工程中包含该报文的操作函数如下:

(3)、DBC中的报文:函数及变量以”DB_”开头,在Vspy工程中添加了dbc,dbc文件中包含了”ACC1”这个报文;以此为例,通过C Code Interface自动生成的vs工程中包含该报文的操作函数如下:

4、报文发送的函数接口

[var1]

如3.6小节中对发送报文生成的函数接口中,有一个比较特殊的函数接口_TransmitFast();该函数接口是只有定义为发送报文才会生成的;通过调用接口可以将报文完全按照我们在vspy中定义的格式内容进行发送,不需像_Transmit()函数那样得自己定义报文格式内容。

[var1]

需先用生成的类型定义一个报文变量;然后手动设置该报文变量的发送信息;再通过该函数进行发送(也可以不设置信号值,直接定义报文变量进行发送,此时的功能则和_TransmitFast 一致);如下:

void Spy_Main()

{

do

{

Sleep(100);

TX_EMS3_HS_CAN stMsg;/*创建TX_EMS3_HS_CAN类型变量,该类型是根据vspy中定义的“EMS3”这一报文自动创建的*/

TX_EMS3_HS_CAN_Init(&stMsg);/*该函数是根据vspy中的“EMS3”这一报文自动创建的,用于初始化*/

stMsg.MessageData.btData[0] = 0x0; /*设置报文信息内容*/

stMsg.MessageData.btData[1] = 0x1;

stMsg.MessageData.btData[2] = 0x2;

stMsg.MessageData.btData[3] = 0x3;

stMsg.MessageData.btData[4] = 0x4;

stMsg.MessageData.btData[5] = 0x5;

stMsg.MessageData.btData[6] = 0x6;

stMsg.MessageData.btData[7] = 0x7;

stMsg.MessageData.iNumDataBytes = 8; /*设置报文长度*/

TX_EMS3_HS_CAN_Transmit(&stMsg); /*发送报文*/

} while (1);

}

如上,在主函数中通过生成的"TX_EMS3_HS_CAN"类型创建了报文变量,对其进行发送内容和长度的手动设置后,通过生成的_Transmit函数进行发送。编译更新dll文件,打开vspy工程,在”Message”界面下可以看到该报文已经按照我们定义的发送出来了。

[var1]

需自己定义报文的结构信息,再调用该函数进行定义的报文发送操作。当需要发送vspy工程中未定义的报文时,即可以通过通用的报文属性("GenericMessage"类型)定义报文变量,设置好要发送的报文ID、内容、长度等信息,并通过该函数来进行发送操作。如下:

void Spy_Main()

{

do

{

Sleep(100);

GenericMessage stMsg = { 0 }; /*定义GenericMessage类型的报文变量*/

stMsg.iNetwork = NET_HS_CAN; /*定义该报文网络*/

stMsg.iID = 0x555; /*定义该报文ID*/

stMsg.iNumDataBytes = 3;/*定义该报文长度*/

stMsg.btData[0] = 0x55;/*定义该报文信息内容,未进行值设置的自动补充0*/

stMsg.btData[1] = 0x5;

GenericMessageTransmit(&stMsg);

} while (1);

}

如上,在主函数中我们定义了一条0x555的报文,对其内容和长度进行手动配置,并通过GenericMessageTransmit()函数进行发送。编译更新dll文件,打开vspy工程,在”Message”界面下可以看到该报文已经按照我们定义的发送出来了。

Ps:GenericMessage 是vspy中对于报文定义的结构体类型(在vspy中定义的报文也是这个类型);当我们需要在vs工程中自定义报文进行发送时,需要定义一个该类型的报文变量,如上例中的stMsg变量。其结构如下:

[var1]

(1)、当我们在vspy中定义好了要发送的报文信息(注意是作为发送报文),并且不需改动到报文内容时,可以直接使用该报文生成的_TransmitFast()函数接口进行发送操作(直接调用,方便快捷);

(2)、当我们在vspy中定义好了报文信息,但在发送过程中需要对其信号内容进行改动或赋值时,则可以通过调用该报文生成的类型创建一个报文变量,对其进行发送内容和长度的手动设置后,通过生成的_Transmit函数进行发送操作;

(3)、当我们要发送的报文是原先vspy工程中没有定义过的,是我们直接自定义的,即并没有通过C Code Interface生成对应的函数接口时。可以自己通过通用的报文信号"GenericMessage"类型创建一个报文变量,对其进行发送内容和长度的手动设置后,通过GenericMessageTransmit()函数进行发送操作。

Vspy工程之C Code Interface的使用(Vspy系列其三)相关教程

vspy如何在图形面板显示报文_Vspy工程之C Code Interface的使用(Vspy系列其三)相关推荐

  1. vspy如何在图形面板显示报文_GUI 图形用户界面 [学习笔记]

    今晚返璞归真了一把, 系统了解了一下GUI的有关知识: GUI(Graphical User Interface)图形用户界面 是指采用图形方式显示的计算机操作用户接口.与早期计算机使用的命令行界面相 ...

  2. vspy如何在图形面板显示报文_设备实时状态监控:如何进行工业生产设备数据采集?...

    设备实时状态监控:如何进行工业生产设备数据采集?数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析,处理. 慧都设备数据采集系统解决方 ...

  3. vspy如何在图形面板显示报文_触想激光切割解决方案中嵌入式工业触控显示器有何优势?...

    方案背景 根据专家预测,国内的激光市场仍处于高速的增长阶段.目前国内的激光产业主要在深圳.武汉两地聚集,其中深圳是国内的重要销售市场,并且以多年的发展经验,领先了其他区域. 在激光市场快速增长的趋势下 ...

  4. vspy如何在图形面板显示报文_盘点市售三款USBC 86型面板插座,支持iPhone 12快充...

    2020年USB-C充电器已全面普及,iPhone 12也支持USB PD快速充电,快充已无声无息地进入人们日常生活中.除USB-C充电器外,配备USB-C的插线板也开始陆续铺货,作为供电源头的家装墙 ...

  5. python画图显示中文乱码_解决Python pandas plot输出图形中显示中文乱码问题

    解决方式一: import matplotlib #1. 获取matplotlibrc文件所在路径 matplotlib.matplotlib_fname() #Out[3]: u'd:\\Anaco ...

  6. 用c语言如何以图形方式显示家谱,数据结构_家谱管理系统

    C语言 家谱管理系统 /*7.家谱管理系统 (4) 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名.出生日期.婚否 ...

  7. 不规则裁剪图片css,使用CSS的clip-path属性实现不规则图形的显示

    clip-path CSS 属性使用裁剪方式创建元素的可显示区域.区域内的部分显示,区域外的隐藏. 例子 div { width: 200px; height: 200px; background: ...

  8. 服务器主板显示e2,大金中央空调有一台机面板显示E2是什么问题如何解决故障...

    大金中央空调有一台机面板显示E2是什么问题如何解决故障 大金空调故障代码E2故障内容:漏电检测 大金空调故障代码E2故障原因:接地短路,与电流传感器之间的配线错误.压缩机或风扇电机绝缘不良.A8P板子 ...

  9. 面板显示技术:LCD与OLED

    面板显示技术(FPD)大致分为三个阶段:CRT(阴极射线管).LCD液晶显示器.OLED(有机发光半导体),未来有望发展的技术有Mini-LED.Micro-LED. 在过去的20多年显示面板产业经历 ...

最新文章

  1. git push 时不用每次都输入密码的方法
  2. 计算机ppt继续教育,泰州市专业技术人员继续教育公需科目PPT2010试卷及答案
  3. linux-进程的替换exec函数族
  4. 逆袭!BCH交易超越BTC
  5. C#--多线程--2
  6. mysql自定义数据类型_MySQL中的数据类型
  7. linux中DIR、dirent、opendir()、readdir()、closedir()函数的使用
  8. 【华为云技术分享】云小课 | SAP容灾一点通
  9. thymeleaf中的th:assert用法
  10. HttpClient工具类 HttpClientUtils.java
  11. 关于新APP,从交底书入手
  12. PRINCE2认证之项目四大管理步骤
  13. 手机中的传感器之光线传感器(Android实现)
  14. Java手机号码工具类(判断运营商、获取归属地)
  15. 《安富莱嵌入式周报》第290期:开源静电便携测试仪,开源音频功放,CAN高波特率设计,超级铁电产品,小米Vela系统,65W USB PD充电器参考设计
  16. Java中 VO、PO、DO、DTO、BO、QO、DAO、POJO的概念
  17. MOOS通信框架初探(一)
  18. SpringBoot基础学习之SpringBoot配置(上篇)
  19. 新买的苹果11如何验真假
  20. 大数据之路之平台数据开发规范

热门文章

  1. mxnet 训练--如何生成rec 数据 +自己在本机测试的结果
  2. JSP页面是否需要重新编译--checkInterval
  3. eclipse3.6_jee启动tomcat无法访问http://localhost:8080/的解决方案
  4. oracle+视图+图形化,如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇...
  5. 有乳胶枕吗_乳胶枕怎么挑?网传的踩鸡蛋检测法,实际不靠谱
  6. wpf 加载page后启动_App启动之Dyld在做什么
  7. bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结
  8. java 切换主线程_Java线程切换(一)
  9. mysql 事务 返回插入的值_深入理解mysql事务:事务机制的实现原理
  10. html5中control,HTML5.(control-shift)