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

上传人:文库蛋蛋多 文档编号:3023150 上传时间:2023-03-08 格式:DOC 页数:38 大小:3.11MB
返回 下载 相关 举报
iCAN主站函数库及其使用.doc_第1页
第1页 / 共38页
iCAN主站函数库及其使用.doc_第2页
第2页 / 共38页
iCAN主站函数库及其使用.doc_第3页
第3页 / 共38页
iCAN主站函数库及其使用.doc_第4页
第4页 / 共38页
iCAN主站函数库及其使用.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《iCAN主站函数库及其使用.doc》由会员分享,可在线阅读,更多相关《iCAN主站函数库及其使用.doc(38页珍藏版)》请在三一办公上搜索。

1、第4章 iCAN主站函数库及其使用4.1 主站卡类型可作为 iCAN 网络主站卡的 ZLGCAN系列接口卡类型如下:设备名称设备类型号PCI51211PCI98102USBCAN13USBCAN24PCI98205PCI51107CANlite(CANmini)8ISA96209ISA542010PC104-CAN11DNP981013PCI984014PC104-CAN2154.2函数调用错误码名称值描述ICANOK0x00000000操作正确ICANERR_FUNCNOTEXIST0x00000001功能码不存在ICANERR_SRCNOTEXIST0x00000002资源不存在ICANE

2、RR_CMDNOTSUPPORT0x00000003命令不支持ICANERR_CMDILLEGAL0x0000004参数非法ICANERR_CONNECTNOTEXIST0x00000005连接不存在ICANERR0x000000f1不确定的错误ICANERR_USING0x000000f3资源被占用ICANERR_SETCAN0x000000f4打开设备失败或初始化 CAN 失败ICANERR_SRVSTARTED0x000000f5服务已启动,无法进行此项操作ICANERR_TIMEOUT0x000000f6操作超时ICANERR_ITEMEXIST0x000000f7目标已经存在4.3数

3、据结构说明4.3.1ROUTECFG此数据结构用来设置初始化 iCAN 网络所需要的一些必要参数,声明如下:typedef struct _tagRouteCfgint iCardType;/CAN 接口卡类型int iCardInd;/CAN 接口卡序号int iCANInd;/CAN 路数WORD wCANBaud;/0x311c - 10K,0x041c - 100K,0x001c - 500KWORD wMasterID;/iCAN 网络主站 IDint iMasterCycle;/iCAN 网络主站定时循环参数,范围 1 到 255,单位为 10msROUTECFG;4.4iCAN

4、网络控制函数说明4.4.1Mgr_AddRoute描述调用此函数添加一个新的 iCAN 网络到 iCAN 系统中。DWORD _stdcall Mgr_AddRoute(ROUTECFG cfg,HANDLE* phRoute);参数cfg所要添加的 iCAN 网络初始化参数。phRoute新 iCAN 网络句柄指针,用以存储返回的新 iCAN 网络句柄。 返回值正确为 ICANOK,否则为错误码。4.4.2Mgr_DelRoute描述调用此函数从 iCAN 系统中删除一个 iCAN 网络。DWORD _stdcall Mgr_DelRoute(HANDLE hRoute);参数hRoute所

5、要删除的 iCAN 网络句柄。 返回值正确为 ICANOK,否则为错误码。4.4.3Mgr_DelAllRoute描述调用此函数删除 iCAN系统中所有 iCAN 网络。DWORD _stdcall Mgr_DelAllRoute();参数 无。返回值正确为 ICANOK,否则为错误码。4.4.4Mgr_StartSys描述调用此函数启动 iCAN系统。DWORD _stdcall Mgr_StartSys();参数无。返回值正确为 ICANOK,否则为错误码。4.4.5Mgr_StopSys描述调用此函数停止 iCAN系统。DWORD _stdcall Mgr_StopSys();参数 无。

6、返回值 正确为 ICANOK,否则为错误码。4.4.6Mgr_IsStarted描述调用此函数判断 iCAN 系统是否已经启动。DWORD _stdcall Mgr_StopSys();参数 无。返回值 已经启动为 1,否则为 0。4.5iCAN 网络函数说明4.5.1Route_AddSlave描述调用此函数往指定 iCAN 网络中添加一个从站。DWORD _stdcall Route_AddSlave(HANDLE hRoute,DWORD SlaveID,HANDLE* phSlave);参数hRoute指定要添加从站的 iCAN 网络句柄。SlaveID要添加的从站 ID。phSlav

