北邮现场总线实验报告_北邮多媒体实验报告

2020-02-28 其他范文 下载本文

北邮现场总线实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“北邮多媒体实验报告”。

现场总线实验报告

实验名称:

CAN总线技术与iCAN模块实验

学院:

自动化学院

专业:

自动化专业

班级:

2010211411

姓名:

韩思宇

学号:

10212006

指导老师:

杨军

一、实验名称:

实验一:CAN总线技术与iCAN模块实验

二、实验设备:

计算机,CAN总线系列实验箱,测控设备箱,万用表。

三、实验内容:

1、熟悉iCAN各模块的功能及原理,了解接线端子。

2、学习USBCAN-2A接口卡的使用及安装,安装USBCAN-2A接口卡的驱动程序。

3、根据实验指导书中的手动设置iCAN模块MACID的方法手动设置各模块的MACID。

4、使用提供的iCANTest测试软件工具来测试各模块的功能及用法,利用测试工具与模块之间通信。

5、学习了解iCAN主站函数库中的主要操作函数及其应用。

6、学习利用VC或者VB编程来对iCAN系列各模块进行操作。

四:实验过程:

1、驱动程序安装:

USBCAN-2A接口卡的驱动程序需要自己手动进行安装,驱动程序已经存放于实验准备内容中。找到驱动程序,直接点击进行安装即可。安装完成后,在“管理->设备管理器->通用串行总线控制器”中查看驱动是否安装成功。

注意:安装驱动程序过程中PC机不能连接USB电缆。

2、iCANTEST安装与运行:

连接设备后,打开iCANTEST软件,点击“系统配置”,设置设备类型为USBCAN2,点击“启动”->“上线”,试验各模块的功能。点击“全部下线”,将断开主机与所有模块的连接。

3、各种iCAN模块的测试

4、指示灯,按钮,温湿度传感器的连接

5、测试运行记录与截屏图:

iCAN模块测试运行记录与截图。

图(1)

iCANTEST界面

iCAN4055模块界面如图(2)。DI输入由测控设备箱中的开关控制,DO输出控制设备箱上的灯泡亮灭。

图(2)

iCAN4055模块界面

iCAN4210模块如图(3)。iCAN4210模块为2路模拟量输出模块。将该模块的输出通道0与iCAN4017模块的输入通道3相连,可观察到改变iCAN4210的通道0设定值时,iCAN4017的通道3显示值会随之变化。(通道0为0x8000时,通道3显示为5.000V。)

图(3)

iCAN4210模块界面

iCAN4017模块如图(4)。iCAN4017模块为8路模拟量输入模块。将该模块的通道0与通道1与测控设备箱的温湿度传感器相连,可由通道0和1的电压值推导出传感器测出的环境温度和湿度。由于实验时使用的温湿度传感器温度测量部分故障,所以通道0显示0.000V,湿度测量部分正常,通道1显示为6.182V。

图(4)

iCAN4017模块界面

6、自编程序主要功能

(1)添加一个输入编辑框和一个按钮控件,通过输入0x00-0xFF之间的十六

进制数来控制iCAN4055的DO通道的输入;再设置一个编辑框edit控件来读取iCAN4055的8位数字量输入通道的状态。(2)设置两个输入编辑框控件,来分别设置iCAN4210两个通道的输出。(3)设置4个编辑框edit控件来分别读取iCAN4017前四个通道ch0、ch1、ch2、ch3的模拟量输入值。

7、自编程序运行结果与截图(课上未做,课下做了界面和程序)

图(5)

iCAN4055模块界面

图(6)

iCAN4017模块界面

8、主要程序部分

(1)有关iCAN4055功能模块的简单功能的实现的整体代码如下:

首先在生成的类头文件Sample4055dlg.h中的类CSample4055中添加申明变量: public:

unsigned char buf[1];//发送数据的数据缓存区 unsigned char recbuf[1];//接受数据的数据缓存区 unsigned long len;int outvalue;int count;CString str;在Sample4055.cpp文件中编写控制代码: 首先添加对变量的定义: ROUTECFG cfg;

HANDLE hRoute=0;//新的ICAN网络

HANDLE hSlave4055=0;//数字量输入输出模块4055,MACID=1 CSample4055::CSample4055(CWnd* pParent /*=NULL*/){

}

