/// <summary> /// 读取多个单元 /// 例如“D10,2”、“M100,20”、“X201,8”等格式 /// </summary> private static ResponseMessage readMulti(this IMitsubishiPlc plc, string cmdText) { ResponseMessage resp = new ResponseMessage(); StringBuilder result = new StringBuilder(); string[] s = cmdText.Split(new string[] { ",", ".." }, StringSplitOptions.None); bool hasDots = cmdText.Contains(".."); if (s.Length == 2) { PlcDeviceType type; int addr; McProtocolApp.GetDeviceCode(s[0], out type, out addr); var n = int.Parse(s[1]); var val = new byte[hasDots ? n - addr + 1 : n]; var ival = new int[Math.Max(16, val.Length)]; int rtCode = McProtocolApp.IsBitDevice(type) ? plc.GetBitDevice(s[0], val.Length, val) : plc.ReadDeviceBlock(s[0], val.Length, ival); if (0 < rtCode) { result.AppendLine("ERROR:0x" + rtCode.ToString("X4")); } else { for (int i = 0; i < val.Length; ++i) { result.AppendLine(type.ToString() + (addr + i).ToString() + "=" + val[i].ToString()); } } } return(resp); }
/// <summary> /// 读取单个单元 /// 例如“D10”、“M100”、“X201”等格式 /// </summary> private static ResponseMessage readSingle(this IMitsubishiPlc plc, string cmdText) { ResponseMessage resp = new ResponseMessage(); StringBuilder result = new StringBuilder(); PlcDeviceType type; int addr; McProtocolApp.GetDeviceCode(cmdText.ToUpper(), out type, out addr); int n; int rtCode; if (McProtocolApp.IsBitDevice(type)) { var data = new byte[1]; rtCode = plc.GetBitDevice(cmdText, data.Length, data); n = data[0]; } else { rtCode = plc.GetDevice(cmdText.ToUpper(), out n); } result.AppendLine(cmdText.ToUpper() + "=" + n.ToString()); if (0 < rtCode) { result.AppendLine("ERROR:0x" + rtCode.ToString("X4")); } return(resp); }
/// <summary> /// 为单一单元赋值 /// "D10=0" /// "M301=1" /// </summary> private static ResponseMessage writeSingle(this IMitsubishiPlc plc, string cmdText) { ResponseMessage resp = new ResponseMessage(); StringBuilder result = new StringBuilder(); string[] s = cmdText.Split('='); PlcDeviceType type; int addr; McProtocolApp.GetDeviceCode(s[0], out type, out addr); int val = int.Parse(s[1]); int rtCode; if (McProtocolApp.IsBitDevice(type)) { var data = new byte[1]; data[0] = (byte)val; rtCode = plc.SetBitDevice(s[0], data.Length, data); } else { rtCode = plc.SetDevice(s[0], val); } result.AppendLine(cmdText.ToUpper()); if (0 < rtCode) { result.AppendLine("ERROR:0x" + rtCode.ToString("X4")); } return(resp); }
private static ResponseMessage writeMulti(this IMitsubishiPlc plc, string cmdText) { ResponseMessage resp = new ResponseMessage(); StringBuilder result = new StringBuilder(); bool hasDots = cmdText.Contains(".."); string[] s = cmdText.Split(new string[] { ",", "..", "=" }, StringSplitOptions.None); int m; int n = int.Parse(s[1]); PlcDeviceType type; McProtocolApp.GetDeviceCode(s[0], out type, out m); byte[] data; if (hasDots) { data = new byte[n - m + 1]; } else { data = new byte[n]; } var v = byte.Parse(s[2]); for (int i = 0; i < data.Length; ++i) { data[i] = v; } var iData = new int[16]; int rtCode = McProtocolApp.IsBitDevice(type) ? plc.SetBitDevice(s[0], 1, data) : plc.WriteDeviceBlock(s[0], data.Length, iData); result.AppendLine(cmdText.ToUpper()); if (0 < rtCode) { result.AppendLine("ERROR:0x" + rtCode.ToString("X4")); } return(resp); }