mirror of
https://github.com/OpenLogics/MewtocolNet.git
synced 2025-12-06 11:11:23 +00:00
105 lines
3.9 KiB
C#
105 lines
3.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using System.Linq;
|
|
using System.Text.Json;
|
|
using MewtocolNet;
|
|
using MewtocolNet.RegisterAttributes;
|
|
using System.Collections;
|
|
using MewtocolNet.Logging;
|
|
|
|
namespace Examples {
|
|
|
|
|
|
public class TestRegisters : RegisterCollectionBase {
|
|
|
|
//corresponds to a R100 boolean register in the PLC
|
|
[Register(100, RegisterType.R)]
|
|
public bool TestBool1 { get; private set; }
|
|
|
|
//corresponds to a R100 boolean register in the PLC
|
|
[Register(RegisterType.X, SpecialAddress.D)]
|
|
public bool TestBoolInputXD { get; private set; }
|
|
|
|
//corresponds to a DT1101 - DT1104 string register in the PLC with (STRING[4])
|
|
[Register(1101, 4)]
|
|
public string TestString1 { get; private set; }
|
|
|
|
//corresponds to a DT7000 16 bit int register in the PLC
|
|
[Register(7000)]
|
|
public short TestInt16 { get; private set; }
|
|
|
|
//corresponds to a DTD7001 - DTD7002 32 bit int register in the PLC
|
|
[Register(7001)]
|
|
public int TestInt32 { get; private set; }
|
|
|
|
//corresponds to a DTD7001 - DTD7002 32 bit float register in the PLC (REAL)
|
|
[Register(7003)]
|
|
public float TestFloat32 { get; private set; }
|
|
|
|
//corresponds to a DT7005 - DT7009 string register in the PLC with (STRING[5])
|
|
[Register(7005, 5)]
|
|
public string TestString2 { get; private set; }
|
|
|
|
//corresponds to a DT7010 as a 16bit word/int and parses the word as single bits
|
|
[Register(7010)]
|
|
public BitArray TestBitRegister { get; private set; }
|
|
|
|
//corresponds to a DT1204 as a 16bit word/int takes the bit at index 9 and writes it back as a boolean
|
|
[Register(1204, 9, BitCount.B16)]
|
|
public bool BitValue { get; private set; }
|
|
|
|
|
|
}
|
|
|
|
class Program {
|
|
|
|
static void Main(string[] args) {
|
|
|
|
Task.Factory.StartNew(async () => {
|
|
|
|
//attaching the logger
|
|
Logger.LogLevel = LogLevel.Critical;
|
|
Logger.OnNewLogMessage((date, msg) => {
|
|
Console.WriteLine($"{date.ToString("HH:mm:ss")} {msg}");
|
|
});
|
|
|
|
//setting up a new PLC interface and register collection
|
|
MewtocolInterface interf = new MewtocolInterface("10.237.191.3");
|
|
TestRegisters registers = new TestRegisters();
|
|
|
|
//attaching the register collection and an automatic poller
|
|
interf.WithRegisterCollection(registers).WithPoller();
|
|
|
|
await interf.ConnectAsync(
|
|
(plcinf) => {
|
|
|
|
//reading a value from the register collection
|
|
Console.WriteLine($"BitValue is: {registers.BitValue}");
|
|
|
|
//writing a value to the registers
|
|
Task.Factory.StartNew(async () => {
|
|
|
|
await Task.Delay(2000);
|
|
//inverts the boolean register
|
|
interf.SetRegister(nameof(registers.TestBool1), !registers.TestBool1);
|
|
//adds 10 each time the plc connects to the PLCs INT regíster
|
|
interf.SetRegister(nameof(registers.TestInt16), (short)(registers.TestInt16 + 10));
|
|
//adds 1 each time the plc connects to the PLCs DINT regíster
|
|
interf.SetRegister(nameof(registers.TestInt32), (registers.TestInt32 + 1));
|
|
//adds 11.11 each time the plc connects to the PLCs REAL regíster
|
|
interf.SetRegister(nameof(registers.TestFloat32), (float)(registers.TestFloat32 + 11.11));
|
|
|
|
interf.SetRegister(nameof(registers.TestString2), new Random().Next(0, 99999).ToString());
|
|
|
|
});
|
|
|
|
}
|
|
);
|
|
|
|
});
|
|
|
|
Console.ReadLine();
|
|
}
|
|
}
|
|
}
|