【物联网智能网关-09】CAN总线通信演示(TinyGUI触屏)

简介: CAN是Controller AreaNetwork 的缩写,ISO国际标准化的串行通信协议。最早应用在汽车上,在欧洲是汽车网络的标准协议,目前已经广泛应用在工业自动化、智能家居、船舶、纺织和医疗设备等领域

CAN是Controller AreaNetwork 的缩写,ISO国际标准化的串行通信协议。最早应用在汽车上,在欧洲是汽车网络的标准协议,目前已经广泛应用在工业自动化、智能家居、船舶、纺织和医疗设备等领域(详情请参见百度百科《CAN总线协议》)。

由于CAN总线接口.NET MicroFramework官方库并不支持,所以我在串口类库的基础上,根据CAN总线的特点,设计出一套CAN总线通信库。

CAN类库的声明如下:

public class CAN

    {

        publicCAN(string canName, CanBaudRatebaudRate);

        publicCAN(string canName, CanBaudRatebaudRate, CanConfig config);

        public int DatasToRead { get;}

        public int DatasToWrite { get;}

        public event CanEventHandlerDataReceived;

        public event CanEventHandlerErrorReceived;

        public int Close();

        public int DiscardInBuffer();

        public int DiscardOutBuffer();

        public int Flush();

        public int IOControl(CanIOControlcode, int parameter);

        public int Open();

        public int Read(CanDatadata);

        public int SetFilter(intindex, CanFilter filter);

        public int Write(CanDatadata);

    }

同时支持CAN2.0A和CAN2.0B协议,相对比较有特色的,一是CanData,二是过滤器设置。

一条CanData包含如下信息:

    public class CanData

    {

        publicCanData();

        publicCanData(uint id, boolIsEXID);

        publicCanData(uint id, boolIsEXID, byte[] data);

        public int Count { get; }

        public byte[] Data { get; }

        public int Filter { get; }

        public uint ID { get; }

        public bool IsEXID { get; }

        public bool IsRemote { get;}

    }

和串口及网口通信不同,CAN一帧数据,最多能发8个字节的数据,ID可以是11位的标准ID也可以是29位的扩展ID,帧数据也可以定义为远程帧(不含数据,仅含ID等信息)或标准帧。STM32F207(或STM32F103),发送缓冲区可缓存3个数据帧r,接收缓冲区是双fifo,一个fifo可以接收3个数据包。但是仅仅这些还不够,本类库仿照串口通信,内置了可以任意定义发送和接收缓冲区大小的功能(其实对串口通信来说,发送和接收buffer却是内部定死的,用户不能自定义)。这样用户在大量发送和接收数据的时候,就无后顾之忧了。

过滤器(Filter)应该是CAN的精华所在了,要想理解和设置好,却不是易事。所以为了便于用户使用,对过滤器类重载了很多定义函数,过滤器类库声明如下:

    public class CanFilter

    {

        publicCanFilter(bool enable);

        publicCanFilter(uint id, uintmask);

        publicCanFilter(uint id0, uintid1, bool IsRemote);

        publicCanFilter(uint id, uintmask, bool IsRemote, boolIsMaskMode);

        publicCanFilter(ushort id0, ushortmask0, ushort id1, ushortmask1);

        publicCanFilter(bool IsMaskMode, bool IsFifo0, boolIsWidth32, uint data1, uintdata2);

        publicCanFilter(ushort id0, ushortid1, ushort id2, ushortid3, bool IsRemote);

        publicCanFilter(ushort id0, ushortmask0, ushort id1, ushortmask1, bool IsRemote, boolIsMaskMode);

    }

对STM32芯片集成的CAN功能来说,过滤器有两种过滤模式,一种是ID列表模式,另外一种是ID掩码模式。而这两种又根据过滤数据的宽度不同,分为32位和16位。

限于篇幅,关于CAN通信库具体的内容就不在此展开介绍了,详情请参见YFSoft.CAN.rar压缩包里面的文档说明。

本文借助三个物联网智能网关进行CAN总线网络通信,来讲解CAN总线的使用情况(顺便介绍一下TinyGUI的触摸屏事件使用)。
image.png

示例程序分两种:一种是主控程序,上面设计了三个开关按钮,并且可以切换需要控制的CAN设备。另外一种,就是从设备程序了,该程序部署分别部署到两个设备上,程序的唯一区别就是,所要接收的ID标识号不同,一个是2#,一个是3#(程序界面如上图所示)。

在说CAN总线通信之前,先介绍一下TinyGUI的触摸屏事件的使用。

示例代码如下,用法非常简单。

Graphics screen = new Graphics();

screen.OnTouch += newTouchEventHandler(screen_OnTouch);

static voidscreen_OnTouch(int x, inty, int state)

{

  //x-x坐标 y – y坐标

  //state – 1 按下 0 抬起

}

主控CAN通信程序
第一步:创建一个CAN通信类,并绑定接收和错误事件

  can = new CAN("CAN1", CanBaudRate.bps_100K);      

    can.ErrorReceived += newCanEventHandler(can_ErrorReceived);

第二步:根据选项不同,发送不同ID标识符和不同的CAN数据

can.Write(new CanData(canID, true,new byte[] { 0,0 }));

canID 是2或者3,数据的第一个数,0~2 表示对应的3个灯。

从设备CAN通信程序
第一步:创建一个CAN通信类,并绑定接收和错误事件

  can = new CAN("CAN1", CanBaudRate.bps_100K);      

    can.DataReceived += newCanEventHandler(can_DataReceived);

    can.ErrorReceived += newCanEventHandler(can_ErrorReceived);

