You are on page 1of 7

#region CTT WANNA BE

static string IC, AC_Stat, STAT_TEST, EVAL;


static int ATTR, SumAtt;
static int A1 = 0, A2 = 0, A3 = 0, A4 = 0;
//static string PARAMASOC =
"#01#82#00#06#02#04#12#00#01#11#00#09#06#01#00#00#01#02#FF#02#02#01#02#02#03#0F#01#
16#01#00#02#03#0F#02#16#01#00#01#00#02#04#12#00#01#11#00#09#06#00#60#0F#80#00#FF#02
#02#01#02#02#03#0F#01#16#01#00#02#03#0F#02#16#03#00#01#00#02#04#12#00#03#11#00#09#0
6#01#00#00#09#10#FF#02#02#01#03#02#03#0F#01#16#01#00#02#03#0F#02#16#03#00#02#03#0F#
03#16#01#00#01#00#02#04#12#00#03#11#00#09#06#01#00#00#09#0B#FF#02#02#01#03#02#03#0F
#01#16#01#00#02#03#0F#02#16#03#00#02#03#0F#03#16#01#00#01#00#02#04#12#00#07#11#01#0
9#06#01#00#62#01#02#FF#02#02#01#08#02#03#0F#01#16#01#00#02#03#0F#02#16#01#01#02#0F#
01#0F#02#02#03#0F#03#16#03#00#02#03#0F#04#16#01#00#02#03#0F#05#16#01#00#02#03#0F#06
#16#01#00#02#03#0F#07#16#01#00#02#03#0F#08#16#01#00#01#02#02#02#0F#01#16#01#02#02#0
F#02#16#01#02#04#12#00#07#11#01#09#06#01#00#62#01#04#FF#02#02#01#08#02#03#0F#01#16#
01#00#02#03#0F#02#16#01#01#02#0F#01#0F#02#02#03#0F#03#16#03#00#02#03#0F#04#16#01#00
#02#03#0F#05#16#01#00#02#03#0F#06#16#01#00#02#03#0F#07#16#01#00#02#03#0F#08#16#01#0
0#01#02#02#02#0F#01#16#01#02#02#0F#02#16#01";

static void Read(DLMSSet meterConn)


