.NET在Linux平台上开发串口功能
我们知道,.NET是跨平台的,可以运行在Windows、Linux、Mac上。但如果你在做工控方面的开发,你很快会发现,系统提供的SerialPort类,只能运行在Windows平台上。下面介绍.NET在Linux平台上完整的串口功能开发步骤。一、在虚拟机上增加串口如果你有一台带有串口的工控电脑,那这一部分的内容可以跳过。当然,为了调试方便,能在一台普通电脑上调试串口功能,也是很有意义的。我们这里
我们知道,.NET是跨平台的,可以运行在Windows、Linux、Mac上。但如果你在做工控方面的开发,你很快会发现,系统提供的SerialPort类,只能运行在Windows平台上。下面介绍.NET在Linux平台上完整的串口功能开发步骤。
一、在虚拟机上增加串口
如果你有一台带有串口的工控电脑,那这一部分的内容可以跳过。当然,为了调试方便,能在一台普通电脑上调试串口功能,也是很有意义的。
我们这里使用的虚拟机软件是VirtualBox,虚拟机安装Ubuntu系统,而外部的主机当然是Windows系统了。
1.1 主机安装虚拟串口
要在Windows系统上虚拟出串口,可以使用vspd软件。这不是本文的重点,在此不介绍,读者可以在网上搜索下载使用。
在这里,我们创建了COM1、COM2一对串口,将在下文中使用。
1.2 虚拟机安装虚拟串口
打开VirtualBox的系统配置页,切换到串口选项卡,如下图所示:
在上面的配置中,端口编号是指虚拟机内的串口,在此示例中,我们选择COM1。端口模式选择主机设备,它相当于一个映射,把虚拟机内的COM1映射到主机,在下面的“路径/地址”中,我们填写COM1,就是虚拟机的COM1映射到主机的COM1。如果我们的主机不是Windows系统,而是Linux系统,那就要映射到/dev/ttyS0(相当于COM1)。
1.3 开始调试
1、在主机端,打开一个串口调试助手,打开COM2。
2、在虚拟机端,运行终端,先取得root权限(串口功能必须要root权限),然后输入以下命令:
echo "内容" > /dev/ttyS0
ttyS0指的就是COM1,ttyS1指COM2,依此类推。
3、这时候,我们在Windows端的串口调试助手可以发现收到消息了:
二、在.NET上开发串口功能
在写C#程序的时候,串口功能我们一般使用SerialPort类,但它是一个只能在Windows平台上使用的类。可以在NuGet中添加SerialPortStream包,这是一个支持多平台的串口处理包。
如果还是在Windows平台上,使用SerialPortStream类跟SerialPort类的代码几乎是一样的(把类名改一下,构造函数的参数顺序调一下),而且没什么额外的操作。但是在Linux平台上,需要先编译一个项目。由于Linux系统的差异性,对于串口操作,没办法做到统一。所以串口的底层功能,需要在特定的Linux系统上进行编译。
2.1 安装编译环境
下载代码需要git,编译需要gcc和cmake。如果已经安装,这一步可以略过。
sudo apt-get install git
sudo apt-get install gcc
sudo apt-get install cmake
2.2 下载和编译项目
这在SerialPortStream的说明文档里有介绍:
执行完上述步骤之后,会在serialportstream/dll/serialunix/build/libnserial目录下,看到如下的三个文件:
2.3 开发串口功能
新建一个.NET工程,然后写下如下所示简单的示例代码:
Task.Run(async () =>
{
try
{
SerialPortStream sps = new SerialPortStream("/dev/ttyS0");
sps.Open();
sps.Write("hello world");
await Task.Delay(2000);
sps.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
就是打开串口,然后发送一段字,再关掉。
2.4 发布和运行
编译上面的.NET程序,把它复制到Linux系统上。把2.2步产生的三个so文件,同样复制到程序的根目录下。
这时候,程序就可以像在Windows系统上那样运行了。需要注意的是,运行程序需要root权限。
sudo dotnet myapp.dll
更多推荐
所有评论(0)