(2)添加每个控件消息响应函数的代码: void CSample4055::OnStartsysButton1(){ : CDialog(CSample4055::IDD, pParent)buf[0]=0;recbuf[0]=0;count=0;len=0;str=“”;

// TODO: Add your control notification handler code here cfg.iCardType=4;//使用usbcan2接线口 cfg.iCardInd=0;//卡序号

cfg.iCANInd=0;//CAN通道选择(0表示0通道;1表示1通道)cfg.wCANBaud=0x001c;//波特率的设定0x001c(500kbps)cfg.iMasterCycle=500;//主站循环周期 cfg.wMasterID=0;//主站ID

Mgr_AddRoute(cfg,&hRoute);//添加iCAN网络

if(Mgr_StartSys()!=ICANOK)//调用Mgr_StartSys()函数对CAN网络是否启动进行判断,返回为ICANOK

} void CSample4055::OnLink4055Button2(){ if(Mgr_IsStarted()!=1){ { } else { } MeageBox(“CAN网络已启动”);MeageBox(“系统启动失败”);

MeageBox(“系统未启动或启动失败,请先启动CAN网络”);

} else { // TODO: Add your control notification handler code here Route_AddSlave(hRoute,1,&hSlave4055);//添加从站4055,MACID=1

if(Slave_Connect(hSlave4055)!=ICANOK)//判断从站4055是否连接成功 { } MeageBox(“4055连接失败”);

else

{ } MeageBox(“4055连接成功”);

SetTimer(1,1000,NULL);//设定开启定时循环,1代表消息事件id,1000表示1000ms即1s } void CSample4055::OnTimer(UINT nIDEvent)//Timer事件函数 {

// TODO: Add your meage handler code here and/or call default if(nIDEvent==1){ }

len=1;Slave_GetDIData(hSlave4055,recbuf,&len);//读取4055数字量输入端口数据 str.Format(“0x%02x:%d”,recbuf[0],count);

m_getDI.SetWindowText(str);count=count+1;

CDialog::OnTimer(nIDEvent);

} } void CSample4055::OnButtonSetvalue()//设定4055数字量输出端口值 { // TODO: Add your control notification handler code here if((Mgr_IsStarted()==1)&&(Slave_IsConnected(hSlave4055)==1))

{

UpdateData(true);

outvalue=strtol(m_invalue,NULL,16);//按十六进制进行读取 if(outvalue >= 0 && outvalue

buf[0]=(unsigned short)strtol(m_invalue,NULL,16);

Slave_SendData(hSlave4055,0x20,buf,1);//发送数据 } else { } } else { MeageBox(“请输入00~FF之间的十六进制数”);

MeageBox(“系统未启动或从站未连接,请查看后再进行操作”);}

(3)2路模拟量输出模块iCAN4210的编程使用 实验代码如下:

首先添加所用变量的申明: ROUTECFG cfg;

HANDLE hRoute=0;//新的ICAN网络 HANDLE hSlave4210=0;//MACID=2

控制代码:

void CSample4210::OnBUTTONStartCANSys(){ // TODO: Add your control notification handler code here } 8

cfg.iCardType=4;//使用usbcan2接线口 cfg.iCardInd=0;//卡序号

cfg.iCANInd=0;//CAN通道选择(0表示0通道;1表示1通道)cfg.wCANBaud=0x001c;//波特率的设定0x001c(500kbps)cfg.iMasterCycle=500;//主站循环周期 cfg.wMasterID=0;//主站ID

Mgr_AddRoute(cfg,&hRoute);//添加iCAN网络

if(Mgr_StartSys()!=ICANOK)//调用Mgr_StartSys()函数对CAN网络是否启动进行判断,返回为ICANOK

} void CSample4210::OnButtonLink4210(){

// TODO: Add your control notification handler code here if(Mgr_IsStarted()!=1){ { } else { } MeageBox(“CAN网络已启动”);MeageBox(“系统启动失败”);

MeageBox(“系统未启动或启动失败,请先启动CAN网络”);

} else { // TODO: Add your control notification handler code here Route_AddSlave(hRoute,2,&hSlave4210);

if(Slave_Connect(hSlave4210)!=ICANOK){ } MeageBox(“4210连接失败”);

else

} void CSample4210::OnButtonCanok(){ if((Mgr_IsStarted()==1)&&(Slave_IsConnected(hSlave4210)==1)){ } } MeageBox(“4210连接成功”);

