北邮现场总线实验报告文档格式.docx
《北邮现场总线实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《北邮现场总线实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
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:
unsignedcharbuf[1];
//发送数据的数据缓存区
unsignedcharrecbuf[1];
//接受数据的数据缓存区
unsignedlonglen;
intoutvalue;
intcount;
CStringstr;
在Sample4055.cpp文件中编写控制代码:
首先添加对变量的定义:
ROUTECFGcfg;
HANDLEhRoute=0;
//新的ICAN网络
HANDLEhSlave4055=0;
//数字量输入输出模块4055,MACID=1
CSample4055:
:
CSample4055(CWnd*pParent/*=NULL*/)
:
CDialog(CSample4055:
IDD,pParent)
{
buf[0]=0;
recbuf[0]=0;
count=0;
len=0;
str="
"
;
}
(2)添加每个控件消息响应函数的代码:
voidCSample4055:
OnStartsysButton1()
//TODO:
Addyourcontrolnotificationhandlercodehere
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
{
MessageBox("
系统启动失败"
);
}
else
CAN网络已启动"
OnLink4055Button2()
if(Mgr_IsStarted()!
=1)
MessageBox("
系统未启动或启动失败,请先启动CAN网络"
Route_AddSlave(hRoute,1,&
hSlave4055);
//添加从站4055,MACID=1
if(Slave_Connect(hSlave4055)!
=ICANOK)//判断从站4055是否连接成功
4055连接失败"
4055连接成功"
SetTimer(1,1000,NULL);
//设定开启定时循环,1代表消息事件id,1000表示1000ms即1s
OnTimer(UINTnIDEvent)//Timer事件函数
Addyourmessagehandlercodehereand/orcalldefault
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);
}
OnButtonSetvalue()//设定4055数字量输出端口值
if((Mgr_IsStarted()==1)&
&
(Slave_IsConnected(hSlave4055)==1))
UpdateData(true);
outvalue=strtol(m_invalue,NULL,16);
//按十六进制进行读取
if(outvalue>
=0&
outvalue<
=255)
buf[0]=(unsignedshort)strtol(m_invalue,NULL,16);
Slave_SendData(hSlave4055,0x20,buf,1);
//发送数据
请输入00~FF之间的十六进制数"
系统未启动或从站未连接,请查看后再进行操作"
(3)2路模拟量输出模块iCAN4210的编程使用
实验代码如下:
首先添加所用变量的申明:
HANDLEhSlave4210=0;
//MACID=2
控制代码:
voidCSample4210:
OnBUTTONStartCANSys()
OnButtonLink4210()
Route_AddSlave(hRoute,2,&
hSlave4210);
if(Slave_Connect(hSlave4210)!
=ICANOK)
4210连接失败"
4210连接成功"
OnButtonCanok()
(Slave_IsConnected(hSlave4210)==1))
unsignedcharbuf[32]={0};
if(m_setch0>
=0.0&
m_setch0<
=10.0)
buf[1]=(unsignedshort)(m_setch0/10)*65535;
buf[0]=(unsignedshort)((m_setch0/10)*65535)>
>
8;
提示:
请输入0~10V电压"
if(m_setch1>
m_setch1<
buf[3]=(unsignedshort)(m_setch1/10)*65535;
buf[2]=(unsignedshort)((m_setch1/10)*65535)>
}
Slave_SendData(hSlave4210,0x60,buf,4);
(4)8路模拟量输入模块iCAN4017
首先,在生成的.h头文件中添加使用到的变量的申明。
unsignedcharrecbuf[16];
在.cpp文件中首先添加iCAN网络定义和申明以及变量的初始化操作。
HANDLEhSlave4017=0;
//AI模块4017,MACID=3
CSample4017:
CSample4017(CWnd*pParent/*=NULL*/)
CDialog(CSample4017:
//{{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[1]=0;
recbuf[2]=0;
recbuf[3]=0;
recbuf[4]=0;
recbuf[5]=0;
recbuf[6]=0;
recbuf[7]=0;
voidCSample4017:
OnButtonLink4017()
Route_AddSlave(hRoute,3,&
hSlave4017);
if(Slave_Connect(hSlave4017)!
4017连接失败"
4017连接成功"
OnTimer(UINTnIDEvent)
Slave_GetAIData(hSlave4017,recbuf,&
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);