您的位置:首页   >  关于我们  >  新闻动态

大彩串口屏CAN总线数据收发应用说明

发布人:大彩科技发布日期:2021-09-02

一、适合范围


本文档适合大彩带 CAN接口的EW系列串口屏产品使用。





二、开发环境版本


1. VisualTFT软件版本:V3.0.1.1112及以上的版本。

版本查看:

1) 打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号;

图片

图2-1软件版本


2) 打开VisualTFT,在软件右下角可以查看软件版本图2-2软件版本,最新版本可登录http://www.gz-dc.com/进行下载。

图片

图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 软件平台

使用大彩自主研发的上位机软件VisualTFT配置工程,登录http://www.gz-dc.com/下载。如图5-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 接口

  • Index-索引号0~1


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进行提取。