7、e新从站句柄指针,用以存储返回的新从站句柄。返回值正确为 ICANOK,否则为错误码。4.5.2Route_DelSlave描述调用此函数从指定 iCAN 网络中删除一个从站。DWORD _stdcall Route_DelSlave(HANDLE hRoute,HANDLE hSlave);参数hRoute指定要删除从站的 iCAN 网络句柄。phSlave要删除的从站句柄。 返回值正确为 ICANOK,否则为错误码。4.5.3Route_DelAllSlave描述调用此函数从指定 iCAN 网络中删除所有从站。DWORD _stdcall Route_DelAllSlave(HANDLE

8、hRoute);参数hRoute指定要删除从站的 iCAN 网络句柄。 返回值正确为 ICANOK,否则为错误码。4.5.4Route_SetConfig描述调用此函数设置指定 iCAN 网络配置参数。DWORD _stdcall Route_SetConfig(HANDLE hRoute,ROUTECFG cfg);参数hRoute指定 iCAN 网络句柄。cfg配置参数。 返回值正确为 ICANOK,否则为错误码。4.5.5Route_GetConfig描述调用此函数获取指定 iCAN 网络配置参数。DWORD _stdcall Route_GetConfig(HANDLE hRoute,

9、ROUTECFG* pcfg);参数hRoute指定 iCAN 网络句柄。pcfg配置参数指针,存储返回的配置参数。返回值正确为 ICANOK,否则为错误码。4.5.6Route_GetSlavebyID描述调用此函数获取指定 iCAN 网络从站句柄。DWORD _stdcall Route_GetSlavebyID(HANDLE hRoute,DWORD SlaveID,HANDLE* phSlave);参数hRoute指定 iCAN 网络句柄。SlaveID指定从站 ID。phSlave从站句柄指针,存储返回的从站句柄。 返回值正确为 ICANOK,否则为错误码。4.5.7Route_Co

10、nnectAllSlaveAsync描述调用此函数 连接所有已 添加从站, 此操作为异 步操作,调 用此函数后 可 调 用Slave_IsConnected 函数来查询从站是否已连接。DWORD _stdcall Route_ConnectAllSlaveAsync(HANDLE hRoute);参数hRoute指定 iCAN 网络句柄。 返回值正确为 ICANOK,否则为错误码。4.6iCAN 网络控制从站函数说明4.6.1Slave_Connect描述调用此函数连接指定从站。DWORD _stdcall Slave_Connect(HANDLE hSlave);参数hSlave指定从站句柄

11、。 返回值正确为 ICANOK,否则为错误码。4.6.2Slave_Disconnect描述调用此函数断开指定从站。DWORD _stdcall Slave_Disconnect(HANDLE hSlave);参数hSlave指定从站句柄。 返回值正确为 ICANOK,否则为错误码。4.6.3Slave_IsConnected描述调用此函数判断指定从站是否已经连接。DWORD _stdcall Slave_IsConnected(HANDLE hSlave);参数hSlave指定从站句柄。 返回值正确为 ICANOK,否则为错误码。4.6.4Slave_GetID描述调用此函数获取指定从站 I

12、D。DWORD _stdcall Slave_GetID(HANDLE hSlave);参数hSlave指定从站句柄。 返回值正确为 ICANOK,否则为错误码。4.6.5Slave_GetIODataLen描述调用此函数获取指定从站 IO 数据长度。DWORD _stdcall Slave_GetIODataLen(HANDLE hSlave,DWORD *pDI,DWORD* pDO,DWORD*pAI,DWORD* pAO);参数hSlave 指定从站句柄。 pDI存储 DI 数据长度。pDO存储 DO 数据长度。pAI存储 AI 数据长度。pAO存储 AO 数据长度。 返回值正确为 I

13、CANOK,否则为错误码。4.6.6Slave_GetAIData描述调用此函数获取指定从站 AI 数据。DWORD _stdcall Slave_GetAIData(HANDLE hSlave,BYTE* pRecbuf,DWORD* pReclen);参数hSlave 指定从站句柄。 pRecbuf接收数据缓冲区指针,接收缓冲区大小必须大于或等于 AI数据字节长度。pReclen输入为接收缓冲区长度,输出为接收到的数据长度。 返回值正确为 ICANOK,否则为错误码。4.6.7Slave_GetDIData描述调用此函数获取指定从站 DI 数据。DWORD _stdcall Slave_G

14、etDIData(HANDLE hSlave,BYTE* pRecbuf,DWORD* pReclen);参数hSlave 指定从站句柄。 pRecbuf接收数据缓冲区指针,接收缓冲区大小必须大于或等于 DI数据字节长度。pReclen输入为接收缓冲区长度,输出为接收到的数据长度。 返回值正确为 ICANOK,否则为错误码。4.6.8Slave_GetData描述调用此函数从指定从站接收数据。DWORD _stdcall Slave_GetData(HANDLE hSlave,DWORD SourceID,BYTE* pRecbuf,DWORD*pReclen);参数hSlave指定从站句柄。

