USB-CAN通讯模块——用户编程说明
2012.03
用户如果只是利用 USB-CAN通讯模块进行CAN总线通信测试,可以直接利用随本产品提供的EmbededDebug工具软件,接入CAN总线。如果用户打算开发自己产品的软件程序,可以使用我公司提供的相关API,简化通讯开发过程。
下面介绍CAN通讯相关的两个类。如果只做CAN方面的收发操作,可以只关心RT_CAN类,使用其中的SendCANMessage函数发送CAN消息,使用RecvCANMessage或者通过SetRxPackageCallBack设置接收回调函数的方式接收CAN消息即可;如果希望详细了解我公司的通讯协议,可结合本文档与源代码进行学习。
1 串口通讯说明
1.1串口通讯数据包的封装格式
通讯数据包的封装格式:FrameHead +Data+CheckSum+FrameTail,控制符为0xA5, FrameH
ead为连续的两个0xAA, FrameTail为连续的两个0x55,如果Data中含0xA50xAA0x55(即特殊字符),则在发送该字符之前添加一个控制符0xA5CheckSum8位校验和,即Data的所有数据之和的低八位。
1.2 串口通讯操作类
1.2.1 类名称
串口操作类名称是:RT_COM(见RT_COM.cppRT_COM.h
1.2.2 相关定义说明
(1)  typedef void (*RxPackageCallBackFunc)(void *pParam, const BYTE * byBuf, DWORD dwLen);
说明:用于定义接收数据操作回调函数
    参数:pParam:用户参数,调用SetRxPackageCallBack时设置。
          byBuf:接收到的数据。
          dwLen:接收到数据的长度
    返回值:无
1.2.3函数说明
注意:以下文档中出现的comRT_COM类实例化的对象。
(1)  RT_COM(DWORD dwMaxPackageSize = 4096);
    说明:类的构造函数
    参数:MaxPackageSize:默认值为4096,用于初始化发送和接收缓冲。
    返回值:无
(2)  static DWORD FindAll(DWORD  *dwDevName);
说明:*当传入参数为NULL时,返回设备的数量,可利用该数量初始化dwDevName
          *当传入参数不为NULL时,dwDevName传出所有设备名称
    参数:dwDevName(传出):存放设备名称,可以为NULL
    返回值:返回检查到的设备数量。
Example:
#include " RT_COM.h"
    DWORD *dwDev, dwDevNum;
    //分配空间
    dwDevNum = RT_ COM::FindAll(NULL);
    dwDev = new DWORD[dwDevNum];
    //列出虚拟COM
    RT_ COM::FindAll(dwDev);
    for (DWORD i=0; i<dwDevNum; i++)
    {
        printf("COM%d\n", dwDev[i]);
    }
(3)  BOOL Open(DWORD dwPortNo, DWORD dwBaud);
    说明:打开指定串口
    参数:dwPortNo:串口号
          dwBaud:指定串口波特率
    返回值:如果成功打开,则返回TRUE;否则返回FALSE
Example:
#include " RT_COM.h"
if(com.Open (6, 921600))
{
//打开虚拟串口成功的操作
}
(4)  void Close();
    说明:关闭当前打开的串口
    参数:无
    返回值:无
Example:
#include " RT_COM.h"
if(com.Close ())
{
        //关闭虚拟串口成功的操作
}
(5) void SetRxPackageCallBack(RxPackageCallBackFunc func, void *pParam);
    说明:设置接收数据的回调函数
    参数:pParam:用户参数。
funcRxPackageCallBackFunc类型的函数指针,用于在接收到数据后进行相关处理。
    返回值:无
Example:
    #include " RT_COM.h"
定义回调函数:
void RecvCallback(void * pParam, const BYTE * buf, DWORD len)
{
        //执行回调操作
}
设置回调函数:
com.SetRxPackageCallBack(RecvCallback, NULL);
(6)  DWORD WritePackage(BYTE * byBuf, DWORD dwLen);
    说明:向模块端发送包含数据的包
    参数:byBuf:要发送的数据
          dwLen:要发送数据的长度
    返回值:已发送的数据长度
Example:
    #include " RT_COM.h"
    BYTE buf[30];
if(com.WritePackage(buf, sizeof(buf)))
{
        //数据发送成功的操作
}
(7)  BOOL IsOpened()
    说明:判断当前串口是否已经打开
    参数:无
    返回值:返回当前串口是否已经打开。
Example:
#include " RT_COM.h"
    if(com.IsOpened())
{
        //串口已经打开时的操作
}
(8)  DWORD GetBaudRate()
    说明:获得当前串口的波特率
    参数:无
    返回值:当前串口的波特率
Example:
#include " RT_COM.h"
DWORD baud;
baud = com.GetBaudRate();
(9)  DWORD GetPortNo();
    说明:获得当前串口号
    参数:无
    返回值:当前串口号
Example:
#include " RT_COM.h"
DWORD PortNO;
PortNO = com.GetPortNo ();
recv函数
1.3 串口通讯库使用方式
(1)  创建一个RT_COM实例
(1)  调用Open打开虚拟串口
(2)  调用WritePackage函数往串口写数据
(3)  用户自定义RxPackageCallBackFunc类型数据接收回调函数,调用SetRxPackageCallBack函数注册该函数。
2 CAN通讯说明
2.1 类名称
    CAN操作类名称是RT_CAN,该类继承自RT_COM类,重载了OnRecvPackage函数。(见RT_CAN.cppRT_CAN.h
2.2 CAN的消息格式
    CAN消息的格式如下:
typedef struct  {
    DWORD id;            //消息ID,统一使用扩展帧,29bit
    BYTE  data[8];        //数据域
    BYTE  len;          //数据域长度
    BYTE  ch;          //消息通道(0xff为配置通道)
    BYTE  format;    //消息格式(取值见相关定义中的CAN_FORMAT)
    BYTE  type;        //消息类型(取值见相关定义中的CAN_FRAME)
}  CAN_msg;
2.3相关定义
(1)  CAN_FORMAT
    说明:CAN消息帧格式
    成员:STANDARD_FORMAT:标准帧
          EXTENDED_FORMAT:扩展帧
(2)  CAN_FRAME
    说明:CAN消息帧类型
    成员:DATA_FRAME:数据帧
          REMOTE_FRAME:远程帧
(3)  CAN_ERROR
    成员:CAN _ERR_TRANS:传输错误
CAN _OK:没有错误
CAN _ERR_ACK:没有返回应答
CAN _ERR_CHANNELCHANNEL错误
2.4 函数说明
注意:以下文档中出现的canRT_CAN类实例化的对象。
(1)  RT_CAN()
说明:初始化CAN操作类
参数:无
    返回值:无
(2)  CAN_ERROR SetConfigValue(DWORD dwID, void *pValueBuf, DWORD *pdwLen, DWORD dwTimeOut);
说明:发送配置数据包
    参数:dwID: 数据包ID
          pValueBuf: 数据
          pdwLen: 数据长度
          dwTimeOut: 超时时间
    返回值:错误信息
Example:
#include " RT_CAN.h"
DWORD Len = sizeof(BYTE);
BYTE by = 1;
//发送自动重发的配置
    if(CAN.SetConfigValue(CAN_ART_ID, & by, &Len,1000) != CAN_OK)
    {
        ShowMessageBox("配置失败!", MB_ICONSTOP);
    }
(2)  CAN_ERROR GetConfigValue(DWORD dwID, void *pValueBuf, DWORD *pdwLen, DWORD dwTimeOut);
说明:发送配置数据包
    参数:dwID: 数据包ID
          pValueBuf: 数据(传出)
          pdwLen: 数据长度
          dwTimeOut: 超时时间
    返回值:错误信息
Example:
#include " RT_CAN.h"
DWORD Len = sizeof(BYTE);
BYTE by;
//获取自动重发的配置
    if(CAN.GetConfigValue(CAN_ART_ID, & by, &Len,1000) != CAN_OK)
    {
        ShowMessageBox("配置失败!", MB_ICONSTOP);
    }
(3)  CAN_ERROR SendCANMessage(CAN_msg *pMsg, DWORD dwTimeout = INFINITE);
说明:发送CAN消息
    参数:pMsg: CAN消息
          dwTimeout: 发送超时时间(默认为无限超时)
    返回值:错误信息
Example:
#include " RT_CAN.h"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。