private void RequestToDB(IModbusMessage message) { WriteMultipleRegistersRequest typedResponse = (WriteMultipleRegistersRequest)message; ModbusMessageLog logitem = new ModbusMessageLog() { LogTime = DateTime.Now, LogMessage = message.ToString(), FunctionCode = message.FunctionCode.ToString(), MessageFrame = message.MessageFrame, ProtocolDataUnit = message.ProtocolDataUnit, SlaveAddress = message.SlaveAddress.ToString(), TransactionId = message.TransactionId.ToString() }; int iStartIndex = typedResponse.MinimumFrameSize; int iLen = message.MessageFrame.Length - iStartIndex; byte[] bdata = new byte[iLen]; Array.Copy(message.MessageFrame, iStartIndex, bdata, 0, iLen); string strFrame = System.Text.Encoding.UTF8.GetString(bdata).TrimEnd('\0'); string strUnit = Modbus.ConvertTools.BytesToHexString(message.ProtocolDataUnit); DataLogHelper.AddModbusMessageLog(logitem); //将数据传入后台处理 string strToText = logitem.ToJsonString(); SendToSocketServer(strToText); }
public void TestToDB() { ModbusMessageLog item = new ModbusMessageLog(); item.LogTime = DateTime.Now; item.LogMessage = "Test111"; item.FunctionCode = "12"; //item.MessageFrame = "MessageFrame"; //item.ProtocolDataUnit = "ProtocolDataUnit"; item.SlaveAddress = "SlaveAddress"; item.TransactionId = "TransactionId"; //将数据传入后台处理 string strToText = item.ToJsonString(); SendToSocketServer(strToText); }
/// <summary> /// 将数据保存起来并发送给后台服务 /// </summary> /// <param name="data"></param> private void RequestToDB(byte[] data) { //地址起点 #region 对寄存器数据进行按需提取 int iIndex = 0; SensorDataCollection sensorDatas = new SensorDataCollection(); foreach (PLCAddressSet addressSet in AddressSets) { byte[] btInfo = new byte[addressSet.ValueLength]; if (data.Length > iIndex) { try { //按指定的寄存器地址来提取数据 Array.Copy(data, iIndex, btInfo, 0, addressSet.ValueLength); //针对提取出来的数据,进行解码操作 string strBxString = ConvertTools.BytesToHexString(btInfo); decimal deValue = decimal.Zero; deValue = Convert.ToInt32(strBxString, 16); //如果是过程值数据需要对参数进行缩放 if (addressSet.ValueType == "NumberValue") { deValue *= addressSet.Scale; } SensorData sensorData = new SensorData() { FactoryId = addressSet.FactoryId, PLCId = addressSet.PLC_Id, PLCAddress = addressSet.PLC_Address, SensorId = addressSet.SensorId, ValueType = addressSet.ValueType, SensorValue = Convert.ToDecimal(strBxString), ReceiveTime = DateTime.Now }; sensorDatas.Add(sensorData); } catch { } //更新下一个寄存器起点 iIndex += addressSet.ValueLength; } } #endregion #region 读取总记录写入数据库 //string strMessage = Encoding.ASCII.GetString(data); string strMessage = string.Format("[{0}]读取设备数据完成", _typeStr); ModbusMessageLog logitem = new ModbusMessageLog() { LogTime = DateTime.Now, LogMessage = strMessage, FunctionCode = FunctionCode.Read.ToString(), MessageFrame = data, ProtocolDataUnit = data, SlaveAddress = _startaddress.ToString(), TransactionId = Wrapper.CurrentDataIndex.ToString() }; DataLogHelper.AddModbusMessageLog(logitem); #endregion //将数据传入后台处理 string strToText = sensorDatas.ToJsonString(); SendToSocketServer(strToText); }