iCAN主站函数库及其使用.docx

上传人:b****6 文档编号:7902168 上传时间:2023-01-27 格式:DOCX 页数:39 大小:2.91MB
下载 相关 举报
iCAN主站函数库及其使用.docx_第1页
第1页 / 共39页
iCAN主站函数库及其使用.docx_第2页
第2页 / 共39页
iCAN主站函数库及其使用.docx_第3页
第3页 / 共39页
iCAN主站函数库及其使用.docx_第4页
第4页 / 共39页
iCAN主站函数库及其使用.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

iCAN主站函数库及其使用.docx

《iCAN主站函数库及其使用.docx》由会员分享,可在线阅读,更多相关《iCAN主站函数库及其使用.docx(39页珍藏版)》请在冰豆网上搜索。

iCAN主站函数库及其使用.docx

iCAN主站函数库及其使用

第4章iCAN主站函数库及其使用

4.1主站卡类型

可作为iCAN网络主站卡的ZLGCAN系列接口卡类型如下:

设备名称

设备类型号

PCI5121

1

PCI9810

2

USBCAN1

3

USBCAN2

4

PCI9820

5

PCI5110

7

CANlite(CANmini)

8

ISA9620

9

ISA5420

10

PC104-CAN

11

DNP9810

13

PCI9840

14

PC104-CAN2

15

4.2函数调用错误码

名称

描述

ICANOK

0x00000000

操作正确

ICANERR_FUNCNOTEXIST

0x00000001

功能码不存在

ICANERR_SRCNOTEXIST

0x00000002

资源不存在

ICANERR_CMDNOTSUPPORT

0x00000003

命令不支持

ICANERR_CMDILLEGAL

0x0000004

参数非法

ICANERR_CONNECTNOTEXIST

0x00000005

连接不存在

ICANERR

0x000000f1

不确定的错误

ICANERR_USING

0x000000f3

资源被占用

ICANERR_SETCAN

0x000000f4

打开设备失败或初始化CAN失败

ICANERR_SRVSTARTED

0x000000f5

服务已启动,无法进行此项操作

ICANERR_TIMEOUT

0x000000f6

操作超时

ICANERR_ITEMEXIST

0x000000f7

目标已经存在

4.3数据结构说明

4.3.1ROUTECFG

此数据结构用来设置初始化iCAN网络所需要的一些必要参数,声明如下:

typedefstruct_tagRouteCfg

{

intiCardType;//CAN接口卡类型

intiCardInd;//CAN接口卡序号

intiCANInd;//CAN路数

WORDwCANBaud;//0x311c-10K,0x041c-100K,0x001c-500K

WORDwMasterID;//iCAN网络主站ID

intiMasterCycle;//iCAN网络主站定时循环参数,范围1到255,单位为10ms

}ROUTECFG;

4.4iCAN网络控制函数说明

4.4.1Mgr_AddRoute

描述

调用此函数添加一个新的iCAN网络到iCAN系统中。

DWORD__stdcallMgr_AddRoute(ROUTECFGcfg,HANDLE*phRoute);

参数

cfg

所要添加的iCAN网络初始化参数。

phRoute

新iCAN网络句柄指针,用以存储返回的新iCAN网络句柄。

返回值

正确为ICANOK,否则为错误码。

4.4.2Mgr_DelRoute

描述

调用此函数从iCAN系统中删除一个iCAN网络。

DWORD__stdcallMgr_DelRoute(HANDLEhRoute);

参数

hRoute

所要删除的iCAN网络句柄。

返回值

正确为ICANOK,否则为错误码。

4.4.3Mgr_DelAllRoute

描述

调用此函数删除iCAN系统中所有iCAN网络。

DWORD__stdcallMgr_DelAllRoute();

参数无。

返回值

正确为ICANOK,否则为错误码。

4.4.4Mgr_StartSys

描述

调用此函数启动iCAN系统。

DWORD__stdcallMgr_StartSys();

参数

无。

返回值

正确为ICANOK,否则为错误码。

4.4.5Mgr_StopSys

描述

调用此函数停止iCAN系统。

DWORD__stdcallMgr_StopSys();

参数无。

返回值

正确为ICANOK,否则为错误码。

4.4.6Mgr_IsStarted

描述

调用此函数判断iCAN系统是否已经启动。

DWORD__stdcallMgr_StopSys();

参数无。

返回值已经启动为1,否则为0。

4.5iCAN网络函数说明

4.5.1Route_AddSlave

描述

调用此函数往指定iCAN网络中添加一个从站。

DWORD__stdcallRoute_AddSlave(HANDLEhRoute,DWORDSlaveID,HANDLE*phSlave);

