92 lines
2.4 KiB
C#
92 lines
2.4 KiB
C#
using Modbus;
|
|
using Modbus.Device;
|
|
using System.IO.Ports;
|
|
using System.Net.Sockets;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
using vmsnet.Configures;
|
|
using AR;
|
|
using System.Windows.Media.Animation;
|
|
using System.Security.Cryptography;
|
|
|
|
namespace vmsnet
|
|
{
|
|
public class JdModbusRTU : IDisposable
|
|
{
|
|
protected ModbusSerialMaster master;
|
|
|
|
public string PortName { get; private set; }
|
|
public string ErrorMessage { get; protected set; }
|
|
public RtuConfigure Configure;
|
|
|
|
protected SerialPort port;
|
|
|
|
|
|
public bool IsOpen
|
|
{
|
|
get
|
|
{
|
|
return port?.IsOpen ?? false;
|
|
}
|
|
}
|
|
public JdModbusRTU(string comPort, RtuConfigure configure)
|
|
{
|
|
this.PortName = comPort;
|
|
this.Configure = configure;
|
|
ErrorMessage = "";
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
if (port != null)
|
|
port.Dispose();
|
|
|
|
});
|
|
}
|
|
public void Close()
|
|
{
|
|
if (port != null) port.Close();
|
|
}
|
|
|
|
public bool Open(string pname = "")
|
|
{
|
|
if (pname.isEmpty() == false) this.PortName = pname;
|
|
if (string.IsNullOrEmpty(this.PortName))
|
|
{
|
|
ErrorMessage = "포트명이 입력되지 않았습니다";
|
|
return false;
|
|
}
|
|
|
|
if (port != null && port.IsOpen) port.Close();
|
|
//if (port == null) port = new SerialPort(this.PortName);
|
|
port = new SerialPort(this.PortName);
|
|
port.BaudRate = Configure.BaudRate;
|
|
port.Parity = Configure.Parity;
|
|
port.DataBits = Configure.DataBits;
|
|
port.StopBits = Configure.StopBits;
|
|
port.ReadTimeout = 1000;
|
|
port.WriteTimeout = 1000;
|
|
|
|
try
|
|
{
|
|
port.Open();
|
|
if (port.IsOpen == false) ErrorMessage = "포트가 열리지 않았습니다";
|
|
else ErrorMessage = string.Empty;
|
|
|
|
if (port.IsOpen)
|
|
master = ModbusSerialMaster.CreateRtu(port);
|
|
|
|
return port.IsOpen;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrorMessage = ex.Message;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|