{
// Read Instruction
cdRes = meterConn.GetCosem(classID, attrID, obisCode, null);
if (cdRes == null) { RPF = RPF + 1; print(meterConn.LastError);
STAT_TEST = "\t FAIL"; EVAL = " --"; }
else { RPS = RPS + 1; STAT_TEST = "\t PASS"; EVAL = " --"; }
System.Threading.Thread.Sleep(30);
}
static void Write(DLMSSet meterCon)
{

// Write Instruction
#region Get Param
cdRes = meterConn.GetCosem(classID, attrID, obisCode, null);
cpy0 = cdRes.ToString();
cpy0 = EDMI.Indonesia.DLMS.DLMSLib.Hex(cpy0);

for (int k = 0; k < cpy0.Length; k += 2)


{
cpy0 = cpy0.Insert(k, "#");
k++;
}
System.Threading.Thread.Sleep(30);
#endregion

#region Special Case for Boolean 1


if (cpy0 == "#03#00")
{
cpy0 = "#03#01";
}
else
{
if (cpy0 == "#03#01")
{
cpy0 = "#03#00";
}
}
#endregion
#region Write
System.Threading.Thread.Sleep(50);
hex = cpy0.Replace("#", "").Replace(" ", "");
sParam = EDMI.Indonesia.DLMS.DLMSLib.StringFromHex(hex);
cdParam = EDMI.Indonesia.DLMS.DLMSDecoder.DecodeDLMS(sParam);
result = meterConn.SetCosem(classID, attrID, obisCode, cdParam);
if (!result)
{
print(meterConn.LastError);
System.Threading.Thread.Sleep(30);
EWT.Add("\t\tFAIL on ID Class " + Data[A1 + 4] + "\t OBIS Code " +
IC + "\t Attribute " + ATTR);
STAT_TEST = "FAIL";
WPF = WPF + 1;
System.Threading.Thread.Sleep(30);
}
else
{
System.Threading.Thread.Sleep(30);
WPS = WPS + 1;
STAT_TEST = "PASS";
System.Threading.Thread.Sleep(30);
}
System.Threading.Thread.Sleep(50);
#endregion

#region Special Case for Boolean 2


if (cpy0 == "#03#00")
{

cpy0 = "#03#01";
hex = cpy0.Replace("#", "").Replace(" ", "");
sParam = EDMI.Indonesia.DLMS.DLMSLib.StringFromHex(hex);
cdParam = EDMI.Indonesia.DLMS.DLMSDecoder.DecodeDLMS(sParam);
result = meterConn.SetCosem(classID, attrID, obisCode, cdParam);
if (!result) { print(meterConn.LastError); }
else
{

}
System.Threading.Thread.Sleep(50);

}
else
{
if (cpy0 == "#03#01")
{

cpy0 = "#03#00";
hex = cpy0.Replace("#", "").Replace(" ", "");
sParam = EDMI.Indonesia.DLMS.DLMSLib.StringFromHex(hex);
cdParam = EDMI.Indonesia.DLMS.DLMSDecoder.DecodeDLMS(sParam);
result = meterConn.SetCosem(classID, attrID, obisCode,
cdParam);
if (!result) { print(meterConn.LastError); }
else
{
}
System.Threading.Thread.Sleep(50);

}
}
#endregion

#region Validation Default


System.Threading.Thread.Sleep(30);
cdRes = meterConn.GetCosem(classID, attrID, obisCode, null);
cpy2 = cdRes.ToString();
cpy2 = EDMI.Indonesia.DLMS.DLMSLib.Hex(cpy2);

for (int k = 0; k < cpy2.Length; k += 2)


{
cpy2 = cpy2.Insert(k, "#");
k++;
}

if (cpy2 == cpy0)
{
VWPS = VWPS + 1;
EVAL = "PASS";
System.Threading.Thread.Sleep(30);
}
else
{
EVT.Add("\t\tInvalid Data on ID Class " + Data[A1 + 4] + "\t OBIS
Code " + IC + "\t Attribute " + ATTR);
EVAL = "FAIL";
System.Threading.Thread.Sleep(30);
VWPF = VWPF + 1;
}
System.Threading.Thread.Sleep(30);
#endregion

}
static void Access_Right_Identifier(DLMSSet meterConn)
{

// Access Right Read Only


if (Data[A1 + A3 + 24] == 1)
{
AC_Stat = "R";
Read(meterConn);
}

// Access Right Read and Write


if (Data[A1 + A3 + 24] == 3)
{
AC_Stat = "R/W";
Read(meterConn);
Write(meterConn);
}

// Access Right Write


if (Data[A1 + A3 + 24] == 2)
{
AC_Stat = "W";
Write(meterConn);
}

// Access Right Non Available [No Access]


if (Data[A1 + A3 + 24] == 0)
{
AC_Stat = "N/A";
STAT_TEST = "No Access";
EVAL = "No Access";
}

}
static void Loop_Atr(DLMSSet meterConn)
{

// Print Testing Status


print("\tAttribute \t Access Right \t\t Status \t Validation ");
System.Threading.Thread.Sleep(50);

// Attribute Pointer
A3 = 0;
A4 = 0;

// Looping attribute
for (int bc = 0; bc < SumAtt; bc++)
{

// Attribute identifier
if (Data[A1 + A3 + 19] == 2 && Data[A1 + A3 + 20] == 3 && Data[A1 +
A3 + 21] == 15)
{

// Attribute identifier
ATTR = Data[A1 + A3 + 22];
attrID = Convert.ToByte(ATTR);

// Access Right Identifier


Access_Right_Identifier(meterConn);

// Print Result
print("\t " + ATTR + "\t\t " + AC_Stat + " \t\t " +
STAT_TEST + "\t\t " + EVAL);
System.Threading.Thread.Sleep(80);

// Attribute Counter
A4 = A4 + 1;
}
else
{
// Atrribute limiter
if (A4 == SumAtt)
{
bc = (SumAtt - 1);
}
else
{
bc = 0;
}
}

// Attribute Decode increament


A3 = A3 + 1;

}
static void Loop_OBIS(DLMSSet meterConn)
{

//Sum of OBIS on Current Association


int ObisLoop = (Data[2] * 256) + Data[3];

// Looping Obis
for (int ab = 0; ab < ObisLoop; ab++)
{

// Obis code identifier


if (Data[A1] == 2 && Data[A1 + 1] == 4 && Data[A1 + 2] == 18 &&
Data[A1 + 3] == 0)
{

//Number of Obis Sequence


print("OBIS : " + (A2 + 1));
System.Threading.Thread.Sleep(50);

// Class ID Identifier
classID = Convert.ToInt32(Data[A1 + 4]);

// OBIS Code Identifier


IC = ("" + Data[A1 + 9] + "." + Data[A1 + 10] + "." + Data[A1 +
11] + "." + Data[A1 + 12] + "." + Data[A1 + 13] + "." + Data[A1 + 14] + "");
obisCode = new OctetString(IC, true);

// Total Attribute Identifier


SumAtt = Data[A1 + 18];

// Print OBIS Identity


print("\tID Class : " + Data[A1 + 4] + "\t OBIS Code : " + IC +
"\t Attribute Index : " + SumAtt);
System.Threading.Thread.Sleep(100);

// Attribute Decode Function


Loop_Atr(meterConn);

// Obis counter
A2 = A2 + 1;

}
else
{
// Obis Limiter
if (A2 == ObisLoop)
{
ab = (ObisLoop - 1);
}
else
{
ab = 0;
}

// OBIS Decode increament


A1 = A1 + 1;

System.Threading.Thread.Sleep(50);

}
static void Get_Assoc(DLMSSet meterConn)
{

print("\t<< Get Association >>");


// Get Current Association
cdRes = meterConn.GetCosem(Convert.ToInt32(15), Convert.ToByte(2), new
OctetString("0.0.40.0.0.255", true), null);
cpy = cdRes.ToString();
cpy = EDMI.Indonesia.DLMS.DLMSLib.Hex(cpy);
System.Threading.Thread.Sleep(30);

// Insert Saparator Parameter


for (int k = 0; k < cpy.Length; k += 2)
{
cpy = cpy.Insert(k, "#");
k++;
}

// Parcing single string to array


string[] Saparator = cpy.Split('#');
System.Threading.Thread.Sleep(50);

// Hexa to Dec Converter


foreach (string a in Saparator)
{
if (a != "")
{
Data.Add(int.Parse(a,
System.Globalization.NumberStyles.HexNumber));
}
}

//PrintParam(meterConn);
System.Threading.Thread.Sleep(50);

static void CTT_Wanna_be()


{

print("Create Object DLMS");


meterConn = new DLMSSet();

//ConnectSPadm(meterConn); //SEC A5
//ConnectManuf(meterConn); //SEC A120
ConnectManagement(meterConn); //IDIS Gen 2
//ConnectAdminGen1(meterConn); //Gen 1

Get_Assoc(meterConn);

Loop_OBIS(meterConn);

Testing_Summary();

Reset_Baud(meterConn);

print("\t\t JOSS !!!!!");


meterConn.DisconnectFromMeter();

#endregion

You might also like