android 串口通信_C# NModbus RTU通信实现 - 熊来闯一闯

本文介绍了如何使用C#的NModbus库实现在Android上的Modbus RTU通信。通过NuGet包管理器安装NModbus库,实现串口的自动识别和读写操作。在多线程环境下,使用Invoke委托处理控件操作。同时提供了串口模拟器的下载链接以供测试,并展示了最终的实现效果。
摘要由CSDN通过智能技术生成

Modbus协议时应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络/串口和其它设备之间可以进行通信。它已经成为了一种工业标准。有了这个通信协议,不同的厂商生成的控制设备就可以连城工业网络,进行集中监控。

本文实现需要借用一个开源的NModbus库来完成,通过在菜单栏,工具-----NuGet包管理器-----管理解决方案的NuGet程序包,安装NModbus的开源库。

8b775bc6f1cf6a42cafa5908258e3e01.png

本次实例的基本框架和实现效果如下所示:

e93741415ffb565d3addb32e01000ea8.png

可自动识别当前设备的可用串口。

 61afab509a6785d9dcac055f94c81ac7.png

 Modbus RTU通信的具体的实现如下:

7bf955a993e001b1f842be35135b891d.gif ef4159ae953364db6d35bf70b744a137.gif
  1using System;
  2using System.Collections;
  3using System.Collections.Generic;
  4using System.ComponentModel;
  5using System.Data;
  6using System.Drawing;
  7using System.Linq;
  8using System.Text;
  9using System.Threading.Tasks;
 10using System.Windows.Forms;
 11using Modbus.Device;
 12using System.Net.Sockets;
 13using System.Threading;
 14using System.IO.Ports;
 15using System.Drawing.Text;
 16using System.Windows.Forms.VisualStyles;
 17using System.Timers;
 18using System.CodeDom.Compiler;
 19 20namespace ModbusRtuMaster
 21{
 22publicpartialclass Form1 : Form
 23    {
 24#region 参数配置
 25privatestatic IModbusMaster master;
 26privatestatic SerialPort port;
 27//写线圈或写寄存器数组 28privatebool[] coilsBuffer;
 29privateushort[] registerBuffer;
 30//功能码 31privatestring functionCode;
 32//功能码序号 33privateint functionOder;
 34//参数(分别为从站地址,起始地址,长度) 35privatebyte slaveAddress;
 36privateushort startAddress;
 37privateushort numberOfPoints;
 38//串口参数 39privatestring portName;
 40privateint baudRate;
 41private Parity parity;
 42privateint dataBits;
 43private StopBits stopBits;
 44//自动测试标志位 45privatebool AutoFlag = false;
 46//获取当前时间 47private System.DateTime Current_time;
 48 49//定时器初始化 50private System.Timers.Timer t = new System.Timers.Timer(1000);
 51 52privateconstint WM_DEVICE_CHANGE = 0x219;            //设备改变            53privateconstint DBT_DEVICEARRIVAL = 0x8000;          //设备插入 54privateconstint DBT_DEVICE_REMOVE_COMPLETE = 0x8004; //设备移除 55 56#endregion 57 58 59public Form1()
 60        {
 61            InitializeComponent();
 62            GetSerialLstTb1();
 63        }
 64 65privatevoid Form1_Load(object sender, EventArgs e)
 66        {
 67//界面初始化 68             cmb_portname.SelectedIndex = 0;
 69             cmb_baud.SelectedIndex = 5;
 70             cmb_parity.SelectedIndex = 2;
 71             cmb_databBits.SelectedIndex = 1;
 72             cmb_stopBits.SelectedIndex = 0;
 73 74        }
 75 76#region 定时器
 77//定时器初始化,失能状态 78privatevoid init_Timer()
 79        {
 80             t.Elapsed += new System.Timers.ElapsedEventHandler(Execute);
 81             t.AutoReset = true;//设置false定时器执行一次,设置true定时器一直执行 82             t.Enabled = false;//定时器使能true,失能false
 83//(); 84        }
 85 86privatevoid Execute(object source,System.Timers.ElapsedEventArgs e)
 87        {
 88//停止定时器后再打开定时器,避免重复打开 89            t.Stop();
 90//ExecuteFunction();可添加执行操作 91            ();
 92        }
 93#endregion 94 95#region 串口配置
 96///<summary> 97/// 串口参数获取
 98///</summary> 99///<returns></返回串口配置参数>100private SerialPort InitSerialPortParameter()
101        {
102if (cmb_portname.SelectedIndex < 0 || cmb_baud.SelectedIndex < 0 || cmb_parity.SelectedIndex < 0 || cmb_databBits.SelectedIndex < 0 || cmb_stopBits.SelectedIndex < 0)
103            {
104                 ("请选择串口参数");
105returnnull;
106    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值