Esempio n. 1
0
        //加载端口
        private static WrapperBll PortSetting(Model_Data.DeviceModel obj)
        {
            WrapperBll PS = new WrapperBll();

            PS.Port = obj.Port;
            switch (obj.Port.PortType)
            {
            case Protocol.Modbus_SerialPort:
                PS.PortBll = AllPortBll.CreateInstance(Protocol.Modbus_SerialPort);
                PS.PortBll.SetParaMeter(CreatCommSerialEntity(obj));
                break;

            case Protocol.Modbus_TCPIPPort:
                PS.PortBll = AllPortBll.CreateInstance(Protocol.Modbus_TCPIPPort);
                PS.PortBll.SetParaMeter(CreatCommTCPEntity(obj));
                break;

            case Protocol.Modbus_USBPort:
                PS.PortBll = AllPortBll.CreateInstance(Protocol.Modbus_USBPort);
                break;

            default:
                return(null);
            }
            //Device
            DeviceBll deviceBLL = new DeviceBll();

            deviceBLL.Device.DeviceName                 = obj.DeviceName;
            deviceBLL.Device.UnitId                     = obj.UnitId;
            deviceBLL.Device.write2DBInterval           = obj.WriteDBTime;
            deviceBLL.Device.AnalogSignalValueTableName = obj.TableName;
            deviceBLL.Device.UIpath                     = obj.UIPath;
            //
            foreach (AnalogModel AnalogRow in obj.Analog)
            {
                AnalogBll analogSignalBLL = new AnalogBll();
                analogSignalBLL.AnalogInfo = AnalogRow;
                deviceBLL.AnalogList.Add(analogSignalBLL);
            }
            //
            foreach (DigitalModel DigitalRow in obj.Digital)
            {
                DigitalBll digitalSignalBLL = new DigitalBll();
                digitalSignalBLL.DigitalInfo = DigitalRow;
                deviceBLL.DigitalList.Add(digitalSignalBLL);
            }
            deviceBLL.SetSignalAlarmDelegate();
            if (deviceBLL != null)
            {
                PS.DeviceList.Add(deviceBLL);
            }
            PS.SetDeviceDelegate();
            return(PS);
        }
Esempio n. 2
0
        //创建模拟量查询命令列表
        private static List <CommandClass> CreatAnalogCommandList(Protocol PortType, byte UnitId, List <AnalogBll> AnalogList)
        {
            List <CommandClass> AnalogCommandList = new List <CommandClass>();
            CommandClass        OneAnalogCommand;

            if (AnalogList.Count < 1)
            {
                return(AnalogCommandList);
            }

            AnalogBll tempanalog = AnalogList[AnalogList.Count - 1];

            if (tempanalog.AnalogInfo.ISContinuous)
            {
                tempanalog.AnalogInfo.ISContinuous = false;
            }

            byte  CommandCode = 2;
            short StartAdr    = 0;
            short Datalength  = 0;
            short registerLen = 0;
            bool  IsStartAdr  = true;//前一数字量与当前数字量是否连续的标志

            foreach (AnalogBll Analog in AnalogList)
            {
                Datalength  += Analog.AnalogInfo.DataLen;
                registerLen += Convert.ToInt16((Analog.AnalogInfo.DataLen % 2 == 0) ? (Analog.AnalogInfo.DataLen / 2) : (Analog.AnalogInfo.DataLen / 2 + 1));
                if (IsStartAdr)
                {
                    CommandCode = Analog.AnalogInfo.RegisterType;
                    StartAdr    = Analog.AnalogInfo.DataStartAddress;
                }
                IsStartAdr = !Analog.AnalogInfo.ISContinuous;

                if (!Analog.AnalogInfo.ISContinuous)
                {
                    OneAnalogCommand         = new CommandClass();
                    Datalength              += 3;//加上的长度为地址、功能码、返回数据长度所占用的字节数
                    OneAnalogCommand.Command = CreatOneModbusReadCommand(PortType, UnitId, CommandCode, StartAdr, registerLen, ref Datalength);
                    OneAnalogCommand.RecLen  = Datalength;
                    AnalogCommandList.Add(OneAnalogCommand);
                    Datalength  = 0;
                    registerLen = 0;
                }
            }
            return(AnalogCommandList);
        }
Esempio n. 3
0
        private void TimeDrawLine()
        {
            if (chartControl1.Series.Count < 1)
            {
                return;
            }
            //构建 表格,用于绑定
            AnalogBll al = DeviceObj.GetDevice().AnalogList.Find(delegate(AnalogBll abll) { return(abll.AnalogInfo.SignalName == cbSignalName.Text ? true : false); });
            object   svalue = al.AnalogInfo.Value;
            DateTime dtime  = DateTime.Now;

            //如果图中最后一个点 的时间 是最新一个点的时间,则直接返回
            if (chartControl1.Series[0].Points.Count > 0)
            {
                if (PreTime != null)
                {
                    if (PreTime == dtime)
                    {
                        return;
                    }
                }
            }
            //否则,将最新点的时间 记录下来
            PreTime = dtime;

            DateTime argument = PreTime;

            DateTime minDate = argument.AddSeconds(-TimeInterval);
            //需要移除的点个数
            int pointsToRemoveCount = 0;

            //如果 某个点的时间小于坐标轴最小时间,则+1
            foreach (SeriesPoint point in chartControl1.Series[0].Points)
            {
                if (point.DateTimeArgument < minDate)
                {
                    pointsToRemoveCount++;
                }
            }
            //如果 ........?
            if (pointsToRemoveCount < chartControl1.Series[0].Points.Count)
            {
                pointsToRemoveCount--;
            }

            SeriesPoint pointsToUpdate = new SeriesPoint(argument, svalue);//Convert.ToDouble(String.Format("{0:F}", Dr[0]["信号值"]))

            //将最新点 添加到显示序列
            chartControl1.Series[0].Points.Add(pointsToUpdate);

            if (pointsToRemoveCount > 0)
            {
                chartControl1.Series[0].Points.RemoveRange(0, pointsToRemoveCount);
            }
            SwiftPlotDiagram diagram = chartControl1.Diagram as SwiftPlotDiagram;

            if (diagram != null && diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
            {
                diagram.AxisX.Range.SetMinMaxValues(minDate, argument);
            }

            diagram.EnableAxisYScrolling = true;
            diagram.EnableAxisYZooming   = true;
        }