using System; using System.Collections.Generic; using System.Linq; using SystemX.Net.Platform.Common.Util; using static SystemX.PLC.Interface.PLCCommDefinition; namespace SystemX.PLC.Interface { public class PLCAddressTemplate { public string Area { get; set; } = string.Empty; public string Address { get; set; } = string.Empty; public string Length { get; set; } = string.Empty; public string DataName { get; set; } = string.Empty; public string DataType { get; set; } = string.Empty; public string Operation { get; set; } = string.Empty; public string Desc { get; set; } = string.Empty; public string AddressKey { get { return Area + Address; } } List AssociatedAddress { get; set; } = null; List KeyAddressValues { get; set; } = null; public string Value { get { return RefineInvalidChars(MakeResultValue()); } } public List RawValue { get { return KeyAddressValues; } } public PLCAddressTemplate() { } public void UpdateValue(string strKey, int nValue) { int nFindKeyAddrIdx = AssociatedAddress.IndexOf(strKey); KeyAddressValues[nFindKeyAddrIdx] = nValue; } public void SetStringValue(string strValue) { List vnValues = new List(); int nLength = Convert.ToInt32(Length); eDataType eType = (eDataType)Enum.Parse(typeof(eDataType), DataType); if (eType == eDataType.ASCII) vnValues = (from value in CommonUtil.HexStringToBytes(strValue) select Convert.ToInt32(value)).ToList(); else if (eType == eDataType.DECIMAL) { int nInputValue = string.IsNullOrWhiteSpace(strValue) ? 0 : Convert.ToInt32(strValue); vnValues.Add(nInputValue); } for (int i = 0; i < vnValues.Count; i++) KeyAddressValues[i] = vnValues[i]; } public void SetAssociatedValue(int nValue) { KeyAddressValues[0] = nValue; } public void SetAssociatedValues(List nValues) { for (int i = 0; i < nValues.Count; i++) KeyAddressValues[i] = nValues[i]; } public void SetAssocationKeys() { AssociatedAddress = new List(); KeyAddressValues = new List(); int nLength = Convert.ToInt32(Length); int nStartAddress = Convert.ToInt32(Address); for (int i = 0; i < nLength; i++) { AssociatedAddress.Add(Area + (nStartAddress + i).ToString()); KeyAddressValues.Add(00); } } public string PLCAddress { get { return Area + Address; } } public bool IsMyAssociation(string strKey) { if (AssociatedAddress == null) SetAssocationKeys(); if (AssociatedAddress.Contains(strKey)) return true; return false; } string MakeResultValue() { eDataType eType = (eDataType)Enum.Parse(typeof(eDataType), DataType); string strData = string.Empty; if (eType == eDataType.ASCII) strData = CommonUtil.GetStringFromASCII(KeyAddressValues.ToArray()); else if (eType == eDataType.BIT) strData = KeyAddressValues[0].ToString(); else if (eType == eDataType.DECIMAL) strData = KeyAddressValues[0].ToString(); return strData; } public string RefineInvalidChars(string strSource) { string strReturn = strSource.Trim(InvalidChars); strReturn = new string((from cCode in strSource.ToCharArray() where (48 <= Convert.ToInt32(cCode) && Convert.ToInt32(cCode) <= 95) select cCode).ToArray()); return strReturn; } } public class PLCConnectionInfo { public string Name { get; set; } = string.Empty; public string CPUType { get; set; } = string.Empty; public string RWType { get; set; } = string.Empty; public string IP { get; set; } = string.Empty; public string Port { get; set; } = string.Empty; public string ConnectionType { get; set; } = string.Empty; public string Timeout { get; set; } = string.Empty; public PLCConnectionInfo() { } } }