广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7015|回复: 8

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

[复制链接]

82

主题

105

帖子

9232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9232
发表于 2021-9-2 10:07:38 | 显示全部楼层 |阅读模式
一、适合范围
本文档适合大彩带 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 接口,代码如所示;
  1. --初始化函数
  2. function on_init()
  3.     canbus_open(0,125,0,0)    --打开CANBUS 接口,设备索引号0,波特率125kbps ,关闭只读模式,关闭自收发测试
  4. end
复制代码

本例程中,用户点击按钮控件ID4后,将向CAN总线发送控件1的值。代码如程序清单 1所示:
程序清单 1 功能实现
  1. --用户通过触摸修改控件后,执行此回调函数。
  2. --点击按钮控件,修改文本控件、修改滑动条都会触发此事件。
  3. function on_control_notify(screen,control,value)
  4.     if screen== screen_can and control==4 and value==1  
  5.     then
  6.         send_data_buffer[0] =  get_value(screen_can,1)>> 8
  7.         send_data_buffer[1] =  get_value(screen_can,1)&0xFF
  8.         canbus_write(0,CAN_CMD_ID,2,0,0,send_data_buffer)

  9.     end
  10. end
复制代码

电脑调试工具接收到CAN的数据,显示如下:
  1. function on_canbus_recv (index,identifier,dlc,rtr,ide,data)
  2.      if  CAN_CMD_ID == identifier then
  3.         set_value(screen_can,5,rtr)
  4.         if data[0] ~= nil and data[1] ~= nil then
  5.             local show_value = (data[0]<<8) + data[1]          --将前两个字节合并显示
  6.             set_value(screen_can,2,show_value)
  7.             canbus_write(0,CAN_CMD_ID,dlc,0,0,data)

  8.         end

  9.      end

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
销售与技术支持:(020)82186683-601
回复

使用道具 举报

0

主题

5

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2023-5-9 13:44:07 | 显示全部楼层
本帖最后由 pikachu 于 2023-5-9 13:49 编辑

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

使用道具 举报

2

主题

1253

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12537
发表于 2023-5-9 14:25:37 | 显示全部楼层
pikachu 发表于 2023-5-9 13:44
您好 我嘗試使用button觸發CAN通訊 但是卻一直返回 attempt to call a nil value (global 'canbus_write')
...

虚拟屏不支持can相关功能调试,需要使用实体屏测试
Easy doesn't enter into Grown-up life
成年人的生活里面没有“容易”二字
回复

使用道具 举报

0

主题

5

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2023-5-9 15:27:51 | 显示全部楼层
本帖最后由 pikachu 于 2023-5-9 15:36 编辑
If后要接end 发表于 2023-5-9 14:25
虚拟屏不支持can相关功能调试,需要使用实体屏测试

如果是不支援,應該是執行然後沒反應?

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

回复

使用道具 举报

2

主题

1253

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12537
发表于 2023-5-9 15:41:10 | 显示全部楼层
pikachu 发表于 2023-5-9 15:27
如果是不支援,應該是執行然後沒反應?

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

没反应抓一下屏幕的运行日志,看看程序是不是报错了
https://bbs.gz-dc.com/forum.php? ... &extra=page%3D1
Easy doesn't enter into Grown-up life
成年人的生活里面没有“容易”二字
回复

使用道具 举报

0

主题

5

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 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 [string "------------------------------------..."]:36: attempt to call a nil value (global 'canbus_open')
這錯誤訊息 指出我調用了一個不存在的函數
canbus_open =>不存在?!
可以請你們說一下 canbus_open是被定義在哪個檔案中嗎? 我擔心是在打包的時候,CAN相關的函數沒有被打包到
回复

使用道具 举报

2

主题

1253

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12537
发表于 2023-5-9 17:20:15 | 显示全部楼层
pikachu 发表于 2023-5-9 16:49
不好意思 我在虛擬屏就已經出錯了
應該還不用去檢測屏幕是否有問題?!

嗯,虚拟屏出错是因为软件不支持使用canbus_open这个api,也就是虚拟屏不支持can功能,所以需要用实体屏来测试,现在实体屏也不行,就只能去抓屏幕的运行日志看看是不是哪里出错了
Easy doesn't enter into Grown-up life
成年人的生活里面没有“容易”二字
回复

使用道具 举报

0

主题

5

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2023-5-11 09:52:09 | 显示全部楼层
If后要接end 发表于 2023-5-9 17:20
嗯,虚拟屏出错是因为软件不支持使用canbus_open这个api,也就是虚拟屏不支持can功能,所以需要用实体屏 ...

您好 我後來發現是我的裝置連接出現問題 解決後已經恢復正常 謝謝您的回覆
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2024-4-18 20:21 , Processed in 0.059317 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表