参数

hRoute

指定要添加从站的iCAN网络句柄。

SlaveID

要添加的从站ID。

phSlave

新从站句柄指针,用以存储返回的新从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.5.2Route_DelSlave

描述

调用此函数从指定iCAN网络中删除一个从站。

DWORD__stdcallRoute_DelSlave(HANDLEhRoute,HANDLEhSlave);

参数

hRoute

指定要删除从站的iCAN网络句柄。

phSlave

要删除的从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.5.3Route_DelAllSlave

描述

调用此函数从指定iCAN网络中删除所有从站。

DWORD__stdcallRoute_DelAllSlave(HANDLEhRoute);

参数

hRoute

指定要删除从站的iCAN网络句柄。

返回值

正确为ICANOK,否则为错误码。

4.5.4Route_SetConfig

描述

调用此函数设置指定iCAN网络配置参数。

DWORD__stdcallRoute_SetConfig(HANDLEhRoute,ROUTECFGcfg);

参数

hRoute

指定iCAN网络句柄。

cfg

配置参数。

返回值

正确为ICANOK,否则为错误码。

4.5.5Route_GetConfig

描述

调用此函数获取指定iCAN网络配置参数。

DWORD__stdcallRoute_GetConfig(HANDLEhRoute,ROUTECFG*pcfg);

参数

hRoute

指定iCAN网络句柄。

pcfg

配置参数指针,存储返回的配置参数。

返回值

正确为ICANOK,否则为错误码。

4.5.6Route_GetSlavebyID

描述

调用此函数获取指定iCAN网络从站句柄。

DWORD__stdcallRoute_GetSlavebyID(HANDLEhRoute,DWORDSlaveID,HANDLE*phSlave);

参数

hRoute

指定iCAN网络句柄。

SlaveID

指定从站ID。

phSlave

从站句柄指针,存储返回的从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.5.7Route_ConnectAllSlaveAsync

描述

调用此函数连接所有已添加从站,此操作为异步操作,调用此函数后可调用

Slave_IsConnected函数来查询从站是否已连接。

DWORD__stdcallRoute_ConnectAllSlaveAsync(HANDLEhRoute);

参数

hRoute

指定iCAN网络句柄。

返回值

正确为ICANOK,否则为错误码。

4.6iCAN网络控制从站函数说明

4.6.1Slave_Connect

描述

调用此函数连接指定从站。

DWORD__stdcallSlave_Connect(HANDLEhSlave);

参数

hSlave

指定从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.6.2Slave_Disconnect

描述

调用此函数断开指定从站。

DWORD__stdcallSlave_Disconnect(HANDLEhSlave);

参数

hSlave

指定从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.6.3Slave_IsConnected

描述

调用此函数判断指定从站是否已经连接。

DWORD__stdcallSlave_IsConnected(HANDLEhSlave);

参数

hSlave

指定从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.6.4Slave_GetID

描述

调用此函数获取指定从站ID。

DWORD__stdcallSlave_GetID(HANDLEhSlave);

参数

hSlave

指定从站句柄。

返回值

正确为ICANOK,否则为错误码。

4.6.5Slave_GetIODataLen

描述

调用此函数获取指定从站IO数据长度。

DWORD__stdcallSlave_GetIODataLen(HANDLEhSlave,DWORD*pDI,DWORD*pDO,DWORD*

pAI,DWORD*pAO);

参数

hSlave指定从站句柄。

pDI

存储DI数据长度。

pDO

存储DO数据长度。

pAI

存储AI数据长度。

pAO

存储AO数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.6Slave_GetAIData

描述

调用此函数获取指定从站AI数据。

DWORD__stdcallSlave_GetAIData(HANDLEhSlave,BYTE*pRecbuf,DWORD*pReclen);

参数

hSlave指定从站句柄。

pRecbuf

接收数据缓冲区指针,接收缓冲区大小必须大于或等于AI数据字节长度。

pReclen

输入为接收缓冲区长度,输出为接收到的数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.7Slave_GetDIData

描述

调用此函数获取指定从站DI数据。

DWORD__stdcallSlave_GetDIData(HANDLEhSlave,BYTE*pRecbuf,DWORD*pReclen);

参数

hSlave指定从站句柄。

pRecbuf

接收数据缓冲区指针,接收缓冲区大小必须大于或等于DI数据字节长度。

pReclen

输入为接收缓冲区长度,输出为接收到的数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.8Slave_GetData

描述

调用此函数从指定从站接收数据。

DWORD__stdcallSlave_GetData(HANDLEhSlave,DWORDSourceID,BYTE*pRecbuf,DWORD

*pReclen);

参数

