ALTER PROCEDURE [dbo].[GetMachineEvList] AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; BEGIN tran -- dichiarazioni variabili x recupero dati DECLARE @LastIdx INT = 0 DECLARE @NewIdx INT = 0 -- recupero valore ultima riga stato processata... SELECT @LastIdx = ISNULL(LastIdx,0) FROM SyncState WHERE TableName = 'syn_M2ERP_MACHINE_STATE' -- recupero nuovo MAX idx SELECT @NewIdx = ISNULL(MAX(ID),0) FROM syn_M2ERP_MACHINE_STATE /* -------------------------------------------------- * DECODIFICA STANDARD * STATE MACHINE 60 * bitmap MAPO * B0: POWER_ON * B1: RUN * B2: pzCount * B3: allarme * B4: manuale * B5: slowTC * B6: WarmUpCoolDown * B7: emergenza * -------------------------------------------------- */ -- decodifica colonne PAMA: -- M_ON --> PowerON (B0) -- Auto --> Lavora (B1) -- AlarmMode --> Allarme (B3) -- ManualMode/Mda/Jog --> Manuale (B4) -- Mda/Jog --> Manuale (B4) -- ManualMode --> Manuale (B4) -- recupero i nuovi record da processare... ;WITH cteSigLog AS ( SELECT [DateTime] AS DtEve ,Targa AS IdxMacchina , 128 -- B7: emergenza armata (B7 --> 128) + CASE WHEN M_ON = 1 THEN 1 ELSE 0 END -- B0: spenta + CASE WHEN [Auto] = 1 THEN 2 ELSE 0 END -- B1: lavora + CASE WHEN AlarmMode = 1 THEN 8 ELSE 0 END -- B3: allarme + CASE WHEN (ManualMode = 1 OR Mda = 1 OR Jog = 1) THEN 16 ELSE 0 END -- B4: manuale AS ValInt FROM syn_M2ERP_MACHINE_STATE WHERE ID > @LastIdx AND ID <= @NewIdx ) --vero insert valori INSERT INTO MachineSignalLog(DtEve, IdxMacchina, ValInt, Valore) SELECT * ,CONVERT(VARBINARY(2), ValInt) AS Valore FROM cteSigLog -- aggiorno valore indice processato MERGE SyncState AS tgt USING (SELECT @NewIdx as LastIdx, 'syn_M2ERP_MACHINE_STATE' AS TableName) as src (LastIdx, TableName) ON (tgt.TableName = src.TableName) WHEN MATCHED THEN UPDATE SET LastIdx = src.LastIdx ,Note = 'UPDATED from ' + CAST(@LastIdx AS NVARCHAR(50)) ,LastUpdate = GETDATE() WHEN NOT MATCHED THEN INSERT (LastIdx, TableName, Note, LastUpdate) VALUES (src.LastIdx, src.TableName, 'CREATED', GETDATE()); COMMIT tran END