C# WPF学习之旅——libmodbus库函数的使用

libmodbus是一个免费的跨平台的支持RTU和TCP的Modbus库。

首先我们访问libmodbus官方GitHub网站 https://github.com/stephane/libmodbus,下载源代码

下载完成后,解压下载的zip文件。

在使用VS编译之前,我么要双击configure.js文件生产config.h和modbus-version.h文件

 

 我们使用vs打开该目录下的modbus-9.sln文件。

打开后有如下,点击确定。

 

完成项目升级文件。

此时如果直接编译工程文件,将发生错误。原因是其中新生成的文件modbus-version.h没有正确加载,在文件上单机右键选择移除,删除旧文件。

 随后在Header Files上添加现有项,重新加载新生成的modbus-version.h文件。

再次尝试编译后发现会报错。

我们只要找到并删除version项的定义即可。右击modbus,选择属性。

 删除版本号,重新编译。如果一切顺利,在win32目录下会成功生产modbus.dll和modbus.lib文件。

在工具栏上将工程文件目标属性切换到【release】项,按上面的方法重新编译Release版。

这样对于libmodbus库文件的编译完成。之后可以使用了。

之后在你需要调用的时候,在项目中添加modbus.dll文件,把该文件的“复制到输出目录”属性,改为“始终复制”。

 之后在项目中新建一个类modbus.cs。我们需要声明对modbus里各个方法的调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace KFTX1._0
{
    public static class modbus
    {
        [DllImport("modbus.dll", EntryPoint = "modbus_new_rtu", CharSet = CharSet.Ansi)]
        public static extern IntPtr modbus_new_rtu(string device, int baud, char parity, int data_bit, int stop_bit);//RTU模式创建的关联函数




        [DllImport("modbus.dll", EntryPoint = "modbus_new_tcp", CharSet = CharSet.Ansi)]
        public static extern IntPtr modbus_new_tcp(string device, int baud, char parity, int data_bit, int stop_bit);//TCP模式创建的关联函数






        [DllImport("modbus.dll", EntryPoint = "modbus_set_slave", CharSet = CharSet.Ansi)]
        public static extern int modbus_set_slave(IntPtr ctx,int slave);//共通的操作函数

        [DllImport("modbus.dll", EntryPoint = "modbus_connect", CharSet = CharSet.Ansi)]
        public static extern int modbus_connect(IntPtr ctx);

        [DllImport("modbus.dll", EntryPoint = "modbus_read_bits", CharSet = CharSet.Ansi)]
        public static extern int modbus_read_bits(IntPtr ctx, int addr,int nb,byte[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_read_input_bits", CharSet = CharSet.Ansi)]
        public static extern int modbus_read_input_bits(IntPtr ctx, int addr, int nb, byte[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_read_registers", CharSet = CharSet.Ansi)]
        public static extern int modbus_read_registers(IntPtr ctx, int addr, int nb, UInt16[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_read_input_registers", CharSet = CharSet.Ansi)]
        public static extern int modbus_read_input_registers(IntPtr ctx, int addr, int nb, UInt16[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_write_bit", CharSet = CharSet.Ansi)]
        public static extern int modbus_write_bit(IntPtr ctx, int coil_addr, int status);

        [DllImport("modbus.dll", EntryPoint = "modbus_write_register", CharSet = CharSet.Ansi)]
        public static extern int modbus_write_register(IntPtr ctx, int addr, int nb, UInt16[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_write_bits", CharSet = CharSet.Ansi)]
        public static extern int modbus_write_bits(IntPtr ctx, int coil_addr, int nb, byte[] status);

        [DllImport("modbus.dll", EntryPoint = "modbus_write_registers", CharSet = CharSet.Ansi)]
        public static extern int modbus_write_registers(IntPtr ctx, int reg_addr,int nb, UInt16[] status);

        [DllImport("modbus.dll", EntryPoint = "modbus_write_and_read_registers", CharSet = CharSet.Ansi)]
        public static extern int modbus_write_and_read_registers(IntPtr ctx, int write_addr, int write_nb, UInt16[] scr,
                                                                              int read_addr, int read_nb,  UInt16[] dest);

        [DllImport("modbus.dll", EntryPoint = "modbus_close", CharSet = CharSet.Ansi)]
        public static extern void modbus_close(IntPtr ctx);

        [DllImport("modbus.dll", EntryPoint = "modbus_free", CharSet = CharSet.Ansi)]
        public static extern void modbus_free(IntPtr ctx);

    }
}

之后既可以调用modbus里的各个方法。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的界面开发技术,其基于.NET Framework平台,并使用C#编程语言进行开发。WPF提供了一套强大的工具和框架,使开发人员能够轻松创建富有吸引力、功能丰富的用户界面。 WPF与传统的Windows Forms相比具有许多优势。首先,WPF支持更加灵活和现代化的用户界面设计,可以轻松地创建透明、动画和多媒体效果等视觉效果。其次,WPF具有更好的分离性,允许开发人员将界面逻辑与业务逻辑进行分离,使代码更加清晰和易于维护。此外,WPF还支持数据绑定和样式模板等功能,使界面开发更加高效和可重用。 在使用WPF进行编程时,首先需要了解XAML(Extensible Application Markup Language)语言,它用于定义WPF界面元素和布局。然后,使用C#语言编写代码逻辑,处理用户交互、数据绑定、事件处理等方面的功能。在WPF中,可以通过使用命令模式和MVVM(Model-View-ViewModel)架构来组织和管理代码,以实现更好的代码分离性。 另外,WPF提供了丰富的控件,开发人员可以使用这些控件来构建各种功能和复杂的界面。同时,WPF还支持自定义控件的开发,开发人员可以根据具体需求创建自己的控件。 总之,WPF是一种强大的界面开发技术,可以帮助开发人员创建出具有丰富功能和吸引力的Windows应用程序。同时,使用C#语言进行开发可以使开发过程更加高效和灵活。无论是初学者还是有经验的开发人员,都可以从WPF编程宝典中学习到丰富的知识和技巧,提高自己的WPF编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值