can.SetFilter(0, newCanFilter(2,0,false));

过滤器设定的ID标识符为2或3.

第二步:数据接收

    static void can_DataReceived(intcanPort, int parameter)

    {

        intcount = can.DatasToRead;

        CanDatadata = new CanData();

        for (int i = 0; i < count; i++)

        {

            can.Read(data);

            intindex = data.Data[0];

            LameState[index] =!LameState[index];

            lamp[index].OnDraw(index,LameState[index]);

        }          

    }

TinyGUI界面设计
略,详情请参见示例代码。 

程序部署后,时间运行的视频如下:

image.png

http://v.youku.com/v_show/id_XNDM5NzI1MTg0.html 

注意:为了正常运行本实例,物联网智能网关固件版本需要升级到V1.8.17以上,(如果你当前TinyCLR版本低于V1.7.15以下,TinyBooter也需要同步升级)。

固件下载地址:http://www.sky-walker.com.cn/MFRelease/firmware/MFv42_YF_Wisteria207.rar

 ------------------------------------   

类库下载:http://www.sky-walker.com.cn/MFRelease/library/V42//YFSoft.CAN.rar

示例下载:http://www.sky-walker.com.cn/MFRelease/Sample/CAN_Test.rar

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF资料:http://www.sky-walker.com.cn/News.asp?Id=25

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
20天前
|
传感器 存储 人工智能
智能农业的未来:物联网技术如何革新传统农业
本文探讨了物联网(IoT)技术在农业中的应用及其对传统农业的革新。通过详细分析当前农业面临的挑战,如资源浪费和效率低下,文章阐述了物联网技术如何通过实时数据监控和自动化系统提高农业生产的效率和可持续性。此外,文章还讨论了实施物联网技术时需要考虑的技术、经济和社会因素,以及未来发展趋势。
|
8天前
|
存储 安全 物联网
.NET 跨平台工业物联网网关解决方案
【9月更文挑战第28天】本文介绍了利用 .NET 构建跨平台工业物联网网关的解决方案。通过 .NET Core 和多种通信协议(如 MQTT 和 Modbus),实现工业设备的高效接入和数据采集。系统架构包括设备接入层、数据处理层、通信层、应用层和数据库层,确保数据的准确采集、实时处理和安全传输。此外,还详细阐述了设备身份认证、数据加密及安全审计等机制,确保系统的安全性。该方案适用于不同操作系统和工业环境,具备高度灵活性和扩展性。
|
12天前
|
传感器 物联网 人机交互
物联网:物联网,作为新一代信息技术的重要组成部分,通过智能感知、识别技术与普适计算等通信感知技术,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现了物物相连、人物相连,开启了万物互联的新时代。
在21世纪,物联网(IoT)作为新一代信息技术的核心,正以前所未有的速度重塑生活、工作和社会结构。本文首先介绍了物联网的概念及其在各领域的广泛应用,强调其技术融合性、广泛的应用范围以及数据驱动的特点。接着,详细阐述了物联网行业的现状和发展趋势,包括政策支持、关键技术突破和应用场景深化。此外,还探讨了物联网面临的挑战与机遇,并展望了其未来在技术创新和模式创新方面的潜力。物联网行业正以其独特魅力引领科技发展潮流,有望成为推动全球经济发展的新引擎。
|
2月前
|
人工智能 网络协议 物联网
AIoT智能物联网平台技术架构
AIoT智能物联网平台的技术架构从终端设备到物联网平台可分为边缘侧网关、接入网关层、基础设施层、中台层和应用层。
72 14
|
13天前
|
传感器 监控 安全
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
79 0
|
2月前
|
人工智能 监控 安全
未来家居生活的智能革命:物联网技术的融合与应用
【8月更文挑战第31天】 随着科技的飞速发展,物联网技术已逐渐融入我们的日常生活。本文将探讨物联网技术如何改变我们的生活方式,特别是在家中的应用。从智能家居系统的构建到日常生活中的实际案例,我们将一窥物联网带来的便利与挑战,并提出对未来发展的展望。
37 1
|
2月前
|
存储 安全 物联网
物联网中的通信模型
【8月更文挑战第23天】
35 0
|
2月前
|
物联网 C语言
C语言与物联网:设备间的通信与控制
C语言与物联网:设备间的通信与控制
43 0
|
3天前
|
存储 安全 物联网
未来触手可及:区块链技术、物联网与虚拟现实的融合趋势
【9月更文挑战第34天】本文将探讨当前最具变革性的三大技术——区块链、物联网(IoT)和虚拟现实(VR)——如何独立及联合塑造我们的未来。我们将深入分析每种技术的内在工作机制、发展趋势,以及它们如何相互交织创造出新的应用场景,进而推动社会进步和经济发展。
|
2天前
|
安全 物联网 区块链
未来已来:区块链技术在物联网与虚拟现实中的革新应用
【8月更文挑战第66天】随着科技的飞速发展,区块链、物联网(IoT)和虚拟现实(VR)等技术逐渐从概念走向现实,它们之间的融合预示着一个更加智能、互联的未来。本文将探讨这些技术的发展趋势,并通过实际代码示例,展示它们如何相互促进,共同构建一个更加安全、高效的数字生态系统。
36 19

相关产品

  • 物联网平台
  • 下一篇
    无影云桌面