Package promauto.jroboplc.roboplant

Source Code of promauto.jroboplc.roboplant.SeqControlTest

package promauto.jroboplc.roboplant;

import static org.junit.Assert.*;

import org.junit.Test;

import promauto.jroboplc.JRoboUtils;
import promauto.jroboplc.Module;
import promauto.jroboplc.Tag;

public class SeqControlTest {

  @Test
  public void test() {
   
    System.out.println("\n\n\n===== SeqControlTest");

    Module m0 = new Module();
    m0.moduleName = "mod0";

    try {
      JRoboUtils.clearModules();
      JRoboUtils.addModules(m0);
    } catch (Exception e) {
    }

    Tag tagInput1     = m0.tagTable.createTag("MCHB_111_Input", 0);
    Tag tagMasterout1   = m0.tagTable.createTag("MCHB_111_Masterout", 0);
    Tag tagSusp1     = m0.tagTable.createTag("MCHB_111_Susp", 0);
   
    Tag tagInput2     = m0.tagTable.createTag("MCHB_222_Input", 0);
    Tag tagMasterout2   = m0.tagTable.createTag("MCHB_222_Masterout", 0);
    Tag tagSusp2     = m0.tagTable.createTag("MCHB_222_Susp", 0);
    Tag tagA2       = m0.tagTable.createTag("A2", 0);
   
    Tag tagInput3     = m0.tagTable.createTag("MCHB_333_Input", 0);
    Tag tagMasterout3   = m0.tagTable.createTag("MCHB_333_Masterout", 0);
    Tag tagSusp3     = m0.tagTable.createTag("MCHB_333_Susp", 0);
    Tag tagA3       = m0.tagTable.createTag("A3", 0);
    Tag tagB3       = m0.tagTable.createTag("B3", 0);
    Tag tagBb3       = m0.tagTable.createTag("Bb3", 0);
   
    SeqControl m = new SeqControl(m0, "S01", "test seq S01");
    m.setTimeStepMs(0);
   
    SeqEntry se1 = m.create("111", "descr 111");
    se1.setTime(0, 0);
    se1.setDeviceInputTag(tagInput1,     1, 0);
    se1.setDeviceStateTag(tagMasterout1,   1);
    se1.setDeviceSuspTag(tagSusp1,       1);

    SeqEntry se2 = m.create("222", "descr 222");
    se2.setTime(2, 1);
    se2.setDeviceInputTag(tagInput2,     1, 0);
    se2.setDeviceStateTag(tagMasterout2,   1);
    se2.setDeviceSuspTag(tagSusp2,       1);
    se2.addControlTag(tagA2,         1);
    se2.addControlTag(se1.tagOutput,     1);
   
    SeqEntry se3 = m.create("333", "descr 333");
    se3.setTime(4, 2);
    se3.setDeviceInputTag(tagInput3,     1, 0);
    se3.setDeviceStateTag(tagMasterout3,   1);
    se3.setDeviceSuspTag(tagSusp3,       1);
    se3.addControlTag(tagA3,         1);
    se3.addControlTag(se2.tagOutput,     1);
    se3.addControlTagGroup();
    se3.addControlTag(tagB3,         1);
    se3.addControlTag(tagBb3,         1);
    se3.addControlTag(se2.tagOutput,     1);
   
   

    assertEquals(m.tagInput.getName(),     "SEQCTL_S01_Input");
    assertEquals(m.tagSusp.getName(),     "SEQCTL_S01_Susp");
    assertEquals(m.tagState.getName(),     "SEQCTL_S01_State");
    assertEquals(m.tagCntRun.getName(),   "SEQCTL_S01_CntRun");

    assertEquals(se1.tagInput.getName(),   "SEQCTL_S01_111_Input");
    assertEquals(se1.tagOutput.getName(),   "SEQCTL_S01_111_Output");
    assertEquals(se1.tagTimeStart.getName(),"SEQCTL_S01_111_TimeStart");
    assertEquals(se1.tagTimeStop.getName(), "SEQCTL_S01_111_TimeStop");
   

   
    m.execute();
    assertEquals(m.tagInput.get(),       0);
    assertEquals(m.tagSusp.get(),       0);
    assertEquals(m.tagState.get(),       0);
    assertEquals(m.tagCntRun.get(),     0);

    assertEquals(se1.tagInput.get(),     0);
    assertEquals(se1.tagOutput.get(),     0);
    assertEquals(se1.tagDeviceInput.get(),   0);
    assertEquals(se1.tagDeviceState.get(),   0);
   
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se2.tagDeviceInput.get(),   0);
    assertEquals(se2.tagDeviceState.get(),   0);
   
