//rem Modified sep/9/2024 by CNC4PC

ushort Firmware, Arc_voltage, Recived, Histeresys, Histeresys_DRO, Histeresys_Screen, Setpoint, Setpoint_DRO,Setpoint_Screen;
ushort Delay_Time_Screen, Delay_Time_DRO,Delay_Time,Divisor,Divisor_DRO,Divisor_Screen,Smooth,Smooth_DRO,Smooth_Screen,Anti_Dive,Anti_Dive_DRO,Anti_Dive_Screen;
ushort Sample_Time,Sample_Time_DRO,Sample_Time_Screen,D2STV,D2STV_DRO,D2STV_Screen,Aut_Setpoit_Button,Aut_Setpoit_Button_Screen,Test_Mode_Button,Test_Mode_Button_S;
String Firmware_Screen;
double Delay_Timed,Divisord,Sample_Timed,D2STVd;

//*****************************  Firmware recived *****************************

exec.GetModbusregister(203, out Firmware);
if(Firmware < 1)
{
	Firmware_Screen = "";
	AS3.Setfieldtext(Firmware_Screen, 20000);
}
else
{
	Firmware_Screen = "FF5-V" + Firmware;
	AS3.Setfieldtext(Firmware_Screen, 20000);
}
//****************************  End Firmware recived *****************************

//*****************************  Arc voltage recived *****************************
if (exec.GetModbusregister(201, out Arc_voltage))
{
	if (Arc_voltage < 505)
	{
		AS3.Setfield(Arc_voltage, 20005);
	}
	else
	{
		Arc_voltage = 0;
		AS3.Setfield(Arc_voltage, 20005);
	}
}
//***************************** End Arc voltage recived *****************************

//***************************** Test mode *****************************

if (AS3.Getbuttonstate(128) == true)
{
 if (AS3.Getbuttonstate(21002) == true)
 {
    AS3.Switchbutton(false, 21002);
 }
}

if (AS3.Getbuttonstate(21002))
{  
  if (AS3.Getbutton(21003))
	{
     AS3.SetLED(true, 500);
     exec.SetModbusregister(312, 1);
	}
  else
	{
     exec.SetModbusregister(312, 0);
     AS3.SetLED(false, 500);
	}
   
   if (AS3.Getbutton(21004))
	{
      AS3.SetLED(true, 501);
      exec.SetModbusregister(311, 1);
	}
  else
	{
      exec.SetModbusregister(311, 0);
      AS3.SetLED(false, 501);
	}
}   
else
{
   exec.SetModbusregister(311, 0);
   exec.SetModbusregister(312, 0);
   AS3.SetLED(false, 500);
   AS3.SetLED(false, 501);
}

//***************************** End Test mode *****************************

//*****************************  Recived and Send *****************************

