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);
}