    assertEquals(se3.tagInput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);
    assertEquals(se3.tagDeviceInput.get(),   0);
    assertEquals(se3.tagDeviceState.get(),   0);

   
    m.tagInput.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     0);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     0);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);

    tagMasterout1.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     1);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);
   
    tagA2.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     1);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);
   
    tagMasterout2.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     2);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     0);
   
    tagA3.set(1);
    tagB3.set(1);
    tagBb3.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       1); //2
    assertEquals(m.tagCntRun.get(),     2);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     0);
   

    // start has ended up
    tagMasterout3.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     3);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     1);
   
    // just running
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     3);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     1);
   
   
    // alarm in the middle of  chain
    tagMasterout2.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     1);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);
   
    tagMasterout2.set(1);
    tagMasterout3.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     2);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     0);

   
    tagMasterout3.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     3);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     1);

   
    // stopping
    m.tagInput.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     3);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     1);
   
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     2);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     1);
    assertEquals(se3.tagOutput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     1);

    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     1);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       0);//3
    assertEquals(m.tagCntRun.get(),     0);

    assertEquals(se1.tagInput.get(),     0);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    assertEquals(se1.tagOutput.get(),     0);
    assertEquals(se2.tagOutput.get(),     0);
    assertEquals(se3.tagOutput.get(),     0);

    m.execute();
    assertEquals(m.tagState.get(),       0);
    assertEquals(m.tagCntRun.get(),     0);
   
   
    // start susp
    m.tagInput.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    tagSusp2.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       4);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       4);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    tagSusp2.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       4);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    m.tagSusp.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);

    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       2);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);

    m.execute();
    assertEquals(m.tagState.get(),       1);//2
    assertEquals(m.tagCntRun.get(),     3);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);
   
    m.execute();
    assertEquals(m.tagState.get(),       1);
    assertEquals(m.tagCntRun.get(),     3);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);
   
   
    // stopping susp
    m.tagInput.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     3);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     1);
   
    tagSusp2.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);
   
    m.tagSusp.set(1);
    m.execute();
    assertEquals(m.tagState.get(),       5);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       5);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);
   
    m.tagSusp.set(0);
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     2);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     1);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       3);
    assertEquals(m.tagCntRun.get(),     1);
    assertEquals(se1.tagInput.get(),     1);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       0);//3
    assertEquals(m.tagCntRun.get(),     0);
    assertEquals(se1.tagInput.get(),     0);
    assertEquals(se2.tagInput.get(),     0);
    assertEquals(se3.tagInput.get(),     0);
   
    m.execute();
    assertEquals(m.tagState.get(),       0);
    assertEquals(m.tagCntRun.get(),     0);
   
   
    // time step ms
    m.setTimeStepMs(1000);
    m.tagInput.set(1);
    int cntstart = 0;
    int cntstop = 0;
    System.out.println("starting...");
    boolean startsusp = false, stopsusp = false;
    long l1 = System.nanoTime(), l2;
   
    while (true) {
     
      m.execute();
     
      if ((cntstart != m.getCntStart()) || (cntstop != m.getCntStop())) {
        cntstart = m.getCntStart();
        cntstop = m.getCntStop();
        l2 = System.nanoTime() - l1;
        System.out.println("cntStartStop=" + cntstart + "/" + cntstop + "  CntRun=" + m.tagCntRun.getInteger()  + "  time=" + l2);
       
        checkTime(m, cntstart, cntstop, l2, 0, 2, 0);
        checkTime(m, cntstart, cntstop, l2, 1, 2, 1);
        checkTime(m, cntstart, cntstop, l2, 2, 2, 2);
        checkTime(m, cntstart, cntstop, l2, 3, 2, 5);
        checkTime(m, cntstart, cntstop, l2, 4, 2, 6);
        checkTime(m, cntstart, cntstop, l2, 4, 1, 7);
        checkTime(m, cntstart, cntstop, l2, 4, 0, 10);
        checkTime(m, cntstart, cntstop, l2, 4,-1, 11);
         
      }
     
     
      // susp starting
      if (cntstart==2 && cntstop==2 && m.tagInput.getInteger()==1 && !startsusp) {
        long sleepsecs = 2;
        m.tagSusp.set(1);
        System.out.println("susp=1 (sleeping for " + sleepsecs + "s...)");
        for (int i=0; i<(sleepsecs*10); i++)
          try {
            Thread.sleep(100);
            m.execute();
          } catch (InterruptedException e) {  }
        m.tagSusp.set(0);
        System.out.println("susp=0 (wake up!)");
        startsusp = true;
      }
     
      // susp stopping
      if (cntstart==4 && cntstop==1 && m.tagInput.getInteger()==0 && !stopsusp) {
        long sleepsecs = 2;
        m.tagSusp.set(1);
        System.out.println("susp=1 (sleeping for " + sleepsecs + "s...)");
        for (int i=0; i<(sleepsecs*10); i++)
          try {
            Thread.sleep(100);
            m.execute();
          } catch (InterruptedException e) {  }
        m.tagSusp.set(0);
        System.out.println("susp=0 (wake up!)");
        stopsusp = true;
      }
     
     
      // end of starting
      if (cntstart==4 && cntstop==2 && m.tagInput.getInteger()==1) {
        m.tagInput.set(0);
        System.out.println("stopping...");
      }

      // end of stopping
      if (m.tagState.getInteger()==0) {
        System.out.println("end");
        break;
      }
    }
   
   
   
  }

  private void checkTime(SeqControl m, int cntstart, int cntstop, long l2,
      int cnt1, int cnt2, long tm) {
    tm = tm * 1000000000;
    if (cntstart==cnt1  && cntstop==cnt2) {
      assertTrue("too fast", l2 > tm);
      assertTrue("too slow", l2 < (tm+500000000));
    }
  }

}
TOP

Related Classes of promauto.jroboplc.roboplant.SeqControlTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.