iCAN主站函数库及其使用Word文档格式.docx
- 文档编号:21036500
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:39
- 大小:2.91MB
iCAN主站函数库及其使用Word文档格式.docx
《iCAN主站函数库及其使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《iCAN主站函数库及其使用Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
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网络句柄。
返回值
4.4.3Mgr_DelAllRoute
调用此函数删除iCAN系统中所有iCAN网络。
DWORD__stdcallMgr_DelAllRoute();
参数无。
4.4.4Mgr_StartSys
调用此函数启动iCAN系统。
DWORD__stdcallMgr_StartSys();
无。
4.4.5Mgr_StopSys
调用此函数停止iCAN系统。
DWORD__stdcallMgr_StopSys();
返回值
4.4.6Mgr_IsStarted
调用此函数判断iCAN系统是否已经启动。
返回值已经启动为1,否则为0。
4.5iCAN网络函数说明
4.5.1Route_AddSlave
调用此函数往指定iCAN网络中添加一个从站。
DWORD__stdcallRoute_AddSlave(HANDLEhRoute,DWORDSlaveID,HANDLE*phSlave);
指定要添加从站的iCAN网络句柄。
SlaveID
要添加的从站ID。
phSlave
新从站句柄指针,用以存储返回的新从站句柄。
4.5.2Route_DelSlave
调用此函数从指定iCAN网络中删除一个从站。
DWORD__stdcallRoute_DelSlave(HANDLEhRoute,HANDLEhSlave);
指定要删除从站的iCAN网络句柄。
要删除的从站句柄。
4.5.3Route_DelAllSlave
调用此函数从指定iCAN网络中删除所有从站。
DWORD__stdcallRoute_DelAllSlave(HANDLEhRoute);
4.5.4Route_SetConfig
调用此函数设置指定iCAN网络配置参数。
DWORD__stdcallRoute_SetConfig(HANDLEhRoute,ROUTECFGcfg);
指定iCAN网络句柄。
配置参数。
4.5.5Route_GetConfig
调用此函数获取指定iCAN网络配置参数。
DWORD__stdcallRoute_GetConfig(HANDLEhRoute,ROUTECFG*pcfg);
pcfg
配置参数指针,存储返回的配置参数。
4.5.6Route_GetSlavebyID
调用此函数获取指定iCAN网络从站句柄。
DWORD__stdcallRoute_GetSlavebyID(HANDLEhRoute,DWORDSlaveID,HANDLE*phSlave);
指定从站ID。
从站句柄指针,存储返回的从站句柄。
4.5.7Route_ConnectAllSlaveAsync
调用此函数连接所有已添加从站,此操作为异步操作,调用此函数后可调用
Slave_IsConnected函数来查询从站是否已连接。
DWORD__stdcallRoute_ConnectAllSlaveAsync(HANDLEhRoute);
4.6iCAN网络控制从站函数说明
4.6.1Slave_Connect
调用此函数连接指定从站。
DWORD__stdcallSlave_Connect(HANDLEhSlave);
hSlave
指定从站句柄。
4.6.2Slave_Disconnect
调用此函数断开指定从站。
DWORD__stdcallSlave_Disconnect(HANDLEhSlave);
4.6.3Slave_IsConnected
调用此函数判断指定从站是否已经连接。
DWORD__stdcallSlave_IsConnected(HANDLEhSlave);
4.6.4Slave_GetID
调用此函数获取指定从站ID。
DWORD__stdcallSlave_GetID(HANDLEhSlave);
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数据长度。
4.6.6Slave_GetAIData
调用此函数获取指定从站AI数据。
DWORD__stdcallSlave_GetAIData(HANDLEhSlave,BYTE*pRecbuf,DWORD*pReclen);
pRecbuf
接收数据缓冲区指针,接收缓冲区大小必须大于或等于AI数据字节长度。
pReclen
输入为接收缓冲区长度,输出为接收到的数据长度。
4.6.7Slave_GetDIData
调用此函数获取指定从站DI数据。
DWORD__stdcallSlave_GetDIData(HANDLEhSlave,BYTE*pRecbuf,DWORD*pReclen);
接收数据缓冲区指针,接收缓冲区大小必须大于或等于DI数据字节长度。
4.6.8Slave_GetData
调用此函数从指定从站接收数据。
DWORD__stdcallSlave_GetData(HANDLEhSlave,DWORDSourceID,BYTE*pRecbuf,DWORD
*pReclen);
SourceID
资源ID。
DI最大长度为32字节,资源ID范围0x00到0x1f;
AI最大长度为32字节,资源ID范围0x40到0x5f。
pRecbuf接收数据缓冲区指针。
4.6.9Slave_SendData
调用此函数向指定从站发送数据。
DWORD__stdcallSlave_SendData(HANDLEhSlave,DWORDSourceID,BYTE*pSendbuf,DWORD
Sendlen);
参数hSlave
DO最大长度为32字节,资源ID范围0x20到0x3f;
AO最大长度为32字节,资源ID范围0x60到0x7f。
pSendbuf发送数据缓冲区。
Sendlen发送数据长度。
4.6.10Slave_SetConfig
调用此函数对从站进行配置操作。
此函数在当前版本中可不用。
DWORDstdcallSlave_SetConfig(HANDLEhSlave,DWORDSourceID,DWORD*pSubsourceID,BYTE*pSendbuf,DWORDSendlen);
SourceID
pSubsourceID
资源ID子索引号指针,为NULL时表示没有子索引号。
pSendbuf
发送数据缓冲区。
Sendlen
发送数据长度。
注:
配置资源ID列表,RO表示只读,R/W表示可读写
Bytes
Function
Attrib
Description
SubsourceID
0xE0~0xE1
VendorID
RO
厂商代码,固定值
-
0xE2~0xE3
ProductType
产品类型,固定值
0xE4~0xE5
ProductCode
产品型号,固定值
0xE6~0xE7
HardwareVersion
产品硬件版本
0xE8~0xE9
FirmwareVersin
产品固件版本
0xEA~0xED
SerialNumber
4字节产品SN号码
0xEE
MACID
R/W
本机节点的ID编号
0xF5
CyclicMaster
主站通讯定时参数
时间单位为:
10ms
0xF7
MasterMACID
主站MACID
0xFA~0xFF
6
Reserve
4.6.11Slave_GetConfig
描述调用此函数获取从站配置。
DWORDstdcallSlave_GetConfig(HANDLEhSlave,DWORDSourceID,DWORD*pSubsourceID,BYTE*pRecbuf,DWORDReclen);
SourceID资源ID。
pSubsourceID资源ID子索引号。
pRecbuf接收数据缓冲区。
Reclen接收数据长度。
4.6.12Slave_SetCycle
设置从站的定时循环周期,默认为ROUTECFG.iMasterCycle。
DWORD__stdcallSlave_SetCycle(HANDLEhSlave,DWORDdwCycle);
dwCycle
定时循环周期,范围1到255,单位10ms。
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"
Dialog1.h"
MainFrm.h"
iCAN2404.h"
然后在函数On2404添加如下代码:
voidCMainFrame:
:
On2404()
{iCAN2404*pDlg2404=newiCAN2404;
pDlg2404->
Create(IDD_iCAN2404,this);
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在文件头部添加如下:
icandllheader.h"
并在iCAN2404.cpp中添加:
转到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如下:
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)!
MessageBox("
连接失败"
"
错误"
}
5.1.5效果演示
这样就实现了系统的启动和2404的上线功能,运行效果如图5.24图5.25,当然由于没连接硬件,所以启动失败。
图5.24运行
图5.25运行
其他模块和其他功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iCAN 函数库 及其 使用