hSlave

指定从站句柄。

SourceID

资源ID。

DI最大长度为32字节,资源ID范围0x00到0x1f;AI最大长度为32字节,资源ID范围0x40到0x5f。

pRecbuf接收数据缓冲区指针。

pReclen

输入为接收缓冲区长度,输出为接收到的数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.9Slave_SendData

描述

调用此函数向指定从站发送数据。

DWORD__stdcallSlave_SendData(HANDLEhSlave,DWORDSourceID,BYTE*pSendbuf,DWORD

Sendlen);参数hSlave

指定从站句柄。

SourceID

资源ID。

DO最大长度为32字节,资源ID范围0x20到0x3f;AO最大长度为32字节,资源ID范围0x60到0x7f。

pSendbuf发送数据缓冲区。

Sendlen发送数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.10Slave_SetConfig

描述

调用此函数对从站进行配置操作。

此函数在当前版本中可不用。

DWORDstdcallSlave_SetConfig(HANDLEhSlave,DWORDSourceID,DWORD*pSubsourceID,BYTE*pSendbuf,DWORDSendlen);

参数

hSlave指定从站句柄。

SourceID

资源ID。

pSubsourceID

资源ID子索引号指针,为NULL时表示没有子索引号。

pSendbuf

发送数据缓冲区。

Sendlen

发送数据长度。

返回值

正确为ICANOK,否则为错误码。

注:

配置资源ID列表,RO表示只读,R/W表示可读写

SourceID

Bytes

Function

Attrib

Description

SubsourceID

0xE0~0xE1

2

VendorID

RO

厂商代码,固定值

-

0xE2~0xE3

2

ProductType

RO

产品类型,固定值

-

0xE4~0xE5

2

ProductCode

RO

产品型号,固定值

-

0xE6~0xE7

2

HardwareVersion

RO

产品硬件版本

-

0xE8~0xE9

2

FirmwareVersin

RO

产品固件版本

-

0xEA~0xED

4

SerialNumber

RO

4字节产品SN号码

-

0xEE

1

MACID

R/W

本机节点的ID编号

0xF5

1

CyclicMaster

R/W

主站通讯定时参数

时间单位为:

10ms

-

0xF7

1

MasterMACID

R/W

主站MACID

-

0xFA~0xFF

6

Reserve

-

-

-

4.6.11Slave_GetConfig

描述调用此函数获取从站配置。

DWORDstdcallSlave_GetConfig(HANDLEhSlave,DWORDSourceID,DWORD*pSubsourceID,BYTE*pRecbuf,DWORDReclen);

参数

hSlave指定从站句柄。

SourceID资源ID。

pSubsourceID资源ID子索引号。

pRecbuf接收数据缓冲区。

Reclen接收数据长度。

返回值

正确为ICANOK,否则为错误码。

4.6.12Slave_SetCycle

描述

设置从站的定时循环周期,默认为ROUTECFG.iMasterCycle。

DWORD__stdcallSlave_SetCycle(HANDLEhSlave,DWORDdwCycle);

参数

hSlave指定从站句柄。

dwCycle

定时循环周期,范围1到255,单位10ms。

返回值

正确为ICANOK,否则为错误码。

4.6.13Slave_GetCycle

描述

获取从站的定时循环周期。

DWORD__stdcallSlave_GetCycle(HANDLEhSlave);

参数hSlave指定从站句柄。

返回值返回从站的定时循环周期。

4.7系统操作流程

如图4.1所示:

图4.1系统操作流程

第5章iCAN综合教学实验平台软件设计

5.1建立单文档工程并添加模块z

5.1.1建立单文档工程

首先,启动VC,选择菜单“File”->“New…”菜单项,此时弹出新建工程对话框,如图5.1所示:

图5.1创建工程

选择MFCAppWizard(exe),设置好工程名称以及路径,然后点击“OK”按钮,在弹出页面中选择“Singledocument”,接下来一直点击弹出页面中的“Next”按钮到最后一个页面点击“Finish”按钮,成功创建工程,如图5.2所示:

图5.2创建工程

编译运行如图5.3所示:

图5.3编译

5.1.2添加2404模块

依次点击ResourceView->Dialog,在其上点右键InsertDialog,结果如图5.4图5.5所示:

图5.4添加模块图5.5添加模块

我们修改下2404对话框的属性和界面,如图5.6所示:

图5.6修改界面

好了,这样我们就把2404模块的界面设计好了,下面先介绍怎么调用这个对话框,

在2404对话框上点击右键,点ClassWizard来注册这个类,依次按图5.7,图5.8,图5.9,图5.10设置

图5.7注册

图5.8注册

