您的浏览器Javascript被禁用,需开启后体验完整功能, 请单击此处查询如何开启
网页 资讯 视频 图片 知道 贴吧 采购 地图 文库 |

上位机编程示例_信息与通信_工程科技_专业资料

3987人阅读|28次下载

标签:
  • 上位机|
  • 示例|
  • 编程|

上位机编程示例_信息与通信_工程科技_专业资料。WinDriver 安装与使用 1. 获取安装文件和序列号 Win32 平台使用 WD1020X86.EXE 安装 Win64 平台使用 WD1021X64.EXE 安装 序列号文件 sn.txt


WinDriver 安装与使用 1. 获取安装文件和序列号 Win32 平台使用 WD1020X86.EXE 安装 Win64 平台使用 WD1021X64.EXE 安装 序列号文件 sn.txt 2. 安装向导,[NEXT>] 3. 许可声明,[I Agree] 4. 安装选项,[Next>] 5. 安装目录,[Install] 6. 安装… 7. Windows Vista 及以上版本会弹出 Windows 安全提示,勾选始终信任来自”Jungo LTD” 的软件,点击[安装] 8. 安装完成,[Finish] 9. 注册提示,[Register Now] 10. 输入 license string,[Activate license] 11. 注册成功后 Current Active Licens 发生变化,点击[OK] 12. 安装成功 DRFM 板驱动说明 接口说明 1. DRFM_Board_num intDRFM_Board_num(); 获取 DRFM 板数量 无 板卡数量 DRFM 板对上位机是一个 PCI 设备, 上位机通过两个 ID 号 (Vendor ID & Device ID)识别 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 int DRFM_Load_9520(intboard_id,char *stp_path,DWORDbaseAddr); 配置 AD9520 时钟文件 board_id = 板卡号 stp_path = 时钟文件 baseAddr = 基址 0 = 正常非 0 = 异常 函数 描述 参数 返回值 备注 6. DRFM_Load_9739 int DRFM_Load_9739(intboard_id,DWORDbaseAddr); 配置 AD9739 board_id = 板卡号 baseAddr = 基址 0 = 正常非 0 = 异常 函数 描述 参数 返回值 备注 7. DRFM_Read_Memory void DRFM_Read_Memory(intboard_id,intBar,DWORDaddr,DWORD length); 读 XC5VLX30T 寄存器 board_id = 板卡号 bar = BAR 空间 addr = 偏移地址 data = 内存首地址 length = 长度(DWORD) 无 *data,int 函数 描述 参数 返回值 备注 8. DRFM_Write_Memory 函数 描述 参数 void DRFM_Write_Memory(intboard_id,intBar,DWORDaddr,DWORD *data,int length); 写 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 (int i=0; i<N; 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,[回车]; 输入 regsvr32 c:\teechart8.ocx,[回车] 2. 添加 TeeChart 控件 3. 插入 ActiveX 控件 4. 调整好 TeeChart 控件大小与位置 5. 对控件进行相关设置 双击 TeeChart 控件会弹出设置窗口 6. 选择绘图类型 7. 设置绘图属性 8. 为 TeeChart 控件添加类 9. TeeChart 控件和对象关联 注释掉构造函数的初始化 10. 编写绘图代码 在 CDRFMSYSDlg::OnPrintData 中插入绘图功能 afx_msg LRESULT CDRFMSYSDlg::OnPrintData(WPARAM wParam, LPARAM lParam) { double *pData = (double*)wParam; //获取数据指针 CStringstrData; //定义字符串变量 for (int i=0; i<N; i++) { strData.Format("%lf", pData[i]); //格式化字符串 m_wndListCtrl1.SetItemText(i, 1, strData); //设置列表信息 } long SeriesCount = m_Chart.get_SeriesCount(); //获取曲线的数量 ASSERT(SeriesCount == 1); //断言曲线数量为 1 CSeriesm_Series = m_Chart.Series(0); //获取第 0 条曲线 m_Series.Clear(); //清空曲线点 COleSafeArrayXValues, YValues; //定义 X 轴和 Y 轴数据变量 DWORD rgElements[] = {N}; //定义数据长度 XValues.Create(VT_R8, 1, rgElements); //申请数据内存空间 YValues.Create(VT_R8, 1, rgElements); for (long j=0; j<N; j++) { double x = (double)j; double y = pData[j]; //赋值 XValues.PutElement(&j, &x); YValues.PutElement(&j, &y); } m_Series.AddArray(N, YValues, XValues); //绘制曲线 delete[] pData; //释放内存 return 0; } 11. 运行效果 线程创建与执行 1. 添加线程执行函数 2. 定义 Process() 3. 启动工作线程 在 CDRFMSYSDlg::OnInitDialog 方法中加入以下代码 AfxBeginThread(Thread, this); 4. 运行效果 网络通信接口使用说明 接口说明 我们使用封装好的两个类进行网络通信的程序开发:CSocketServer 和 CSocketClient 将以下文件加入工程: SocketServer.h SocketServer.cpp SocketClient.h SocketClient.cpp 1. Open 服务器端 函数 描述 参数 成功返回值 失败返回值 int Open(); 打开端口监听并等待客户端连接 无 0 1=WSA 失败 2=SOCKET 失败 3=BIND 失败 4=LISTEN 失败 5=ACCEPT 失败 使用前打开套接字对象 备注 客户端 函数 描述 参数 成功返回值 失败返回值 int Open(); 打开端口并连接服务器端 无 0 1=WSA 失败 2=SOCKET 失败 3=CONNECT 失败 使用前打开套接字对象 备注 2. Close 服务器端 函数 描述 参数 成功返回值 失败返回值 备注 客户端 函数 描述 参数 成功返回值 失败返回值 备注 int Close(); 关闭套接字 无 0 无 使用后关闭套接字对象,调用后 Send 和 Recv 接口返回 0 int Close(); 关闭套接字 无 0 无 使用后关闭套接字对象,调用后 Send 和 Recv 接口返回 0 3. Send 服务器端 函数 描述 参数 成功返回值 失败返回值 备注 客户端 函数 描述 参数 成功返回值 失败返回值 备注 int Send(const unsigned char *buffer, int len); 发送数据 buffer = 数据缓冲 len = 数据长度(字节) 实际发送数据长度(字节) -1 返回 0 表示套接字被关闭 int Send(const unsigned char *buffer, int len); 发送数据 buffer = 数据缓冲 len = 数据长度(字节) 实际发送数据长度(字节) -1 返回 0 表示套接字被关闭 4. Recv 服务器端 函数 描述 参数 成功返回值 失败返回值 备注 客户端 函数 描述 参数 成功返回值 失败返回值 备注 int Recv(unsigned char *buffer, int len); 接收数据 buffer = 数据缓冲 len = 数据长度(字节) 实际接收数据长度(字节) -1 返回 0 表示套接字被关闭 int Recv(unsigned char *buffer, int len); 接收数据 buffer = 数据缓冲 len = 数据长度(字节) 实际接收数据长度(字节) -1 返回 0 表示套接字被关闭 编写网络流程代码 1. 声明 CSocketServer 对象 在头文件中声明对象 #include “SocketServer.h” CSocketServerm_SocketServer; 在源文件中构造对象 CDRFMSYSDlg::CDRFMSYSDlg(CWnd* pParent CDialogEx(CDRFMSYSDlg::IDD,pParent), m_SocketServer(6000) 端口号 6000 2. 在工作线程执行函数 DRFMSYSDlg::Process()中加入网络流程代码 /*=NULL*/) : 3. 运行效果

您的评论

发布评论

用户评价

  • 这篇文档有word格式吗?上位机编程示例 2018-06-25 07:55:20
  • 这是我最近看到的关于示例最好的文章 2018-06-24 10:36:22
  • 非常好,上位机编程示例 2018-06-24 07:46:52

文档贡献者

我帮你知道

贡献于2018-06-30

喜欢此文档的还喜欢