▋需求描述

C#本身是一个能够实现跨平台的语言,在Windows、Mac OS以及Linux上都有对应的API进行编程。这篇文章主要介绍如何将Windows平台上已经开发好的数据采集驱动以及程序移植到Mac OS平台上,其中包括Visual Studio for Mac IDE的安装和使用介绍,如何进行跨平台的驱动移植等。


▋关键词

Mac OS, MONO, 跨平台(Cross-platform), 驱动移植(Driver Transplant), USB-61902


▋应用详述:

1.软件环境准备

在具体开始驱动移植之前,我们需要首先在电脑上配置好软件环境。这里使用的操作系统是macOS Sierra 10.12.1。按照第五部分相关链接中给出的链接下载USB-61902板卡的Mac驱动以及Visual Studio for Mac (Preview)软件,按照默认选项安装即可,其中Visual Studio for Mac的安装和使用可以参考链接,这里就不再详细的介绍了。

2.进行驱动移植工作,生成dll

软件环境都安装完毕后,我们可以开始进行驱动移植的工作。打开VS for Mac,选择新建Solution,模板选择.NET中的Library,配置好解决方案名称、项目名称以及保存路径即可,参考图1所示。这里我们新建的是一个类库项目,在项目中我们需要对原厂的驱动进行修改,然后生成Mac平台下可用的动态链接库。

项目创建完成后,把USB-61902驱动对应的.cs文件添加到项目中来,一共包含Common和Task两个文件夹。其中Task文件夹中的内容主要是针对板卡的不同应用创建的不同类,在驱动移植时无需修改。而Common文件夹中主要包含一些设备属性信息,自定义的错误信息以及导入的原厂驱动文件,这里我们只需要对JYUSB61902Vendor.cs文件进行些许修改。

在解决方案资源管理器(下文将简称Solution)中双击打开JYUSB61902Vendor.cs文件,浏览到其中的DllImport部分(第610行和第611行),这里我们需要把Windows驱动的文件名替换为Mac对应驱动文件的名称,如下图所示。我们在第一步已经装完了硬件对应的驱动,那么在/usr/local/lib文件夹下面就会找到下面对应的两个动态链接库文件,具体信息可以参考驱动手册,默认安装路径为/Applications/ADLINK/UD_DASK/manual。当我们在Mac版的Visual Studio上调用一些系统的动态链接库时,系统会自动在/usr/local/lib这个文件夹下按照文件名去查找所依赖的文件。


修改完上面的文件名称之后,我们对驱动的修改就结束了。但是还有一点需要注意,由于Mac操作系统是64位的,而我们驱动文件也是64位的,所以生成dll时的目标平台也需要选择x64。我们需要在Solution中右键项目名称JYUSB1902并选择Options,在弹出的Project Options对话框中左侧浏览到Compiler页面,将Platform Target一栏修改为x64即可,如图2所示。


修改完目标平台之后,最后一步我们需要生成dll以便在其它项目中使用。这个步骤与Windows版本的VS一样,右键项目名称选择Build/Rebuild,然后在项目路径的bin/Debug文件夹下就可以找到默认以项目名称命名的.dll文件,如图3所示。


3.在项目中使用刚才生成的dll

上一步骤中我们对Windows版本的板卡驱动进行了些许修改,并生成了对应的dll文件,这样其实就已经完成了驱动移植的工作,但是距离实际的应用还有一步。下面我们将指导大家如何在Visual Studio for Mac中建立一个带有GUI的数据采集项目。

首先我们需要在刚才的解决方案中新增加一个项目。在Solution中右键解决方案名称,选择Add New Project,在项目项目模板中选择.NET下面的Gtk# 2.0 Project,这就是MONO平台下带有GUI的项目模板,对应于Windows平台的Windows Form程序。选择Next并在指定位置填入项目名称,点击OK就完成了项目的创建过程。具体步骤可以参考图4和图5 。

 

首先我们需要创建用户界面,添加数据采集所需要的一些控件。在Solution中双击MainWindow.cs文件就可以看到模板自动创建的代码编辑窗口,在窗口下方可以看到有Source/Designer选项卡,单击选择Designer就可以进入窗口界面。

如果窗口左侧没有显示工具栏(Toolbox),可以选择菜单栏-》View-》Pads-》Toolbox将隐藏的工具栏恢复。VS for Mac自带的控件比较简单,当然我们可以从右键工具栏空白处选择Add Items添加一些自定义控件,如图6所示。这里我们使用自带的控件进行项目的演示。

可以看到Toolbox中的控件分为两类:Widgets和Containers,我们一般需要的控件都在Widgets下面,而Containers中都是一些容器。但是在添加Widgets控件之前,我们必须在窗体中先放置一个容器,这里我们选择Fixed容器,单击即可拖曳到窗体中。按照此方法我们再放置一个Button控件,两个Label控件和两个Entry控件,可以选择菜单栏-》View-》Pads-》Properties打开属性视窗对控件属性进行修改,最后的用户界面如图7所示。

在进行代码编辑之前,我们还需要配置一下Button_Click事件。单击Button控件,在属性视窗中中进入Signals页面,在Button Signals中的Clicked一项中双击空白处即可生成事件,如图8所示。下面我们将在此事件中填入代码。

单击窗体底部的Source进入代码编辑界面,这里我们分为四个步骤来完成我们的代码实现:

  a. 在Solution中添加引用。右键项目名称下面的References选项,在Edit References对话框中选择.Net Assembly页面,浏览到上一步骤生成的dll文件,选择添加即可,如图9所示。

  b. 在代码的引用部分键入:“using JYUSB61902; ”,这样才可以使用dll中的方法;

  c. 在Button_Click事件中(具体方法名称可能有所不同)编写数据采集部分的代码,在代码编写过程中可以看到VS for Mac IDE的强大之处,许多在Windows版VS上的功能比如智能的代码自动补全、智能的代码重构以及全局搜索等都可以大大的提高我们的代码开发效率。具体代码部分这里就不再做详细解释,可以参考附件中的具体实现。

  d. 修改目标平台。同前面提到的一样,我们需要将项目的Platform target修改为x64,否则在加载驱动dylib文件的时候会提示“wrong architecture”。

通过以上四个步骤我们就完成了代码的编写工作,我们来看下运行结果。点击工具栏的运行按钮运行程序,在Write Data中填入AO输出电压值,点击Acquire按钮可以看到在Read Data中显示了AI回读的电压值,如图10所示。当然这里为了演示简单,只是做了简单的直流AO-AI loopback,我们可以使用同样的方式在Mac平台首先更加复杂的数据采集功能。


▋相关链接

Visual Studio for Mac下载链接

https://developer.xamarin.com/visual-studio-mac/

Visual Studio for Mac使用说明

https://developer.xamarin.com/guides/cross-platform/visual-studio-mac/

USB-61902 Mac OS驱动下载界面

http://www.adlinktech.com/PD/cn/PD_Driver.php?PDNo=1087&kind=DR

Visual Studio常用技巧介绍
手把手教你C#与MATLAB混合编程 (上)

上一篇

下一篇

Mac平台下完成数采驱动移植

本网站由阿里云提供云计算及安全服务