using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BPASmart.Model { public class AddressConvert { private volatile static AddressConvert _Instance; public static AddressConvert GetInstance => _Instance ?? (_Instance = new AddressConvert()); private AddressConvert() { } public PlcConvertModel PlcConverter(ICommunicationDevice device, string Address) { PlcConvertModel plcConvertModel = new PlcConvertModel(); if (device != null && Address != null && Address.Length > 0) { switch (device) { case Invoance _tempInvoance: if (Address.ToUpper().Contains("D") && Address.Length >= 3) { var res = Address.Substring(2); if (res != null && int.TryParse(res, out int LwAddress)) { plcConvertModel.Address = LwAddress.ToString(); plcConvertModel.DataType = EDataType.Word.ToString(); } } break; case kinco _tempKinco: if (Address.ToUpper().Contains("M") && Address.Length >= 4) { var res = Address.Substring(1).Split('.'); if (res != null && res.Length == 2) { if (int.TryParse(res[0], out int firstAddress) && int.TryParse(res[1], out int ExitAddress)) { if (ExitAddress >= 0 && ExitAddress <= 7) { plcConvertModel.Address = ((firstAddress * 8) + 320 + ExitAddress).ToString(); plcConvertModel.DataType = EDataType.Bool.ToString(); } } } } else if ((Address.ToUpper().Contains("VW") || Address.ToUpper().Contains("VD")) && Address.Length >= 3) { var res = Address.Substring(2); if (res != null && int.TryParse(res, out int tempAddress)) { plcConvertModel.Address = ((tempAddress / 2) + 100).ToString(); plcConvertModel.DataType = Address.ToUpper().Contains("VW") ? EDataType.Word.ToString() : EDataType.Dword.ToString(); } } break; case KincoOneMachine _tempKincoOneMachine: if (Address.ToUpper().Contains("LW") && Address.Length >= 2) { var res = Address.Substring(1); if (res != null && int.TryParse(res, out int LwAddress)) { plcConvertModel.Address = LwAddress.ToString(); plcConvertModel.DataType = EDataType.Word.ToString(); } } break; default: break; } } return plcConvertModel; } } }