Я могу получать данные только с 8 до 9. Но я знаю, что в моем HDA больше данных. Что-то не так с моей функцией чтения данных ReadRaw? - PullRequest
2 голосов
/ 24 января 2020

Я могу вытащить данные.

ItemValueCollection[] values = group.ReadRaw();// ReadProcessed();

В строке выше я не могу прочитать данные.

Если кто-нибудь знает, пожалуйста, помогите мне в этом.

Opc.Hda.Trend group = new Opc.Hda.Trend(_hdaServer);

В строке выше мы получают данные с сервера.

Вот мой код

public DataTable ReadRaw( DateTime startTime, DateTime endTime, int maxValues, bool includeBounds ) {
    Opc.Hda.Time hdaStartTime = new Time( startTime );
    Opc.Hda.Time hdaEndTime = new Time( endTime );
    DataTable dataTable = new DataTable( "Data" );
    DataColumn timestamp = new DataColumn( "TimeStamp" );
    DataColumn value = new DataColumn( "Value" );
    DataColumn quality = new DataColumn( "Quality" );
    dataTable.Columns.Add( timestamp );
    dataTable.Columns.Add( value );
    dataTable.Columns.Add( quality );
    ItemIdentifierCollection itemIdentifierCollection = null;
    ItemIdentifier[] items = null;
    int index = 0;
    if ( _hdaServer.Items.Count != 0 ) {
        itemIdentifierCollection = _hdaServer.Items;
        items = new ItemIdentifier[itemIdentifierCollection.Count];
    }

    Opc.Hda.Trend group = new Opc.Hda.Trend( _hdaServer );

    foreach( ItemIdentifier itemIdentifier in itemIdentifierCollection ) {
        items[index] = itemIdentifier;
        Opc.IdentifiedResult[] results = group.Server.ValidateItems( new Opc.ItemIdentifier[]{ itemIdentifier
} );
        group.AddItem( itemIdentifier );

        index++;
    }

    try {
        group.Name = group.Server.Url.HostName + Guid.NewGuid().ToString();
        group.EndTime = new Opc.Hda.Time( endTime );

        group.StartTime = new Opc.Hda.Time( startTime );
        TimeSpan span = endTime.Subtract( startTime );
        int Calcinterval = ( (int)span.TotalSeconds ) / 100;
        group.ResampleInterval = (decimal)Calcinterval;
        group.AggregateID = Opc.Hda.AggregateID.INTERPOLATIVE;
        group.MaxValues = 62;
       // ItemValueCollection[] values = group.ReadRaw();// ReadProcessed();
        ItemValueCollection[] values = _hdaServer.ReadRaw( hdaStartTime, hdaEndTime, maxValues, includeBounds, items );
        foreach( ItemValueCollection itemValueCollection in values ) {
            foreach( ItemValue itemValue in itemValueCollection ) {
                DataRow dataRow = dataTable.NewRow();
                dataRow["Timestamp"] = itemValue.Timestamp;
                dataRow["Value"] = itemValue.Value;
                dataRow["Quality"] = itemValue.Quality;
                dataTable.Rows.Add( dataRow );
            }
        }
    } catch ( Exception e ) {
        throw;
    }
    return dataTable;
}

Ниже приведен метод Add Item Method для добавления имен элементов

public void AddItem( string itemName ) {

    if ( _hdaServer != null ) {

        ItemIdentifier itemIdentifier = new ItemIdentifier( itemName );
        ItemIdentifier[] items = { itemIdentifier };
        IdentifiedResult[] addItemResults = _hdaServer.CreateItems( items );
        IdentifiedResult[] validateItemResults = _hdaServer.ValidateItems( items );


    }

}

Ниже одного идентификатора Connect Метод:

public int connect() {
    try {

        if ( _hdaServer != null )
            _hdaServer.Connect();
        return 2;
    } catch ( Exception e ) {
        return 3;
        throw;
    }
}
...