Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
        }