卡米拉 发表于 2021-9-2 10:07:38

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

一、适合范围本文档适合大彩带 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
3LUA脚本初学者可以通过下面链接进行学习。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-1EW系列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 =get_value(screen_can,1)>> 8
      send_data_buffer =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)
   ifCAN_CMD_ID == identifier then
      set_value(screen_can,5,rtr)
      if data ~= nil and data ~= nil then
            local show_value = (data<<8) + data          --将前两个字节合并显示
            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进行提取。


pikachu 发表于 2023-5-9 13:44:07

本帖最后由 pikachu 于 2023-5-9 13:49 编辑

您好 我嘗試使用button觸發CAN通訊 但是卻一直返回 attempt to call a nil value (global 'canbus_write')
我的機型 DC19720EW103
運行虛擬串口屏

If后要接end 发表于 2023-5-9 14:25:37

pikachu 发表于 2023-5-9 13:44
您好 我嘗試使用button觸發CAN通訊 但是卻一直返回 attempt to call a nil value (global 'canbus_write')
...

虚拟屏不支持can相关功能调试,需要使用实体屏测试

pikachu 发表于 2023-5-9 15:27:51

本帖最后由 pikachu 于 2023-5-9 15:36 编辑

If后要接end 发表于 2023-5-9 14:25
虚拟屏不支持can相关功能调试,需要使用实体屏测试
如果是不支援,應該是執行然後沒反應?

1 電腦有用usb連線can訊號到我的裝置上
2 我在實體屏上測試,也沒有反應

If后要接end 发表于 2023-5-9 15:41:10

pikachu 发表于 2023-5-9 15:27
如果是不支援,應該是執行然後沒反應?

1 電腦有用usb連線can訊號到我的裝置上


没反应抓一下屏幕的运行日志,看看程序是不是报错了
https://bbs.gz-dc.com/forum.php?mod=viewthread&tid=825&extra=page%3D1

pikachu 发表于 2023-5-9 16:49:36

If后要接end 发表于 2023-5-9 15:41
没反应抓一下屏幕的运行日志,看看程序是不是报错了
https://bbs.gz-dc.com/forum.php?mod=viewthread&ti ...

不好意思 我在虛擬屏就已經出錯了
應該還不用去檢測屏幕是否有問題?!

我後來又創了一個project
on_init的時候,就把can通道打開 => canbus_open(0,250,0,0)
error :36: attempt to call a nil value (global 'canbus_open')
這錯誤訊息 指出我調用了一個不存在的函數
canbus_open =>不存在?!
可以請你們說一下 canbus_open是被定義在哪個檔案中嗎? 我擔心是在打包的時候,CAN相關的函數沒有被打包到

If后要接end 发表于 2023-5-9 17:20:15

pikachu 发表于 2023-5-9 16:49
不好意思 我在虛擬屏就已經出錯了
應該還不用去檢測屏幕是否有問題?!



嗯,虚拟屏出错是因为软件不支持使用canbus_open这个api,也就是虚拟屏不支持can功能,所以需要用实体屏来测试,现在实体屏也不行,就只能去抓屏幕的运行日志看看是不是哪里出错了

pikachu 发表于 2023-5-11 09:52:09

If后要接end 发表于 2023-5-9 17:20
嗯,虚拟屏出错是因为软件不支持使用canbus_open这个api,也就是虚拟屏不支持can功能,所以需要用实体屏 ...

您好 我後來發現是我的裝置連接出現問題 解決後已經恢復正常 謝謝您的回覆 :)
页: [1]
查看完整版本: 大彩串口屏CAN总线数据收发应用说明