初始化上传
This commit is contained in:
141
常用工具集/Utility/Network/Modbus/SharpSerial/SerialSettings.cs
Normal file
141
常用工具集/Utility/Network/Modbus/SharpSerial/SerialSettings.cs
Normal file
@@ -0,0 +1,141 @@
|
||||
using System;
|
||||
using System.IO.Ports;
|
||||
using System.Globalization;
|
||||
using System.ComponentModel;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SharpSerial
|
||||
{
|
||||
public class SerialSettings
|
||||
{
|
||||
public SerialSettings() => CopyProperties(new SerialPort(), this);
|
||||
public SerialSettings(string portName) => CopyProperties(new SerialPort(portName), this);
|
||||
public SerialSettings(object source) => CopyProperties(source, this);
|
||||
|
||||
public void CopyFrom(object source) => CopyProperties(source, this);
|
||||
public void CopyTo(object target) => CopyProperties(this, target);
|
||||
|
||||
[TypeConverter(typeof(PortNameConverter))]
|
||||
public string PortName { get; set; }
|
||||
[TypeConverter(typeof(BaudRateConverter))]
|
||||
public int BaudRate { get; set; }
|
||||
public int DataBits { get; set; }
|
||||
public Parity Parity { get; set; }
|
||||
public StopBits StopBits { get; set; }
|
||||
public Handshake Handshake { get; set; }
|
||||
|
||||
public static void CopyProperties(Object source, Object target)
|
||||
{
|
||||
CopyProperty(source, target, "PortName");
|
||||
CopyProperty(source, target, "BaudRate");
|
||||
CopyProperty(source, target, "DataBits");
|
||||
CopyProperty(source, target, "Parity");
|
||||
CopyProperty(source, target, "StopBits");
|
||||
CopyProperty(source, target, "Handshake");
|
||||
}
|
||||
|
||||
static void CopyProperty(Object source, Object target, string name)
|
||||
{
|
||||
var propertySource = source.GetType().GetProperty(name);
|
||||
var propertyTarget = target.GetType().GetProperty(name);
|
||||
propertyTarget.SetValue(target, propertySource.GetValue(source, null), null);
|
||||
}
|
||||
}
|
||||
|
||||
public class PortNameConverter : TypeConverter
|
||||
{
|
||||
//windows only?
|
||||
private readonly Regex re = new Regex(@"[^a-zA-Z0-9_]");
|
||||
|
||||
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
||||
{
|
||||
return new StandardValuesCollection(SerialPort.GetPortNames());
|
||||
}
|
||||
|
||||
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
||||
{
|
||||
return (sourceType == typeof(string));
|
||||
}
|
||||
|
||||
public override object ConvertFrom(ITypeDescriptorContext context,
|
||||
CultureInfo culture, object value)
|
||||
{
|
||||
if (re.IsMatch(value.ToString())) throw Tools.Make("Invalid chars");
|
||||
return value;
|
||||
}
|
||||
|
||||
public override object ConvertTo(ITypeDescriptorContext context,
|
||||
CultureInfo culture, object value, Type destinationType)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public class BaudRateConverter : TypeConverter
|
||||
{
|
||||
public readonly static int[] BaudRates = new int[] {
|
||||
110,
|
||||
300,
|
||||
600,
|
||||
1200,
|
||||
2400,
|
||||
4800,
|
||||
9600,
|
||||
14400,
|
||||
19200,
|
||||
28800,
|
||||
38400,
|
||||
56000,
|
||||
57600,
|
||||
115200,
|
||||
128000,
|
||||
153600,
|
||||
230400,
|
||||
256000,
|
||||
460800,
|
||||
921600
|
||||
};
|
||||
|
||||
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
||||
{
|
||||
return new StandardValuesCollection(BaudRates);
|
||||
}
|
||||
|
||||
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
||||
{
|
||||
return (sourceType == typeof(string));
|
||||
}
|
||||
|
||||
public override object ConvertFrom(ITypeDescriptorContext context,
|
||||
CultureInfo culture, object value)
|
||||
{
|
||||
return int.Parse(value.ToString());
|
||||
}
|
||||
|
||||
public override object ConvertTo(ITypeDescriptorContext context,
|
||||
CultureInfo culture, object value, Type destinationType)
|
||||
{
|
||||
return value.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user