timer s callback

0

Witam,

Sczytuje wartości rejestrów z urządzenia poprzez ModbusTCP (EasyModbus library) poprzez metode gvgvgv.

Wartości się sczytują tylko wtedy kiedy wywołam metodę.

Chciałbym zapętlić / zrobić timer's callback(mało umiem) by te wartości były sprawdzane cały czas.

Nie wiem jak to zrobić, nie mogę zrobić pętli w klasie. Ma ktoś propozycje, mógłby ktoś pomóc?

class bbbbb
{

     // deklaracja_obiektu
     public static ModbusClient modbusClient = new ModbusClient();

     // metoda
     void gvgvgv
     {
            int[] registers = modbusClient.ReadHoldingRegisters(2500, 5);
     }


}
0

https://www.google.com/search?client=firefox-b-d&q=call+method+every+x+seconds+c%23

https://stackoverflow.com/questions/13019433/calling-a-method-every-x-minutes/21590665

var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(5);

var timer = new System.Threading.Timer((e) =>
{
    MyMethod();   
}, null, startTimeSpan, periodTimeSpan);

Czy o to Ci chodzilo?

0

w odpowiedzi opisuje więcej jako nowy post.

Uzywam WPF, mam .xaml i .cs, w .cs klase partial

// teraz tak, mam sterownik motion z którym komunikuje się poprzez modbus tcp / kabel ethernet / easymodbus library
// mam listę zmiennych globalnych w tym sterowniku, i załóżmy zmieniam zmienną nr 2500 i muszę odczytać teraz tą zmienną poprzez aplikacje na komputerze,
// aplikacja** musi nasłuchiwać czy ta zmienna się zmieniła** (pooling (?) / timers callback), ponieważ modbus nie oferuję takich możliwości < zmiana tej zmiennej ma wykonywać metodę (załóżmy ta metoda ma nazwę MetodaWykonywanaPoprzezZmienna )

using easymodbus;

 public partial class bbbbb
 {

  public static ModbusClient modbusClient = new ModbusClient();

// kod który wczytuję zmienne globalne ze sterownika wygląda tak:
// int[] registers = modbusClient.ReadHoldingRegisters(2500, 5);  << tego może użyć tylko w danej metodzie, nie mogę bezpośrednio w klasie, muszę wywołać metodę daną by sczytać te rejestry

// dalej logika będzie wyglądała tak:
// ≈ if registers[1] == 1 then wykonaj raz MetodaWykonywanaPoprzezZmienna () then after registers[1] = 0

  void MetodaWykonywanaPoprzezZmienna ()
  {
    // sth się tu robi
  }

}

edit..

aha to ma wyglądać tak? jakieś rozkojarzenie dzisiaj mam..

        void rejestry()
        {

            int[] registers_MC6N = modbusClient.ReadHoldingRegisters(2500, 5);

            var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromMinutes(5);

            var timer = new System.Threading.Timer((e) =>
            {
                rejestry();
            }, null, startTimeSpan, periodTimeSpan);
        }

1
        void rejestry()
        {
            //int[] registers_MC6N = modbusClient.ReadHoldingRegisters(2500, 5);
            var timer = new System.Threading.Timer((e) => rejestry(), null, (int)TimeSpan.FromMinutes(5).TotalMilliseconds, Timeout.Infinite);
        }
0

title

1 użytkowników online, w tym zalogowanych: 0, gości: 1