一、适合范围 本文档适合大彩带 CAN接口的EW系列串口屏产品使用。
二、开发环境版本 1. VisualTFT软件版本:V3.0.1.1112及以上的版本。 版本查看: 1) 打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号; 图2-1软件版本
图2-2软件版本
2. 串口屏硬件版本:EW系列固件 >= V7.0.863.0。 版本查看: 1) 查看屏幕背面版本号贴纸; 2) VisualTFT与屏幕联机成功后,右下角显示的版本号。
三、CAN功能概述 EW系列串口屏CAN总线接口的参数如下: 1. 波特率支持125k ~ 1M Bps; 2. 屏幕内置128欧姆终端电阻; 3. 支持标准帧和扩展帧; 4. 遵循CAN2.0B协议。
四、参考资料 1 《LUA 脚本API V1.4》可通过以下链接下载物联型开发包获取: http:/www.gz-dc.com/index.php?s=/List/index/cid/19.html
2 《LUA基础学习》可通过以下链接下载物联型开发包获取: http:/www.gz-dc.com/index.php?s=/List/index/cid/19.html
3 LUA脚本初学者可以通过下面链接进行学习。 http://www.runoob.com/lua/lua-arrays.html
五、教程实现 本文主要介绍屏幕CAN接口数据收发,以及CAN相关API应用等,将以下2点进行说明: 1. 准备工程素材; 2. 配置串口屏工程;
5.1 准备工程素材在实现例程前需要作以下3个准备: 1. 硬件平台; 2. 软件平台; 3. UI素材;
5.1.1 硬件平台 该例程使用大彩物联型7寸串口屏DC80480EW070为验证开发平台。如图5-1所示; 图5-1 EW系列7寸串口屏 其他尺寸EW型的串口屏带CAN总线接口的产品均可借鉴此教程。
5.1.2 软件平台 图5-2 下载软件
5.2 配置串口屏工程本文主要介绍以下2点: (1) 发送数据 (2) 接收并显示数据
5.2.1 CAN总线收发测试本例程中使用电脑通过USB转CAN的调试工具与EW070进行数据收发测试。 1. 画面配置 在画面ID0中,添加两个文本控件(控件ID1、控件ID2)和一个按钮控件(控件ID4),其中控件控件ID1显示“需要发送的数据”、控件ID2显示“CAN总线接收到的数据”。控件ID1为按钮按下时候发出数据给CAN总线。如图5-3所示: 图5-3 画面配置
2 LUA脚本编辑在系统初始化函数中打开CAN bus 接口,代码如所示; - --初始化函数
- function on_init()
- canbus_open(0,125,0,0) --打开CANBUS 接口,设备索引号0,波特率125kbps ,关闭只读模式,关闭自收发测试
- end
复制代码
本例程中,用户点击按钮控件ID4后,将向CAN总线发送控件1的值。代码如程序清单 1所示: 程序清单 1 功能实现 - --用户通过触摸修改控件后,执行此回调函数。
- --点击按钮控件,修改文本控件、修改滑动条都会触发此事件。
- function on_control_notify(screen,control,value)
- if screen== screen_can and control==4 and value==1
- then
- send_data_buffer[0] = get_value(screen_can,1)>> 8
- send_data_buffer[1] = get_value(screen_can,1)&0xFF
- canbus_write(0,CAN_CMD_ID,2,0,0,send_data_buffer)
- end
- end
复制代码
电脑调试工具接收到CAN的数据,显示如下: - function on_canbus_recv (index,identifier,dlc,rtr,ide,data)
- if CAN_CMD_ID == identifier then
- set_value(screen_can,5,rtr)
- if data[0] ~= nil and data[1] ~= nil then
- local show_value = (data[0]<<8) + data[1] --将前两个字节合并显示
- set_value(screen_can,2,show_value)
- canbus_write(0,CAN_CMD_ID,dlc,0,0,data)
- end
- end
- end
复制代码当电脑通过CAN正确响应屏幕请求后,将信息显示在文本ID2中。
5.2.2 核心API函数1) canbus_open(index,baudrate,listen_mode,loop_back) --开启CANBUS 接口 - Index-索引号0~1(0指的是第一路CAN接口,1表示第二路CAN接口,目前只支持一路)
- Baudrate-波特率(单位K),可选125,250,500,1000
- listen_mode-只读模式
- loop_back-自发自收(环回/自测)
2) canbus_close(index) 关闭CANBUS 接口
3) canbus_write(index,identifier,dlc,rtr,ide,data) 发送CAN报文 - index--索引号0~1
- identifier--报文ID(越小优先级越高)
- dlc--数据长度(0~8,最长8个字节)
- rtr--远程帧,0代表否,1代表是
- ide--扩展帧,0代表否,1代表是
- data--数据,table 格式
4) on_canbus_recv(index,identifier,dlc,rtr,ide,data) CAN 报文回调函数,收到报文后,系统自动调用 - index--索引号0~1
- identifier--报文ID(越小优先级越高)
- dlc--数据长度(0~8,最长8个字节)
- rtr--远程帧,0代表否,1代表是
- ide--扩展帧,0代表否,1代表是
- data--数据,table 格式
基本思路:当按钮控件ID4按下的时候,触发触摸控件回调函数on_control_notify(),再调用canbus_write ()向CAn总线发送报文。当CAN总线其他节点发送数据后屏幕会自动回调系统函数on_canbus_recv,通过判断对应的报文ID编号,对屏幕的响应信息data进行提取。
|