Files
vms2016_kadisp/cVMS.NET_CS/Modbus/JdModbusRTU.cs
2024-11-27 18:34:16 +09:00

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;
}
}
}
}