上位机编程示例word版本.docx
《上位机编程示例word版本.docx》由会员分享,可在线阅读,更多相关《上位机编程示例word版本.docx(39页珍藏版)》请在冰豆网上搜索。
上位机编程示例word版本
上位机编程示例
WinDriver安装与使用
1.获取安装文件和序列号
Win32平台使用WD1020X86.EXE安装
Win64平台使用WD1021X64.EXE安装
序列号文件sn.txt
2.安装向导,[NEXT>]
3.许可声明,[IAgree]
4.安装选项,[Next>]
5.安装目录,[Install]
6.安装…
7.WindowsVista及以上版本会弹出Windows安全提示,勾选始终信任来自”JungoLTD”的软件,点击[安装]
8.安装完成,[Finish]
9.注册提示,[RegisterNow]
10.输入licensestring,[Activatelicense]
11.注册成功后CurrentActiveLicens发生变化,点击[OK]
12.安装成功
DRFM板驱动说明
接口说明
1.DRFM_Board_num
函数
intDRFM_Board_num();
描述
获取DRFM板数量
参数
无
返回值
板卡数量
备注
DRFM板对上位机是一个PCI设备,上位机通过两个ID号(VendorID&DeviceID)识别PCI设备,获取板卡数量实际上是扫描指定ID号的PCI设备数量。
2.DRFM_Open
函数
boolDRFM_Open(intboard_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,intBar,DWORDaddr,DWORD*data,intlength);
描述
读XC5VLX30T寄存器
参数
board_id=板卡号
bar=BAR空间
addr=偏移地址
data=内存首地址
length=长度(DWORD)
返回值
无
备注
8.DRFM_Write_Memory
函数
voidDRFM_Write_Memory(intboard_id,intBar,DWORDaddr,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,CStringm_HPILoaderFilePath);
描述
加载DSP
参数
board_id=板卡号
m_HPILoaderFilePath=加载路径
返回值
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);
//定义字符串变量
CStringstrData;
//添加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_msgLRESULTCDRFMSYSDlg:
:
OnPrintData(WPARAMwParam,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
CSeriesm_Series=m_Chart.Series(0);//获取第0条曲线
m_Series.Clear();//清空曲线点
COleSafeArrayXValues,YValues;//定义X轴和Y轴数据变量
DWORDrgElements[]={N};//定义数据长度
XValues.Create(VT_R8,1,rgElements);//申请数据内存空间
YValues.Create(VT_R8,1,rgElements);
for(longj=0;j{
doublex=(double)j;
doubley=pData[j];//赋值
XValues.PutElement(&j,&x);
YValues.PutElement(&j,&y);
}
m_Series.AddArray(N,YValues,XValues);//绘制曲线
delete[]pData;//释放内存
return0;
}
11.运行效果
线程创建与执行
1.添加线程执行函数
2.定义Process()
3.启动工作线程
在CDRFMSYSDlg:
:
OnInitDialog方法中加入以下代码
AfxBeginThread(Thread,this);
4.运行效果
网络通信接口使用说明
接口说明
我们使用封装好的两个类进行网络通信的程序开发:
CSocketServer和CSocketClient
将以下文件加入工程:
SocketServer.h
SocketServer.cpp
SocketClient.h
SocketClient.cpp
1.Open
2.Close
3.Send
4.Recv
编写网络流程代码
1.声明CSocketServer对象
在头文件中声明对象
#include“SocketServer.h”
CSocketServerm_SocketServer;
在源文件中构造对象
CDRFMSYSDlg:
:
CDRFMSYSDlg(CWnd*pParent/*=NULL*/):
CDialogEx(CDRFMSYSDlg:
:
IDD,pParent),m_SocketServer(6000)
端口号6000
2.在工作线程执行函数DRFMSYSDlg:
:
Process()中加入网络流程代码
3.运行效果