Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9bbea90d6f | |||
| 53df674ae5 | |||
| efe5c73ea9 | |||
| 0d78722593 | |||
| a1403ed5c1 | |||
| 98504569b0 | |||
| 91791b4aca | |||
| 30e78e7a65 | |||
| 3072618f25 | |||
| 2feb30bef6 | |||
| 44415f41ee | |||
| 1ff528006d | |||
| bcd65da7cd | |||
| 13cc5f66a3 | |||
| 07d1df9220 | |||
| 2bb407d55c | |||
| 97dc1095b6 | |||
| a090ef9fb2 | |||
| c5c95f75ae | |||
| c95fb1806f | |||
| d12d07c99e | |||
| 3103b7bba2 | |||
| b2932d927c | |||
| 68add4e08d | |||
| 5585c11ef5 | |||
| b9caa4ac74 | |||
| cde514eed8 | |||
| fad45a5635 | |||
| 9bf2265082 | |||
| e488619ae5 | |||
| babd8b25da | |||
| 5894cd63ce | |||
| 5a19d44b34 | |||
| 577cbe5c9d | |||
| e881006857 | |||
| 83fb0acfd0 | |||
| 04b3588e7f | |||
| c00e695c15 | |||
| c228c454f6 | |||
| e86495eab5 |
@@ -29,6 +29,7 @@ namespace Client2020.BrowserTools
|
||||
private const string THERMO_RECIPE_FOLDER_NAME = @"Recipes";
|
||||
private const string THERMO_SCREENSHOT_PATH = @"C:\CMS\Screenshots";
|
||||
private const string CMS_PATH = @"C:\CMS";
|
||||
private string RUNNING_PATH = AppDomain.CurrentDomain.BaseDirectory;
|
||||
|
||||
#region CONSTRUCTOR_METHOD
|
||||
public BrowserJSObject(Form f)
|
||||
@@ -339,6 +340,29 @@ namespace Client2020.BrowserTools
|
||||
return JsonConvert.SerializeObject("");
|
||||
}
|
||||
|
||||
public string createRecipe(String p)
|
||||
{
|
||||
if (File.Exists(p))
|
||||
{
|
||||
return (JsonConvert.SerializeObject(new ErrorContainer("path_already_exists")));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string path = RUNNING_PATH.Replace("Client_Debug\\x64\\", "").Replace("Client\\x64\\", "") + "Config\\Recipes\\template.tpl";
|
||||
FileInfo file = new FileInfo(path);
|
||||
|
||||
file.CopyTo(p);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return (JsonConvert.SerializeObject(new ErrorContainer("error_during_file_creation")));
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject("");
|
||||
}
|
||||
|
||||
|
||||
// Read all files in directory
|
||||
public string getFileList(string p)
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
<ErrorText>Questo progetto fa riferimento a uno o più pacchetti NuGet che non sono presenti in questo computer. Usare lo strumento di ripristino dei pacchetti NuGet per scaricarli. Per altre informazioni, vedere http://go.microsoft.com/fwlink/?LinkID=322105. Il file mancante è {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\cef.redist.x64.84.4.1\build\cef.redist.x64.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x64.84.4.1\build\cef.redist.x64.props'))" />
|
||||
<Error Condition="!Exists('..\packages\cef.redist.x86.84.4.1\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x86.84.4.1\build\cef.redist.x86.props'))" />
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
"options_thermoregulator_9_enabled": 0.0,
|
||||
"options_thermoregulator_9_setpoint": 0.0,
|
||||
"options_thermoregulator_10_enabled": 0.0,
|
||||
"options_thermoregulator_10_setpoint": 0.0
|
||||
"options_thermoregulator_10_setpoint": 0.0,
|
||||
"extraction_main_drawing_enabled": 0.0
|
||||
},
|
||||
"ChannelSetpoints": {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<ncVendor>S7NET</ncVendor>
|
||||
<!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI/S7NET -->
|
||||
<showNcHMI>false</showNcHMI>
|
||||
<!--<ncIpAddress>192.168.139.1</ncIpAddress>-->
|
||||
<ncIpAddress>192.168.0.102</ncIpAddress>
|
||||
<ncPort>102</ncPort>
|
||||
<machineModel>Thermo 2020</machineModel>
|
||||
@@ -140,7 +141,7 @@
|
||||
<thread name="expMan" value="30000" />
|
||||
<thread name="functionEnab" value="300" />
|
||||
<thread name="gauges" value="500" />
|
||||
<thread name="m154" value="500" />
|
||||
<thread name="m154" value="1000" />
|
||||
<thread name="mCommands" value="250" />
|
||||
<thread name="powerOn" value="500" />
|
||||
<thread name="prodCycle" value="1000" />
|
||||
|
||||
@@ -49,6 +49,8 @@ public static class ThreadsFunctions
|
||||
public static int modulesRtCounter = 0;
|
||||
public static int recipeRtCounter = 0;
|
||||
public static bool reconnectionIsRunning = false;
|
||||
public static bool forcetakeSnapshot = false;
|
||||
public static bool ReloadAfterLoad = false;
|
||||
|
||||
#endregion Public Fields
|
||||
|
||||
@@ -360,6 +362,14 @@ public static class ThreadsFunctions
|
||||
// avvio oggetto thermocam
|
||||
ThermoCamComunicator TCCom = new ThermoCamComunicator(true);
|
||||
Stopwatch sw = new Stopwatch();
|
||||
forcetakeSnapshot = false;
|
||||
|
||||
|
||||
RegistrationInfo takeReginfo = MessageServices.Current.Subscribe(TAKE_SNAPSHOT_THERMO, (a, b) =>
|
||||
{
|
||||
ThreadsFunctions.forcetakeSnapshot = true;
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
// Try connection
|
||||
@@ -380,11 +390,13 @@ public static class ThreadsFunctions
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
if (flirImageReq)
|
||||
if (flirImageReq || forcetakeSnapshot)
|
||||
{
|
||||
forcetakeSnapshot = false;
|
||||
bool done = false;
|
||||
// if requested --> give ack!
|
||||
ncAdapter.ManageFlirStrobe();
|
||||
if (flirImageReq)
|
||||
ncAdapter.ManageFlirStrobe();
|
||||
// requesto photo from library
|
||||
NcAdapter.lastThermoImage = TCCom.takePicture();
|
||||
done = !string.IsNullOrEmpty(NcAdapter.lastThermoImage);
|
||||
@@ -407,7 +419,8 @@ public static class ThreadsFunctions
|
||||
ncAdapter.WriteRecipeWarmChTCamTempAct(actualTemp);
|
||||
NcAdapter.lastImageTaken = DateTime.Now;
|
||||
// give PLC strobe for uploaded Actual TEMP from image
|
||||
ncAdapter.SendTCamImageReadyStrb();
|
||||
if(flirImageReq)
|
||||
ncAdapter.SendTCamImageReadyStrb();
|
||||
|
||||
|
||||
MessageServices.Current.Publish(SEND_NEWTCAMIMAGE, null, NcAdapter.lastImageTaken);
|
||||
@@ -438,7 +451,8 @@ public static class ThreadsFunctions
|
||||
}
|
||||
finally
|
||||
{
|
||||
ncAdapter.Dispose();
|
||||
MessageServices.Current.UnSubscribe(takeReginfo);
|
||||
ncAdapter.Dispose();
|
||||
// chiudo thermocam
|
||||
TCCom.Dispose();
|
||||
}
|
||||
@@ -1453,6 +1467,13 @@ public static class ThreadsFunctions
|
||||
if (libraryError.errorCode != 0)
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
|
||||
MessageServices.Current.Subscribe(RECIPE_LOADED, (a, b) =>
|
||||
{
|
||||
ReloadAfterLoad = true;
|
||||
recipeRtCounter = 0;
|
||||
});
|
||||
|
||||
while (true)
|
||||
{
|
||||
// ogni n counter leggo anche dati NON RT
|
||||
@@ -1466,39 +1487,51 @@ public static class ThreadsFunctions
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadRecipeData(onlyRt, false, out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_FULL, null, currRecipe);
|
||||
|
||||
// ora gestisco la overview!
|
||||
libraryError = ncAdapter.GetRecipeOverview(out Dictionary<RecipeSection, RecipeCatStatus> currOverview);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_OVERWIEW, null, currOverview);
|
||||
|
||||
// ora gestisco la lettura della overview di "modificata
|
||||
DTORecipeStatus message = new DTORecipeStatus()
|
||||
// controllo su redis che NON sia bloccata lettura ricetta..
|
||||
if (!RedisController.getRecipeReadSem)
|
||||
{
|
||||
recipeName = NcAdapter.RecipeLiveData.RecipeName,
|
||||
hasChanged = NcAdapter.RecipeLiveData.hasChanged
|
||||
};
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadRecipeData(onlyRt, false, out Dictionary<string, DTORecipeParam> currRecipe);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_CHANGED, null, message);
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_FULL, null, currRecipe);
|
||||
|
||||
// verifico se dal PLC è segnalato che i setpointHMI sono invalidati, nel qual caso INVIO
|
||||
bool setpointHmiInvalidated = false;
|
||||
libraryError = ncAdapter.checkSetpointInvalidated(out setpointHmiInvalidated);
|
||||
if (setpointHmiInvalidated)
|
||||
{
|
||||
// ora gestisco l'ack della richiesta
|
||||
libraryError = ncAdapter.doAckSetpointInvalidated();
|
||||
// ora gestisco la overview!
|
||||
libraryError = ncAdapter.GetRecipeOverview(out Dictionary<RecipeSection, RecipeCatStatus> currOverview);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_OVERWIEW, null, currOverview);
|
||||
|
||||
// ora gestisco la lettura della overview di "modificata
|
||||
DTORecipeStatus message = new DTORecipeStatus()
|
||||
{
|
||||
recipeName = NcAdapter.RecipeLiveData.RecipeName,
|
||||
hasChanged = NcAdapter.RecipeLiveData.hasChanged
|
||||
};
|
||||
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_CHANGED, null, message);
|
||||
|
||||
// verifico se dal PLC è segnalato che i setpointHMI sono invalidati, nel qual caso INVIO
|
||||
bool setpointHmiInvalidated = false;
|
||||
libraryError = ncAdapter.checkSetpointInvalidated(out setpointHmiInvalidated);
|
||||
if (setpointHmiInvalidated)
|
||||
{
|
||||
// ora gestisco l'ack della richiesta
|
||||
libraryError = ncAdapter.doAckSetpointInvalidated();
|
||||
}
|
||||
if(ReloadAfterLoad)
|
||||
{
|
||||
ReloadAfterLoad = false;
|
||||
setpointHmiInvalidated = true;
|
||||
}
|
||||
// pubblico booleana dei setpointHMI invalidati
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED, null, setpointHmiInvalidated);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
// pubblico booleana dei setpointHMI invalidati
|
||||
MessageServices.Current.Publish(SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED, null, setpointHmiInvalidated);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
@@ -1633,33 +1666,38 @@ public static class ThreadsFunctions
|
||||
bool useCache = false;
|
||||
while (true)
|
||||
{
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
// controllo su redis che NON sia bloccata lettura ricetta..
|
||||
if (!RedisController.getWarmersReadSem)
|
||||
{
|
||||
if (cacheWarmers)
|
||||
sw.Restart();
|
||||
|
||||
// Check if client is connected
|
||||
if (ncAdapter.numericalControl.NC_IsConnected())
|
||||
{
|
||||
// every 10 reads all data...
|
||||
useCache = (readCount != 0);
|
||||
readCount++;
|
||||
// ciclo resettato ogni 20
|
||||
readCount = readCount % 20;
|
||||
if (cacheWarmers)
|
||||
{
|
||||
// every 10 reads all data...
|
||||
useCache = (readCount != 0);
|
||||
readCount++;
|
||||
// ciclo resettato ogni 20
|
||||
readCount = readCount % 20;
|
||||
}
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadWarmers(useCache, out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
// pubblico
|
||||
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
|
||||
}
|
||||
// Get new data from PLC
|
||||
libraryError = ncAdapter.ReadWarmers(useCache, out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (libraryError.IsError())
|
||||
ManageLibraryError(libraryError);
|
||||
// pubblico
|
||||
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
}
|
||||
else
|
||||
RestoreConnection();
|
||||
|
||||
sw.Stop();
|
||||
|
||||
// Update thread timer
|
||||
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
|
||||
// Wait
|
||||
Thread.Sleep(CalcSleepTime(samplMsec("warmers"), (int)sw.ElapsedMilliseconds));
|
||||
}
|
||||
|
||||
@@ -38,10 +38,6 @@
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -57,10 +57,6 @@
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -36,6 +36,12 @@ namespace Thermo.Active.Database.Controllers
|
||||
private const string machineEventKpis = "Events:Kpis";
|
||||
private const string machineMessagePath = "Events:Messages";
|
||||
|
||||
|
||||
private const string thermoSemRecipe = "Thermo:Semaphore:All";
|
||||
private const string thermoSemWarmers = "Thermo:Semaphore:All";
|
||||
//private const string thermoSemRecipe = "Thermo:Semaphore:Recipe";
|
||||
//private const string thermoSemWarmers = "Thermo:Semaphore:Warmers";
|
||||
|
||||
public static void WriteProductionNotification(uint ProductionProcess, string Notification)
|
||||
{
|
||||
string redisHash = redUtil.man.redHash(redisNotificationAddress).Replace("%NN%", ProductionProcess.ToString("00"));
|
||||
@@ -246,5 +252,89 @@ namespace Thermo.Active.Database.Controllers
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta semaforo Recipe
|
||||
/// </summary>
|
||||
/// <param name="doLock">true: imposto lock per 5 sec, false: tolgo lock (stringa vuota)</param>
|
||||
/// <returns></returns>
|
||||
public static bool setRecipeReadSem(bool doLock)
|
||||
{
|
||||
return setSemaphore(doLock, redUtil.man.redHash(thermoSemRecipe));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce semaforo Recipe
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static bool getRecipeReadSem
|
||||
{
|
||||
get
|
||||
{
|
||||
return getSemaphore(redUtil.man.redHash(thermoSemRecipe));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Imposta semaforo Warmers
|
||||
/// </summary>
|
||||
/// <param name="doLock">true: imposto lock per 5 sec, false: tolgo lock (stringa vuota)</param>
|
||||
/// <returns></returns>
|
||||
public static bool setWarmersReadSem(bool doLock)
|
||||
{
|
||||
return setSemaphore(doLock, redUtil.man.redHash(thermoSemWarmers));
|
||||
}
|
||||
/// <summary>
|
||||
/// Restituisce semaforo Warmers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static bool getWarmersReadSem
|
||||
{
|
||||
get
|
||||
{
|
||||
return getSemaphore(redUtil.man.redHash(thermoSemWarmers));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gestione generica SET semaforo
|
||||
/// </summary>
|
||||
/// <param name="doLock"></param>
|
||||
/// <param name="redisHash"></param>
|
||||
/// <returns></returns>
|
||||
private static bool setSemaphore(bool doLock, string redisHash)
|
||||
{
|
||||
bool answ = true;
|
||||
int ttlSec = 5;
|
||||
string rawData = $"{DateTime.Now}";
|
||||
try
|
||||
{
|
||||
if (doLock)
|
||||
{
|
||||
// imposto lock
|
||||
answ = redUtil.man.setRSV(redisHash, rawData, ttlSec);
|
||||
}
|
||||
else
|
||||
{
|
||||
// metto empty string a 1 sec
|
||||
answ = redUtil.man.setRSV(redisHash, "", 1);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gestione generica GET semafoto
|
||||
/// </summary>
|
||||
/// <param name="redisHash"></param>
|
||||
/// <returns></returns>
|
||||
private static bool getSemaphore(string redisHash)
|
||||
{
|
||||
bool answ = true;
|
||||
string rawData = redUtil.man.getRSV(redisHash);
|
||||
// se non nulla --> ho semaforo!
|
||||
answ = !string.IsNullOrEmpty(rawData);
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace Thermo.Active.Model
|
||||
public const string AXES_CONFIG_PATH = CONFIG_DIRECTORY + "axesConfig.xml";
|
||||
public const string AXES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"axesConfigValidator.xsd";
|
||||
public const string BROADCAST_DATA = "BROADCAST_DATA";
|
||||
public const string TAKE_SNAPSHOT_THERMO = "TAKE_SNAPSHOT_THERMO";
|
||||
|
||||
// File paths
|
||||
public const string CLIENT_EXE_NAME = @"Active_Client.exe";
|
||||
@@ -142,6 +143,7 @@ namespace Thermo.Active.Model
|
||||
public const string SEND_THERMO_WARMERS_DATA = "SEND_THERMO_WARMERS_DATA";
|
||||
public const string SEND_THREADS_STATUS = "THREAD_STATUS";
|
||||
public const string SEND_USER_SOFTKEYS_DATA = "SEND_USER_SOFTKEYS_DATA";
|
||||
public const string RECIPE_LOADED = "RECIPE_LOADED";
|
||||
|
||||
// Names in the xml file
|
||||
public const string SERVER_CONFIG_KEY = "serverConfig";
|
||||
|
||||
@@ -475,10 +475,16 @@ namespace Thermo.Active.NC
|
||||
// solo x S7...
|
||||
if (NcConfig.NcVendor == NC_VENDOR.S7NET)
|
||||
{
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
|
||||
// call NC for update
|
||||
CmsError libraryError = numericalControl.PLC_WRecipeEdit(confirmUpdate);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
// tolgo blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1764,10 +1770,16 @@ namespace Thermo.Active.NC
|
||||
{
|
||||
if (NcFileAdapter.RecipeLiveData.ChannelSetpoints != null)
|
||||
{
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
|
||||
// se si in questo caso scrivo configurazione...
|
||||
WriteRecipeWarmConfig();
|
||||
// Ack !
|
||||
libraryError = numericalControl.PLC_WAckConfRiskRequest();
|
||||
|
||||
// tolgo in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(false);
|
||||
}
|
||||
}
|
||||
if (ThermoReqConfRecipeStr)
|
||||
@@ -1795,8 +1807,12 @@ namespace Thermo.Active.NC
|
||||
return NOT_FOUND_ERROR;
|
||||
}
|
||||
}
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
// se si in questo caso scrivo configurazione attuale...
|
||||
WriteRecipeParams(updtRecipe, nMaxParamWrite, delayParamWrite);
|
||||
// tolgo in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(false);
|
||||
|
||||
using (UserSoftkeysController controller = new UserSoftkeysController())
|
||||
{
|
||||
@@ -1813,6 +1829,9 @@ namespace Thermo.Active.NC
|
||||
newRisk.Add(item.Key, item.Value);
|
||||
}
|
||||
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
|
||||
// write to PLC SetPointHMI (%)
|
||||
libraryError = WriteRecipeWarmChSetpHMI(newRisk);
|
||||
if (libraryError.IsError())
|
||||
@@ -1827,6 +1846,9 @@ namespace Thermo.Active.NC
|
||||
libraryError = ConfirmRecipeData(true);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
// tolgo in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2577,7 +2599,7 @@ namespace Thermo.Active.NC
|
||||
|
||||
using (HistorySheetsController HSC = new HistorySheetsController())
|
||||
{
|
||||
HSC.Create(NcFileAdapter.RecipeLiveData.RecipeName, prodInfoData.NumDone, (float) sheetRaw.Value1, (float) sheetRaw.Value2, (float) sheetRaw.Value3,sheetRaw.TypeVal);
|
||||
HSC.Create(NcFileAdapter.RecipeLiveData.RecipeName, sheetRaw.IdPiece, (float) sheetRaw.Value1, (float) sheetRaw.Value2, (float) sheetRaw.Value3,sheetRaw.TypeVal);
|
||||
|
||||
// manage strobe/ack!
|
||||
libraryError = numericalControl.PLC_WAckHistorySheets();
|
||||
@@ -3421,8 +3443,14 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError SetTCamActiv(bool enableTCam)
|
||||
{
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WTCamActiv(enableTCam);
|
||||
|
||||
// tolgo in redis blocco x lettura ricetta...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3433,8 +3461,14 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError SetTCamMode(bool enableTCam)
|
||||
{
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WTCamMode(enableTCam);
|
||||
|
||||
// tolgo in redis blocco x lettura ricetta...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3669,8 +3703,15 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeParams(Dictionary<string, DTORecipeParam> updtRecipe, int nMaxParamWrite, int delayParamWrite)
|
||||
{
|
||||
|
||||
// registro in redis blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(true);
|
||||
|
||||
CmsError libraryError = WriteRecipeParametersToPLC(updtRecipe, nMaxParamWrite, delayParamWrite);
|
||||
|
||||
// tolgo blocco x lettura ricetta...
|
||||
RedisController.setRecipeReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3681,8 +3722,15 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChSetpHMI(Dictionary<int, int> updtSetpHmi)
|
||||
{
|
||||
// registro in redis blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WWarmerChSetpHmi(updtSetpHmi);
|
||||
|
||||
// tolgo blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3693,8 +3741,14 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChTCamEnab(Dictionary<int, bool> actualStates)
|
||||
{
|
||||
// registro in redis blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WWarmerChTCamEnab(actualStates);
|
||||
|
||||
// tolgo blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3705,8 +3759,14 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChTCamTempAct(Dictionary<int, double> actualTemp)
|
||||
{
|
||||
// registro in redis blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WWarmerChTCamTempAct(actualTemp);
|
||||
|
||||
// tolgo blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3717,8 +3777,14 @@ namespace Thermo.Active.NC
|
||||
/// <returns></returns>
|
||||
public CmsError WriteRecipeWarmChTCamTempSet(Dictionary<int, double> referenceTemp)
|
||||
{
|
||||
// registro in redis blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
CmsError libraryError = numericalControl.PLC_WWarmerChTCamTempSet(referenceTemp);
|
||||
|
||||
// tolgo blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -3732,6 +3798,9 @@ namespace Thermo.Active.NC
|
||||
Dictionary<int, int> newData = new Dictionary<int, int>();
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// registro in redis blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(true);
|
||||
|
||||
// scrivo l'abilitazione dei canali...
|
||||
foreach (var item in RiskBoardConfig)
|
||||
{
|
||||
@@ -3793,6 +3862,10 @@ namespace Thermo.Active.NC
|
||||
numericalControl.PLC_WWarmerChTCamEnab(resetTCamEnab);
|
||||
numericalControl.PLC_WWarmerChTCamTempAct(resetTCamTemp);
|
||||
numericalControl.PLC_WWarmerChTCamTempSet(resetTCamTemp);
|
||||
|
||||
// tolgo blocco x lettura warmers...
|
||||
RedisController.setWarmersReadSem(false);
|
||||
|
||||
// esce
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
@@ -724,7 +724,6 @@ namespace Thermo.Active.NC
|
||||
// check filePath...
|
||||
if (File.Exists(RECIPE_TEMPLATE_PATH))
|
||||
{
|
||||
answ = true;
|
||||
|
||||
// load all text data
|
||||
var rawData = File.ReadAllText(RECIPE_TEMPLATE_PATH);
|
||||
@@ -737,18 +736,20 @@ namespace Thermo.Active.NC
|
||||
// fix Modifica dati
|
||||
RecipeLiveData.hasChanged = false;
|
||||
// from template --> reset (if present) overview data...
|
||||
if (RecipeLiveData.RecipeOverview != null)
|
||||
/*if (RecipeLiveData.RecipeOverview != null)
|
||||
{
|
||||
foreach (var item in RecipeLiveData.RecipeOverview)
|
||||
{
|
||||
RecipeLiveData.RecipeOverview[item.Key] = RecipeCatStatus.Unchanged;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
// update NAME
|
||||
RecipeLiveData.RecipeName = $"{DateTime.Now:yyyyMMss_HHmmss}.json";
|
||||
RecipeLiveData.RecipeName = $"NEW_RECIPE_{DateTime.Now:HH_mm_ss}";
|
||||
|
||||
answ = true;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
catch(Exception e)
|
||||
{ return answ; }
|
||||
// update current live data!
|
||||
SaveRecipeCurrent();
|
||||
}
|
||||
|
||||
@@ -38,10 +38,6 @@
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -38,10 +38,6 @@
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Automatically generated by nicola.carminati: 2021-03-10 -->
|
||||
<!-- Automatically generated by nicola.carminati: 2021-03-29 -->
|
||||
<root>
|
||||
<language_it>Italiano</language_it>
|
||||
<header_maintainance_request>Effettuare manutenzione</header_maintainance_request>
|
||||
@@ -432,4 +432,16 @@
|
||||
<axis_info_brakealm>Allarme test freno:</axis_info_brakealm>
|
||||
<bitselect_select_none>Nessuno</bitselect_select_none>
|
||||
<bitselect_select_all>Tutti</bitselect_select_all>
|
||||
<underthehood_label_recipe>RIcetta</underthehood_label_recipe>
|
||||
<underthehood_label_numpiece>Lastra</underthehood_label_numpiece>
|
||||
<underthehood_label_type>Tipo</underthehood_label_type>
|
||||
<tem_fix>Fissa Temperature</tem_fix>
|
||||
<warmers_thermoprophet_enabled>Thermoprophet</warmers_thermoprophet_enabled>
|
||||
<modal_image_thermo>Immagini termocamera</modal_image_thermo>
|
||||
<thermo-long-tap-info>Tocca a lungo sull'immagine per leggere la temperatura</thermo-long-tap-info>
|
||||
<last-image>Ultimo scatto</last-image>
|
||||
<first-image>Primo scatto</first-image>
|
||||
<new_folder_name>Nome della Cartella:</new_folder_name>
|
||||
<new_recipe_name>Nome della nuova ricetta:</new_recipe_name>
|
||||
<recipe_create>Nuova ricetta</recipe_create>
|
||||
</root>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Automatically generated by nicola.carminati: 2021-03-10 -->
|
||||
<!-- Automatically generated by nicola.carminati: 2021-03-29 -->
|
||||
<root>
|
||||
<language_it>English</language_it>
|
||||
<header_maintainance_request>Maintenance request</header_maintainance_request>
|
||||
@@ -211,7 +211,7 @@
|
||||
<confirm>Confirm</confirm>
|
||||
<modal_load_program_lbl_sheet_x>Sheet size X:</modal_load_program_lbl_sheet_x>
|
||||
<modal_load_program_lbl_sheet_y>Sheet size Y:</modal_load_program_lbl_sheet_y>
|
||||
<modal_load_program_lbl_sheet_z>Sheet tickness:</modal_load_program_lbl_sheet_z>
|
||||
<modal_load_program_lbl_sheet_z>Sheet thickness:</modal_load_program_lbl_sheet_z>
|
||||
<modal_load_program_lbl_notes>Notes:</modal_load_program_lbl_notes>
|
||||
<modal_confirm_delete_recipe>Do you confirm that you want to delete the recipe?</modal_confirm_delete_recipe>
|
||||
<modal_load_program_lbl_box_selected_folder>Selected folder:</modal_load_program_lbl_box_selected_folder>
|
||||
@@ -432,4 +432,16 @@
|
||||
<axis_info_brakealm>Brake Test Alarm:</axis_info_brakealm>
|
||||
<bitselect_select_none>None</bitselect_select_none>
|
||||
<bitselect_select_all>All</bitselect_select_all>
|
||||
<underthehood_label_recipe>Recipe</underthehood_label_recipe>
|
||||
<underthehood_label_numpiece>Sheet</underthehood_label_numpiece>
|
||||
<underthehood_label_type>Type</underthehood_label_type>
|
||||
<tem_fix>Fix temperatures</tem_fix>
|
||||
<warmers_thermoprophet_enabled>Thermoprophet</warmers_thermoprophet_enabled>
|
||||
<modal_image_thermo>Thermocamera Images</modal_image_thermo>
|
||||
<thermo-long-tap-info>Long tap on image to add temperature inspectors</thermo-long-tap-info>
|
||||
<last-image>Last Image</last-image>
|
||||
<first-image>First Image</first-image>
|
||||
<new_folder_name>Name of the folder:</new_folder_name>
|
||||
<new_recipe_name>Name of the new recipe:</new_recipe_name>
|
||||
<recipe_create>New Recipe</recipe_create>
|
||||
</root>
|
||||
@@ -15,7 +15,7 @@
|
||||
<add key="ClientSettingsProvider.ServiceUri" value="" />
|
||||
<add key="ServerServiceName" value="MariaDB" />
|
||||
<add key="nMaxParamWrite" value="5" />
|
||||
<add key="delayParamWrite" value="5" />
|
||||
<add key="delayParamWrite" value="10" />
|
||||
<add key="ewmaPar100" value="40" />
|
||||
<add key="flirSwapXY" value="true" />
|
||||
<add key="cacheWarmers" value="false" />
|
||||
@@ -115,10 +115,6 @@
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<connectionStrings>
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Claims;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
@@ -142,7 +143,8 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
var originalRecipe = NcFileAdapter.LoadRecipe($"{NcAdapter.RecipeLiveData.RecipeDir}{NcAdapter.RecipeLiveData.RecipeName}");
|
||||
// comparazione parametri...
|
||||
bool isEqual = false;
|
||||
ncAdapter.paramsComparer(originalRecipe.RecipeParameters, NcAdapter.RecipeLiveData.RecipeParameters, out isEqual);
|
||||
if(originalRecipe != null)
|
||||
ncAdapter.paramsComparer(originalRecipe.RecipeParameters, NcAdapter.RecipeLiveData.RecipeParameters, out isEqual);
|
||||
// salvo se la ricetta SIA cambiata
|
||||
NcAdapter.RecipeLiveData.hasChanged = !isEqual;
|
||||
|
||||
@@ -325,6 +327,7 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
notifyHmi();
|
||||
|
||||
// Get new data from PLC
|
||||
/*
|
||||
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
|
||||
if (libraryError.IsError())
|
||||
{
|
||||
@@ -333,6 +336,8 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
}
|
||||
// pubblico
|
||||
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
|
||||
*/
|
||||
MessageServices.Current.Publish(RECIPE_LOADED, null);
|
||||
|
||||
// ritorno solo fatto!
|
||||
return Ok();
|
||||
@@ -701,6 +706,7 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
}
|
||||
|
||||
|
||||
|
||||
// copy data to PLC
|
||||
checkError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
|
||||
if (checkError.IsError())
|
||||
|
||||
@@ -591,6 +591,19 @@ namespace Thermo.Active.Controllers.WebApi
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///Take photo Thermocam
|
||||
/// </summary>
|
||||
/// <param name="channelsTemp"></param>
|
||||
/// <returns></returns>
|
||||
[Route("takeTcamImage"), HttpPut]
|
||||
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
|
||||
public IHttpActionResult TakeTcamImage()
|
||||
{
|
||||
MessageServices.Current.Publish(TAKE_SNAPSHOT_THERMO);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
|
||||
@@ -326,6 +326,10 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
lastSetpointHmiInvalid = currMessage;
|
||||
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
|
||||
context.Clients.Group("ncData").setpointHmiInvalid(currMessage);
|
||||
|
||||
context.Clients.Group("ncData").recipeFullDataInvalidSetpoint(LastRecipeFullData);
|
||||
context.Clients.Group("ncData").warmersData(LastWarmersData);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -686,7 +690,7 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
// Send THERMO Recipe data
|
||||
group.recipeFullData(LastRecipeFullData);
|
||||
group.recipeOverData(LastRecipeOverData);
|
||||
group.setpointHmiInvalid();
|
||||
|
||||
// Send THERMO Modules data
|
||||
group.modulesData(LastModulesData);
|
||||
// Send THERMO Warmers data
|
||||
@@ -696,6 +700,8 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
group.gaugeData(LastLiveProdData);
|
||||
// THERMO prod info data
|
||||
group.prodInfoData(LastProdInfoData);
|
||||
|
||||
group.prodPanelData(LastProdPanelData);
|
||||
// THERMO prod cycle data
|
||||
group.prodCycleData(LastProdCycleData);
|
||||
|
||||
|
||||
@@ -30,4 +30,4 @@ using System.Runtime.InteropServices;
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.1.186")]
|
||||
[assembly: AssemblyVersion("1.1.192")]
|
||||
|
||||
@@ -1,305 +0,0 @@
|
||||
;================================= 09-04-2019 =====
|
||||
; CMS S.p.A. - UX-HMI Office
|
||||
;
|
||||
; Setup for Active
|
||||
; Inno Setup Compiler version 5.6.0
|
||||
;==================================================
|
||||
|
||||
#define AppName "CMS Active"
|
||||
#define SCMAppName "Maestro Active cnc"
|
||||
#define FolderName "Active"
|
||||
#define SCMIcoName "SCM.ico"
|
||||
|
||||
#define MyAppVersion "1.5.5"
|
||||
#define MyAppPublisher "CMS"
|
||||
#define MyAppURL "https://www.scmgroup.com/it/cms"
|
||||
#define MyAppExeName "Active.exe"
|
||||
|
||||
#define ProjectPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\"
|
||||
#define MySourcePath "C:\Users\ext_lmascherone\Documents\cms_step\Step\bin"
|
||||
#define WwwRootPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\wwwroot"
|
||||
#define IconsPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\Desktop_Link\"
|
||||
#define InvDialPath "C:\Users\ext_lmascherone\Documents\cms_inverterdiagnosis\CMSInverterDiagnosis\bin\Release\"
|
||||
|
||||
#define SinumerikPath1 "{pf}\Siemens\Sinumerik\HMIsl\siemens\sinumerik\hmi\autostart\"
|
||||
#define SinumerikPath2 "C:\Siemens\Sinumerik\HMIsl\siemens\sinumerik\hmi\autostart\"
|
||||
#define SinumerikPath3 "{pf}\Siemens\MotionControl\siemens\sinumerik\hmi\autostart\"
|
||||
#define SinumerikAppName "Sinumerik HMI"
|
||||
#define SinumerikAppExeName "run_hmi.exe"
|
||||
; Support installers
|
||||
; .Net
|
||||
#define DotNetInstallerPath "C:\Users\ext_lmascherone\Documents\Per installazioni Active\"
|
||||
#define DotNetInstallerName "NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
|
||||
; MariaDb
|
||||
#define MariaDBInstallerPath "C:\Users\ext_lmascherone\Documents\Per installazioni Active\"
|
||||
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
|
||||
|
||||
|
||||
[Setup]
|
||||
AppName={#AppName}
|
||||
AppVersion={#MyAppVersion}
|
||||
AppVerName={#AppName} {#MyAppVersion}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
DisableDirPage=true
|
||||
DisableProgramGroupPage=yes
|
||||
Compression=lzma
|
||||
SolidCompression=true
|
||||
|
||||
VersionInfoVersion={#MyAppVersion}
|
||||
VersionInfoCompany={#MyAppPublisher}
|
||||
VersionInfoTextVersion={#MyAppVersion}
|
||||
VersionInfoCopyright={#MyAppPublisher}
|
||||
DefaultDirName = C:\CMS\{#FolderName}\{#FolderName}
|
||||
WindowVisible=false
|
||||
PrivilegesRequired=admin
|
||||
|
||||
; Setup installation type
|
||||
[Types]
|
||||
Name: custom; Description: CMS installation; Flags: iscustom
|
||||
|
||||
; Set NC types, this types are used to configure server config file
|
||||
[Components]
|
||||
Name: Fanuc; Description: {#AppName} {cm:ForFanucNC}; Types: custom; Flags: exclusive
|
||||
Name: Osai; Description: {#AppName} {cm:ForOsaiNC}; Types: custom; Flags: exclusive
|
||||
Name: Siemens; Description: {#AppName} {cm:ForSiemensNC}; Types: custom; Flags: exclusive
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
|
||||
|
||||
[CustomMessages]
|
||||
english.CreateStartupIcon=Create Startup &icon
|
||||
english.CreateSinumerikIcons=Create &Sinumerik HMI icons
|
||||
english.ForDemoNC=for DEMO NC
|
||||
english.ForFanucNC=for FANUC NC
|
||||
english.ForOsaiNC=for OSAI NC
|
||||
english.ForSiemensNC=for SIEMENS NC
|
||||
italian.CreateStartupIcon = Crea il collegamento in &Esecuzione Automatica
|
||||
italian.CreateSinumerikIcons = Crea le icone di &Sinumerik HMI
|
||||
italian.ForDemoNC=per CN DEMO
|
||||
italian.ForFanucNC=per CN FANUC
|
||||
italian.ForOsaiNC=per CN OSAI
|
||||
italian.ForSiemensNC=per CN SIEMENS
|
||||
|
||||
english.InstallDotNet = Install .Net 4.6.2
|
||||
english.InstallMariaDB = Install MariaDB
|
||||
|
||||
italian.InstallDotNet = Installa .Net 4.6.2
|
||||
italian.InstallMariaDB = Installa MariaDB
|
||||
|
||||
italian.InstallingMariaDB = Installando MariaDB
|
||||
english.InstallingMariaDB = Installing MariaDB
|
||||
|
||||
italian.InstallingDotNet = Installando .Net
|
||||
english.InstallingDotNet = Installing .Net
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone; Components: Fanuc Osai Siemens
|
||||
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Fanuc Osai Siemens
|
||||
Name: startupicon; Description: {cm:CreateStartupIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Fanuc Osai Siemens
|
||||
Name: sinumerikicons; Description: {cm:CreateSinumerikIcons}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Siemens
|
||||
|
||||
[Files]
|
||||
Source: "{#MySourcePath}\Thermo.Active.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
; Path to exe resources (dll, xml, config)
|
||||
Source: "{#MySourcePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#MySourcePath}\*.xml"; DestDir: "{app}"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#MySourcePath}\*.config"; DestDir: "{app}"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
; Configuration files
|
||||
Source: "{#MySourcePath}\Config\*.xml"; DestDir: "{app}\Config\"; Flags: ignoreversion; Components: Fanuc Osai Siemens; Check: GetOverwriteConfig;
|
||||
; Osai Library
|
||||
Source: "{#MySourcePath}\CndexLinkDotNet.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: Osai
|
||||
; Languages
|
||||
Source: "{#MySourcePath}\Language\*.*"; DestDir: "{app}\Language\"; Flags: ignoreversion; Components: Osai
|
||||
Source: "{#MySourcePath}\languages\*.*"; DestDir: "{app}\languages\"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
; Client copy
|
||||
Source: "{#MySourcePath}\Client\x64\*.*"; DestDir: "{app}\Client\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens; AfterInstall: DeleteLocalStorage
|
||||
; WWWRoot Files
|
||||
Source: "{#WwwRootPath}\favicon.ico"; DestDir: "{app}\view\"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#WwwRootPath}\index.html"; DestDir: "{app}\view\"; Flags: ignoreversion; Components: Fanuc Osai Siemens
|
||||
; WWWRoot Directories
|
||||
Source: "{#WwwRootPath}\dist\*"; DestDir: "{app}\view\dist\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#WwwRootPath}\libs\*"; DestDir: "{app}\view\libs\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#WwwRootPath}\assets\*"; DestDir: "{app}\view\assets\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
Source: "{#WwwRootPath}\scripts\*"; DestDir: "{app}\view\scripts\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
|
||||
; SCM Icon
|
||||
Source: {#IconsPath}{#SCMIcoName}; DestDir: "{app}"; Flags: ignoreversion; Components: Fanuc Osai Siemens; Check: GetStyleOption;
|
||||
|
||||
;.Net Installer
|
||||
Source: {#DotNetInstallerPath}\{#DotNetInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
|
||||
;Check: FrameworkIsNotInstalled
|
||||
Source: {#MariaDBInstallerPath}\{#MariaDBInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
|
||||
|
||||
; --- UTILS
|
||||
; Fanuc scripts - TEAMVIEWER
|
||||
Source: "{#ProjectPath}\Utility\*"; DestDir: "{app}\..\Utility\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
|
||||
; Inverter Dialog
|
||||
Source: "{#InvDialPath}\*"; DestDir: "{app}\..\Utility\Cms_Inverter_Diagnosis\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
|
||||
|
||||
; Client SCM Style
|
||||
Source: {#ProjectPath}\SCM_Client_Config.xml; DestDir:"{app}\Client\"; DestName: "Config.xml"; Flags: ignoreversion; Components: Fanuc Osai Siemens; Check: GetStyleOption;
|
||||
|
||||
[Icons]
|
||||
; Default icons
|
||||
Name: {group}\{#AppName}; Filename: {app}\{#MyAppExeName}; Components: Fanuc Osai; Check: NOT GetStyleOption;
|
||||
Name: {userdesktop}\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; Components: Fanuc Osai; Check: NOT GetStyleOption;
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon; Components: Fanuc Osai; Check: NOT GetStyleOption;
|
||||
Name: {userstartup}\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupicon; Components: Fanuc Osai; Check: NOT GetStyleOption;
|
||||
|
||||
; Siemens startup icon with parameters "-start ..."
|
||||
Name: {group}\{#AppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: "{app}\{#MyAppExeName}"; Components: Siemens; Check: NOT GetStyleOption;
|
||||
Name: {userdesktop}\{#AppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; Components: Siemens; Check: NOT GetStyleOption;
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Comment: {#AppName}; Components: Siemens; Check: NOT GetStyleOption;
|
||||
Name: {userstartup}\{#AppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Tasks: startupicon; IconFilename: "{app}\{#MyAppExeName}"; Parameters: -start {app}\{#MyAppExeName}; Components: Siemens; Check: NOT GetStyleOption;
|
||||
|
||||
; SCM ICONS
|
||||
; Default icons
|
||||
Name: {group}\{#SCMAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Components: Fanuc Osai; Check: GetStyleOption;
|
||||
Name: {userdesktop}\{#SCMAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Tasks: desktopicon; Components: Fanuc Osai; Check: GetStyleOption;
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#SCMAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Tasks: quicklaunchicon; Components: Fanuc Osai; Check: GetStyleOption;
|
||||
Name: {userstartup}\{#SCMAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Parameters: -start {app}\{#MyAppExeName}; Tasks: startupicon; Components: Fanuc Osai; Check: GetStyleOption;
|
||||
|
||||
; SCM Siemens startup icon with parameters "-start ..."
|
||||
Name: {group}\{#SCMAppName}; Filename: {#IconsPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Components: Siemens; Check: GetStyleOption;
|
||||
Name: {userdesktop}\{#SCMAppName}; Filename: {#IconsPath}{#SCMIcoName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Tasks: desktopicon; Components: Siemens; Check: GetStyleOption;
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#SCMAppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName};Tasks: quicklaunchicon; Components: Siemens; Check: GetStyleOption;
|
||||
Name: {userstartup}\{#SCMAppName}; Filename: {code:SiemensPath}{#SinumerikAppExeName}; Parameters: -start {app}\{#MyAppExeName}; IconFilename: {app}\{#SCMIcoName}; Tasks: startupicon; Components: Siemens; Check: GetStyleOption;
|
||||
|
||||
[Run]
|
||||
; Install .net
|
||||
Filename: {tmp}\{#DotNetInstallerName}; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingDotNet}; Check: NetFrameworkNeedInstall
|
||||
;Check: NetFrameworkIsMissing
|
||||
; Install MariaDb
|
||||
Filename: "msiexec.exe"; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingMariaDB}; Parameters: "/i {tmp}\{#MariaDBInstallerName}"; Check: CheckHeidiSQLNeedInstall;
|
||||
|
||||
/// MinVersion: 10
|
||||
[Registry]
|
||||
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "Active"; ValueData: "C:\CMS\ACTIVE\Active\Active.exe"; Components: Fanuc Osai; MinVersion: 10;
|
||||
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "Active"; ValueData: "C:\Program Files (x86)\Siemens\MotionControl\siemens\sinumerik\hmi\autostart\run_hmi.exe -start C:\CMS\Active\Active\Active.exe"; Components: Siemens; MinVersion: 10;
|
||||
|
||||
[Code]
|
||||
///////////// SiemensPath ///////////////////////////////
|
||||
var
|
||||
CheckBoxIni: TCheckBox;
|
||||
CustomInputOptionCMSorSCM: TInputOptionWizardPage;
|
||||
IsSCM: Boolean;
|
||||
OverwriteConfig: Boolean;
|
||||
|
||||
function GetStyleOption: Boolean;
|
||||
begin
|
||||
Result := IsSCM;
|
||||
end;
|
||||
|
||||
////////////////// GetSiemens Path ///////////////////
|
||||
function SiemensPath(S: String): string;
|
||||
var
|
||||
sSiemensPath: string;
|
||||
sSelectedSinumerikDir: string;
|
||||
begin
|
||||
if DirExists(ExpandConstant('{#SinumerikPath3}')) then
|
||||
sSiemensPath := ExpandConstant('{#SinumerikPath3}')
|
||||
else if DirExists(ExpandConstant('{#SinumerikPath2}')) then
|
||||
sSiemensPath := ExpandConstant('{#SinumerikPath2}')
|
||||
else if DirExists(ExpandConstant('{#SinumerikPath1}')) then
|
||||
sSiemensPath := ExpandConstant('{#SinumerikPath1}')
|
||||
else
|
||||
begin
|
||||
if (sSelectedSinumerikDir = '') then
|
||||
BrowseForFolder('Sinumerik folder not found!'#13#10'Select Sinumerik folder containing run_hmi.exe'#13#10'ex: '+ExpandConstant('{#SinumerikPath1}'), sSelectedSinumerikDir, False);
|
||||
|
||||
sSiemensPath := sSelectedSinumerikDir + '\' ;
|
||||
end;
|
||||
|
||||
Result := sSiemensPath ;
|
||||
end;
|
||||
|
||||
///////////////// Check .NET Framework 4.6.2 ////////////////////////////////////
|
||||
|
||||
function NetFrameworkNeedInstall(): Boolean;
|
||||
var
|
||||
bSuccess: Boolean;
|
||||
regVersion: Cardinal;
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', regVersion);
|
||||
if (True = bSuccess) and (regVersion >= 394802) then begin
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////// Check heidiSQL /////////////////
|
||||
function CheckHeidiSQLNeedInstall: Boolean;
|
||||
begin
|
||||
if FileExists(ExpandConstant('C:\Program Files (x86)\Common Files\MariaDBShared\HeidiSQL\heidisql.exe'))
|
||||
then Result:= false
|
||||
else
|
||||
begin
|
||||
Result:= True
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////// CreateCustomInputOptionCMsorSCM //////////////////////////
|
||||
procedure CreateCustomInputOptionCMSorSCM;
|
||||
begin
|
||||
CustomInputOptionCMSorSCM := CreateInputOptionPage(wpSelectComponents, 'Seleziona lo stile:', '', '', True, False);
|
||||
//Add Fields
|
||||
CustomInputOptionCMSorSCM.Add('CMS');
|
||||
CustomInputOptionCMSorSCM.Add('SCM');
|
||||
// Set initial values (optional)
|
||||
CustomInputOptionCMSorSCM.Values[0] := True;
|
||||
end;
|
||||
|
||||
/////////////////// CheckConfigExistence /////////////////////////////
|
||||
function OverwriteConfigModal: Boolean;
|
||||
begin
|
||||
if DirExists(ExpandConstant('C:\CMS\Active\Active\Config')) then begin
|
||||
// Ask the user a Yes/No question, defaulting to No
|
||||
if not (MsgBox('La cartella "Config" esiste già. Vuoi sovrascriverla?', mbConfirmation, MB_YESNO) = IDYES) then
|
||||
begin
|
||||
// user clicked NO
|
||||
Result:= false;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result:= True;
|
||||
end;
|
||||
|
||||
function GetOverwriteConfig: Boolean;
|
||||
begin
|
||||
Result:= OverwriteConfig;
|
||||
end;
|
||||
|
||||
/////////////////// DeleteLocalStorage //////////////////////
|
||||
procedure DeleteLocalStorage;
|
||||
begin
|
||||
DelTree(ExpandConstant('{app}\Client\LocalStorage'), True, True, True);
|
||||
|
||||
end;
|
||||
|
||||
///////////// InitializeWizard //////////////////////////
|
||||
procedure InitializeWizard();
|
||||
begin
|
||||
CreateCustomInputOptionCMSorSCM;
|
||||
OverwriteConfig := OverwriteConfigModal;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if CustomInputOptionCMSorSCM.Values[0]
|
||||
then IsSCM := false
|
||||
else
|
||||
IsSCM := true;
|
||||
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
DeleteLocalStorage;
|
||||
end;
|
||||
end;
|
||||
@@ -5,8 +5,8 @@
|
||||
; Inno Setup Compiler version 5.6.0
|
||||
;==================================================
|
||||
|
||||
#define AppName "CMS Active"
|
||||
#define FolderName "Thermo.Active"
|
||||
#define AppName "CMS ThermoActive"
|
||||
#define FolderName "ThermoActive"
|
||||
|
||||
#define MyAppPublisher "CMS"
|
||||
#define MyAppURL "https://www.scmgroup.com/it/cms"
|
||||
@@ -26,10 +26,10 @@
|
||||
; .Net
|
||||
; MariaDb
|
||||
; cms_inv_diag
|
||||
#define DotNetInstallerName "NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
|
||||
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
|
||||
#define CmsInvDiagPath "cms_inv_diag"
|
||||
|
||||
#define DotNetInstallerName "NDP472-KB4054530-x86-x64-AllOS-ENU.exe"
|
||||
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
|
||||
#define VCppInstallerName "VC_redist.x64.exe"
|
||||
|
||||
|
||||
[Setup]
|
||||
AppName={#AppName}
|
||||
@@ -51,7 +51,7 @@ VersionInfoVersion={#MyAppVersion}
|
||||
VersionInfoCompany={#MyAppPublisher}
|
||||
VersionInfoTextVersion={#MyAppVersion}
|
||||
VersionInfoCopyright={#MyAppPublisher}
|
||||
DefaultDirName = C:\CMS\{#FolderName}\{#FolderName}
|
||||
DefaultDirName = C:\CMS\{#FolderName}
|
||||
WindowVisible=false
|
||||
PrivilegesRequired=admin
|
||||
|
||||
@@ -71,17 +71,21 @@ Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
|
||||
english.CreateStartupIcon=Create Startup &icon
|
||||
italian.CreateStartupIcon = Crea il collegamento in &Esecuzione Automatica
|
||||
|
||||
english.InstallDotNet = Install .Net 4.6.2
|
||||
english.InstallDotNet = Install .Net 4.7.2
|
||||
english.InstallMariaDB = Install MariaDB
|
||||
english.InstallVCpp = Install VC++ 2017
|
||||
|
||||
italian.InstallDotNet = Installa .Net 4.6.2
|
||||
italian.InstallMariaDB = Installa MariaDB
|
||||
italian.InstallMariaDB = Installa MariaDB
|
||||
italian.InstallVCpp = Installa VC++ 2017
|
||||
|
||||
italian.InstallingMariaDB = Installando MariaDB
|
||||
english.InstallingMariaDB = Installing MariaDB
|
||||
english.InstallingVCpp = Installing VC++ 2017
|
||||
|
||||
italian.InstallingDotNet = Installando .Net
|
||||
english.InstallingDotNet = Installing .Net
|
||||
italian.InstallingMariaDB = Installando MariaDB
|
||||
italian.InstallingVCpp = Installando VC++ 2017
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone;
|
||||
@@ -91,10 +95,12 @@ Name: startupicon; Description: {cm:CreateStartupIcon}; GroupDescription: {cm:Ad
|
||||
[Files]
|
||||
Source: "{#MySourcePath}\Thermo.Active.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
; Path to exe resources (dll, xml, config)
|
||||
; Path to exe resources (dll, xml, config)
|
||||
Source: "{#MySourcePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion;
|
||||
Source: "{#MySourcePath}\*.xml"; DestDir: "{app}"; Flags: ignoreversion;
|
||||
Source: "{#MySourcePath}\*.config"; DestDir: "{app}"; Flags: ignoreversion;
|
||||
; Configuration files
|
||||
Source: "{#MySourcePath}\Config\*.xml"; DestDir: "{app}\Config\"; Flags: ignoreversion;
|
||||
Source: "{#MySourcePath}\Config\*.xml"; DestDir: "{app}\Config\"; Flags: ignoreversion; Check: GetOverwriteConfig;
|
||||
; Languages
|
||||
Source: "{#MySourcePath}\languages\*.*"; DestDir: "{app}\languages\"; Flags: ignoreversion;
|
||||
; dll
|
||||
@@ -104,16 +110,19 @@ Source: "{#MySourcePath}\Client\*.*"; DestDir: "{app}\Client\"; Flags: recursesu
|
||||
; WWWRoot Files
|
||||
Source: "{#WwwRootPath}\favicon.ico"; DestDir: "{app}\view\"; Flags: ignoreversion;
|
||||
Source: "{#WwwRootPath}\index.html"; DestDir: "{app}\view\"; Flags: ignoreversion;
|
||||
Source: "{#WwwRootPath}\config.production.json"; DestDir: "{app}\view\"; Flags: ignoreversion;
|
||||
; WWWRoot Directories
|
||||
Source: "{#WwwRootPath}\dist\*"; DestDir: "{app}\view\dist\"; Flags: recursesubdirs ignoreversion;
|
||||
Source: "{#WwwRootPath}\libs\*"; DestDir: "{app}\view\libs\"; Flags: recursesubdirs ignoreversion;
|
||||
Source: "{#WwwRootPath}\assets\*"; DestDir: "{app}\view\assets\"; Flags: recursesubdirs ignoreversion;
|
||||
Source: "{#WwwRootPath}\scripts\*"; DestDir: "{app}\view\scripts\"; Flags: recursesubdirs ignoreversion;
|
||||
|
||||
|
||||
|
||||
;.Net Installer
|
||||
Source: {#ToolInstallerPath}\{#DotNetInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
|
||||
;Check: FrameworkIsNotInstalled
|
||||
Source: {#ToolInstallerPath}\{#VCppInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
|
||||
;Check: FrameworkIsNotInstalled
|
||||
Source: {#ToolInstallerPath}\{#MariaDBInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
|
||||
|
||||
; --- UTILS
|
||||
@@ -131,6 +140,8 @@ Name: {userstartup}\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupi
|
||||
[Run]
|
||||
; Install .net
|
||||
Filename: {tmp}\{#DotNetInstallerName}; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingDotNet}; Check: NetFrameworkNeedInstall
|
||||
Filename: {tmp}\{#VCppInstallerName}; Description: {cm:InstallVCpp}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingVCpp}; Check: VCPPNeedInstall
|
||||
|
||||
;Check: NetFrameworkIsMissing
|
||||
; Install MariaDb
|
||||
Filename: "msiexec.exe"; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingMariaDB}; Parameters: "/i {tmp}\{#MariaDBInstallerName}"; Check: CheckHeidiSQLNeedInstall;
|
||||
@@ -157,11 +168,32 @@ var
|
||||
Result := True;
|
||||
|
||||
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', regVersion);
|
||||
if (True = bSuccess) and (regVersion >= 394802) then begin
|
||||
if (True = bSuccess) and (regVersion >= 461808) then begin
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
///////////////// Check .NET Framework 4.6.2 ////////////////////////////////////
|
||||
|
||||
function VCPPNeedInstall(): Boolean;
|
||||
var
|
||||
bSuccess: Boolean;
|
||||
bSuccessM: Boolean;
|
||||
regVersion: Cardinal;
|
||||
regMinor: Cardinal;
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
bSuccess := RegQueryDWordValue(HKLM, 'Software\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Major', regVersion);
|
||||
bSuccessM := RegQueryDWordValue(HKLM, 'Software\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64', 'Minor', regMinor);
|
||||
if (True = bSuccess) and (True = bSuccessM) and ((regVersion >14) or ((regVersion = 14) and (regMinor >13))) then begin
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
///////////// Check heidiSQL /////////////////
|
||||
function CheckHeidiSQLNeedInstall: Boolean;
|
||||
begin
|
||||
@@ -177,7 +209,7 @@ var
|
||||
/////////////////// CheckConfigExistence /////////////////////////////
|
||||
function OverwriteConfigModal: Boolean;
|
||||
begin
|
||||
if DirExists(ExpandConstant('C:\CMS\Thermo.Active\Thermo.Active\Config')) then begin
|
||||
if DirExists(ExpandConstant('C:\CMS\ThermoActive\Config')) then begin
|
||||
// Ask the user a Yes/No question, defaulting to No
|
||||
if not (MsgBox('La cartella "Config" esiste già. Vuoi sovrascriverla?', mbConfirmation, MB_YESNO) = IDYES) then
|
||||
begin
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -2092,7 +2092,7 @@
|
||||
}
|
||||
|
||||
.body {
|
||||
height: calc(~"100%"- 64px);
|
||||
height: calc(~"100%" - 64px);
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -3476,7 +3476,6 @@
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #ffffff;
|
||||
top: 0;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
@@ -3485,6 +3484,9 @@
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: -webkit-grab;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.loading {
|
||||
@@ -3530,6 +3532,17 @@
|
||||
|
||||
}
|
||||
|
||||
.btngroup2{
|
||||
position: absolute;
|
||||
bottom: 510px;
|
||||
right: 0;
|
||||
margin-right: 20px;
|
||||
img{
|
||||
box-shadow: none;
|
||||
filter: grayscale(1)brightness(0)invert(1);
|
||||
}
|
||||
}
|
||||
|
||||
.btngroup {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
@@ -3562,11 +3575,17 @@
|
||||
cursor: pointer;
|
||||
color: #FFF;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
&:active{
|
||||
background-image: linear-gradient(to bottom,#002680, #1756ad);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
button:disabled {
|
||||
background-color: #002680 !important;
|
||||
;
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
|
||||
@@ -426,6 +426,10 @@
|
||||
&.fa-check-circle.undone-step {
|
||||
color: #1791ff;
|
||||
}
|
||||
&.edit{
|
||||
left: 80px;
|
||||
color: #1791ff;
|
||||
}
|
||||
}
|
||||
|
||||
span,
|
||||
@@ -534,6 +538,10 @@
|
||||
&.fa-check-circle.undone-step {
|
||||
color: #1791ff;
|
||||
}
|
||||
&.edit{
|
||||
left: 133px;
|
||||
color: #1791ff;
|
||||
}
|
||||
}
|
||||
|
||||
position: relative;
|
||||
|
||||
@@ -382,6 +382,10 @@
|
||||
.setup .modal-footer-navigator .setup-button i.fa-check-circle.undone-step {
|
||||
color: #1791ff;
|
||||
}
|
||||
.setup .modal-footer-navigator .setup-button i.edit {
|
||||
left: 80px;
|
||||
color: #1791ff;
|
||||
}
|
||||
.setup .modal-footer-navigator .setup-button span,
|
||||
.setup .modal-footer-navigator .setup-button label {
|
||||
grid-row-start: 1;
|
||||
@@ -473,6 +477,10 @@
|
||||
.setup-button i.fa-check-circle.undone-step {
|
||||
color: #1791ff;
|
||||
}
|
||||
.setup-button i.edit {
|
||||
left: 133px;
|
||||
color: #1791ff;
|
||||
}
|
||||
.setup-button .background-top,
|
||||
.setup-button .background-bottom {
|
||||
position: absolute;
|
||||
@@ -2321,7 +2329,7 @@ article .box .body {
|
||||
color: #fff;
|
||||
}
|
||||
.modal.modal-image .body {
|
||||
height: calc(100%-64px);
|
||||
height: calc(100% - 64px);
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -3668,7 +3676,6 @@ article .box .body {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #ffffff;
|
||||
top: 0;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
@@ -3677,6 +3684,9 @@ article .box .body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: -webkit-grab;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.imageViewerZoom .loading {
|
||||
position: absolute;
|
||||
@@ -3715,6 +3725,16 @@ article .box .body {
|
||||
margin-right: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.imageViewerZoom .btngroup2 {
|
||||
position: absolute;
|
||||
bottom: 510px;
|
||||
right: 0;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.imageViewerZoom .btngroup2 img {
|
||||
box-shadow: none;
|
||||
filter: grayscale(1) brightness(0) invert(1);
|
||||
}
|
||||
.imageViewerZoom .btngroup {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
@@ -3730,8 +3750,6 @@ article .box .body {
|
||||
}
|
||||
.imageViewerZoom button {
|
||||
font-size: 20px;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
background-color: #ffffff;
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002680);
|
||||
box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.4);
|
||||
@@ -3744,6 +3762,12 @@ article .box .body {
|
||||
cursor: pointer;
|
||||
color: #FFF;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.imageViewerZoom button:active {
|
||||
background-image: linear-gradient(to bottom, #002680, #1756ad);
|
||||
}
|
||||
.imageViewerZoom button:disabled {
|
||||
background-color: #002680 !important;
|
||||
|
||||
Generated
+18412
-18460
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,7 @@ import { loginService, machineService, localizationService } from "./services";
|
||||
import { prodService } from "./services/prodService";
|
||||
import * as iziToast from "izitoast";
|
||||
import { underTheHoodService } from "./services/underTheHoodService";
|
||||
import { warmersService } from "./services/warmersService";
|
||||
|
||||
// import { UsersService } from "./services/usersService";
|
||||
|
||||
@@ -60,7 +61,6 @@ async function loadMachineConfig() {
|
||||
|
||||
await loginService.getUserInfo();
|
||||
|
||||
|
||||
try {
|
||||
let machine = new machineService();
|
||||
let result = await machine.getAreasConfiguration();
|
||||
@@ -68,12 +68,12 @@ async function loadMachineConfig() {
|
||||
|
||||
let mcresult = await machine.getMachineConfiguration();
|
||||
machineStatusActions.setWarmersParameters(store, mcresult.additionalParameters);
|
||||
|
||||
await prodService.GetProdPanel();
|
||||
await warmersService.GetResistances();
|
||||
|
||||
await underTheHoodService.getChannels();
|
||||
await underTheHoodService.getChannelsConfig();
|
||||
|
||||
|
||||
// load default language
|
||||
if (!(store.state as AppModel).localization.currentLanguage) {
|
||||
localizationService.changeCurrentLanguage(mcresult.defaultLanguage);
|
||||
|
||||
@@ -130,8 +130,6 @@ export default class Dashboard extends Vue {
|
||||
}
|
||||
|
||||
async mounted() {
|
||||
prodService.GetProdPanel();
|
||||
|
||||
let $this = this;
|
||||
setInterval(() => {
|
||||
$this.now = moment();
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="svg-area">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1057" height="707" viewBox="0 0 1100 707">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1057" height="707" viewBox="-50 0 1150 707">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g>
|
||||
<g>
|
||||
|
||||
+13
@@ -97,6 +97,19 @@ export default class ShowCicloInfo extends Vue {
|
||||
}
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 2,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 2,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
@@ -17,6 +17,7 @@ import ShowImbutituraInfo from "@/app_modules_thermo/setup/imbutitura/show-imbut
|
||||
import ShowOpzioniInfo from "@/app_modules_thermo/setup/opzioni/show-opzioni-info.vue";
|
||||
// import AvvioProduzione from "@/app_modules_thermo/setup/avvio-produzione/avvio-produzione.vue";
|
||||
import { store } from '@/store';
|
||||
import { RecipeGetters } from '@/store/recipe.store';
|
||||
|
||||
|
||||
@Component({
|
||||
@@ -27,7 +28,7 @@ import { store } from '@/store';
|
||||
})
|
||||
export default class Setup extends Vue {
|
||||
|
||||
|
||||
|
||||
async showModalAtStep(step: number) {
|
||||
try {
|
||||
let next = await this.showModalStep(step);
|
||||
@@ -41,6 +42,10 @@ export default class Setup extends Vue {
|
||||
return store.state.recipe.overview;
|
||||
}
|
||||
|
||||
getIntChanges(val) {
|
||||
return (this.$store.getters as RecipeGetters).getIntStates(val);
|
||||
}
|
||||
|
||||
showModalStep(step: number): Promise<number> {
|
||||
switch (step) {
|
||||
case 0: return ModalHelper.ShowModalAsync(ShowFormatoInfo, null);
|
||||
@@ -60,6 +65,7 @@ export default class Setup extends Vue {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
mounted() {
|
||||
messageService.subscribeToChannel('show-setup-modal', (m) => this.showModalAtStep(m));
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
:phase="1"
|
||||
:title="'lbl_recipe_overview_general' | localize('Formato')"
|
||||
:status="overview.general"
|
||||
:haschanges="getIntChanges(0)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -14,6 +15,7 @@
|
||||
:phase="2"
|
||||
:title="'lbl_recipe_overview_positions' | localize('Quota e velocità')"
|
||||
:status="overview.positions"
|
||||
:haschanges="getIntChanges(1)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -21,6 +23,7 @@
|
||||
:phase="3"
|
||||
:title="'lbl_recipe_overview_cycle' | localize('Ciclo')"
|
||||
:status="overview.cycle"
|
||||
:haschanges="getIntChanges(2)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -28,6 +31,7 @@
|
||||
:phase="4"
|
||||
:title="'lbl_recipe_overview_heats' | localize('Riscaldi')"
|
||||
:status="overview.heats"
|
||||
:haschanges="getIntChanges(3)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -35,6 +39,7 @@
|
||||
:phase="5"
|
||||
:title="'lbl_recipe_overview_pyrometer' | localize('Pirometro')"
|
||||
:status="overview.pyrometer"
|
||||
:haschanges="getIntChanges(4)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -42,6 +47,7 @@
|
||||
:phase="6"
|
||||
:title="'lbl_recipe_overview_drawing' | localize('Imbutitura')"
|
||||
:status="overview.drawing"
|
||||
:haschanges="getIntChanges(5)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -49,6 +55,7 @@
|
||||
:phase="7"
|
||||
:title="'lbl_recipe_overview_upperPlate' | localize('Controstampo')"
|
||||
:status="overview.upperPlate"
|
||||
:haschanges="getIntChanges(6)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -56,6 +63,7 @@
|
||||
:phase="8"
|
||||
:title="'lbl_recipe_overview_cooling' | localize('Raffreddamento')"
|
||||
:status="overview.cooling"
|
||||
:haschanges="getIntChanges(7)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -63,6 +71,7 @@
|
||||
:phase="9"
|
||||
:title="'lbl_recipe_overview_vacuum' | localize('Vuoto')"
|
||||
:status="overview.vacuum"
|
||||
:haschanges="getIntChanges(8)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -70,6 +79,7 @@
|
||||
:phase="10"
|
||||
:title="'lbl_recipe_overview_extraction' | localize('Estrazione')"
|
||||
:status="overview.extraction"
|
||||
:haschanges="getIntChanges(9)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -77,6 +87,7 @@
|
||||
:phase="11"
|
||||
:title="'lbl_recipe_overview_options' | localize('Opzioni di lavorazione')"
|
||||
:status="overview.options"
|
||||
:haschanges="getIntChanges(10)"
|
||||
></setup-button>
|
||||
|
||||
<!-- <div class="setup-play" @click="showModalAtStep(11);">
|
||||
|
||||
@@ -17,4 +17,9 @@ export default class setupButton extends Vue {
|
||||
|
||||
@Prop()
|
||||
status: string;
|
||||
|
||||
|
||||
@Prop()
|
||||
haschanges: boolean;
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
<i v-if="status == 'Unchanged'" class="fa fa-check-circle undone-step"></i>
|
||||
<i v-if="status == 'ChangedOk'" class="fa fa-check-circle"></i>
|
||||
<i v-if="status == 'HasError'" class="fa fa-exclamation-triangle warning"></i>
|
||||
<i v-if="haschanges" class="fa fa-pencil-square undone-step edit"></i>
|
||||
</div>
|
||||
</template>
|
||||
<script src="./setupButton.ts" lang="ts"></script>
|
||||
|
||||
@@ -4,6 +4,7 @@ import { messageService } from "@/_base/messageService";
|
||||
import setupButton from "./setupButton.vue";
|
||||
import { Prop } from 'vue-property-decorator';
|
||||
import { store } from '@/store';
|
||||
import { RecipeGetters } from '@/store/recipe.store';
|
||||
|
||||
@Component({ name: 'stepfooter', components: { setupButton } })
|
||||
export default class StepFooter extends Vue {
|
||||
@@ -15,8 +16,18 @@ export default class StepFooter extends Vue {
|
||||
this.$emit('click', step - this.current)
|
||||
}
|
||||
|
||||
|
||||
getIntChanges(val) {
|
||||
return (this.$store.getters as RecipeGetters).getIntStates(val);
|
||||
}
|
||||
|
||||
get overview() {
|
||||
return store.state.recipe.overview;
|
||||
}
|
||||
|
||||
|
||||
mounted() {
|
||||
messageService.subscribeToChannel('show-setup-modal', (m) => this.showModalAtStep(m));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
:phase="1"
|
||||
:title="'lbl_recipe_overview_general' | localize('Formato')"
|
||||
:status="overview.general"
|
||||
:haschanges="getIntChanges(0)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -14,6 +15,7 @@
|
||||
:phase="2"
|
||||
:title="'lbl_recipe_overview_positions' | localize('Quota e velocità')"
|
||||
:status="overview.positions"
|
||||
:haschanges="getIntChanges(1)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -22,6 +24,7 @@
|
||||
:phase="3"
|
||||
:title="'lbl_recipe_overview_cycle' | localize('Ciclo')"
|
||||
:status="overview.cycle"
|
||||
:haschanges="getIntChanges(2)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -30,6 +33,7 @@
|
||||
:phase="4"
|
||||
:title="'lbl_recipe_overview_heats' | localize('Riscaldi')"
|
||||
:status="overview.heats"
|
||||
:haschanges="getIntChanges(3)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -38,22 +42,25 @@
|
||||
:phase="5"
|
||||
:title="'lbl_recipe_overview_pyrometer' | localize('Pirometro')"
|
||||
:status="overview.pyrometer"
|
||||
:haschanges="getIntChanges(4)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@click="showModalAtStep(5)"
|
||||
:class="{'current': current== 5}"
|
||||
:phase="6"
|
||||
:title="'lbl_recipe_overview_drawing' | localize('Imbutitura')"
|
||||
:status="overview.drawing"
|
||||
:title="'lbl_recipe_overview_drawing' | localize('Imbutitura')"
|
||||
:status="overview.drawing"
|
||||
:haschanges="getIntChanges(5)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@click="showModalAtStep(6)"
|
||||
:class="{'current': current== 6}"
|
||||
:phase="7"
|
||||
:title="'lbl_recipe_overview_upperPlate' | localize('Controstampo')"
|
||||
:status="overview.upperPlate"
|
||||
:title="'lbl_recipe_overview_upperPlate' | localize('Controstampo')"
|
||||
:status="overview.upperPlate"
|
||||
:haschanges="getIntChanges(6)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -62,6 +69,7 @@
|
||||
:phase="8"
|
||||
:title="'lbl_recipe_overview_cooling' | localize('Raffreddamento')"
|
||||
:status="overview.cooling"
|
||||
:haschanges="getIntChanges(7)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -70,6 +78,7 @@
|
||||
:phase="9"
|
||||
:title="'lbl_recipe_overview_vacuum' | localize('Vuoto')"
|
||||
:status="overview.vacuum"
|
||||
:haschanges="getIntChanges(8)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -78,6 +87,7 @@
|
||||
:phase="10"
|
||||
:title="'lbl_recipe_overview_extraction' | localize('Estrazione')"
|
||||
:status="overview.extraction"
|
||||
:haschanges="getIntChanges(9)"
|
||||
></setup-button>
|
||||
|
||||
<setup-button
|
||||
@@ -86,6 +96,7 @@
|
||||
:phase="11"
|
||||
:title="'lbl_recipe_overview_options' | localize('Opzioni di lavorazione')"
|
||||
:status="overview.options"
|
||||
:haschanges="getIntChanges(10)"
|
||||
></setup-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
+14
@@ -49,6 +49,20 @@ export default class ShowControstampoInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 6,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 6,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+14
@@ -38,6 +38,20 @@ export default class ShowEstrazioneInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 9,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 9,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+14
@@ -60,6 +60,20 @@ export default class ShowFormatoInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 0,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 0,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
@@ -49,6 +49,19 @@ export default class ShowImbutituraInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 5,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 5,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
@@ -41,6 +41,19 @@ export default class ShowOpzioniInfo extends Vue {
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 10,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 10,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+14
@@ -39,6 +39,20 @@ export default class ShowPirometroInfo extends Vue {
|
||||
// ModalHelper.HideModal();
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 4,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 4,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
|
||||
+14
@@ -82,6 +82,20 @@ export default class ShowQuoteVelocitaInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 1,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 1,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+14
@@ -53,6 +53,20 @@ export default class Raffreddamento extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 7,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 7,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
.warmers {
|
||||
display: grid !important;
|
||||
grid-template-columns: 1fr 70px;
|
||||
margin-right: -14px;
|
||||
}
|
||||
.warmers .right-controls {
|
||||
display: flex;
|
||||
flex-flow: column nowrap;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.warmers .right-controls .tm-controls {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 420px;
|
||||
}
|
||||
.warmers .right-controls .tm-controls input[type="range"][orient="vertical"] {
|
||||
writing-mode: bt-lr;
|
||||
/* IE */
|
||||
-webkit-appearance: slider-vertical;
|
||||
/* WebKit */
|
||||
width: 6px;
|
||||
height: 150px;
|
||||
border: none !important;
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
border-radius: 10px;
|
||||
}
|
||||
.warmers .right-controls .tm-controls input[type="range"][orient="vertical"]::-webkit-slider-thumb {
|
||||
min-width: 30px;
|
||||
min-height: 30px;
|
||||
border: none;
|
||||
background: none !important;
|
||||
appearance: none;
|
||||
}
|
||||
.warmers .right-controls .tm-controls input[type="range"]::-webkit-slider-thumb {
|
||||
background-color: linear-gradient(to bottom, #1756ad, #002e6e 97%) !important;
|
||||
}
|
||||
.warmers .right-controls .um-buttons {
|
||||
background-color: #dddddd;
|
||||
height: 130px;
|
||||
width: 40px;
|
||||
border-radius: 20px;
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
flex-flow: column nowrap;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
}
|
||||
.warmers .right-controls .um-buttons button {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 50px;
|
||||
border: none;
|
||||
text-align: center;
|
||||
line-height: 34px;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
box-shadow: inset 0 2px 2px 0 rgba(0, 0, 0, 0.19);
|
||||
background-color: rgba(187, 188, 188, 0.5);
|
||||
}
|
||||
.warmers .right-controls .um-buttons button.selected {
|
||||
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.5);
|
||||
background-image: linear-gradient(to bottom, #1756ad, #002e6e 97%);
|
||||
}
|
||||
.warmers .right-controls .buttons button {
|
||||
margin: 8px;
|
||||
}
|
||||
+2
-2
@@ -13,13 +13,13 @@
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 350px;
|
||||
height: 420px;
|
||||
|
||||
input[type="range"][orient="vertical"] {
|
||||
writing-mode: bt-lr; /* IE */
|
||||
-webkit-appearance: slider-vertical; /* WebKit */
|
||||
width: 6px;
|
||||
height: 250px;
|
||||
height: 150px;
|
||||
border: none !important;
|
||||
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.5);
|
||||
border-radius: 10px;
|
||||
|
||||
+31
-7
@@ -10,11 +10,12 @@ import termoModal from "./thermoProphet-modal.vue";
|
||||
import { ModalHelper } from '@/components/modals';
|
||||
import moment from "moment";
|
||||
import { messageService } from "src/_base";
|
||||
import ModalImage from "@/modules/base-components/modal-image.vue";
|
||||
|
||||
@Component({
|
||||
name: "thermocamera", components: {
|
||||
|
||||
warmers
|
||||
warmers,ModalImage
|
||||
}
|
||||
})
|
||||
export default class Thermocamera extends Vue {
|
||||
@@ -34,6 +35,11 @@ export default class Thermocamera extends Vue {
|
||||
timeoutLastTakenImage = 0;
|
||||
timeCamDiff = " ";
|
||||
|
||||
tcamBTNStatus:{
|
||||
enabled: boolean,
|
||||
visible: boolean
|
||||
} = {enabled : false, visible: true};
|
||||
|
||||
TCamData: {
|
||||
imageSize: { x: number, y: number },
|
||||
rangeTemperature: { max: number, min: number },
|
||||
@@ -44,12 +50,10 @@ export default class Thermocamera extends Vue {
|
||||
|
||||
@Watch("warmers", { deep: true })
|
||||
async ChangedTemps() {
|
||||
|
||||
|
||||
this.btnModeEnabled = false;
|
||||
this.tcamBTNStatus.enabled = false;
|
||||
for (const ch of store.state.warmers.channels) {
|
||||
if (ch.tCamTempSet > 0) {
|
||||
this.btnModeEnabled = true;
|
||||
if (ch.tCamTempSet > 0 && ch.tCamActive) {
|
||||
this.tcamBTNStatus.enabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -64,8 +68,8 @@ export default class Thermocamera extends Vue {
|
||||
|
||||
messageService.subscribeToChannel("new-thermocam-image", (args)=>{
|
||||
if(this.TCamData){
|
||||
console.log(args)
|
||||
this.TCamData.lastTakenImage = args[0];
|
||||
ModalHelper.modalImage.content = this.thermocameraOriginalUrl;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -95,6 +99,11 @@ export default class Thermocamera extends Vue {
|
||||
return "/thermoprophet/colored/_last.jpg?lastmod=NOTAVAILABLE";
|
||||
return "/thermoprophet/colored/_last.jpg?lastmod=" + this.TCamData.lastTakenImage;
|
||||
}
|
||||
get thermocameraOriginalUrl(){
|
||||
if(!this.TCamData || moment(this.TCamData.lastTakenImage).year() <= 2000)
|
||||
return "/thermoprophet/original/_last.jpg?lastmod=NOTAVAILABLE";
|
||||
return "/thermoprophet/original/_last.jpg?lastmod=" + this.TCamData.lastTakenImage;
|
||||
}
|
||||
|
||||
get thermocameraImageOk(): boolean {
|
||||
clearInterval(this.timeoutLastTakenImage);
|
||||
@@ -231,4 +240,19 @@ export default class Thermocamera extends Vue {
|
||||
async openThermoModal() {
|
||||
ModalHelper.ShowModal(termoModal, "modal2");
|
||||
}
|
||||
|
||||
async openImageModal() {
|
||||
|
||||
if(this.TCamData){
|
||||
ModalHelper.modalImage.title = moment(this.TCamData.lastTakenImage).format("L") + " - " + moment(this.TCamData.lastTakenImage).format("LTS");
|
||||
}
|
||||
ModalHelper.modalImage.content = this.thermocameraOriginalUrl;
|
||||
ModalHelper.ShowModal(ModalImage, "modal2");
|
||||
}
|
||||
|
||||
async forceTakeImage() {
|
||||
warmersService.TakeNewPhoto();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+9
-3
@@ -79,7 +79,7 @@
|
||||
|
||||
<div class="input-area grid left">
|
||||
<label>{{'warmers_thermoprophet_Enabled' | localize('Thermoprophet')}}</label>
|
||||
<toggle-button v-model="thermocameraModeBTN"></toggle-button>
|
||||
<toggle-button v-model="thermocameraModeBTN" :status="tcamBTNStatus"></toggle-button>
|
||||
</div>
|
||||
|
||||
<!-- <div class="input-area left grid">
|
||||
@@ -125,9 +125,15 @@
|
||||
</div>
|
||||
|
||||
<div class="tm-controls">
|
||||
<button class="btn btn-info square" @click="openThermoModal()">
|
||||
<button class="btn btn-info square" @click="forceTakeImage()" :disabled="this.thermocameraModeBTN">
|
||||
<img src="/assets/icons/png/takesnap.png" />
|
||||
</button>
|
||||
<button class="btn btn-info square" @click="openImageModal()">
|
||||
<img src="/assets/icons/png/ico-bt-selez-image.png" />
|
||||
</button>
|
||||
<button class="btn btn-info square" @click="openThermoModal()">
|
||||
<img src="/assets/icons/png/history.png" />
|
||||
</button>
|
||||
<span>{{timeCamDiff}}</span>
|
||||
<input
|
||||
:disabled="!thermocameraImageOk"
|
||||
@@ -142,7 +148,7 @@
|
||||
</div>
|
||||
|
||||
<div class="buttons">
|
||||
<button class="btn btn-info square icon" @click="zoomIn()">
|
||||
<button class="btn btn-info square icon" @click="zoomIn()" >
|
||||
<i class="fa fa-search-plus"></i>
|
||||
</button>
|
||||
<button class="btn btn-info square icon" @click="zoomReset()">
|
||||
|
||||
+14
-5
@@ -52,11 +52,25 @@ export default class ShowRiscaldamentoSuperioreInfo extends Vue {
|
||||
// this.deferred.resolve(-1);
|
||||
};
|
||||
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
};
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 3,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 3,value: false});
|
||||
};
|
||||
|
||||
async warmersChanged() {
|
||||
this.warmersEdited = true;
|
||||
};
|
||||
@@ -135,11 +149,6 @@ export default class ShowRiscaldamentoSuperioreInfo extends Vue {
|
||||
if (el.status.visible && el.status.enabled)
|
||||
if (el.setpointHMI != el.setpointPLC) result = true;
|
||||
}
|
||||
/*
|
||||
for (const key in store.state.warmers.channels) {
|
||||
const el = store.state.warmers.channels[key];
|
||||
if (el.setpointHMI != el.setpointPLC) result = true;
|
||||
}*/
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,19 @@ export default class ShowVuotoInfo extends Vue {
|
||||
};
|
||||
|
||||
|
||||
@Watch('payload', { deep: true })
|
||||
async payloadChanged(n, o) {
|
||||
for (var key in n) {
|
||||
if (Object.prototype.hasOwnProperty.call(n, key)) {
|
||||
if(n[key].setpointHMI != n[key].setpointPLC){
|
||||
recipeActions.setIntState(store, {id: 8,value: true});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
recipeActions.setIntState(store, {id: 8,value: false});
|
||||
};
|
||||
|
||||
@Watch('recipe', { deep: true })
|
||||
async recipeChanged(n, o) {
|
||||
this.debouncedRecipeSave()
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@ export default class LogMisurazioniTable extends Vue {
|
||||
else if (item == 1)
|
||||
return "PALLET HEIGHT"
|
||||
else if (item == 2)
|
||||
return "SHEET TICKNESS"
|
||||
else if (item == 2)
|
||||
return "SHEET THICKNESS"
|
||||
else if (item == 3)
|
||||
return "SHEET LENGTH"
|
||||
else
|
||||
return "ND"
|
||||
|
||||
@@ -49,7 +49,8 @@ export class ModalHelper {
|
||||
};
|
||||
public static modalImage = {
|
||||
content: null,
|
||||
title: null
|
||||
title: null,
|
||||
lastPhoto:null
|
||||
};
|
||||
public static maintenanceModal = {
|
||||
currentMaintenance: null,
|
||||
|
||||
@@ -24,12 +24,6 @@ import "./app.business-logic";
|
||||
import "./app.modules";
|
||||
import { messageService } from "src/_base";
|
||||
|
||||
import { warmersService } from "./services/warmersService";
|
||||
warmersService.GetChannels();
|
||||
warmersService.GetResistances();
|
||||
import { prodService } from "./services/prodService";
|
||||
prodService.GetProd();
|
||||
|
||||
const App = () =>
|
||||
import("./App.vue");
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="setup">
|
||||
<modal type="save-as" :title="'modal_folder_create_name' | localize('Crea nuova cartella')">
|
||||
<modal type="save-as" :title="value.title | localize('Crea nuova cartella')">
|
||||
<div slot="header-buttons">
|
||||
<button class="modal-close" @click="close()">
|
||||
<i class="fa fa-remove"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{{'modal_folder_create_name' | localize("Nome della cartella:")}}</label>
|
||||
<label>{{value.message | localize("Nome della cartella:")}}</label>
|
||||
<input v-model="FinalName" @keyup.enter="save()" />
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Factory, messageService } from "../../_base";
|
||||
import ZoomImage from './zoom-image.vue'
|
||||
import Vue from "vue";
|
||||
import Component from "vue-class-component";
|
||||
import moment from "moment";
|
||||
|
||||
@Component({
|
||||
components:{
|
||||
@@ -13,19 +14,24 @@ import Component from "vue-class-component";
|
||||
export default class ModalImage extends Vue {
|
||||
|
||||
|
||||
content: string = "";
|
||||
title: string = "";
|
||||
content: string = "";
|
||||
title: string = "";
|
||||
|
||||
mounted() {
|
||||
this.content = ModalHelper.modalImage.content;
|
||||
this.title = ModalHelper.modalImage.title;
|
||||
|
||||
messageService.subscribeToChannel("new-thermocam-image", (args)=>{
|
||||
this.content = "/thermoprophet/original/_last.jpg?lastmod=" + args[0];
|
||||
this.title = moment(args[0]).format("L") + " - " + moment(args[0]).format("LTS");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
mounted() {
|
||||
this.content = ModalHelper.modalImage.content;
|
||||
this.title = ModalHelper.modalImage.title;
|
||||
}
|
||||
|
||||
beforeMount() {
|
||||
messageService.subscribeToChannel("esc_pressed", args => {
|
||||
this.close();
|
||||
});
|
||||
beforeMount() {
|
||||
messageService.subscribeToChannel("esc_pressed", args => {
|
||||
this.close();
|
||||
});
|
||||
}
|
||||
|
||||
beforeDestroy() {
|
||||
@@ -34,7 +40,7 @@ export default class ModalImage extends Vue {
|
||||
|
||||
close() {
|
||||
messageService.deleteChannel("esc_pressed");
|
||||
ModalHelper.HideModal();
|
||||
ModalHelper.HideModal("modal2");
|
||||
}
|
||||
|
||||
};
|
||||
@@ -1,8 +1,7 @@
|
||||
<template>
|
||||
<modal type="modal-image" :title="title">
|
||||
<button class="close" slot="header-buttons" @click="close()"><i class="fa fa-remove"></i></button>
|
||||
<zoom-image :imageSrc="this.content" :showBackButton="false" />
|
||||
<zoom-image :imageSrc="this.content" :showBackButton="false" :isTcam="true"/>
|
||||
</modal>
|
||||
</template>
|
||||
<script src="./modal-image.ts" lang="ts" />
|
||||
<!--<script src="./create-maintenance.ts" lang="ts"></script>-->
|
||||
|
||||
@@ -370,7 +370,7 @@ export default class ModalLoadProgram extends Vue {
|
||||
}
|
||||
|
||||
async createFolder() {
|
||||
let result = await ModalHelper.ShowModalAsync(askNameModal, { title: 'folder_create', message: 'new_folder_name', name: "", isFolder:true });
|
||||
let result = await ModalHelper.ShowModalAsync(askNameModal, { title: 'folder_name', message: 'new_folder_name', name: "", isFolder:true });
|
||||
if(result){
|
||||
var folder = this.currentPath + "\\" + result;
|
||||
var res = cmsClient.createFolder(folder);
|
||||
@@ -394,6 +394,18 @@ export default class ModalLoadProgram extends Vue {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async createRecipe() {
|
||||
let result = await ModalHelper.ShowModalAsync(askNameModal, { title: 'recipe_create', message: 'new_recipe_name', name: "", isFolder:false });
|
||||
if(result){
|
||||
var folder = this.currentPath + "\\" + result;
|
||||
this.NewRecipe(folder);
|
||||
}
|
||||
else {
|
||||
this.relaodFiles();
|
||||
}
|
||||
}
|
||||
|
||||
getDate(date) {
|
||||
return moment(date).format("L");
|
||||
}
|
||||
@@ -413,6 +425,37 @@ export default class ModalLoadProgram extends Vue {
|
||||
this.loadClicked = false
|
||||
}
|
||||
|
||||
async NewRecipe(namenew){
|
||||
if (!this.thereAreFileEliminated || this.askConfirmLayer) {
|
||||
this.loadClicked = true
|
||||
var res = cmsClient.createRecipe(namenew);
|
||||
if (res) {
|
||||
var obj = JSON.parse(res);
|
||||
if (obj.error) {
|
||||
(iziToast as any).error({
|
||||
title: "error",
|
||||
message: obj.error,
|
||||
theme: "dark",
|
||||
timeout: 10000,
|
||||
class: "t-error",
|
||||
transitionOut: "fadeOut",
|
||||
})
|
||||
}
|
||||
else {
|
||||
await this.loadProgram(namenew);
|
||||
}
|
||||
}
|
||||
else {
|
||||
await this.loadProgram(namenew);
|
||||
}
|
||||
this.askConfirmLayer = false
|
||||
}
|
||||
else {
|
||||
this.askConfirmLayer = true
|
||||
}
|
||||
this.loadClicked = false
|
||||
}
|
||||
|
||||
async loadProgram(path: string) {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
if(!this.recipe.changed)
|
||||
@@ -433,6 +476,27 @@ export default class ModalLoadProgram extends Vue {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async newProgram() {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
if(!this.recipe.changed)
|
||||
{
|
||||
await awaiter (recipeService.New());
|
||||
this.close();
|
||||
this.$router.push({ name: 'setup' })
|
||||
}
|
||||
else{
|
||||
ModalHelper.AskConfirm(this.$options.filters.localize("modal_confirm_title", "Richiesta di conferma"),
|
||||
this.$options.filters.localize("modal_confirm_load_recipe", "Vuoi continuare senza salvare la ricetta precedente?"),
|
||||
async () => {
|
||||
await awaiter (recipeService.New());
|
||||
this.close();
|
||||
this.$router.push({ name: 'setup' })
|
||||
}, () => void (0))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
selectNumberImage(value) {
|
||||
this.selectedNumberImage = value;
|
||||
}
|
||||
|
||||
@@ -192,7 +192,10 @@
|
||||
<div class="label">{{'modal_load_program_lbl_box_selected_folder' | localize('Cartella selezionata:')}}</div>
|
||||
<div class="path">{{currentPath}}</div>
|
||||
<div class="label">{{'modal_load_program_lbl_box_operations' | localize('Operazioni possibili:')}}</div>
|
||||
<div>
|
||||
<div>
|
||||
<button class="btn" @click="createRecipe" :disabled="!canLoadProgram">
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
</button>
|
||||
<button class="btn" @click="createFolder">
|
||||
<i class="fa fa-folder-o"></i>
|
||||
</button>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import Vue from "vue";
|
||||
import { Prop, Component } from "vue-property-decorator";
|
||||
import { warmersService } from "@/services/warmersService";
|
||||
import { store } from '@/store';
|
||||
|
||||
@Component([])
|
||||
export default class ZoomImage extends Vue {
|
||||
@@ -9,6 +11,8 @@ export default class ZoomImage extends Vue {
|
||||
imageSrc: string;
|
||||
@Prop({ default: true })
|
||||
showBackButton: boolean;
|
||||
@Prop({ default: false })
|
||||
isTcam: boolean;
|
||||
|
||||
transImage: string = "";
|
||||
scaleImage: number = 1;
|
||||
@@ -40,6 +44,10 @@ export default class ZoomImage extends Vue {
|
||||
}
|
||||
|
||||
|
||||
get thermocameraModeBTN(): boolean {
|
||||
return (store.state.warmers.tCamStatus.thermoCamOnOff);
|
||||
}
|
||||
|
||||
close() {
|
||||
this.$emit("close");
|
||||
}
|
||||
@@ -136,5 +144,10 @@ export default class ZoomImage extends Vue {
|
||||
this.transImage = "translateX(" + 0 + "px)translateY(" + 0 + "px)scale(" + this.scaleImage + ")";
|
||||
|
||||
}
|
||||
|
||||
async forceTakeImage() {
|
||||
warmersService.TakeNewPhoto();
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
@@ -7,14 +7,19 @@
|
||||
@touchstart="dw"
|
||||
@touchmove="move"
|
||||
@dblclick="zoomPlusAnimated">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" :style="{'transform':transImage}" v-html="imageSrc" version="1.1" width="100%" height="100%" viewBox="0 0 2000 1500" v-on:load="onImageLoaded"></svg>
|
||||
<img ref="imageChild" :style="{'transform':transImage,'transition':animation}" :src="imageSrc" v-on:load="onImageLoaded" >
|
||||
<!-- <svg xmlns="http://www.w3.org/2000/svg" :style="{'transform':transImage}" v-html="imageSrc" version="1.1" width="100%" height="100%" viewBox="0 0 2000 1500" v-on:load="onImageLoaded"></svg>-->
|
||||
</div>
|
||||
<!-- <div class="loading" v-if="!imageLoaded"><i class="fa fa-circle-o-notch fa-spin"></i></div>-->
|
||||
<div class="loading" v-if="!imageLoaded"><i class="fa fa-circle-o-notch fa-spin"></i></div>
|
||||
|
||||
<div class="btngroup_close" v-if="showBackButton">
|
||||
<button @click="close"><i class="fa fa-chevron-left" ></i></button>
|
||||
</div>
|
||||
<div class="btngroup2" v-if="true">
|
||||
<button @click="forceTakeImage()" :disabled="thermocameraModeBTN">
|
||||
<img src="/assets/icons/png/takesnap.png" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="btngroup">
|
||||
<button @click="zoomPlusAnimated"><i class="fa fa-search-plus" ></i></button>
|
||||
<div class="rangecontainer">
|
||||
|
||||
@@ -113,6 +113,7 @@ export class Hub {
|
||||
|
||||
// qui i NUOVI metodi NUOVI dal server (Recipe, gauges) da completare lato HUB
|
||||
this._hub.client.recipeFullData = Hub.recipeFullData;
|
||||
this._hub.client.recipeFullDataInvalidSetpoint = Hub.recipeFullDataInvalidSetpoint;
|
||||
this._hub.client.warmersData = Hub.warmersData;
|
||||
this._hub.client.setpointHmiInvalid = Hub.setpointHmiInvalid;
|
||||
this._hub.client.recipeOverData = Hub.recipeOverData;
|
||||
@@ -139,20 +140,22 @@ export class Hub {
|
||||
|
||||
$.connection.hub.disconnected(() => {
|
||||
Hub.manageServerStatus("disconnected");
|
||||
console.log("SERVER CONNECTION: restart-connection")
|
||||
setTimeout(function () {
|
||||
$.connection.hub.start();
|
||||
// $.connection.hub.start({ transport: ['serverSentEvents'] });
|
||||
$.connection.hub.start({ transport: ['serverSentEvents'] });
|
||||
}, 5000); // Restart connection after 5 seconds.
|
||||
});
|
||||
$.connection.hub.stateChanged(async (state) => {
|
||||
if (state.newState == $.signalR.connectionState.connected) {
|
||||
try {
|
||||
await scadaService.ListScada();
|
||||
}
|
||||
catch (err)
|
||||
{ }
|
||||
Hub.manageServerStatus("connected");
|
||||
}
|
||||
})
|
||||
|
||||
$.connection.hub.start();
|
||||
// $.connection.hub.start({ transport: ['serverSentEvents'] });
|
||||
$.connection.hub.start({ transport: ['serverSentEvents'] });
|
||||
|
||||
this.checkShowAxes();
|
||||
|
||||
@@ -201,14 +204,18 @@ export class Hub {
|
||||
recipeActions.setCurrent(store, data, true);
|
||||
}
|
||||
|
||||
|
||||
public static recipeFullDataInvalidSetpoint(data) {
|
||||
recipeActions.setCurrent(store, data, false);
|
||||
recipeActions.resetAllIntState(store);
|
||||
}
|
||||
|
||||
public static warmersData(data) {
|
||||
warmersActions.setChannels(store, data as { [id: number]: Warmers.IChannel });
|
||||
}
|
||||
|
||||
public static async setpointHmiInvalid(data) {
|
||||
if (data) {
|
||||
await recipeService.GetCurrent();
|
||||
await warmersService.GetChannels();
|
||||
await warmersService.GetThermocameraStatus();
|
||||
// await recipeService.GetOverview();
|
||||
}
|
||||
@@ -231,6 +238,8 @@ export class Hub {
|
||||
prodActions.setProd(store, data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public updateAuthToken() {
|
||||
// Set or update authorization token
|
||||
let authData = JSON.parse(window.localStorage.getItem("authorizationData") || window.sessionStorage.getItem("authorizationData")) as AuthToken;
|
||||
@@ -243,6 +252,7 @@ export class Hub {
|
||||
$.connection.hub.qs.CmsClientId = cmsClient.getClientID;
|
||||
}
|
||||
|
||||
|
||||
private logout(e) {
|
||||
if (e)
|
||||
appModelActions.CheckLogoff(store, e.id);
|
||||
@@ -373,7 +383,6 @@ export class Hub {
|
||||
var toast = document.querySelector('#serverConnection') as any;
|
||||
(iziToast as any).hide(toast);
|
||||
Hub._serverConnectionNotificationVisible = false;
|
||||
try { await scadaService.ListScada(); } catch (err) { }
|
||||
messageService.publishToChannel("force-ui-update", null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,5 +90,10 @@ export class WarmersService extends baseRestService {
|
||||
async ResetMeasurePoints() {
|
||||
return this.Put((await this.BASE_URL()) + `resetMeasurePoint`, null, true);
|
||||
}
|
||||
|
||||
async TakeNewPhoto() {
|
||||
return this.Put((await this.BASE_URL()) + `TakeTcamImage`, null, true);
|
||||
}
|
||||
|
||||
}
|
||||
export const warmersService = new WarmersService();
|
||||
@@ -5,6 +5,12 @@ export interface RecipeStoreModel {
|
||||
current: Recipe.IRecipe;
|
||||
overview: Overview.IOverview;
|
||||
changed: boolean;
|
||||
intChanges: Map<number,editedStoreModel>;
|
||||
}
|
||||
|
||||
export interface editedStoreModel {
|
||||
id: number;
|
||||
value: boolean;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,16 +20,18 @@ export interface RecipeActions {
|
||||
setCurrent(context, model: Recipe.IRecipe, avoidSetpointHMI: boolean);
|
||||
setOverview(context, model: Overview.IOverview);
|
||||
resetCheckPoint(context);
|
||||
setIntState(context,model: { id: number, value: boolean });
|
||||
resetAllIntState(context);
|
||||
}
|
||||
|
||||
export interface RecipeGetters {
|
||||
getCurrent: () => Recipe.IRecipe;
|
||||
getOverview: () => Overview.IOverview;
|
||||
getRecipeItem: (id: number) => Recipe.IValue;
|
||||
getIntStates: (id: number) => boolean;
|
||||
}
|
||||
|
||||
export const recipeStore = {
|
||||
|
||||
state: {
|
||||
current: {},
|
||||
overview: {
|
||||
@@ -39,6 +47,8 @@ export const recipeStore = {
|
||||
upperPlate: "",
|
||||
vacuum: ""
|
||||
},
|
||||
intChanges: new Map<number, editedStoreModel>(),
|
||||
_intChanges: Array<editedStoreModel>(),
|
||||
changed: false,
|
||||
canUpdateRecipe: true,
|
||||
_map: new Map<number, Recipe.IValue>()
|
||||
@@ -47,7 +57,15 @@ export const recipeStore = {
|
||||
getters: {
|
||||
getCurrent: (state) => (): Recipe.IRecipe => (state as RecipeStoreModel).current,
|
||||
getOverview: (state) => (): Overview.IOverview => (state as RecipeStoreModel).overview,
|
||||
getRecipeItem: (state) => (id): Recipe.IValue => (state._map as Map<number, Recipe.IValue>).get(id)
|
||||
getRecipeItem: (state) => (id): Recipe.IValue => (state._map as Map<number, Recipe.IValue>).get(id),
|
||||
|
||||
getIntStates: state => (id): boolean => {
|
||||
let vals = state._intChanges.filter(x => x.id == id);
|
||||
if(vals.length > 0)
|
||||
return vals[0].value
|
||||
else
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
mutations: {
|
||||
@@ -91,6 +109,21 @@ export const recipeStore = {
|
||||
m.checkpointHMI = m.setpointHMI;
|
||||
}
|
||||
},
|
||||
SetIntState(state,model: { id: number, value: boolean }) {
|
||||
if ((state.intChanges as Map<number, editedStoreModel>).has(model.id)) {
|
||||
let val = (state.intChanges as Map<number, editedStoreModel>).get(model.id);
|
||||
val.value = model.value;
|
||||
}else {
|
||||
(state.intChanges as Map<number, editedStoreModel>).set(model.id, { id: model.id, value: model.value})
|
||||
}
|
||||
state._intChanges = Array.from(state.intChanges.values());
|
||||
},
|
||||
ResetAllIntState(state){
|
||||
(state.intChanges as Map<number, editedStoreModel>).forEach(function(part, index, theArray) {
|
||||
(state.intChanges as Map<number, editedStoreModel>).get(index).value = false;
|
||||
});
|
||||
state._intChanges = Array.from(state.intChanges.values());
|
||||
},
|
||||
SetOverview(state, model: Overview.IOverview) {
|
||||
for (const key in model) {
|
||||
if (model.hasOwnProperty(key)) {
|
||||
@@ -112,12 +145,18 @@ export const recipeStore = {
|
||||
setChanged(context, value) {
|
||||
context.commit("SetChanged", value)
|
||||
},
|
||||
resetAllIntState(context) {
|
||||
context.commit("ResetAllIntState")
|
||||
},
|
||||
reset(context) {
|
||||
context.commit("Reset")
|
||||
},
|
||||
resetCheckPoint(context) {
|
||||
context.commit("ResetCheckpoint");
|
||||
},
|
||||
setIntState(context,model: { id: number, value: boolean }) {
|
||||
context.commit("SetIntState",model);
|
||||
},
|
||||
async setCurrent(context, model: Recipe.IRecipe, avoidSetpointHMI: boolean = false) {
|
||||
context.commit("SetCurrent", { avoidSetpoint: avoidSetpointHMI, recipe: model });
|
||||
|
||||
|
||||
Generated
+27
-13
@@ -40,6 +40,7 @@
|
||||
this.lblStats = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.pBoxA = new System.Windows.Forms.PictureBox();
|
||||
this.panelCmd = new System.Windows.Forms.Panel();
|
||||
this.lblExportInfo = new System.Windows.Forms.Label();
|
||||
this.btnExportConfig = new System.Windows.Forms.Button();
|
||||
this.groupBox5 = new System.Windows.Forms.GroupBox();
|
||||
this.lblMs = new System.Windows.Forms.Label();
|
||||
@@ -84,11 +85,11 @@
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.timerUI = new System.Windows.Forms.Timer(this.components);
|
||||
this.lblExportInfo = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.btnImportConfig = new System.Windows.Forms.Button();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pBoxA)).BeginInit();
|
||||
@@ -188,6 +189,7 @@
|
||||
this.panelCmd.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.panelCmd.BackColor = System.Drawing.SystemColors.ControlDark;
|
||||
this.panelCmd.Controls.Add(this.btnImportConfig);
|
||||
this.panelCmd.Controls.Add(this.lblExportInfo);
|
||||
this.panelCmd.Controls.Add(this.btnExportConfig);
|
||||
this.panelCmd.Controls.Add(this.groupBox5);
|
||||
@@ -201,12 +203,23 @@
|
||||
this.panelCmd.Size = new System.Drawing.Size(192, 622);
|
||||
this.panelCmd.TabIndex = 6;
|
||||
//
|
||||
// lblExportInfo
|
||||
//
|
||||
this.lblExportInfo.AutoSize = true;
|
||||
this.lblExportInfo.Location = new System.Drawing.Point(9, 589);
|
||||
this.lblExportInfo.MaximumSize = new System.Drawing.Size(100, 0);
|
||||
this.lblExportInfo.MinimumSize = new System.Drawing.Size(175, 0);
|
||||
this.lblExportInfo.Name = "lblExportInfo";
|
||||
this.lblExportInfo.Size = new System.Drawing.Size(175, 13);
|
||||
this.lblExportInfo.TabIndex = 21;
|
||||
this.lblExportInfo.Text = "---";
|
||||
//
|
||||
// btnExportConfig
|
||||
//
|
||||
this.btnExportConfig.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.btnExportConfig.Location = new System.Drawing.Point(8, 491);
|
||||
this.btnExportConfig.Name = "btnExportConfig";
|
||||
this.btnExportConfig.Size = new System.Drawing.Size(177, 64);
|
||||
this.btnExportConfig.Size = new System.Drawing.Size(177, 42);
|
||||
this.btnExportConfig.TabIndex = 20;
|
||||
this.btnExportConfig.Text = "Export Config";
|
||||
this.btnExportConfig.UseVisualStyleBackColor = true;
|
||||
@@ -650,17 +663,6 @@
|
||||
//
|
||||
this.timerUI.Tick += new System.EventHandler(this.timerUI_Tick);
|
||||
//
|
||||
// lblExportInfo
|
||||
//
|
||||
this.lblExportInfo.AutoSize = true;
|
||||
this.lblExportInfo.Location = new System.Drawing.Point(9, 574);
|
||||
this.lblExportInfo.MaximumSize = new System.Drawing.Size(100, 0);
|
||||
this.lblExportInfo.MinimumSize = new System.Drawing.Size(175, 0);
|
||||
this.lblExportInfo.Name = "lblExportInfo";
|
||||
this.lblExportInfo.Size = new System.Drawing.Size(175, 13);
|
||||
this.lblExportInfo.TabIndex = 21;
|
||||
this.lblExportInfo.Text = "---";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
@@ -701,6 +703,17 @@
|
||||
this.label9.TabIndex = 17;
|
||||
this.label9.Text = "C";
|
||||
//
|
||||
// btnImportConfig
|
||||
//
|
||||
this.btnImportConfig.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.btnImportConfig.Location = new System.Drawing.Point(8, 539);
|
||||
this.btnImportConfig.Name = "btnImportConfig";
|
||||
this.btnImportConfig.Size = new System.Drawing.Size(177, 42);
|
||||
this.btnImportConfig.TabIndex = 22;
|
||||
this.btnImportConfig.Text = "Import Config";
|
||||
this.btnImportConfig.UseVisualStyleBackColor = true;
|
||||
this.btnImportConfig.Click += new System.EventHandler(this.btnImportConfig_Click);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@@ -811,6 +824,7 @@
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Button btnImportConfig;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ namespace Thermo.Cam.Setup
|
||||
/// Classe gestione ThermoCam (oggetti Image, metodi processing...) x FlirCam
|
||||
/// </summary>
|
||||
protected TCContr TCamCtrl = new TCContr($"{BASE_PATH}\\images\\", BASE_PATH);
|
||||
protected string ThermoConfPath = System.Configuration.ConfigurationManager.AppSettings["ThermoConfPath"];
|
||||
protected bool initRun = false;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
@@ -45,6 +47,8 @@ namespace Thermo.Cam.Setup
|
||||
TCamCtrl.eh_CameraConnStatusChanged += ImgData_eh_CameraConnStatusChanged;
|
||||
// cerco se ho un set di parametri già impostati...
|
||||
TCamCtrl.tryReloadConf();
|
||||
// fix button x reload da conf esportata
|
||||
btnImportConfig.Enabled = TCamCtrl.confFileExists(ThermoConfPath);
|
||||
// sistemo le conf temp
|
||||
setRangeTemp();
|
||||
// calcolo i currConf.destPoints
|
||||
@@ -83,12 +87,10 @@ namespace Thermo.Cam.Setup
|
||||
{
|
||||
int answ = 100;
|
||||
int.TryParse(txtAB.Text, out answ);
|
||||
TCamCtrl.currConf.TargetSize.X = answ;
|
||||
return answ;
|
||||
}
|
||||
set
|
||||
{
|
||||
TCamCtrl.currConf.TargetSize.X = value;
|
||||
txtAB.Text = $"{value}";
|
||||
}
|
||||
}
|
||||
@@ -99,12 +101,10 @@ namespace Thermo.Cam.Setup
|
||||
{
|
||||
int answ = 100;
|
||||
int.TryParse(txtBC.Text, out answ);
|
||||
TCamCtrl.currConf.TargetSize.Y = answ;
|
||||
return answ;
|
||||
}
|
||||
set
|
||||
{
|
||||
TCamCtrl.currConf.TargetSize.Y = value;
|
||||
txtBC.Text = $"{value}";
|
||||
}
|
||||
}
|
||||
@@ -218,8 +218,6 @@ namespace Thermo.Cam.Setup
|
||||
|
||||
private void btnExportConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
// effettua esportazione config in area ThermoActive
|
||||
string ThermoConfPath = System.Configuration.ConfigurationManager.AppSettings["ThermoConfPath"];
|
||||
if (!Directory.Exists(ThermoConfPath))
|
||||
{
|
||||
Directory.CreateDirectory(ThermoConfPath);
|
||||
@@ -486,10 +484,12 @@ namespace Thermo.Cam.Setup
|
||||
/// </summary>
|
||||
private void setRangeTemp()
|
||||
{
|
||||
TCamCtrl.currConf.TargetRange.Min = minRangeTemp;
|
||||
TCamCtrl.currConf.TargetRange.Max = maxRangeTemp;
|
||||
if (!initRun)
|
||||
{
|
||||
TCamCtrl.currConf.TargetRange.Min = minRangeTemp;
|
||||
TCamCtrl.currConf.TargetRange.Max = maxRangeTemp;
|
||||
}
|
||||
}
|
||||
|
||||
private void setTimerInterval()
|
||||
{
|
||||
// cambio periodo timer!
|
||||
@@ -530,18 +530,24 @@ namespace Thermo.Cam.Setup
|
||||
|
||||
private void txtAB_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
// ricalcolo in proporzione altro valore...
|
||||
dimY = (int)((double)dimX * 256 / 320);
|
||||
// aggiorno punti dest
|
||||
updateDestPt();
|
||||
if (!initRun)
|
||||
{
|
||||
// ricalcolo in proporzione altro valore...
|
||||
dimY = (int)((double)dimX * 256 / 320);
|
||||
// aggiorno punti dest
|
||||
updateDestPt();
|
||||
}
|
||||
}
|
||||
|
||||
private void txtBC_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
// ricalcolo in proporzione altro valore...
|
||||
dimX = (int)((double)dimY * 320 / 256);
|
||||
// aggiorno punti dest
|
||||
updateDestPt();
|
||||
if (!initRun)
|
||||
{
|
||||
// ricalcolo in proporzione altro valore...
|
||||
dimX = (int)((double)dimY * 320 / 256);
|
||||
// aggiorno punti dest
|
||||
updateDestPt();
|
||||
}
|
||||
}
|
||||
|
||||
private void txtMaxScale_TextChanged(object sender, EventArgs e)
|
||||
@@ -556,14 +562,19 @@ namespace Thermo.Cam.Setup
|
||||
|
||||
private void updateDestPt()
|
||||
{
|
||||
TCamCtrl.currConf.DestPoints.Coords = new List<Point>();
|
||||
// ciclo i punti A-B-C-D...
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = 0, Y = 0 });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = dimX, Y = 0 });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = dimX, Y = dimY });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = 0, Y = dimY });
|
||||
// salvo conf
|
||||
TCamCtrl.saveConf();
|
||||
if (!initRun)
|
||||
{
|
||||
TCamCtrl.currConf.TargetSize.X = dimX;
|
||||
TCamCtrl.currConf.TargetSize.Y = dimY;
|
||||
TCamCtrl.currConf.DestPoints.Coords = new List<Point>();
|
||||
// ciclo i punti A-B-C-D...
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = 0, Y = 0 });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = dimX, Y = 0 });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = dimX, Y = dimY });
|
||||
TCamCtrl.currConf.DestPoints.Coords.Add(new Point() { X = 0, Y = dimY });
|
||||
// salvo conf
|
||||
TCamCtrl.saveConf();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateDisplay()
|
||||
@@ -664,5 +675,41 @@ namespace Thermo.Cam.Setup
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
|
||||
private void btnImportConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
string messageOut = "-";
|
||||
if (!Directory.Exists(ThermoConfPath))
|
||||
{
|
||||
Directory.CreateDirectory(ThermoConfPath);
|
||||
}
|
||||
// verifico se file esiste
|
||||
if (TCamCtrl.confFileExists(ThermoConfPath))
|
||||
{
|
||||
initRun = true;
|
||||
bool fatto = TCamCtrl.loadConf(ThermoConfPath);
|
||||
if (fatto)
|
||||
{
|
||||
// fix valori
|
||||
minRangeTemp = TCamCtrl.currConf.TargetRange.Min;
|
||||
maxRangeTemp = TCamCtrl.currConf.TargetRange.Max;
|
||||
dimX = TCamCtrl.currConf.TargetSize.X;
|
||||
dimY = TCamCtrl.currConf.TargetSize.Y;
|
||||
// messaggio
|
||||
messageOut = $"{DateTime.Now} Configuration imported!";
|
||||
}
|
||||
else
|
||||
{
|
||||
messageOut = $"{DateTime.Now} Import error!";
|
||||
}
|
||||
initRun = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
messageOut = $"{DateTime.Now} Conf File not found!";
|
||||
}
|
||||
// info export fatto
|
||||
lblExportInfo.Text = messageOut;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -816,6 +816,38 @@ namespace Thermo.Cam.Utils
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Carica da file dalla dir richiesta nella conf corrente
|
||||
/// </summary>
|
||||
/// <param name="destPath">directory destinazione x conf</param>
|
||||
/// <returns></returns>
|
||||
public bool loadConf(string destPath)
|
||||
{
|
||||
bool answ = false;
|
||||
string fileName = $"{destPath}\\{confFileName}";
|
||||
try
|
||||
{
|
||||
string rawData = File.ReadAllText(fileName);
|
||||
currConf = JsonConvert.DeserializeObject<TConfig>(rawData);
|
||||
answ = true;
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Verifica esistenza file di conf
|
||||
/// </summary>
|
||||
/// <param name="destPath"></param>
|
||||
/// <returns></returns>
|
||||
public bool confFileExists(string destPath)
|
||||
{
|
||||
bool answ = false;
|
||||
string fileName = $"{destPath}\\{confFileName}";
|
||||
answ = File.Exists(fileName);
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// fermo discovery camera
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user