Вопросы по ПЛК
Всем привет, очень скучно и решил поиграться в ПЛК, часа 4 потратил на разработку алгоритма лифта. В Германии очень распространено ПЛК. Вот сами вопросы:
1. Итак есть допустим 2 входа (I1 и I2), и 2 выхода (Q1 и Q2) можно ли так делать т.е. соеденить Q1 с B001 см. https://i.ibb.co/pX8Kx5b/siemens-comfort-V8-01-22-42-29-01..., я ни у кого не видел в примерах чтобы кто-то так делал, обычно я делаю так соединяю B001 с Q1 см. https://i.ibb.co/h2M5YH9/siemens-comfort-V8-02-22-43-29-01...
2. Есть допустим 4-х этажный дом, в нём лифт, как думаете это правильный алгоритм работы лифта или нет см. https://i.ibb.co/6B012sx/etage-03-13-30-01-2024-min.jpg ? Как разработать алгоритм чтобы дверь лифта открывалась и закрывалась?
Вот симуляция работы лифта https://i.ibb.co/GHk7Wgs/bandicam-2024-01-30-03-12-21-908....
Поясняю:I1 по I4 это кнопки, которые расположены в подъезде на каждом этаже, I1 - 1 этаж, I2 - 2 этаж, ... . I5 срабатывает когда дверь лифта закрыта, I6 по I9 срабатывают когда кабинка лифта подъежзает к определённому этажу. Допустим I6 - 1 этаж, I7 - 2 этаж, ...
Если не понимаете что такое ПЛК, тут рассказывается подробно: https://www.youtube.com/watch?v=q_Y9arhYLgA
Вот так работает лифт - https://www.youtube.com/watch?v=aKbKQu1wR3I
3. Как думаете можно это как-то управлять на C#? См. https://snap7.sourceforge.net/sharp7.html
Всем заранее спасибо!
А как бы это выглядело на C#? Вот простой пример:
Код Program.cs:
using System; namespace Aufzug2 { class Program { // Метод срабатывает, когда происходит срабатывание события public static void MyAufzugEvent(object sender, AufzugMove e) { Console.WriteLine("Der Aufzug befindet sich auf " + e.etage + " Etage."); // Отображаем Der Aufzug befindet sich auf ..- Etage. } public static void Main(string[] args) { var aufzug = new Aufzug(); // Наш лифт aufzug.AufzugMoveEvent += MyAufzugEvent; // Обработчик событий aufzug.Move(1); // Посылаем лифт на 1-й этаж Console.ReadLine(); // Ожидаем назжатия клавиши Enter/Return } } }
Код AufzugGeraet.cs:
using System; public class AufzugMove : EventArgs { public int etage { get; set; } } public interface IMyInterface { event EventHandler<AufzugMove> AufzugMoveEvent; } public class Aufzug : IMyInterface { public event EventHandler<AufzugMove> AufzugMoveEvent; public void Move(int etage) { AufzugMoveEvent.Invoke(this, new AufzugMove { etage = etage }); } }
Для задержки лифта, имхо можно было бы в принципе использовать Thread.Sleep.