15、SourceID资源 ID。DI 最大长度为 32 字节,资源 ID 范围 0x00 到 0x1f ;AI 最大长度为 32 字节, 资源 ID 范围 0x40 到 0x5f。pRecbuf 接收数据缓冲区指针。pReclen输入为接收缓冲区长度,输出为接收到的数据长度。 返回值正确为 ICANOK,否则为错误码。4.6.9Slave_SendData描述调用此函数向指定从站发送数据。DWORD _stdcall Slave_SendData(HANDLE hSlave,DWORD SourceID,BYTE* pSendbuf,DWORDSendlen); 参数 hSlave指定从站句柄。S

16、ourceID资源 ID。DO 最大长度为 32 字节,资源 ID 范围 0x20 到 0x3f ;AO 最大长度为 32 字 节,资源 ID 范围 0x60 到 0x7f。pSendbuf 发送数据缓冲区。 Sendlen 发送数据长度。 返回值正确为 ICANOK,否则为错误码。4.6.10 Slave_SetConfig描述调用此函数对从站进行配置操作。此函数在当前版本中可不用。DWORD stdcall Slave_SetConfig(HANDLE hSlave,DWORD SourceID,DWORD* pSubsourceID,BYTE* pSendbuf,DWORD Sendle

17、n);参数hSlave 指定从站句柄。 SourceID资源 ID。pSubsourceID资源 ID 子索引号指针,为 NULL 时表示没有子索引号。pSendbuf发送数据缓冲区。Sendlen发送数据长度。 返回值正确为 ICANOK,否则为错误码。注:配置资源 ID 列表,RO 表示只读,R/W 表示可读写SourceIDBytesFunctionAttribDescriptionSubsourceID0xE00xE12Vendor IDRO厂商代码,固定值-0xE20xE32Product TypeRO产品类型,固定值-0xE40xE52Product CodeRO产品型号,固定值-

18、0xE60xE72Hardware VersionRO产品硬件版本-0xE80xE92Firmware VersinRO产品固件版本-0xEA0xED4Serial NumberRO4 字节产品 SN 号码-0xEE1MAC IDR/W本机节点的 ID 编号0xF51CyclicMasterR/W主站通讯定时参数时间单位为:10ms-0xF71Master MAC IDR/W主站 MAC ID-0xFA0xFF6Reserve-4.6.11 Slave_GetConfig描述 调用此函数获取从站配置。DWORD stdcall Slave_GetConfig(HANDLE hSlave,DWO

19、RD SourceID,DWORD* pSubsourceID,BYTE* pRecbuf,DWORD Reclen);参数hSlave 指定从站句柄。 SourceID 资源 ID。pSubsourceID 资源 ID 子索引号。 pRecbuf 接收数据缓冲区。Reclen 接收数据长度。 返回值正确为 ICANOK,否则为错误码。4.6.12 Slave_SetCycle描述设置从站的定时循环周期,默认为 ROUTECFG.iMasterCycle。DWORD _stdcall Slave_SetCycle(HANDLE hSlave,DWORD dwCycle);参数hSlave 指定

20、从站句柄。 dwCycle定时循环周期,范围 1 到 255,单位 10ms。 返回值正确为 ICANOK,否则为错误码。4.6.13 Slave_GetCycle描述获取从站的定时循环周期。DWORD _stdcall Slave_GetCycle(HANDLE hSlave);参数 hSlave 指定从站句柄。 返回值 返回从站的定时循环周期。4.7 系统操作流程如图4.1所示:图4.1 系统操作流程第5章 iCAN综合教学实验平台软件设计5.1 建立单文档工程并添加模块z5.1.1 建立单文档工程首先,启动 VC,选择菜单“File”-“New”菜单项,此时弹出新建工程对话框,如图 5.

21、1所示:图 5.1 创建工程选择 MFC AppWizard (exe),设置好工程名称以及路径,然后点击“OK”按钮,在弹出页 面中选择“Single document”,接下来一直点击弹出页面中的“Next”按钮到最后一个页面点击 “Finish”按钮,成功创建工程,如图 5.2 所示:图 5.2 创建工程编译运行如图5.3所示:图 5.3 编译5.1.2 添加2404模块依次点击ResourceView-Dialog,在其上点右键 Insert Dialog,结果如图5.4 图5.5所示:图5.4 添加模块 图5.5 添加模块我们修改下2404对话框的属性和界面,如图5.6所示:图5.6

22、 修改界面好了,这样我们就把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

23、,在弹出的对话框中选择MessagesCommandAdd Fuction,在弹出的对话框中点OK,然后Edit Code,进入函数编辑。依次如下图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添加如下代码:void CMainFrame:On24

