From 18f9d0cec5041cc9c6143014e4d25ce739fb8b3e Mon Sep 17 00:00:00 2001 From: Gavin Date: Fri, 29 Dec 2017 11:02:59 +0800 Subject: [PATCH] update plcgroup --- SCADA/Program/DataService/PLCGroup.cs | 1 + SCADA/Program/ModbusDriver/ModbusRTUDriver.cs | 25 +++++++++++------- SCADA/dll/ModbusDriver.dll | Bin 23040 -> 23040 bytes 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/SCADA/Program/DataService/PLCGroup.cs b/SCADA/Program/DataService/PLCGroup.cs index f0a0e61..cfab38b 100644 --- a/SCADA/Program/DataService/PLCGroup.cs +++ b/SCADA/Program/DataService/PLCGroup.cs @@ -978,6 +978,7 @@ namespace DataService } else { + if (addr.ByteOrder.HasFlag(ByteOrder.BigEndian)) prcv[iShort1] = IPAddress.HostToNetworkOrder(prcv[iShort1]); if (addr.DataSize <= 2) { if (prcv[iShort1] != cache[iShort]) _changedList.Add(index); diff --git a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs index 88a6853..65d6eda 100644 --- a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs @@ -33,7 +33,8 @@ namespace ModbusDriver } string _port = "COM1"; - public string ServerName + [Category("串口设置"), Description("串口号")] + public string PortName { get { return _port; } set { _port = value; } @@ -48,6 +49,7 @@ namespace ModbusDriver } private int _timeOut = 3000; + [Category("串口设置"), Description("通迅超时时间")] public int TimeOut { get { return _timeOut; } @@ -56,7 +58,7 @@ namespace ModbusDriver private int _baudRate = 9600; - [Description("波特率")] + [Category("串口设置"), Description("波特率")] public int BaudRate { get { return _baudRate; } @@ -65,14 +67,14 @@ namespace ModbusDriver // private SerialPort _serialPort; private int _dataBits = 8; - [Description("数据位")] + [Category("串口设置"), Description("数据位")] public int DataBits { get { return _dataBits; } set { _dataBits = value; } } private StopBits _stopBits = StopBits.One; - [Description("停止位")] + [Category("串口设置"), Description("停止位")] public StopBits StopBits { get { return _stopBits; } @@ -80,8 +82,8 @@ namespace ModbusDriver } private Parity _parity = Parity.None; - [Description("奇偶校验")] - public Parity parity + [Category("串口设置"), Description("奇偶校验")] + public Parity Parity { get { return _parity; } set { _parity = value; } @@ -270,6 +272,12 @@ namespace ModbusDriver 所以PDU应为: 253字节 */ get { return 0xFD; } //0xFD 十进制为253 } + private string _serverName = "unknown"; + public string ServerName + { + get { return _serverName; } + set { _serverName = value; } + } public DeviceAddress GetDeviceAddress(string address) { @@ -321,7 +329,7 @@ namespace ModbusDriver dv.Start = int.Parse(address.Substring(1)); dv.Start--; dv.Bit--; - dv.ByteOrder = ByteOrder.Network; + dv.ByteOrder = ByteOrder.BigEndian; } break; case '3': @@ -337,7 +345,7 @@ namespace ModbusDriver dv.Start = int.Parse(address.Substring(1)); dv.Start--; dv.Bit--; - dv.ByteOrder = ByteOrder.Network; + dv.ByteOrder = ByteOrder.BigEndian; } break; } @@ -544,7 +552,6 @@ namespace ModbusDriver #endregion } - public sealed class Modbus { public const byte fctReadCoil = 1; diff --git a/SCADA/dll/ModbusDriver.dll b/SCADA/dll/ModbusDriver.dll index 64bc277426c823bd37649e5e1330923d3ac8e209..d5eeeb50680a9fa460ff90b73dc9e4bc6c9e09bc 100644 GIT binary patch literal 23040 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