package promauto.jroboplc.roboplant;
import static org.junit.Assert.*;
import org.junit.Test;
import promauto.jroboplc.JRoboUtils;
import promauto.jroboplc.Tag;
import promauto.jroboplc.Module;
import promauto.jroboplc.roboplant.Mchb;
import promauto.jroboplc.roboplant.RoboplantAddressConvertor;
public class MchbTest {
@Test
public void testExecute() {
System.out.println("\n\n\n===== MchbTest");
// emulating io modules
RoboplantAddressConvertor.add(1, "mod1", "Input%02d", true);
RoboplantAddressConvertor.add(1, "mod2", "Output%02d", false);
Module m0 = new Module();
m0.moduleName = "mod0";
Module m1 = new Module();
m1.moduleName = "mod1";
Module m2 = new Module();
m2.moduleName = "mod2";
try {
JRoboUtils.clearModules();
JRoboUtils.addModules(m0);
JRoboUtils.addModules(m1);
JRoboUtils.addModules(m2);
} catch (Exception e) {
}
Tag in0 = m1.tagTable.createTag("Input00", 0);
Tag in1 = m1.tagTable.createTag("Input01", 0);
Tag in2 = m1.tagTable.createTag("Input02", 0);
Tag in3 = m1.tagTable.createTag("Input03", 0);
Tag out0 = m2.tagTable.createTag("Output00", 0);
Tag out1 = m2.tagTable.createTag("Output01", 0);
Tag out2 = m2.tagTable.createTag("Output02", 0);
// prepare to test "Mchb"
Mchb m = new Mchb(m0, "333", "test device");
// mchb.channelIn.setName("mod1@Input00");
// mchb.channelOut.setName("mod2@Output00");
m.channelOut.tagChannel.set( 0x100 );
m.tagTimeStart.set( 3 );
m.tagFlags.set( 0x81 );
// 1
m.execute();
assertEquals(m.tagInput.get(), 0);
assertEquals(m.tagSuspend.get(), 0);
assertEquals(m.tagTrigres.get(), 0);
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagControl.get(), 0);
assertEquals(m.tagBlok.get(), 0);
assertEquals(m.tagTimeStart.get(), 3);
assertEquals(m.tagTimeStop.get(), 0);
assertEquals(m.tagFlags.get(), 0x81);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(m.channelOut.tagName.getString(), "mod2@Output00");
assertEquals(m.channelIn.tagName.getString(), "mod1@Input00");
// 2 - working without permission
in0.set(1);
m.execute();
assertEquals(m.tagInput.get(), 0);
assertEquals(m.tagSuspend.get(), 0);
assertEquals(m.tagTrigres.get(), 0);
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 7);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagControl.get(), 0);
assertEquals(m.tagBlok.get(), 0);
assertEquals(m.tagTimeStart.get(), 3);
assertEquals(m.tagTimeStop.get(), 0);
assertEquals(m.tagFlags.get(), 0x81);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
// 3 - Input = 1
m.tagInput.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
in0.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
// 4 - Input = 0
m.tagInput.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 7);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 5 - ExtInput = 1
m.tagControl.set(0x10);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 1);
in0.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 1);
// 6 - ExtInput = 0
m.tagControl.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 7);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 7 - Control = 3 - manual start
m.tagControl.set(3);
in0.set(1);
m.execute();
assertEquals(m.tagControl.get(), 3);
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
m.execute();
m.execute();
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
// 8 - ExtInput = 0
m.tagControl.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 9 - Input = 1, bad start
m.tagInput.set(1);
m.execute();
m.execute();
m.execute();
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 4);
assertEquals(m.tagAlarm.get(), 1);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 10 - Input = 0, we are still in alarm state
m.tagInput.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 4);
assertEquals(m.tagAlarm.get(), 1);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 11 - Trigres through Control in alarm state
m.tagControl.set(4);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(m.tagTrigres.get(), 1);
m.execute();
assertEquals(m.tagTrigres.get(), 0);
// 12 - Input = 1, good start, alarm
m.tagInput.set(1);
m.execute();
m.execute();
m.execute();
in0.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 4);
assertEquals(m.tagAlarm.get(), 1);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// 13 - Trigres = 1 in alarm state
m.tagTrigres.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
m.tagTrigres.set(0);
// 14 - Control = 3 - manual start, Suspend = 1 while start
m.tagInput.set(0);
m.tagControl.set(3);
in0.set(0);
m.execute();
in0.set(1);
m.tagSuspend.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 5);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 5);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
m.tagSuspend.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
m.tagControl.set(0);
m.execute();
assertEquals(m.tagSost.get(), 0);
// 15 - Input = 1, Blok =1
in0.set(0);
m.tagInput.set(1);
m.tagBlok.set(1);
m.execute();
m.execute();
m.execute();
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// Blok = 0
m.tagBlok.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 4);
assertEquals(m.tagAlarm.get(), 1);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
// reset
m.tagControl.set(4);
m.execute();
assertEquals(m.tagSost.get(), 0);
// 16 - manual alarm
m.tagControl.set(8);
m.execute();
assertEquals(m.tagSost.get(), 4);
// reset
m.tagControl.set(4);
m.execute();
assertEquals(m.tagSost.get(), 0);
// 17 - TimeStop
in0.set(1);
m.tagTimeStop.set(3);
m.tagInput.set(1);
m.execute();
m.execute();
m.execute();
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
m.tagInput.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 7);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 0);
// 18 - Flags.b7
m.tagFlags.set(1);
m.execute();
assertEquals(m.tagPlata.get(), 0);
in0.set(0);
m.execute();
assertEquals(m.tagPlata.get(), 1);
m.tagFlags.set(0x81);
m.execute();
assertEquals(m.tagPlata.get(), 0);
// 19 - Flags = 0x80, input and output channels are different
m.tagFlags.set(0x80);
m.channelOut.tagChannel.set( 0x101 );
m.channelIn.tagChannel.set( 0x102 );
m.execute();
assertEquals(m.channelOut.tagName.getString(), "mod2@Output01");
assertEquals(m.channelIn.tagName.getString(), "mod1@Input02");
m.tagControl.set(0x10);
m.execute();
m.execute();
m.execute();
in0.set(0);
in1.set(0);
in2.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 1);
assertEquals(out1.get(), 1);
m.tagTimeStop.set(0);
m.tagControl.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out1.get(), 0);
in2.set(0);
m.execute();
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(out1.get(), 0);
// 20 - Flags = 0x82, indication mode, only input channel is used
m.tagFlags.set(0x82);
m.channelOut.tagChannel.set( 0x103 );
m.execute();
assertEquals(m.channelIn.tagName.getString(), "mod1@Input03");
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
in3.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 1);
assertEquals(m.tagInputExt.get(), 0);
m.tagInput.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
m.tagInput.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
in3.set(0);
m.execute();
assertEquals(m.tagSost.get(), 0);
// 21 - Flags = 0x82, indication mode, only input channel is used
m.tagFlags.set(0x83);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
in3.set(1);
m.execute();
assertEquals(m.tagPlata.get(), 0);
m.tagInput.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 1);
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagPlata.get(), 1);
m.tagInput.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 3);
assertEquals(m.tagPlata.get(), 0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagPlata.get(), 0);
// 22 - Flags.b2 = 1
m.channelOut.tagChannel.set( 0x100 );
m.tagFlags.set( 0x85 );
m.execute();
m.tagInput.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 0);
assertEquals(in0.get(), 0);
assertEquals(out0.get(), 1);
in0.set( 1 );
m.execute();
assertEquals(m.tagMasterOut.get(), 1);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagPlata.get(), 1);
assertEquals(in0.get(), 1);
assertEquals(out0.get(), 1);
m.tagInput.set(0);
m.execute();
in0.set( 0 );
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagPlata.get(), 0);
// 23 - Flags.b3 = 1 - external start is prohibited
m.tagFlags.set( 0x89 );
m.execute();
m.tagControl.set(0x10);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 1);
assertEquals(in0.get(), 0);
assertEquals(out0.get(), 0);
// 24 - InputZ
m.tagControl.set(0);
m.channelOut.tagChannel.set( 0x100 );
m.tagFlags.set( 0x81 );
m.linkInputZ.setName("mod1@Input03");
in0.set(0);
in3.set(0);
m.execute();
assertEquals(m.tagInput.get(), 0);
assertEquals(m.tagSuspend.get(), 0);
assertEquals(m.tagTrigres.get(), 0);
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 0);
assertEquals(m.tagAlarm.get(), 0);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagControl.get(), 0);
assertEquals(m.tagBlok.get(), 0);
assertEquals(m.tagTimeStart.get(), 3);
assertEquals(m.tagTimeStop.get(), 0);
assertEquals(m.tagFlags.get(), 0x81);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(m.channelOut.tagName.getString(), "mod2@Output00");
assertEquals(m.channelIn.tagName.getString(), "mod1@Input00");
m.tagControl.set(3);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 0);
assertEquals(m.tagInputExt.get(), 0);
assertEquals(out0.get(), 1);
in3.set(1);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 2);
assertEquals(m.tagPlata.get(), 1);
assertEquals(out0.get(), 1);
m.execute();
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 1);
assertEquals(m.tagPlata.get(), 1);
assertEquals(out0.get(), 1);
in3.set(0);
m.execute();
assertEquals(m.tagMasterOut.get(), 0);
assertEquals(m.tagSost.get(), 4);
assertEquals(m.tagAlarm.get(), 1);
assertEquals(m.tagPlata.get(), 0);
assertEquals(out0.get(), 0);
// 25 - Bad channel address
m.channelOut.tagChannel.set( 0x107 );
m.linkInputZ.setName("");
m.execute();
assertEquals(m.tagSost.get(), 8);
}
}