diff --git a/SCADA/Program/BatchCoreService/DAService.cs b/SCADA/Program/BatchCoreService/DAService.cs index b977ac8..2dd503f 100644 --- a/SCADA/Program/BatchCoreService/DAService.cs +++ b/SCADA/Program/BatchCoreService/DAService.cs @@ -530,7 +530,7 @@ namespace BatchCoreService break; } cond.AddSubCondition(new SubCondition((SubAlarmType)dataReader.GetInt32(9), dataReader.GetFloat(10), - (Severity)dataReader.GetByte(11), dataReader.GetString(12), dataReader.GetBoolean(13)));//读取数据库表Meta_SubCondition里的值 + (Severity)dataReader.GetByte(11), dataReader.GetString(12), dataReader.GetBoolean(13))); cond.IsEnabled = dataReader.GetBoolean(3); var simpcond = cond as SimpleCondition; diff --git a/SCADA/Program/CoreTest/App.xaml.cs b/SCADA/Program/CoreTest/App.xaml.cs index 6a6f2f3..b4a7add 100644 --- a/SCADA/Program/CoreTest/App.xaml.cs +++ b/SCADA/Program/CoreTest/App.xaml.cs @@ -11,7 +11,7 @@ namespace CoreTest /// /// Interaction logic for App.xaml /// - public partial class App : System.Windows.Application//App类另一段代码是自动生成的,App类是程序的起点,可以搜索App看到。 + public partial class App : System.Windows.Application { const string MYCOSLOGSOURCE = "MyWEM Application"; const string MYCOSLOGNAME = "MyWEM"; @@ -20,9 +20,8 @@ namespace CoreTest static readonly string machine = Environment.MachineName; public static readonly DAServer Server = new DAServer(); - #region 定义当前用户的名称 static IPrincipal _princ; - public static IPrincipal Principal//定义用户对象的基本功能 + public static IPrincipal Principal { get { @@ -34,7 +33,7 @@ namespace CoreTest } } - public static string LogSource//获取当前用户的名称 + public static string LogSource { get { @@ -47,7 +46,7 @@ namespace CoreTest { get { return eventLog; } } - #endregion + static App() { var curr = Process.GetCurrentProcess(); @@ -87,7 +86,7 @@ namespace CoreTest Current.DispatcherUnhandledException += App_DispatcherUnhandledException; base.OnStartup(e); - #region + #region if (Screen.AllScreens.Length == 1)//Server.SD.ScreenCount { w1 = new MainWindow(); diff --git a/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs b/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs index 9845374..f09e4fe 100644 --- a/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs +++ b/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs @@ -89,93 +89,86 @@ namespace SiemensPLCDriver _server = server; _name = name; } - #region 西门子驱动所有的变量组列表,通过组来划分循环时间不同的变量。 + List _groups = new List(); public IEnumerable Groups { get { return _groups; } } - IDataServer _server;//通讯服务器IDataServer + IDataServer _server; public IDataServer Parent { get { return _server; } } - #endregion - - #region 添加和移除组 - public IGroup AddGroup(string name, short id, int updateRate, float deadBand, bool active)//添加变量组 + public IGroup AddGroup(string name, short id, int updateRate, float deadBand, bool active) { NetBytePLCGroup grp = new NetBytePLCGroup(id, name, updateRate, active, this); _groups.Add(grp); return grp; } - public bool RemoveGroup(IGroup grp)//移除变量组 + + public bool RemoveGroup(IGroup grp) { grp.IsActive = false; return _groups.Remove(grp); } - #endregion - #region 建立M,I,Q对应的地址区域的字典 private static readonly Dictionary dict = new Dictionary(){ {'M',libnodave.daveFlags}, - {'I',libnodave.daveInputs},{'Q',libnodave.daveOutputs}};// - #endregion - #region 根据数据库里的设备地址(DeviceAddress)获取下位机PLC绝对地址(string) - public string GetAddress(DeviceAddress address)//获取PLC地址 - {//如果PLC地址区域是Area,则字符串为“DB+DBNumer,D";如果是PLC区域是daveFlags,则字符串为M;如果是daveInputs,则字符串为I,否则为Q + {'I',libnodave.daveInputs},{'Q',libnodave.daveOutputs}}; + + public string GetAddress(DeviceAddress address) + { string addr = (address.Area == libnodave.daveDB ? string.Concat("DB", address.DBNumber, ",D") : address.Area == libnodave.daveFlags ? "M" : address.Area == libnodave.daveInputs ? "I" : "Q"); - switch (address.VarType)//根据变量类型Type来确定后面的字符。以DB1,D为例 + switch (address.VarType) { case DataType.BOOL: - return string.Concat(addr, address.Start, ".", address.Bit);//如果是布尔型,则如DB1,D2.1 + return string.Concat(addr, address.Start, ".", address.Bit); case DataType.BYTE: - return string.Concat(addr, "BB", address.Start);//如果是字节型,则如DB1,DBB1 + return string.Concat(addr, "BB", address.Start); case DataType.WORD: case DataType.SHORT: - return string.Concat(addr, "W", address.Start);//如果是短整型型,则如DB1,DW1 + return string.Concat(addr, "W", address.Start); case DataType.FLOAT: case DataType.INT: - return string.Concat(addr, "D", address.Start);//如果是浮点型或整型(32位),则如DB1,DD1 + return string.Concat(addr, "D", address.Start); default: - return string.Concat(addr, "BB", address.Start);//其他情况则如DB1,DBB1 + return string.Concat(addr, "BB", address.Start); } } - #endregion - #region 根据下位机PLC绝对地址(string)获取数据库里的设备地址(DeviceAddress) + public DeviceAddress GetDeviceAddress(string address) { DeviceAddress plcAddr = new DeviceAddress(); - if (string.IsNullOrEmpty(address) || address.Length < 2) return plcAddr;//如果地址为空或者字符长度小于2,则返回空的地址。 - #region 是DB存储器的处理 - if (address.Substring(0, 2) == "DB")//PLC绝对地址(string)前两位是DB时,DB1,D2.1 + if (string.IsNullOrEmpty(address) || address.Length < 2) return plcAddr; + if (address.Substring(0, 2) == "DB") { int index = 2; - for (int i = index; i < address.Length; i++)//从第三位开始,如果不是十进制数,则返回索引号。 + for (int i = index; i < address.Length; i++) { if (!char.IsDigit(address[i])) { - index = i; break;//index=3 + index = i; break; } } plcAddr.Area = libnodave.daveDB; - plcAddr.DBNumber = ushort.Parse(address.Substring(2, index - 2));//截取DB块的号,如DB1,D2.1,不是十进制的索引号是3,3-2=1,因此截取的长度为1 - string str = address.Substring(index + 1);//截取从索引4开始的字符串,包括索引4号位置D2.1 - if (!char.IsDigit(str[0]))//如果第一位不是数字的话, + plcAddr.DBNumber = ushort.Parse(address.Substring(2, index - 2)); + string str = address.Substring(index + 1); + if (!char.IsDigit(str[0])) { - for (int i = 1; i < str.Length; i++)//则从第二位查找是数字的索引号,这里是1 + for (int i = 1; i < str.Length; i++) { if (char.IsDigit(str[i])) { - index = i; break;//index=1 + index = i; break; } } - if (str[2] == 'W')// + if (str[2] == 'W') { - int index1 = str.IndexOf('.');//index1=2 + int index1 = str.IndexOf('.'); if (index1 > 0) { int start = int.Parse(str.Substring(3, index1 - 3)); @@ -196,35 +189,29 @@ namespace SiemensPLCDriver plcAddr.Bit = byte.Parse(str.RightFrom(index)); } } - #endregion - #region 不是DB存储区的处理 else { plcAddr.DBNumber = 0; char chr = address[0]; - #region 是M I Q 地址区时的处理 if (dict.ContainsKey(chr)) { plcAddr.Area = dict[chr]; - int index = address.IndexOf('.');//MW1时,index=0;M1.0时,index=2 - if (address[1] == 'W')//当是字地址时,如MW1 + int index = address.IndexOf('.'); + if (address[1] == 'W') { - #region 不可能执行的 - if (index > 0)//那index就不可能>0 + if (index > 0) { int start = int.Parse(address.Substring(2, index - 2)); byte bit = byte.Parse(address.RightFrom(index)); plcAddr.Start = bit > 8 ? start : start + 1; plcAddr.Bit = (byte)(bit > 7 ? bit - 8 : bit); - } - #endregion else { - plcAddr.Start = int.Parse(address.Substring(2));//只有Start位,没有Bit位 + plcAddr.Start = int.Parse(address.Substring(2)); } } - else//当不是字地址时,如M1.0 + else { if (index > 0) { @@ -233,17 +220,14 @@ namespace SiemensPLCDriver } else { - plcAddr.Start = int.Parse(address.Substring(1));//只有Start位,没有Bit位 + plcAddr.Start = int.Parse(address.Substring(1)); } } } - #endregion } - #endregion return plcAddr; } - #endregion - #region 通过集成于PLC上的以太网建立通讯连接 + public bool Connect() { lock (_async) @@ -273,7 +257,7 @@ namespace SiemensPLCDriver _closed = true; return false; } - #endregion + public void Dispose() { lock (_async) @@ -287,7 +271,7 @@ namespace SiemensPLCDriver _closed = true; } } - #region 报错处理 + string daveStrerror(int code) { switch (code) @@ -352,7 +336,7 @@ namespace SiemensPLCDriver default: return "no message defined!"; } } - #endregion + public byte[] ReadBytes(DeviceAddress address, ushort len)//从PLC中读取自己数组 { if (dc != null)