图5.9注册

图5.10注册

在图5.10上点OK,注册完成。

5.1.3添加菜单并响应消息

下面在主窗口中添加一个选项,依次点击ResourceView->Menu->IDR_MAINFRAME如图5.11所示:

图5.11添加菜单

接着点击编辑在下拉列表中添加一个选项,如图5.12所示

图5.12添加菜单

为了让它能响应消息,我们在其上点右键ClassWizard,在弹出的对话框中选择MessagesCommandAddFuction,在弹出的对话框中点OK,然后EditCode,进入函数编辑。

依次如下图5.13图5.14图5.15图5.16图5.17所示:

图5.13编辑

图5.14编辑

图5.15编辑

图5.16编辑

图5.17编辑

下面我们来添加消息响应函数,首先在MainFrm.cpp中包涵iCAN2404.h头文件

#include"stdafx.h"

#include"Dialog1.h"

#include"MainFrm.h"

#include"iCAN2404.h"

然后在函数On2404添加如下代码:

voidCMainFrame:

:

On2404()

{iCAN2404*pDlg2404=newiCAN2404;

pDlg2404->Create(IDD_iCAN2404,this);

pDlg2404->ShowWindow(SW_SHOW);

}

好了,编译并运行,效果如图5.18,图5.19所示:

图5.18运行

图5.19运行

5.1.42404模块基本功能的实现

以上运行后2404模块只有一个框架,没有实现功能,下面我们就一步步添加。

首先添加iCAN主站函数库到工程,接下来要把iCAN主站函数库添加到工程中,先把文件icandllheader.h,icandll.lib,icandll.dll,controlcan.dll和文件夹kerneldlls一起拷贝到工程目录中,如图5.20所示:

图5.20添加文件

然后在VC中把工作视图切换到“FileView”,导入头文件,如图5.21图5.22:

图5.21导入文件图5.22导入文件

重复以上操作弹出添加文件对话框,文件类型选择“LibraryFiles(.lib)”,添加文件。

在视图“FileView”中,双击类文件名称iCAN2404.cpp和MainFrm.cpp在文件头部添加如下:

#include"icandllheader.h"

并在iCAN2404.cpp中添加:

#include"MainFrm.h"

转到ResourceView视图,如同添加2404选项一样在Menu中添加“启动系统”选项,并注册和增加函数,点确定,如图5.23:

图5.23编辑函数

为CMainFrame增加如下公共变量,

HANDLEm_hSlave;//存储从站句柄

BYTEm_bStarted;//标志是否已经启动系统

HANDLEm_hRoute;//存储iCAN网络句柄

在OnCreate中初始化:

m_bStarted=0;bt搜索

m_hRoute=INVALID_HANDLE_VALUE;

m_hSlave=INVALID_HANDLE_VALUE;

编辑函数OnStartSys如下:

voidCMainFrame:

:

OnStartSys()

{

if(m_bStarted)

{

Mgr_StopSys();

Mgr_DelAllRoute();

m_hRoute=INVALID_HANDLE_VALUE;

m_hSlave=INVALID_HANDLE_VALUE;

m_bStarted=0;

}

else

{

ROUTECFGcfg;

cfg.iCANInd=0;

cfg.iCardInd=0;

cfg.iCardType=VCI_USBCAN2;

cfg.iMasterCycle=10;

cfg.wCANBaud=0x001c;

cfg.wMasterID=0;

Mgr_AddRoute(cfg,&m_hRoute);

if(Mgr_StartSys()!

=ICANOK)

{

MessageBox("系统启动失败!

\n请检查硬件连接!

");

}

else

{

m_bStarted=1;

}

}

}

在iCAN2404.h中添加如下公共变量:

BYTEm_Started;

HANDLEm_Slave;

HANDLEm_Route;

初始化变量:

m_Slave=((CMainFrame*)AfxGetMainWnd())->m_hSlave;

m_Started=((CMainFrame*)AfxGetMainWnd())->m_bStarted;

转到ResourceView视图,选择2404对话框,双击对话框界面上的“上线”按钮,弹出添加点击函数提示框,如图5.23所示设置:

图5.23添加函数

点“OK”按钮,确认添加,此时“iCAN2404.cpp”文件会自动打开并定位到刚才添加的函数位置

voidiCAN2404:

:

OnLine()

{

if(Slave_Connect(m_Slave)!

=ICANOK)

{

MessageBox("连接失败","错误");

}

}

5.1.5效果演示

这样就实现了系统的启动和2404的上线功能,运行效果如图5.24图5.25,当然由于没连接硬件,所以启动失败。

图5.24运行

图5.25运行

其他模块和其他功

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1