exec.GetModbusregister(200, out Recived);
if (Recived == 1)
{
	exec.GetModbusregister(205, out Histeresys);
	AS3.Setfield(Histeresys, 20007);
	exec.SetModbusregister(303, Histeresys);
	
	exec.GetModbusregister(202, out Setpoint);
	AS3.Setfield(Setpoint, 20004);
	exec.SetModbusregister(301, Setpoint);
	
	exec.GetModbusregister(206, out Divisor);
	Divisord = (double)Divisor /10;
	AS3.Setfield(Divisord, 20008);
	exec.SetModbusregister(304, Divisor);
	
	exec.GetModbusregister(204, out Delay_Time);
	Delay_Timed = (double)Delay_Time /10;
	AS3.Setfield(Delay_Timed, 234);
	AS3.Validatefield(234);
	exec.SetModbusregister(302, Delay_Time);
	
	exec.GetModbusregister(207, out Smooth);
	AS3.Setfield(Smooth, 20009);
	exec.SetModbusregister(305, Smooth);
	
	exec.GetModbusregister(208, out Anti_Dive);
	AS3.Setfield(Anti_Dive, 20011);
	exec.SetModbusregister(306, Anti_Dive);
	
	exec.GetModbusregister(209, out Sample_Time);
	Sample_Timed = (double)Sample_Time /10;
	AS3.Setfield(Sample_Timed, 20012);
	exec.SetModbusregister(307, Sample_Time);
	
	exec.GetModbusregister(210, out D2STV);
	D2STVd = (double)D2STV /10;
	AS3.Setfield(D2STVd, 20013);
	exec.SetModbusregister(308, D2STV);
	
	exec.GetModbusregister(211, out Aut_Setpoit_Button);
	if (Aut_Setpoit_Button == 1)
	{
		AS3.Switchbutton(true, 21001);
	}
	else
	{
		AS3.Switchbutton(false, 21001);
	}
	exec.SetModbusregister(309, Aut_Setpoit_Button);
	
}
else
{

	Histeresys_DRO = (ushort)AS3.Getfielddouble(20007);
	exec.SetModbusregister(303,Histeresys_DRO);
	
	Delay_Time_DRO = (ushort)(AS3.Getfielddouble(234)*10);
	exec.SetModbusregister(302,Delay_Time_DRO);
	
	exec.GetModbusregister(211, out Aut_Setpoit_Button);
	if (Aut_Setpoit_Button == 1)
	{
		exec.GetModbusregister(202, out Setpoint);
		AS3.Setfield(Setpoint, 20004);
		exec.SetModbusregister(301, Setpoint);
	}
	else
	{
		Setpoint_DRO = (ushort)AS3.Getfielddouble(20004);
		exec.SetModbusregister(301,Setpoint_DRO);
	}
	
	exec.GetModbusregister(212, out Test_Mode_Button);
	
	if (Test_Mode_Button == 1)
	{
		
		AS3.Switchbutton(true, 21002);
		//exec.SetModbusregister(310, 1);
	}
	else
	{
		
		AS3.Switchbutton(false, 21002);
		//exec.SetModbusregister(310, 0);
	}

		
	Divisor_DRO = (ushort)(AS3.Getfielddouble(20008)*10);
	exec.SetModbusregister(304,Divisor_DRO);
	
	Smooth_DRO = (ushort)AS3.Getfielddouble(20009);
	exec.SetModbusregister(305,Smooth_DRO);
	
	Anti_Dive_DRO = (ushort)AS3.Getfielddouble(20011);
	exec.SetModbusregister(306,Anti_Dive_DRO);
	
	Sample_Time_DRO = (ushort)(AS3.Getfielddouble(20012)*10);
	exec.SetModbusregister(307,Sample_Time_DRO);
	
	D2STV_DRO = (ushort)(AS3.Getfielddouble(20013)*10);
	exec.SetModbusregister(308,D2STV_DRO);
	
	
	
	
	
	exec.GetModbusregister(205,out Histeresys);
	exec.GetModbusregister(303, out Histeresys_Screen);
	
	exec.GetModbusregister(202,out Setpoint);
	exec.GetModbusregister(301, out Setpoint_Screen);
	
	exec.GetModbusregister(204,out Delay_Time);
	exec.GetModbusregister(302, out Delay_Time_Screen);
	
	exec.GetModbusregister(206,out Divisor);
	exec.GetModbusregister(304, out Divisor_Screen);
	
	exec.GetModbusregister(207,out Smooth);
	exec.GetModbusregister(305, out Smooth_Screen);
	
	exec.GetModbusregister(208,out Anti_Dive);
	exec.GetModbusregister(306, out Anti_Dive_Screen);
	
	exec.GetModbusregister(209,out Sample_Time);
	exec.GetModbusregister(307, out Sample_Time_Screen);
	
	exec.GetModbusregister(210,out D2STV);
	exec.GetModbusregister(308, out D2STV_Screen);
	
	exec.GetModbusregister(211,out Aut_Setpoit_Button);
	exec.GetModbusregister(309, out Aut_Setpoit_Button_Screen);
	
	if (Firmware > 0 ) 
	{
		if ((Histeresys_Screen != Histeresys) || (Setpoint_Screen != Setpoint) || (Delay_Time_Screen != Delay_Time) || (Divisor_Screen != Divisor) || (Smooth_Screen != Smooth) || (Anti_Dive_Screen != Anti_Dive) || (Sample_Time_Screen != Sample_Time) || (D2STV_Screen != D2STV) || (Aut_Setpoit_Button_Screen != Aut_Setpoit_Button))
		{
			exec.SetModbusregister(300, 1);
		}
		else
		{
			exec.SetModbusregister(300, 0);
		}
		
		
		if (Histeresys_DRO < 0.5)
		{
			exec.GetModbusregister(205,out Histeresys);
			AS3.Setfield(Histeresys, 20007);
			
			exec.GetModbusregister(202,out Setpoint);
			AS3.Setfield(Setpoint, 20004);
			
			exec.GetModbusregister(204,out Delay_Time);
			Delay_Timed = (double)Delay_Time /10;
			AS3.Setfield(Delay_Timed, 234);
			
			exec.GetModbusregister(206,out Divisor);
			Divisord = (double)Divisor /10;
			AS3.Setfield(Divisord, 20008);
			
			exec.GetModbusregister(207,out Smooth);
			AS3.Setfield(Smooth, 20009);
			
			exec.GetModbusregister(208,out Anti_Dive);
			AS3.Setfield(Anti_Dive, 20011);
			
			exec.GetModbusregister(209,out Sample_Time);
			Sample_Timed = (double)Sample_Time /10;
			AS3.Setfield(Sample_Timed, 20012);
			
			exec.GetModbusregister(210,out D2STV);
			D2STVd = (double)D2STV /10;
			AS3.Setfield(D2STVd, 20013);
			
			exec.GetModbusregister(211, out Aut_Setpoit_Button);
			if (Aut_Setpoit_Button == 1)
			{
				AS3.Switchbutton(true, 21001);
			}
			else
			{
				AS3.Switchbutton(false, 21001);
			}
	
		}
	}
	else
	{
		
	}
//exec.SetModbusregister(203, 0);
}
//*****************************  End Recived and Send *****************************