public bool WriteItems(Tag tag, object value) { lock (this) { try { if (!IsConnected()) { return(false); } if (tag.TagType == "string") //在创建TagType时已经转为小写 { var pLcAddress = DbAddress[tag.Address]; var strValue = value.ToString(); var strlen = (byte)strValue.Length; var valueByte = new byte[strlen + 1]; var strbyte = Encoding.ASCII.GetBytes(strValue); if (strbyte.Length != strlen) { throw new InvalidOperationException("写入" + tag.Address + "出错,解析的字符串长度与GetBytes数组长度不一致!"); } if (strlen > pLcAddress.BitOffset) { throw new InvalidOperationException("写入" + tag.Address + "出错,输入的字符串的长度过长!"); } valueByte[0] = strlen; strbyte.CopyTo(valueByte, 1); _plc.Write(DataType.DataBlock, pLcAddress.DBBlockID, pLcAddress.Offset + 1, valueByte); /*if (result != ErrorCode.NoError) * throw new InvalidOperationException(result + "\n" + "Tag: " + tag.Address);*/ return(true); } //2020/6/11 ByteArray if (tag.TagType == "bytearray") //在创建TagType时已经转为小写 { var pLcAddress = DbAddress[tag.Address]; var strValue = value.ToString(); var strlen = strValue.Length; var valueByte = new byte[strlen]; var strbyte = Encoding.ASCII.GetBytes(strValue); if (strbyte.Length != strlen) { throw new InvalidOperationException("写入" + tag.Address + "出错,解析的字符串长度与GetBytes数组长度不一致!"); } if (strlen != pLcAddress.BitOffset) { throw new InvalidOperationException("写入" + tag.Address + "出错,输入的字符串长度与定义长度不匹配!"); } strbyte.CopyTo(valueByte, 0); _plc.WriteBytes(DataType.DataBlock, pLcAddress.DBBlockID, pLcAddress.Offset, valueByte); /*if (result != ErrorCode.NoError) * throw new InvalidOperationException(result + "\n" + "Tag: " + tag.Address);*/ return(true); } else { switch (value) { case double d: { var bytes = Double.ToByteArray(d); value = DWord.FromByteArray(bytes); break; } case bool b: value = b ? 1 : 0; break; } _plc.Write(tag.Address, value); /*if (result != ErrorCode.NoError) * throw new InvalidOperationException(result + "\n" + "Tag: " + tag.Address);*/ return(true); } } catch (Exception ex) { //LOG.Error(string.Format("S7 Driver写入地址{0},值{1},出错{2}", tag.Address, value,ex)); Log.Error($"S7 Driver writes address:{tag.Address}, value:{value}, Message:{ex}"); return(false); } } }