{ unsigned char buf[32]={0};

UpdateData(true);if(m_setch0>=0.0&&m_setch0

buf[1]=(unsigned short)(m_setch0/10)*65535;

buf[0]=(unsigned short)((m_setch0/10)*65535)>>8;

} else { } if(m_setch1>=0.0&&m_setch1

{

buf[3]=(unsigned short)(m_setch1/10)*65535;

buf[2]=(unsigned short)((m_setch1/10)*65535)>>8;

}

else { } MeageBox(“提示:请输入0~10V电压”);

Slave_SendData(hSlave4210,0x60,buf,4);

} else {

MeageBox(“系统未启动或从站未连接,请查看后再进行操作”);}(4)8路模拟量输入模块iCAN4017 首先,在生成的.h头文件中添加使用到的变量的申明。public:

unsigned char recbuf[16];unsigned long len;int count;} 在.cpp文件中首先添加iCAN网络定义和申明以及变量的初始化操作。

ROUTECFG cfg;HANDLE hRoute=0;//新的ICAN网络

HANDLE hSlave4017=0;//AI模块4017,MACID=3

CSample4017::CSample4017(CWnd* pParent /*=NULL*/){

: CDialog(CSample4017::IDD, pParent)//{{AFX_DATA_INIT(CSample4017)m_valuech0 = 0.0;m_valuech1 = 0.0;m_valuech2 = 0.0;

} m_valuech3 = 0.0;m_counter = 0;//}}AFX_DATA_INIT recbuf[0]=0;recbuf[1]=0;recbuf[2]=0;recbuf[3]=0;recbuf[4]=0;recbuf[5]=0;recbuf[6]=0;recbuf[7]=0;len=0;count=0;void CSample4017::OnBUTTONStartCANSys(){

// TODO: Add your control notification handler code here cfg.iCardType=4;//使用usbcan2接线口 cfg.iCardInd=0;//卡序号

cfg.iCANInd=0;//CAN通道选择(0表示0通道;1表示1通道)cfg.wCANBaud=0x001c;//波特率的设定0x001c(500kbps)cfg.iMasterCycle=500;//主站循环周期 cfg.wMasterID=0;//主站ID

Mgr_AddRoute(cfg,&hRoute);//添加iCAN网络

if(Mgr_StartSys()!=ICANOK)//调用Mgr_StartSys()函数对CAN网络是否启动进行判断,返回为ICANOK

{

} } else { } MeageBox(“系统启动失败”);MeageBox(“CAN网络已启动”);void CSample4017::OnButtonLink4017(){

// TODO: Add your control notification handler code here if(Mgr_IsStarted()!=1){

MeageBox(“系统未启动或启动失败,请先启动CAN网络”);

} else { // TODO: Add your control notification handler code here Route_AddSlave(hRoute,3,&hSlave4017);if(Slave_Connect(hSlave4017)!=ICANOK){ } MeageBox(“4017连接失败”);

else

{ }

SetTimer(1,1000,NULL);} MeageBox(“4017连接成功”);} void CSample4017::OnTimer(UINT nIDEvent){

// TODO: Add your meage handler code here and/or call default if(nIDEvent==1){

Slave_GetAIData(hSlave4017,recbuf,&len);

m_valuech0=((double)(recbuf[0]*16*16+recbuf[1])-0x8000)*10/(double)0x8000;

m_valuech1=((double)(recbuf[2]*16*16+recbuf[3])-0x8000)*10/(double)0x8000;

m_valuech2=((double)(recbuf[4]*16*16+recbuf[5])-0x8000)*10/(double)0x8000;

m_valuech3=((double)(recbuf[6]*16*16+recbuf[7])-0x8000)*10/(double)0x8000;

}

m_counter=count;UpdateData(false);count=count+1;CDialog::OnTimer(nIDEvent);}

《北邮现场总线实验报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
北邮现场总线实验报告
点击下载文档
相关专题 北邮多媒体实验报告 实验报告 北邮 现场总线 北邮多媒体实验报告 实验报告 北邮 现场总线
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文