Exemplo n.º 1
0
        ///	处理状态数据包
        public static void ProcessWorkGraphStatusPackage(byte[] data)
        {
            try
            {
                var iotDataWorkGraphStatus = new IotDataWorkGraphStatus
                {
                    DateTime       = DateTime.Now,
                    WellId         = 0,
                    ModbusAddress  = (byte)BytesConvertHelper.ConvertByteArrayToInt8(data, 0),
                    BatteryVoltage = BytesConvertHelper.ConvertByteArrayToInt16(data, 11) / 1000.0,
                    WellStatus     = BytesConvertHelper.ConvertByteArrayToInt16(data, 13),
                    Temperature    = BytesConvertHelper.ConvertByteArrayToInt16(data, 15) / 100.0,
                    Humidity       = BytesConvertHelper.ConvertByteArrayToInt16(data, 17) / 100.0,
                    Stroke         = BytesConvertHelper.ConvertByteArrayToInt16(data, 19) / 100.0,
                    Displacement   = BytesConvertHelper.ConvertByteArrayToInt16(data, 21) / 100.0
                };
                var connectionFactory = HostContext.TryResolve <IDbConnectionFactory>();
                var dbFac             = connectionFactory.OpenDbConnection();
                var list = dbFac.Select <IotOilWell>(x => x.ModbusAddress == data[0]);

                if (!list.IsEmpty())
                {
                    iotDataWorkGraphStatus.WellId = list[0].WellId;
                    DataWriter.WorkGraphStatusQueue.Enqueue(iotDataWorkGraphStatus);
                }
                Logger.Info(iotDataWorkGraphStatus.Dump());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemplo n.º 2
0
        //public static void PaddingPacket(ref byte[] buffer)
        //{
        //    var bufferList = buffer.ToList();
        //    var tempList = new List<byte>();

        //    foreach (var item in bufferList)
        //    {
        //        tempList.Add(item);
        //        if (item == Pack_SYN_A)
        //        {
        //            tempList.Add((byte)Pack_Padding);
        //        }
        //    }
        //    buffer = tempList.ToArray();
        //}

        /*
         *      功能: 添加一个8位数据到缓冲区
         *      参数:
         *      返回值:
         */
        public static UInt32 AppendUInt8Data(ref byte[] buffer, UInt32 bufferLength, byte u8Data)
        {
            var ktls = buffer.ToList();

            ktls.AddRange(BytesConvertHelper.ConvertUInt8ToByteArray(u8Data));
            buffer = ktls.ToArray();

            return(1);
        }
Exemplo n.º 3
0
        public static UInt32 AppendInt16Data(ref byte[] buffer, UInt32 bufferLength, Int16 s16Data)
        {
            var ktls = buffer.ToList();

            ktls.AddRange(BytesConvertHelper.ConvertInt16ToByteArray(s16Data));
            buffer = ktls.ToArray();

            return(2);
        }
Exemplo n.º 4
0
        public static byte[] PacketTestWorkGraphDataPackage(byte slaveId)
        {
            const byte periodPointCount = 135;

            var buffer = new byte[0];

            // Zigbee短地址,即Modbus设备地址
            AppendByte(ref buffer, slaveId);
            //功能码
            AppendByte(ref buffer, MB_FUNC_SLAVE_WORKGRAPH_DATA);
            //RTU设备编号
            AppendBytes(ref buffer, BytesConvertHelper.ConvertInt32ToByteArray(0x13FFFF00 + slaveId));
            //长度,先占位,后面填充
            AppendBytes(ref buffer, BytesConvertHelper.ConvertInt16ToByteArray(11 + 135 * 4));
            //采样点数 PointCount
            AppendByte(ref buffer, periodPointCount);
            //采样间隔 SampleInterval*100
            AppendBytes(ref buffer, BytesConvertHelper.ConvertInt16ToByteArray((short)(1562)));

            ////以下为数据部分
            //////////////////////////////////////////////////////////////////
            //以数据填充开始
            //////////////////////////////////////////////////////////////////

            for (var i = 0; i < periodPointCount; i++)
            {
                AppendBytes(ref buffer, BytesConvertHelper.ConvertInt16ToByteArray(ForceBuffer[i]));
            }
            for (var i = 0; i < periodPointCount; i++)
            {
                AppendBytes(ref buffer, BytesConvertHelper.ConvertInt16ToByteArray(ForceBuffer[i]));
            }

            //////////////////////////////////////////////////////////////////
            //数据填充结束
            //////////////////////////////////////////////////////////////////

            ////数据部分结束

            ////以下为包尾固定部分
            //计算并保存CRC
            AppendBytes(ref buffer, buffer.CRC16());

            //包头标志
            InsertByte(ref buffer, 0, Pack_SYN_C);
            InsertByte(ref buffer, 0, Pack_SYN_B);
            InsertByte(ref buffer, 0, Pack_SYN_A);

            //包尾标志
            AppendByte(ref buffer, Pack_STOP_A);
            AppendByte(ref buffer, Pack_STOP_B);
            AppendByte(ref buffer, Pack_STOP_C);

            return(buffer);
        }
Exemplo n.º 5
0
        //处理功图包
        public static void ProcessWorkGraphPackage(byte[] data)
        {
            try
            {
                var iotDataOilWellIndicatorDiagram = new IotDataOilWellIndicatorDiagram
                {
                    DateTime = DateTime.Now,
                    Count    = (int?)BytesConvertHelper.ConvertByteArrayToInt8(data, 8),
                    Interval = BytesConvertHelper.ConvertByteArrayToInt16(data, 9) / 100.0,
                    D        = new List <double>(),
                    L        = new List <double>()
                };

                var count = (int)iotDataOilWellIndicatorDiagram.Count;

                var deviceId = (byte)1;
                var offset   = (ushort)((deviceId - 1) * 550);
                MyModbusServer.Server.SetHoldingRegister(deviceId, (ushort)(31550 + offset + 3), (ushort)count);
                MyModbusServer.Server.SetHoldingRegister(deviceId, (ushort)(31550 + offset + 4), (ushort)(iotDataOilWellIndicatorDiagram.Interval * 100));

                for (var i = 0; i < count; i++)
                {
                    iotDataOilWellIndicatorDiagram.L.Add(BytesConvertHelper.ConvertByteArrayToInt16(data, 11 + 2 * i));
                    MyModbusServer.Server.SetHoldingRegister(deviceId, (ushort)(31550 + offset + i), (ushort)(iotDataOilWellIndicatorDiagram.Interval * 100));
                }

                for (var i = 0; i < count; i++)
                {
                    iotDataOilWellIndicatorDiagram.D.Add(BytesConvertHelper.ConvertByteArrayToInt16(data, 11 + 2 * count + 2 * i));
                    MyModbusServer.Server.SetHoldingRegister(deviceId, (ushort)(31550 + offset + 262 + i), (ushort)(iotDataOilWellIndicatorDiagram.Interval * 100));
                }

                var connectionFactory = HostContext.TryResolve <IDbConnectionFactory>();
                var dbFac             = connectionFactory.OpenDbConnection();
                var list = dbFac.Select <IotOilWell>(x => x.ModbusAddress == data[0]);

                if (!list.IsEmpty())
                {
                    iotDataOilWellIndicatorDiagram.WellId = list[0].WellId;
                    DataWriter.WorkGraphDataQueue.Enqueue(iotDataOilWellIndicatorDiagram);
                }

                Logger.Info(iotDataOilWellIndicatorDiagram.Dump());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemplo n.º 6
0
        ///	生成时间同步包
        public static byte[] PacketTimeSyncPackage(byte slaveId, ushort refStrokeFrequency, ushort refStrokeLength)
        {
            var buffer = new byte[0];

            // Zigbee短地址,即Modbus设备地址
            AppendByte(ref buffer, slaveId);
            //功能码
            AppendByte(ref buffer, MB_FUNC_MASTER_TIMESYNC);

            var dt = DateTime.Now;

            AppendBytes(ref buffer, BytesConvertHelper.ConvertUInt16ToByteArray((ushort)dt.Year));
            AppendByte(ref buffer, (byte)dt.Month);
            AppendByte(ref buffer, (byte)dt.Day);
            AppendByte(ref buffer, (byte)dt.Hour);
            AppendByte(ref buffer, (byte)dt.Minute);
            AppendByte(ref buffer, (byte)dt.Second);

            //是否下发了新的冲次和冲程
            AppendByte(ref buffer, 1);
            //参考冲次
            AppendBytes(ref buffer, BytesConvertHelper.ConvertUInt16ToByteArray(refStrokeFrequency));
            //参考冲程
            AppendBytes(ref buffer, BytesConvertHelper.ConvertUInt16ToByteArray(refStrokeLength));

            //计算并保存CRC
            AppendBytes(ref buffer, BitConverter.IsLittleEndian ? buffer.CRC16() : buffer.CRC16().Reverse().ToArray());

            //包头标志
            InsertByte(ref buffer, 0, Pack_SYN_C);
            InsertByte(ref buffer, 0, Pack_SYN_B);
            InsertByte(ref buffer, 0, Pack_SYN_A);

            //包尾标志
            AppendByte(ref buffer, Pack_STOP_A);
            AppendByte(ref buffer, Pack_STOP_B);
            AppendByte(ref buffer, Pack_STOP_C);

            return(buffer);
        }