// Macro semplificata per il controllo THC con punto morto fisso
int fieldSetPoint = 20000; // Campo del setpoint
int fieldDeadZone = 20002; // Campo Offset del punto morto
int fieldInputAnalog = 20001; // Campo per il valore corrente analogico in ingresso
int fieldInputVoltage = 20003; // Campo per la conversione voltaggio in ingresso
int fieldLoopTime = 20004; // Campo per visualizzare il tempo di loop
int fieldPreviousTime = 20005; // Campo per salvare il tempo precedente tra i loop
while (true) {
// Recupera il tempo precedente salvato e verifica la conversione
string previousTimeStr = AS3.Getfield(fieldPreviousTime);
long previousTime;
if (string.IsNullOrWhiteSpace(previousTimeStr) || !long.TryParse(previousTimeStr, out previousTime)) {
previousTime = System.DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
}
long currentTime = System.DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
long loopTime = (previousTime == 0) ? 0 : (currentTime - previousTime);
AS3.Setfield(currentTime, fieldPreviousTime); // Salva il nuovo tempo per il prossimo loop
if (exec.GetLED(50)) { // Controllo se Arc ON è attivo (LED 237)
// Recupera il valore del punto morto e verifica la conversione
string deadZoneStr = AS3.Getfield(fieldDeadZone);
double deadZone1 = 0;
if (!double.TryParse(deadZoneStr, out deadZone1)) {
deadZone1 = 0; // Default se il valore non è valido
}
double deadZone = deadZone1 / 2;
// Recupera il valore dell'input analogico e verifica la conversione
string inputAnalogVoltageStr = AS3.Getfield(fieldInputAnalog);
double inputAnalogVoltage1 = 0;
if (!double.TryParse(inputAnalogVoltageStr, out inputAnalogVoltage1)) {
inputAnalogVoltage1 = 0; // Default se il valore non è valido
}
double inputVoltage1 = inputAnalogVoltage1 * ( (50 * 5 ) / 65535.0);
double roundedInputVoltage1 = Math.Round(inputVoltage1, 0);
AS3.Setfield(roundedInputVoltage1, fieldInputVoltage);
AS3.Validatefield(fieldInputVoltage);
// Recupera il valore del voltaggio e verifica la conversione
string inputVoltageStr = AS3.Getfield(fieldInputVoltage);
double inputVoltage = 0;
if (!double.TryParse(inputVoltageStr, out inputVoltage)) {
inputVoltage = 0; // Default se il valore non è valido
}
// Recupera il valore del setpoint e verifica la conversione
string setPointStr = AS3.Getfield(fieldSetPoint);
double setPoint = 0;
if (!double.TryParse(setPointStr, out setPoint)) {
setPoint = 0; // Default se il valore non è valido
}
double error = inputVoltage - setPoint;
if (error > deadZone) { // Voltaggio troppo alto, abbassa la torcia
exec.Callbutton(539); // Disattiva THC Up
exec.Callbutton(540); // Attiva THC Down
}
else if (error < -deadZone) { // Voltaggio troppo basso, alza la torcia
exec.Callbutton(541); // Disattiva THC Down
exec.Callbutton(538); // Attiva THC Up
}
else { // Dentro la zona morta, spegni entrambi i segnali
exec.Callbutton(539); // Disattiva THC Up
exec.Callbutton(541); // Disattiva THC Down
}
}
else { // Arc ON non attivo, spegni entrambi i segnali
exec.Callbutton(539); // Disattiva THC Up
exec.Callbutton(541); // Disattiva THC Down
}
// Salva il tempo di loop nel campo 20004
AS3.Setfield(loopTime, fieldLoopTime);
AS3.Validatefield(fieldLoopTime);
Thread.Sleep(10); // Rimosso per eseguire il ciclo il più velocemente possibile
}
// MACRO M99998 (Apertura APP) CS-Tec 2025
int[] fields = { 20000, 20001, 20002, 20003, 20004, 20005 };
foreach (int field in fields) {
string value = exec.Readkey("UserTextfields", field.ToString(), "False");
// Se il valore è nullo o vuoto, metti un valore di default (es. "0")
if (string.IsNullOrWhiteSpace(value)) {
value = "0";
}
AS3.Setfieldtext(value, field);
AS3.Validatefield(field);
}
Users browsing this forum: No registered users and 7 guests