Merge branch 'develop' into IobMan

This commit is contained in:
Samuele E. Locatelli
2020-09-15 22:37:48 +02:00
8 changed files with 2113 additions and 1753 deletions
+274 -270
View File
@@ -6,189 +6,193 @@ using System.Text;
namespace IOB_UT
{
/// <summary>
/// Tipologie di DUMP memoria
/// </summary>
public enum dumpType
{
/// <summary>
/// Salvataggio all'avvio aree memoria (con sovrascrittura)
/// Tipologie di DUMP memoria
/// </summary>
STARTUP,
public enum dumpType
{
/// <summary>
/// Salvataggio all'avvio aree memoria (con sovrascrittura)
/// </summary>
STARTUP,
/// <summary>
/// Campionamento periodico
/// </summary>
SAMPLE
}
/// <summary>
/// Campionamento periodico
/// Tipologia di adapters ammessi
/// </summary>
SAMPLE
}
/// <summary>
/// Tipologia di adapters ammessi
/// </summary>
public enum tipoAdapter
{
public enum tipoAdapter
{
/// <summary>
/// Adapter SIMULAZIONE
/// </summary>
SIMULA,
/// <summary>
/// adapter FANUC
/// </summary>
FANUC,
/// <summary>
/// adapter KAWASAKI e-controller
/// </summary>
KAWASAKI,
/// <summary>
/// Adapter non specificato
/// </summary>
ND,
/// <summary>
/// Adapter MTConnect
/// </summary>
MTConnect,
/// <summary>
/// Adapter OMRON
/// </summary>
OMRON,
/// <summary>
/// Adapter OSAI CNDEX (Cndex)
/// </summary>
OSAI_CNDEX,
/// <summary>
/// Adapter OSAI OPEN (ws)
/// </summary>
OSAI_OPEN,
/// <summary>
/// Adapter OSAI VB6
/// </summary>
OSAI_VB6,
/// <summary>
/// Adapter SIEMENS
/// </summary>
SIEMENS,
/// <summary>
/// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche)
/// </summary>
SIEMENS_APROCHIM,
/// <summary>
/// Adapter SIEMENS, interfaccia versione VIPA @2001
/// </summary>
SIEMENS_AT2001,
/// <summary>
/// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici)
/// </summary>
SIEMENS_FAPE,
/// <summary>
/// Adapter SIEMENS, interfaccia versione COMUR (dentatrice)
/// </summary>
SIEMENS_COMUR,
/// <summary>
/// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione)
/// </summary>
SIEMENS_INGENIA,
/// <summary>
/// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere)
/// </summary>
SIEMENS_LASCO,
/// <summary>
/// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica)
/// </summary>
SIEMENS_PRESSOIL_CEI,
/// <summary>
/// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra)
/// </summary>
SIEMENS_SAET,
/// <summary>
/// Adapter SIEMENS, interfaccia versione SIMEC (Valvital, taglio)
/// </summary>
SIEMENS_SIMEC,
/// <summary>
/// Adapter SIEMENS, interfaccia versione Torri
/// </summary>
SIEMENS_TORRI,
/// <summary>
/// Metodi di WPS WebPageScraping (es x compressori Atlas Copco)
/// </summary>
WPS
}
/// <summary>
/// Adapter SIMULAZIONE
/// Tipo di ciclo da processare
/// </summary>
SIMULA,
/// <summary>
/// adapter FANUC
/// </summary>
FANUC,
/// <summary>
/// adapter KAWASAKI e-controller
/// </summary>
KAWASAKI,
/// <summary>
/// Adapter non specificato
/// </summary>
ND,
/// <summary>
/// Adapter MTConnect
/// </summary>
MTConnect,
/// <summary>
/// Adapter OMRON
/// </summary>
OMRON,
/// <summary>
/// Adapter OSAI CNDEX (Cndex)
/// </summary>
OSAI_CNDEX,
/// <summary>
/// Adapter OSAI OPEN (ws)
/// </summary>
OSAI_OPEN,
/// <summary>
/// Adapter OSAI VB6
/// </summary>
OSAI_VB6,
/// <summary>
/// Adapter SIEMENS
/// </summary>
SIEMENS,
/// <summary>
/// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche)
/// </summary>
SIEMENS_APROCHIM,
/// <summary>
/// Adapter SIEMENS, interfaccia versione VIPA @2001
/// </summary>
SIEMENS_AT2001,
/// <summary>
/// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici)
/// </summary>
SIEMENS_FAPE,
/// <summary>
/// Adapter SIEMENS, interfaccia versione COMUR (dentatrice)
/// </summary>
SIEMENS_COMUR,
/// <summary>
/// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione)
/// </summary>
SIEMENS_INGENIA,
/// <summary>
/// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere)
/// </summary>
SIEMENS_LASCO,
/// <summary>
/// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica)
/// </summary>
SIEMENS_PRESSOIL_CEI,
/// <summary>
/// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra)
/// </summary>
SIEMENS_SAET,
/// <summary>
/// Adapter SIEMENS, interfaccia versione Torri
/// </summary>
SIEMENS_TORRI,
/// <summary>
/// Metodi di WPS WebPageScraping (es x compressori Atlas Copco)
/// </summary>
WPS
}
/// <summary>
/// Tipo di ciclo da processare
/// </summary>
public enum gatherCycle
{
/// <summary>
/// Very High Frequency (solo x invii...)
/// </summary>
VHF,
/// <summary>
/// lettura dati ad alta frequenza
/// </summary>
HF,
/// <summary>
/// lettura dati standard
/// </summary>
MF,
/// <summary>
/// lettura dati bassa freq
/// </summary>
LF,
/// <summary>
/// lettura dati bassissima priorità (re-sync stato allarmi)
/// </summary>
VLF
}
public enum gatherCycle
{
/// <summary>
/// Very High Frequency (solo x invii...)
/// </summary>
VHF,
/// <summary>
/// lettura dati ad alta frequenza
/// </summary>
HF,
/// <summary>
/// lettura dati standard
/// </summary>
MF,
/// <summary>
/// lettura dati bassa freq
/// </summary>
LF,
/// <summary>
/// lettura dati bassissima priorità (re-sync stato allarmi)
/// </summary>
VLF
}
/// <summary>
/// StFlag8: set di 8 bit (1 word) contente semaforo di variabili
/// </summary>
[Flags]
public enum StFlag8 : int
{
NONE = 0,
B0 = 1 << 0,
B1 = 1 << 1,
B2 = 1 << 2,
B3 = 1 << 3,
B4 = 1 << 4,
B5 = 1 << 5,
B6 = 1 << 6,
B7 = 1 << 7
}
/// <summary>
/// StFlag32: set di 32 bit (4 word) contente semaforo di variabili
/// </summary>
[Flags]
public enum StFlag32 : int
{
NONE = 0,
B00 = 1 << 0,
B01 = 1 << 1,
B02 = 1 << 2,
B03 = 1 << 3,
B04 = 1 << 4,
B05 = 1 << 5,
B06 = 1 << 6,
B07 = 1 << 7,
B08 = 1 << 8,
B09 = 1 << 9,
B10 = 1 << 10,
B11 = 1 << 11,
B12 = 1 << 12,
B13 = 1 << 13,
B14 = 1 << 14,
B15 = 1 << 15,
B16 = 1 << 16,
B17 = 1 << 17,
B18 = 1 << 18,
B19 = 1 << 19,
B20 = 1 << 20,
B21 = 1 << 21,
B22 = 1 << 22,
B23 = 1 << 23,
B24 = 1 << 24,
B25 = 1 << 25,
B26 = 1 << 26,
B27 = 1 << 27,
B28 = 1 << 28,
B29 = 1 << 29,
B30 = 1 << 30,
B31 = 1 << 31
}
/// <summary>
/// StFlag8: set di 8 bit (1 word) contente semaforo di variabili
/// </summary>
[Flags]
public enum StFlag8 : int
{
NONE = 0,
B0 = 1 << 0,
B1 = 1 << 1,
B2 = 1 << 2,
B3 = 1 << 3,
B4 = 1 << 4,
B5 = 1 << 5,
B6 = 1 << 6,
B7 = 1 << 7
}
/// <summary>
/// StFlag32: set di 32 bit (4 word) contente semaforo di variabili
/// </summary>
[Flags]
public enum StFlag32 : int
{
NONE = 0,
B00 = 1 << 0,
B01 = 1 << 1,
B02 = 1 << 2,
B03 = 1 << 3,
B04 = 1 << 4,
B05 = 1 << 5,
B06 = 1 << 6,
B07 = 1 << 7,
B08 = 1 << 8,
B09 = 1 << 9,
B10 = 1 << 10,
B11 = 1 << 11,
B12 = 1 << 12,
B13 = 1 << 13,
B14 = 1 << 14,
B15 = 1 << 15,
B16 = 1 << 16,
B17 = 1 << 17,
B18 = 1 << 18,
B19 = 1 << 19,
B20 = 1 << 20,
B21 = 1 << 21,
B22 = 1 << 22,
B23 = 1 << 23,
B24 = 1 << 24,
B25 = 1 << 25,
B26 = 1 << 26,
B27 = 1 << 27,
B28 = 1 << 28,
B29 = 1 << 29,
B30 = 1 << 30,
B31 = 1 << 31
}
#if false
/// <summary>
/// Enumerazione tipi di semaforo
@@ -217,105 +221,105 @@ namespace IOB_UT
SS
}
#endif
/// <summary>
/// Enumerazione tipi di tipi di URL x invio
/// </summary>
public enum urlType
{
/// <summary>
/// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...)
/// Enumerazione tipi di tipi di URL x invio
/// </summary>
FLog,
/// <summary>
/// INPUT segnali in ingresso (standard base MAPO)
/// </summary>
SignIN
}
public enum urlType
{
/// <summary>
/// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...)
/// </summary>
FLog,
/// <summary>
/// INPUT segnali in ingresso (standard base MAPO)
/// </summary>
SignIN
}
/// <summary>
/// Elenco STATI CNC OSAI
/// </summary>
public enum CNC_STATUS_OSAI
{
IDLE = 1,
CYCLE,
HODA,
RUNH,
HRUN,
ERRO,
WAIT,
RESET,
EMERG,
INPUT
}
/// <summary>
/// Elenco MODI CNC
/// </summary>
public enum CNC_MODE
{
/// <summary>
/// Non definito
/// Elenco STATI CNC OSAI
/// </summary>
ND = 0,
public enum CNC_STATUS_OSAI
{
IDLE = 1,
CYCLE,
HODA,
RUNH,
HRUN,
ERRO,
WAIT,
RESET,
EMERG,
INPUT
}
/// <summary>
/// AUTOMATICO
/// Elenco MODI CNC
/// </summary>
AUTO,
/// <summary>
/// EDIT (MEMORY EDIT)
/// </summary>
EDIT,
/// <summary>
/// MEN (MEMORY OPERATION)
/// </summary>
MEN,
/// <summary>
/// MDI (MANUAL DATA INPUT)
/// </summary>
MDI,
/// <summary>
/// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED)
/// </summary>
HANDLE_INC,
/// <summary>
/// HOME
/// </summary>
HOME,
/// <summary>
/// JOG (MANUAL CONTINUOUS FEED)
/// </summary>
JOG,
/// <summary>
/// JOG MAN
/// </summary>
JOG_MAN,
/// <summary>
/// JOG_INC
/// </summary>
JOG_INC,
/// <summary>
/// PROFILE
/// </summary>
PROFILE,
/// <summary>
/// SEMI
/// </summary>
SEMI,
/// <summary>
/// THND (TEACH IN HANDLE)
/// </summary>
THND,
/// <summary>
/// TJOG (TEACH IN JOG)
/// </summary>
TJOG,
/// <summary>
/// RMT (DNC OPERATION)
/// </summary>
RMT,
/// <summary>
/// REF (MANUAL REFERENCE POSITION RETURN)
/// </summary>
REF
}
public enum CNC_MODE
{
/// <summary>
/// Non definito
/// </summary>
ND = 0,
/// <summary>
/// AUTOMATICO
/// </summary>
AUTO,
/// <summary>
/// EDIT (MEMORY EDIT)
/// </summary>
EDIT,
/// <summary>
/// MEN (MEMORY OPERATION)
/// </summary>
MEN,
/// <summary>
/// MDI (MANUAL DATA INPUT)
/// </summary>
MDI,
/// <summary>
/// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED)
/// </summary>
HANDLE_INC,
/// <summary>
/// HOME
/// </summary>
HOME,
/// <summary>
/// JOG (MANUAL CONTINUOUS FEED)
/// </summary>
JOG,
/// <summary>
/// JOG MAN
/// </summary>
JOG_MAN,
/// <summary>
/// JOG_INC
/// </summary>
JOG_INC,
/// <summary>
/// PROFILE
/// </summary>
PROFILE,
/// <summary>
/// SEMI
/// </summary>
SEMI,
/// <summary>
/// THND (TEACH IN HANDLE)
/// </summary>
THND,
/// <summary>
/// TJOG (TEACH IN JOG)
/// </summary>
TJOG,
/// <summary>
/// RMT (DNC OPERATION)
/// </summary>
RMT,
/// <summary>
/// REF (MANUAL REFERENCE POSITION RETURN)
/// </summary>
REF
}
}
+1484 -1480
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -53,8 +53,8 @@ BLINK_FILT=0
[OPTPAR]
;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice
; attenzione memoria sempre base BYTE (1604 DW --> 6416...)
PZCOUNT_MODE=SPEC.DB111.DBB2
; attenzione memoria sempre base BYTE (1604 DW --> 6416...)
PZCOUNT_MODE=SPEC.DB111.DBDW24
DISABLE_PZCOUNT=TRUE
ENABLE_DYN_DATA=TRUE
FORCE_DYN_DATA=TRUE
+60
View File
@@ -0,0 +1,60 @@
;Configurazione IOB-WIN
[IOB]
;Macchina taglio barre per Valvital
CNCTYPE=SIEMENS_SIMEC
PING_MS_TIMEOUT=500
[MACHINE]
VENDOR=SIMEC
MODEL=180
[CNC]
IP=192.168.219.15
CPUTYPE=S7300
RACK=0
SLOT=0
[SERVER]
MPIP=http://192.168.214.4
MPURL=/MP/IO
CMDBASE=/IOB/input/
CMDFLOG=/IOB/flog/
CMDALIVE=/IOB
CMDENABLED=/IOB/enabled/
CMDADV1=?valore=
CMDREBO=/sendReboot.aspx?idxMacchina=
[MEMORY]
ADDR_READ=DB29.DBB0
ADDR_WRITE=DB30.DBB0
SIZE_READ=10
SIZE_WRITE=40
[BLINK]
;MAX_COUNTER_BLINK = 30
MAX_COUNTER_BLINK = 15
;bit0 = 0
;bit1 = 0
;bit2 = 1
;bit3 = 1
;bit4 = 1
;bit5 = 0
;bit6 = 0
;bit7 = 0
BLINK_FILT=0
;BLINK_FILT=28
[OPTPAR]
;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice
PZCOUNT_MODE=STD.DB29.DBDW6
;PZSCRAP_MODE=STD.DB700.DBDW32
DISABLE_PZCOUNT=TRUE
ENABLE_DYN_DATA=TRUE
FORCE_DYN_DATA=TRUE
; conf parametri memoria READ/WRITE
PARAM_CONF=VL26.json
[BRANCH]
NAME=master
+41
View File
@@ -0,0 +1,41 @@
{
"mMapWrite": {
"setPzComm": {
"name": "setProg",
"description": "Programma",
"tipoMem": "String",
"memAddr": "DB30.DBB30",
"index": 30,
"size": 10
},
"setComm": {
"name": "setComm",
"description": "Commessa",
"tipoMem": "String",
"memAddr": "DB30.DBB20",
"index": 20,
"size": 10
},
"setArt": {
"name": "setArt",
"description": "Articolo",
"tipoMem": "String",
"memAddr": "DB30.DBB0",
"index": 0,
"size": 20
}
},
"mMapRead": {
"ContatoreAssoluto": {
"name": "ContatoreAssoluto",
"description": "Contapezzi ASSOLUTO",
"memAddr": "DB29.DBB2",
"tipoMem": "DInt",
"index": 2,
"size": 4,
"func": "MAX",
"period": 60,
"factor": 1
}
}
}
+7
View File
@@ -151,6 +151,7 @@
<Compile Include="IobMTC.cs" />
<Compile Include="IobOmron.cs" />
<Compile Include="IobSiemensAt2001.cs" />
<Compile Include="IobSiemensSimec.cs" />
<Compile Include="IobSiemensLasco.cs" />
<Compile Include="IobSiemensPressoilCei.cs" />
<Compile Include="IobSiemensIngenia.cs" />
@@ -287,6 +288,12 @@
<None Include="DATA\CONF\VL20.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="DATA\CONF\VL26.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="DATA\CONF\VL26.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="DATA\CONF\VL25.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
+244
View File
@@ -0,0 +1,244 @@
using MapoSDK;
using System;
using System.Collections.Generic;
namespace IOB_WIN
{
/// <summary>
/// Controllo Siemens specifico x impianti Simec
/// </summary>
public class IobSiemensSimec : IobSiemens
{
/* --------------------------------------------------------------------------------
* Controlli SIEMENS SIMEC
* - basasto su SIEMENS
* - S7 vers 1500
*
* STRUTTURA MEMORIA DB29: (lettura) 10byte,
* G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\26 - SIMEC Taglio\
*
* Si intende lettura con DB29.DBxx, scrittura DB30.DBxx
*
* DB30 blocco dati scritto dal MES
* CodArt Array[0..19] of Char DBB0..19
* CodComm Array[0..9] of Char DBB20..29
* CodProgr Array[0..9] of Char DBB30..39
*
* DB29 blocco dati letto dal MES Byte Bit
* CicloOn Bool 0 0
* MacchOn Bool 0 1
* ManualeOn Bool 0 2
* AllarmiOn Bool 0 3
* EmergenzaOn Bool 0 4
* EmergenzaPremuta Bool 0 5
* b06 Bool 0 6
* b07 Bool 0 7
* b10 Bool 1 0
* b11 Bool 1 1
* b12 Bool 1 2
* b13 Bool 1 3
* b14 Bool 1 4
* b15 Bool 1 5
* b16 Bool 1 6
* b17 Bool 1 7
* ContapezziAssoluto DInt 2
* Comtapezzi parziale DInt 6
* -------------------------------------------------------------------------------- */
/// <summary>
/// Classe base con i metodi x Siemens
/// </summary>
/// <param name="caller"></param>
/// <param name="adpConf"></param>
public IobSiemensSimec(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf)
{
lgInfo("NEW IOB SIEMENS versione SIMEC");
}
#region Metodi specifici (da verificare/completare in implementazione)
/// <summary>
/// Processo i task richiesti e li elimino dalla coda 1:1
/// </summary>
/// <param name="task2exe"></param>
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
{
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
Dictionary<string, string> taskDone = new Dictionary<string, string>();
bool taskOk = false;
string taskVal = "";
// inizio con 1 byte di default
byte[] MemBlock = new byte[1];
string memAddrWrite = "";
if (task2exe != null)
{
// cerco task specifici
foreach (var item in task2exe)
{
taskOk = false;
taskVal = "";
// converto richiesta in enum...
taskType tName = taskType.nihil;
Enum.TryParse(item.Key, out tName);
// controllo sulla KEY
switch (tName)
{
case taskType.nihil:
case taskType.fixStopSetup:
case taskType.forceResetPzCount:
case taskType.forceSetPzCount:
case taskType.setProg:
case taskType.sendWatchDogMes2Plc:
case taskType.setPzComm:
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
break;
case taskType.setArt:
case taskType.setComm:
saveProdData(item);
int byteSize = 0;
// recupero dati da memMap... altrimenti NULLA
if (memMap.mMapWrite.ContainsKey(item.Key))
{
dataConf currMem = memMap.mMapWrite[item.Key];
byteSize = currMem.size;
memAddrWrite = currMem.memAddr;
MemBlock = new byte[byteSize];
if (currMem.tipoMem == plcDataType.String)
{
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
}
else if (currMem.tipoMem == plcDataType.DInt)
{
int valDInt = 0;
int.TryParse(item.Value, out valDInt);
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
}
else if (currMem.tipoMem == plcDataType.Int)
{
short valDInt = 0;
short.TryParse(item.Value, out valDInt);
MemBlock = S7.Net.Types.Int.ToByteArray(valDInt);
}
}
taskVal = item.Value;
break;
case taskType.startSetup:
//// processo scrittura BIT su DB150.DBX4.0
//MemBlock = new byte[1];
//MemBlock[0] = (byte)1;
//memAddrWrite = "DB150.DBB4";
break;
case taskType.stopSetup:
//// processo scrittura BIT su DB150.DBX4.0
//MemBlock = new byte[1];
//MemBlock[0] = (byte)0;
//memAddrWrite = "DB150.DBB4";
break;
case taskType.setParameter:
// richiedo da URL i parametri WRITE da popolare
lgInfo("Chiamata processMemWriteRequests");
taskVal = processMemWriteRequests();
// se restituiscce "" faccio altra prova...
if (string.IsNullOrEmpty(taskVal))
{
// i parametri me li aspetto come stringa composta paramName|paramvalue
if (item.Value.Contains("|"))
{
string[] paramsJob = item.Value.Split('|');
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
}
else
{
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
}
}
break;
default:
taskVal = "SKIPPED | NO EXEC";
break;
}
// aggiungo task!
taskDone.Add(item.Key, taskVal);
if (string.IsNullOrEmpty(memAddrWrite))
{
// scrivo comunque!
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
}
if (!taskOk)
{
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
}
}
}
return taskDone;
}
/// <summary>
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
/// </summary>
protected override void decodeToBaseBitmap()
{
// init a zero...
B_input = 0;
/* -----------------------------------------------------
* bitmap MAPO STANDARD
* B0: POWER_ON
* B1: RUN
* B2: pzCount
* B3: allarme
* B4: manuale
*
* - BIT di stato
* DB29 blocco dati letto dal MES Byte Bit
* CicloOn Bool 0 0
* MacchOn Bool 0 1
* ManualeOn Bool 0 2
* AllarmiOn Bool 0 3
* EmergenzaOn Bool 0 4
* EmergenzaPremuta Bool 0 5
* ContapezziAssoluto DInt 2
* Comtapezzi parziale DInt 6
*
----------------------------------------------------- */
byte mainData = RawInput[0];
int byteSignals = 0;
// bit 0 (poweron) imposto a 1 SE connected...
if (currPLC.IsConnected)
{
byteSignals += (1 << 0);
}
// lavora --> bit0 e bit1: cicloOn AND macchOn
if ((mainData & (1 << 0)) != 0 && (mainData & (1 << 1)) != 0)
{
byteSignals += (1 << 1);
}
// controllo il bit ALARM OR emergenza dello status
if ((mainData & (1 << 3)) != 0 || (mainData & (1 << 5)) != 0)
{
byteSignals += (1 << 3);
}
// check MANUALE ...
if ((mainData & (1 << 2)) != 0)
{
byteSignals += (1 << 4);
}
// salvo!
B_input = byteSignals;
// log opzionale!
if (verboseLog)
{
lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}");
}
}
#endregion
}
}
Vendored
+1 -1
View File
@@ -9,7 +9,7 @@ pipeline {
steps {
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
script {
withEnv(['NEXT_BUILD_NUMBER=697']) {
withEnv(['NEXT_BUILD_NUMBER=698']) {
// env.versionNumber = VersionNumber(versionNumberString : '3.0.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
env.versionNumber = VersionNumber(versionNumberString : '3.0.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
env.APP_NAME = 'MAPO-IOB-WIN'