//加载端口 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); }
//创建模拟量查询命令列表 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); }
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; }