Garage Door 2 - S7.Net ekleyelim

Youtube ta izle..

Farkettim ki kapı hareketi için sadece Y değişkeni yeterli olmuyor, oluyor aslında ama kapı durmuyor ya aşağı iniyor (Y=false) ya yukarı çıkıyor (Y=true). O nedenle Y2 değişkeni de eklendi, orjinal blog da olduğu gibi.. Önceki yazıda olan gereksiz butonları da sildim kafa karıştırmasınlar, onların yerine plc nin çıkışları kullanılacak zaten. Programın son hali bu şekilde :


1 panel, 2 label, 2 buton ve 3 textbox var

using Nakov.TurtleGraphics;
using S7.Net;

namespace garageDoor
{
    public partial class MainForm : Form
    {
        Plc _S71200 = new Plc(CpuType.S71200, "127.0.0.1", 0, 1);
        
        float y_pos=150; // min 10, max 150
        bool Y;  // true olursa aç
        bool Y2; // true olursa kapat
        bool Sensor;
        bool Kumanda;
        bool Lamba;
        
        
        public MainForm()
        {
        
            InitializeComponent();
            _S71200.Open();
        
        }
        void Timer1Tick(object sender, EventArgs e)
        {
            if(_S71200.IsConnected) {
            
                ushort stepNo = (ushort)_S71200.Read("MW50"); // Adım numarası
                lblAdim.Text = "Adım: " + stepNo;
                
                Y = (bool)_S71200.Read("Q0.0");  // açma motoru
                Y2 = (bool)_S71200.Read("Q0.1"); // kapatma motoru
                Lamba = (bool)_S71200.Read("Q0.2");
                
                if(Lamba) txbLamba.BackColor=Color.Yellow; else txbLamba.BackColor=Color.Black;
                if(Sensor) btnSensor.BackColor=Color.LightGreen; else btnSensor.BackColor=Color.LightPink;
                  if(Kumanda) btnKumanda.BackColor=Color.LightGreen; else btnKumanda.BackColor=Color.LightPink;
              
                  // KAS : Kapı açık sensörü  
                  if(y_pos==10) {
                      txbKapiAcik.BackColor=Color.LightGreen;
                      _S71200.Write("I0.2",1);}
                  else {
                      txbKapiAcik.BackColor=Color.White;
                      _S71200.Write("I0.2",0);}
                  
                  // KKS : Kapı kapalı sensörü
                  if(y_pos==150) {
                      txbKapiKapali.BackColor=Color.LightGreen;
                      _S71200.Write("I0.3",1);}
                  else {
                      txbKapiKapali.BackColor=Color.White;
                      _S71200.Write("I0.3",0);}
              
                lblYpos.Text="Kapı poz : "+y_pos;
                
                if(Y && y_pos>10) y_pos -= 5;    //animasyon hızına göre bu değerleri oynayabilirsin ama
                if(Y2 && y_pos<150) y_pos += 5;  //kapı açık/kapalı sensörlerini y_pos a göre ayarlaman gerekir
            
            
                Turtle.Init(panel1);
                Turtle.ShowTurtle=false;
            
                // Kapı nın dış hatlarını yani dikdörtgen çizelim
                Turtle.PenColor = Color.Green;
                Turtle.PenSize=7;
                Turtle.PenUp();
                Turtle.MoveTo(-105,65); //X te sola Y de yukarı
                Turtle.PenDown();
                Turtle.Rotate(90);
                Turtle.Forward(210);
                Turtle.Rotate(90);
                Turtle.Forward(155);
                Turtle.Rotate(90);
                Turtle.Forward(210);
                Turtle.Rotate(90);
                Turtle.Forward(155);
                Turtle.Rotate(90);
            
                // Hareketli tente çizelim
                Turtle.PenUp();
                Turtle.MoveTo(-100,57); 
                Turtle.PenDown();
                Turtle.PenColor = Color.Gray;
                Turtle.PenSize=10;
                for (int i = 10; i <= y_pos; i = i + 10) {
                    Turtle.Forward(200);
                    Turtle.PenUp();
                    Turtle.MoveTo(-100,57-i);
                    Turtle.PenDown();
                }
            
                // Sensör çizelim
                Turtle.PenUp();
                Turtle.MoveTo(-130,-50); 
                Turtle.PenDown();
                Turtle.PenColor = Color.Black;
                Turtle.PenSize=10;
                Turtle.Forward(5);
            
                // Sensör bişey gördü
                if(Sensor) {
                    Turtle.PenColor = Color.Red;
                    Turtle.PenSize=3;
                    Turtle.Forward(230);
                }
            } 
        
        }
        

        //  AS :  Araç Sensörü

        void BtnSensorClick(object sender, EventArgs e)
        {
            if (Sensor) {
                Sensor=false;
                _S71200.Write("I0.0",0);}
            else {
                Sensor=true;
                _S71200.Write("I0.0",1);
            }
        }
        
        void BtnKumandaMouseDown(object sender, MouseEventArgs e)
        {
            Kumanda=true;
            _S71200.Write("I0.1",1);
        }
        void BtnKumandaMouseUp(object sender, MouseEventArgs e)
        {
            Kumanda=false;
            _S71200.Write("I0.1",0);
        }
        void MainFormFormClosed(object sender, FormClosedEventArgs e)
        {
            _S71200.Close();
        }
        
    }
}

Yorumlar

Bu blogdaki popüler yayınlar

VBA - Mscomm (seri port) ile veri loglama

RJ45 2 - Novexx barkod yazıcıya, S7-1200 plc ile etiket yazdırma

Köpüğü alınmış Windows AtlasOS