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 )
Kopiuj
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..
Kopiuj
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);
}
fasadin