24、04() iCAN2404 *pDlg2404=new iCAN2404;pDlg2404-Create(IDD_iCAN2404,this);pDlg2404-ShowWindow(SW_SHOW);好了,编译并运行,效果如图5.18,图5.19所示:图5.18 运行图5.19 运行5.1.4 2404模块基本功能的实现以上运行后2404模块只有一个框架,没有实现功能,下面我们就一步步添加。首先添加 iCAN 主站函数库到工程,接下来要把iCAN主站函数库添加到工程中,先把文件 icandllheader.h,icandll.lib,icandll.dll,controlcan.dll 和文

25、件夹 kerneldlls 一起拷贝到工程目录中,如图 5.20 所示:图 5.20 添加文件然后在VC 中把工作视图切换到“FileView”,导入头文件,如图5.21图5.22: 图5.21 导入文件 图5.22 导入文件重复以上操作弹出添加文件对话框,文件类型 选择“Library Files (.lib)”, 添加文件。在视图“FileView”中,双击类文件名称iCAN2404.cpp和MainFrm.cpp在文件头部添加如下:#include icandllheader.h并在iCAN2404.cpp中添加:#include MainFrm.h转到ResourceView视图,如同

26、添加2404选项一样在Menu中添加“启动系统”选项,并注册和增加函数,点确定,如图5.23:图5.23 编辑函数为CMainFrame增加如下公共变量,HANDLE m_hSlave;/存储从站句柄BYTE m_bStarted;/标志是否已经启动系统HANDLE m_hRoute;/存储 iCAN 网络句柄在OnCreate中初始化:m_bStarted=0;bt搜索m_hRoute=INVALID_HANDLE_VALUE;m_hSlave=INVALID_HANDLE_VALUE;编辑函数OnStartSys如下:void CMainFrame:OnStartSys() if(m_bS

27、tarted)Mgr_StopSys();Mgr_DelAllRoute();m_hRoute=INVALID_HANDLE_VALUE;m_hSlave=INVALID_HANDLE_VALUE;m_bStarted=0;elseROUTECFG cfg;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)Messa

28、geBox(系统启动失败!n请检查硬件连接!);elsem_bStarted=1;在iCAN2404.h中添加如下公共变量:BYTE m_Started;HANDLE m_Slave;HANDLE m_Route;初始化变量:m_Slave=(CMainFrame*)AfxGetMainWnd()-m_hSlave;m_Started=(CMainFrame*)AfxGetMainWnd()-m_bStarted;转到ResourceView视图,选择2404对话框,双击对话框界面上的“上线”按钮,弹出添加点击函数提示框,如图 5.23 所示设置:图 5.23 添加函数点“OK”按钮,确认添加

29、,此时“iCAN2404.cpp”文件会自动打开并定位到刚才添加的函数位置void iCAN2404:OnLine() if(Slave_Connect(m_Slave)!=ICANOK)MessageBox(连接失败,错误);5.1.5 效果演示这样就实现了系统的启动和2404的上线功能,运行效果如图5.24 图5.25,当然由于没连接硬件,所以启动失败。图5.24 运行图5.25 运行其他模块和其他功能的添加与上面大体类似。5.2 最终完成程序结构及工程文件如下图5.26 图5.27:图5.26 工程文件图5.27 工程文件工程文件及文件目录如图:图5.28 工程目录5.3程序运行结果及介

30、绍5.3.1 总体功能演示 经过好长时间的完善,调试,下面让我们来看看程序运行效果和功能:图 5.29 主窗口连接硬件,点击“启动系统”按钮,启动成功(如果没有连接硬件会弹出启动失败对话框),如图5.30所示:图5.30 启动系统点击“添加从站”下拉箭头,将可添加各个模块,如图5.31 图5.32 所示:图5.31 添加从站图5.32 添加2404从站图5.33 添加全部从站点击“添加全部”将添加全部从站,点击“删除全部”将删除全部从站,如图5.33。5.3.2 各个模块介绍2404模块:数字量输入输出模块,选择通道和控制电机的起停,如图5.34。图5.34 2404模块4050模块:数字量输

31、入输出模块,选择通道和控制伺服电机的起停和正反转,如图5.35。图5.35 4050模块4400模块:模拟量输出模块,控制电机转速,输入转速值,点击设置,转速随之改变,如图5.36。图5.36 4400模块7408模块:计数器模块,实时显示电机转速,如图5.37所示。图5.37 7408模块4017模块: 模拟量输入模块,显示各通道的输出电压,如图5.38所示。图5.38 4017模块5303模块:热电阻输入模块,显示各通道温度值,如图5.39所示。图5.39 5303模块6202模块:热电偶输入模块,输入并显示各通道温度值,如图5.40所示。图 5.40 6202模块以上是关于本实验平台软件开发的简介,详细见源代码,本论文附录了部分源代码。5.3.3 开发过程进度介绍下面是本软件开发的文件目录、进度以及备份的各个阶段源文件,通过一步步的改进,逐渐添加各个模块和功能,最终完成,如图5.41 图5.42所示。图5.41 目录图5.42 文件

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号