timer s callback

Odpowiedz Nowy wątek
2019-09-10 10:18
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);
     }

}

Pozostało 580 znaków

2019-09-10 10:26
0

https://www.google.com/search[...]l+method+every+x+seconds+c%23

https://stackoverflow.com/que[...]thod-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?

edytowany 1x, ostatnio: fasadin, 2019-09-10 10:26
the contextual keyword 'var' may appear within a local variable declaration or in script code - Michał Parzych 2019-09-10 10:38
na pewno uzywasz C#? jaka to wersja? mozesz opisac wiecej? Ale jako nowy psot - fasadin 2019-09-10 10:40

Pozostało 580 znaków

2019-09-10 10:59
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);
        }
edytowany 2x, ostatnio: Michał Parzych, 2019-09-10 12:14
prawie ma tak wygladac. Ten Timer wrzuc do osobnej funkcji bo teraz rejestry bedzie odpalal nowy timer i ten nowy timer bedzie Ci odpalal nowy timer - fasadin 2019-09-10 14:45

Pozostało 580 znaków

2019-09-10 19:27
        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);
        }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon, 2019-09-12 01:39
Pokaż pozostałe 3 komentarze
Czyli nie do końca nie przemyślałeś wszystkie skutki - _13th_Dragon 2019-09-10 22:06
Milliseconds zwraca milisekundy do pełnej sekundy. Chyba nie o to Ci chodziło? - Sunnyline2 2019-09-11 22:06
Trzeba podać w milisekundach, 5 minut przekształcono w milisekundy - _13th_Dragon 2019-09-12 01:15
Żeby przekształcić na milisekundy to chyba trzeba użyć TotalMilliseconds. - some_ONE 2019-09-12 01:25
Racja, poprawiam. - _13th_Dragon 2019-09-12 01:39

Pozostało 580 znaków

2019-09-11 09:35
0

title

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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