上位机编程示例.docx
《上位机编程示例.docx》由会员分享,可在线阅读,更多相关《上位机编程示例.docx(38页珍藏版)》请在冰豆网上搜索。
![上位机编程示例.docx](https://file1.bdocx.com/fileroot1/2022-10/25/ca184ecb-4159-41de-8cb3-2e4be4748de8/ca184ecb-4159-41de-8cb3-2e4be4748de81.gif)
上位机编程示例
WinDriver安装与使用
1.获取安装文件与序列号
Win32平台使用WD1020X86、EXE安装
Win64平台使用WD1021X64、EXE安装
序列号文件sn、txt
2.安装向导,[NEXT>]
3.许可声明,[I Agree]
4.安装选项,[Next>]
5.安装目录,[Install]
6.安装…
7.WindowsVista及以上版本会弹出Windows安全提示,勾选始终信任来自”JungoLTD”得软件,点击[安装]
8.安装完成,[Finish]
9.注册提示,[RegisterNow]
10.输入licensestring,[Activatelicense]
11.注册成功后Current Active Licens发生变化,点击[OK]
12.安装成功
DRFM板驱动说明
接口说明
1.DRFM_Board_num
函数
int DRFM_Board_num();
描述
获取DRFM板数量
参数
无
返回值
板卡数量
备注
DRFM板对上位机就是一个PCI设备,上位机通过两个ID号(Vendor ID&DeviceID)识别PCI设备,获取板卡数量实际上就是扫描指定ID号得PCI设备数量。
2.DRFM_Open
函数
boolDRFM_Open(int board_id);
描述
打开板卡
参数
board_id =板卡号
返回值
true =成功false=失败
备注
对板卡进行操作前,需要打开板卡;
板卡号可根据DRFM_Board_num返回值确定取值范围,[0,板卡数量);
3.DRFM_Close
函数
intDRFM_Close(intboard_id);
描述
关闭板卡
参数
board_id= 板卡号
返回值
0=正常非0=异常
备注
对板卡操作完成后,需关闭板卡;
板卡号可根据DRFM_Board_num返回值确定取值范围,[0,板卡数量);
4.DRFM_Load_FPGA
函数
intDRFM_Load_FPGA(intboard_id,char*path);
描述
加载XC6VSX315T芯片FPGA程序
参数
board_id =板卡号
path=加载文件
返回值
0=正常 非0 = 异常
备注
5.DRFM_Load_9520
函数
intDRFM_Load_9520(intboard_id,char*stp_path,DWORDbaseAddr);
描述
配置AD9520时钟文件
参数
board_id=板卡号
stp_path =时钟文件
baseAddr= 基址
返回值
0=正常非0=异常
备注
6.DRFM_Load_9739
函数
intDRFM_Load_9739(intboard_id,DWORDbaseAddr);
描述
配置AD9739
参数
board_id= 板卡号
baseAddr=基址
返回值
0= 正常非0=异常
备注
7.DRFM_Read_Memory
函数
voidDRFM_Read_Memory(intboard_id,int Bar,DWORDaddr,DWORD*data,intlength);
描述
读XC5VLX30T寄存器
参数
board_id=板卡号
bar=BAR空间
addr =偏移地址
data=内存首地址
length=长度(DWORD)
返回值
无
备注
8.DRFM_Write_Memory
函数
voidDRFM_Write_Memory(intboard_id,intBar,DWORD addr,DWORD*data,intlength);
描述
写XC5VLX30T寄存器
参数
board_id =板卡号
bar= 基地址
addr=偏移地址
data=内存首地址
length=长度(DWORD)
返回值
无
备注
9.DRFM_Load_ADC
函数
intDRFM_Load_ADC(intboard_id);
描述
配置ADC10D1500
参数
board_id=板卡号
返回值
0=正常非0=异常
备注
10.DSP_Load
函数
intDSP_Load(intboard_id,CString m_HPILoader);
描述
加载DSP
参数
board_id=板卡号
m_HPILoader =加载路径
返回值
0=正常 非0=异常
备注
板卡控制流程代码
1.准备工作
基于WinDriver实现
使用已有得DRFM板卡驱动
DeviceBase、h
drfm、h
DEVICE、lib
将以上三个文件加入工程
在对话框类中声明DRFM_BOARD类对象;
2.初始化
在CDRFMSYSDlg:
:
OnInitDialog中添加板卡初始化操作
RegistDevice(NULL);//注册驱动库
ConnectToDevice();//连接至板卡
intnum = m_drfm、DRFM_Board_num();//获取板卡数量
CStringstrBoardNum;
strBoardNum、Format("检测到%d块 DRFM板卡",num);//格式化字符串
PrintMessage(strBoardNum);//打印消息
3.为控件添加变量
同样方法添加以下变量
偏移地址m_offset
数据m_data
4.按钮事件响应函数
UpdateData(TRUE);//更新参数
m_drfm、DRFM_Read_Memory(0,m_space,m_offset, &m_data,1);//读数据
//m_space为地址空间
//m_offset为偏移量
//m_data为数据
UpdateData(FALSE);//更新参数
///////////////////////////////////////////////////////////////////////////////////////////
UpdateData(TRUE);//更新参数
m_drfm、DRFM_Write_Memory(0,m_space, m_offset,&m_data, 1);//写数据
//m_space为地址空间
//m_offset为偏移量
//m_data为数据
搭建界面
1.新建项目
2.选择工程类型
3.MFC应用程序向导
4.选择应用程序类型
5.启动界面编辑窗口
6.拖放控件
7.为控件添加变量
8.设置变量参数
9.添加列与行
在CDRFMSYSDlg:
:
OnInitDialog方法中加入以下代码
//第0列名称为X,宽度100
m_wndListCtrl1、InsertColumn(0,"X", 0,100);
//第1列名称为Y,宽度100
m_wndListCtrl1、InsertColumn(1,"Y",0,100);
//设置列表得样式LVS_EX_FULLROWSELECT= 正行选取LVS_EX_GRIDLINES=显示网格
m_wndListCtrl1、SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//定义字符串变量
CString strData;
//添加N行数据
for(inti=0; i{
//格式化字符串变量
strData、Format(“%d”,i);
//添加行
m_wndListCtrl1、InsertItem(i, strData);
}
10.同样方法为输出列表创建对象,添加列
创建对象m_wndListCtrl2
为控件添加列:
时间、描述、线程
11.更新列表信息
12.添加自定义消息
13.同样方法再添加一个自定义消息
消息名称:
WM_USER+2
消息处理程序:
OnPrintMessage
14.OnPrintData中定义列表更新方法
15.通过PostMessage更新列表信息
16.OnPrintMessage中定义消息更新方法
17.定义消息打印接口函数
18.打印第一条消息
在CDRFMSYSDlg:
:
OnInitDialog方法中加入以下代码
PrintMessage(CString("这就是第一条消息"));
TeeChart控件使用说明
1.注册TeeChart
将TeeChart8、ocx拷贝至c:
\目录下;
[Win]+[R],输入cmd,[回车];
输入regsvr32c:
\teechart8、ocx,[回车]
2.添加TeeChart控件
3.插入ActiveX控件
4.调整好TeeChart控件大小与位置
5.对控件进行相关设置
双击TeeChart控件会弹出设置窗口
6.选择绘图类型
7.设置绘图属性
8.为TeeChart控件添加类
9.TeeChart控件与对象关联
注释掉构造函数得初始化
10.编写绘图代码
在CDRFMSYSDlg:
:
OnPrintData中插入绘图功能
afx_msg LRESULTCDRFMSYSDlg:
:
OnPrintData(WPARAM wParam, LPARAMlParam)
{
double*pData=(double*)wParam;//获取数据指针
CStringstrData;//定义字符串变量
for (inti=0;i{
strData、Format("%lf",pData[i]);//格式化字符串
m_wndListCtrl1、SetItemText(i, 1, strData);//设置列表信息
}
longSeriesCount =m_Chart、get_SeriesCount(); //获取曲线得数量
ASSERT(SeriesCount == 1); //断言曲线数量为1
CSeries m_Series=m_Chart、Series(0);//获取第0条曲线
m_Series、Clear();//清空曲线点
COleSafeArray XValues, YValues;//定义X轴与Y轴数据变量
DWORDrgElements[]={N};//定义数据长度
XValues、Create(VT_R8,1,rgElements);//申请数据内存空间
YValues、Create(VT_R8,1,rgElements);
for(long j=0;j{
doublex=(double)j;
doubley=pData[j];//赋值
XValues、PutElement(&j,&x);
YValues、PutElement(&j,&y);
}
m_Series、AddAr