logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C#] OPC SyncWrite - Zapis danych do PLC przez RsiOPCAuto.dll

djcezar 07 Maj 2011 19:17 1655 3
  • #1 9481721
    djcezar
    Poziom 14  
    Posty: 210
    Pomógł: 4
    Ocena: 3
    Witam wszystkich
    Mam mały problem odnośnie zapisu danych do zmiennych PLC, poprzez serwer OPC.
    Mam napisany mały program z biblioteką RsiOPCAuto.dll.
    Nie będę podawał całego kodu jedynie część.
    Dane próbuje zapisać poprzez funkcję

    public abstract new void SyncWrite ( System.Int32 NumItems , System.Array ServerHandles , System.Array Values , System.Array Errors )
    Member of RsiOPCAuto.IOPCGroup

    podaje kod:

    Kod: C#
    Zaloguj się, aby zobaczyć kod



    przy wywołaniu funkcji SyncWrite, wyrzuca wi błąd Exception

    "System.Runtime.InteropServices.SafeArrayTypeMismatchException: Specified array was not of the expected type.\r\n at RsiOPCAuto.OPCGroupClass.SyncWrite(Int32 NumItems, Array& ServerHandles, Array& Values, Array& Errors)\r\n at PLC.Write_To_PLC() in d:\\visual studio projects\\plc.cs:line 618"

    dodam, że odczyt danych mam poprawny oraz jak zapisuje poprzez funkcję Write, również zapisuje poprawnie.

    Proszę o jakieś sugestie.
    Pozdrawiam Dj_.

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq
  • #2 9575554
    truski
    Poziom 18  
    Posty: 166
    Pomógł: 34
    Ocena: 21
    Może się mylę, ale ze stacktrace'a wynika, że funkcja SyncWrite powinna przyjmować wskaźnik na tablicę Errors, a w twoim wywołaniu przekazujesz ją przez out, zatem czy nie powinieneś przekazywać tablicy SyncErrors również przez referencję którą musisz zainicjować jak pozostałe kolekcje w tym wywołaniu ?
  • #3 9577270
    djcezar
    Poziom 14  
    Posty: 210
    Pomógł: 4
    Ocena: 3
    Witam
    niestety nie, wyrzuca błąd:

    Argument '4': cannot convert from 'ref System.Array' to 'out System.Array'

    The best overloaded method match for 'RsiOPCAuto.IOPCGroup.SyncWrite(int, ref System.Array, ref System.Array, out System.Array)' has some invalid arguments


    Pozdrawiam[/code]
  • #4 9577522
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    SyncErrors zrobiłeś typu System.Array, a tak się raczej nie powinno robić, bo jest to klasa abstrakcyjna, po której dziedziczą wszystkie tabele w C#.
    Spróbuj zrobić tak
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Z tego co widzę tu http://forums.mrplc.com/index.php?showtopic=15021&st=30 zamiast SyncErrors to tablica longów, więc mógłbyś próbować int32[] / int64[].
REKLAMA