Aggiunta demo WPS
This commit is contained in:
+1
-1
@@ -878,7 +878,7 @@ namespace IOB_UT
|
||||
/// <summary>
|
||||
/// Metodi di WebPageScraping (es x compressori Atlas Copco)
|
||||
/// </summary>
|
||||
WPS
|
||||
WebPageScrap
|
||||
}
|
||||
|
||||
public enum gatherCycle
|
||||
|
||||
@@ -628,7 +628,7 @@ namespace IOB_WIN
|
||||
iobObj = new IobSiemensTorri(this, IOBConf);
|
||||
start.Enabled = true;
|
||||
break;
|
||||
case tipoAdapter.WPS:
|
||||
case tipoAdapter.WebPageScrap:
|
||||
iobObj = new IobWPS(this, IOBConf);
|
||||
start.Enabled = true;
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
;Configurazione IOB-WIN
|
||||
[IOB]
|
||||
;Macchina filtraggio fanghi Aprochim x Jetco
|
||||
CNCTYPE=WebPageScrap
|
||||
PING_MS_TIMEOUT=500
|
||||
|
||||
[MACHINE]
|
||||
VENDOR=Atlas Copco
|
||||
MODEL=GA18VP_13
|
||||
|
||||
[CNC]
|
||||
IP=192.168.1.55
|
||||
;CPUTYPE=S71500
|
||||
;RACK=0
|
||||
;SLOT=0
|
||||
|
||||
[SERVER]
|
||||
MPIP=http://192.168.1.7
|
||||
MPURL=/MP/IO
|
||||
CMDBASE=/IOB/input/
|
||||
CMDFLOG=/IOB/flog/
|
||||
CMDALIVE=/IOB
|
||||
CMDENABLED=/IOB/enabled/
|
||||
CMDADV1=?valore=
|
||||
CMDREBO=/sendReboot.aspx?idxMacchina=
|
||||
|
||||
[MEMORY]
|
||||
ADDR_READ=DB550.DBB0
|
||||
ADDR_WRITE=DB701.DBB0
|
||||
SIZE_READ=1
|
||||
SIZE_WRITE=0
|
||||
;BIT0=CONN
|
||||
BIT1=DB550.DBB1
|
||||
;BIT2=PZCOUNT.STD.DB700.DBW22
|
||||
BIT3=DB550.DBB3
|
||||
BIT4=DB550.DBB4
|
||||
|
||||
|
||||
[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
|
||||
; attenzione memoria sempre base BYTE (1604 DW --> 6416...)
|
||||
;PZCOUNT_MODE=STD.DB550.DBDW0
|
||||
;PZ_CAD_MADDR=1602
|
||||
;PZ_REQ_MADDR=1603
|
||||
;PZ_DONE_MADDR=1604
|
||||
;PZ_GTOT_MADDR=1605
|
||||
|
||||
[BRANCH]
|
||||
NAME=develop
|
||||
@@ -204,6 +204,9 @@
|
||||
<None Include="DATA\CONF\3015.ini">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="DATA\CONF\3018.ini">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="DATA\CONF\3017.ini">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
||||
+25
-792
@@ -1,6 +1,8 @@
|
||||
using IOB_UT;
|
||||
using HtmlAgilityPack;
|
||||
using IOB_UT;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
|
||||
namespace IOB_WIN
|
||||
@@ -42,11 +44,9 @@ namespace IOB_WIN
|
||||
// init connessione
|
||||
setConnection();
|
||||
|
||||
// test completo funzionalità, da TOGLIERE in prod...
|
||||
#if DEBUG
|
||||
wpsFullTest();
|
||||
#endif
|
||||
#endif
|
||||
// test completo funzionalità, da TOGLIERE in prod...
|
||||
wpsFullTest();
|
||||
}
|
||||
/// <summary>
|
||||
/// Test funzioni WebPageScraping
|
||||
@@ -57,798 +57,31 @@ namespace IOB_WIN
|
||||
try
|
||||
{
|
||||
// faccio download preliminare pagina
|
||||
|
||||
// salvo la pagina completa
|
||||
|
||||
var web = new HtmlWeb();
|
||||
var htmlDoc = web.Load(baseUri);
|
||||
if (htmlDoc.DocumentNode != null && htmlDoc.ParseErrors != null && !htmlDoc.ParseErrors.Any())
|
||||
{
|
||||
// salvo la pagina completa
|
||||
lgInfo("--------------------------------------");
|
||||
lgInfo("Curr ParsedText");
|
||||
lgInfo("--------------------------------------");
|
||||
lgInfo(htmlDoc.ParsedText);
|
||||
lgInfo("");
|
||||
lgInfo("--------------------------------------");
|
||||
lgInfo("FULL TEXT");
|
||||
lgInfo("--------------------------------------");
|
||||
lgInfo(htmlDoc.Text);
|
||||
lgInfo("--------------------------------------");
|
||||
}
|
||||
else
|
||||
{
|
||||
lgInfo("Errore in htmlDoc parse");
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Eccezioen durante wpsFullTest");
|
||||
}
|
||||
}
|
||||
#if false
|
||||
|
||||
/// <summary>
|
||||
/// Enum segnali status macchina (ByteStatus) come flag
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum bitStatus
|
||||
{
|
||||
NONE = 0,
|
||||
POWER_ON = 1 << 0,
|
||||
AUTO = 1 << 1,
|
||||
RUN = 1 << 2,
|
||||
ERROR = 1 << 3,
|
||||
ALARM = 1 << 4,
|
||||
EMERG_OK = 1 << 5,
|
||||
DOOR_CLOSED = 1 << 6,
|
||||
READY_LOAD = 1 << 7
|
||||
}
|
||||
/// <summary>
|
||||
/// Enum segnali macchina ulteriori (ByteSignals)
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum bitSignals
|
||||
{
|
||||
NONE = 0,
|
||||
TRANSF_AUTO = 1 << 0,
|
||||
PUNZ_AUTO = 1 << 1,
|
||||
BARR_TAV_RIPR = 1 << 2,
|
||||
ARIA_OK = 1 << 3,
|
||||
CONS_TRANS_OK = 1 << 4,
|
||||
TAV_A = 1 << 5,
|
||||
TAV_B = 1 << 6,
|
||||
RICH_ACCESSO = 1 << 7
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// LookUpTable di decodifica da CNC a segnali tipo bitmap MAPO
|
||||
/// </summary>
|
||||
Dictionary<string, string> signLUT = new Dictionary<string, string>();
|
||||
/// <summary>
|
||||
/// Oggetto MAIN x connessione KAWASAKI
|
||||
/// </summary>
|
||||
protected KRcc.Commu KAWASAKI_ref;
|
||||
/// <summary>
|
||||
/// Array delle risposte dal controllo KAWASAKI
|
||||
/// </summary>
|
||||
protected System.Collections.ArrayList resDataArray;
|
||||
/// <summary>
|
||||
/// Comando inviato al robot
|
||||
/// </summary>
|
||||
protected string comando;
|
||||
/// <summary>
|
||||
/// Variabile verifica thread comunicazione
|
||||
/// </summary>
|
||||
protected bool threadOk = false;
|
||||
/// <summary>
|
||||
/// Nome e seriale macchina
|
||||
/// </summary>
|
||||
protected string macName = "";
|
||||
/// <summary>
|
||||
/// Variabile STATUS corrente (8bit INT)
|
||||
/// </summary>
|
||||
protected string cStatus;
|
||||
/// <summary>
|
||||
/// Variabile SIGNALS corrente (8bit INT)
|
||||
/// </summary>
|
||||
protected string cSignals;
|
||||
/// <summary>
|
||||
/// Num pezzi prelevati
|
||||
/// </summary>
|
||||
protected int numPzPrel;
|
||||
/// <summary>
|
||||
/// Ultimo TC registrato da robot
|
||||
/// </summary>
|
||||
protected decimal lastRecTC;
|
||||
/// <summary>
|
||||
/// Ultima missione svolta da robot
|
||||
/// </summary>
|
||||
protected string lastMissRobot;
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Imposto connessione
|
||||
/// </summary>
|
||||
protected virtual void setConnection()
|
||||
{
|
||||
// Creo oggetto connessione NC
|
||||
parentForm.commPlcActive = true;
|
||||
lgInfo("Start init Adapter KAWASAKI all'IP {0} | --> IOB {1}", cIobConf.cncIpAddr, cIobConf.codIOB);
|
||||
|
||||
// inizializzo correttamente aree memoria secondo CONF - iniFileName
|
||||
IniFile fIni = new IniFile(cIobConf.iniFileName);
|
||||
// fix enable prgName
|
||||
enablePrgName = fIni.ReadBoolean("CNC", "GETPRGNAME", true);
|
||||
|
||||
// SE è necessario refresh...
|
||||
if (needRefresh)
|
||||
{
|
||||
lgInfo("Refreshing connection...");
|
||||
// ora tento avvio PLC... SE PING OK...
|
||||
if (testPing() == IPStatus.Success)
|
||||
{
|
||||
try
|
||||
{
|
||||
string connPar = string.Format("TCP {0}", cIobConf.cncIpAddr);
|
||||
KAWASAKI_ref = new KRcc.Commu(connPar);
|
||||
//KAWASAKI_ref = new KRcc.Commu("TCP 192.168.0.92");
|
||||
// disconnetto e connetto...
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo("KAWASAKI: tryDisconnect");
|
||||
}
|
||||
|
||||
//tryDisconnect();
|
||||
//lgInfo("KAWASAKI: tryConnect");
|
||||
//tryConnect();
|
||||
lgInfo("End init Adapter KAWASAKI");
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo("KAWASAKI CONNESSIONE AVVENUTA");
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Errore in INIT KAWASAKI Commu");
|
||||
}
|
||||
needRefresh = false;
|
||||
}
|
||||
parentForm.commPlcActive = false;
|
||||
// gestione pzCounter
|
||||
if (utils.CRB("enableContapezzi"))
|
||||
{
|
||||
lgInfo("KAWASAKI: inizio gestione contapezzi");
|
||||
try
|
||||
{
|
||||
// verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area)
|
||||
if (cIobConf.optPar.Count > 0 && cIobConf.optPar["PZCOUNT_MODE"] != "")
|
||||
{
|
||||
if (cIobConf.optPar["PZCOUNT_MODE"].StartsWith("STD"))
|
||||
{
|
||||
pzCntReload(true);
|
||||
// refresh associazione Macchina - IOB
|
||||
sendM2IOB();
|
||||
// per adesso imposto lettura fanuc == contapezzi (poi farà vera lettura...)
|
||||
lastCountCNC = contapezzi;
|
||||
}
|
||||
else
|
||||
{
|
||||
contapezzi = 0;
|
||||
lgInfo("Contapezzi STD disabilitato: modalità {0}", cIobConf.optPar["PZCOUNT_MODE"]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
contapezzi = 0;
|
||||
lgInfo("Parametro mancante PZCOUNT_MODE");
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Errore in contapezzi KAWASAKI");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Override disconnessione
|
||||
/// </summary>
|
||||
public override void tryDisconnect()
|
||||
{
|
||||
if (connectionOk)
|
||||
{
|
||||
string szStatusConnection = "";
|
||||
try
|
||||
{
|
||||
KAWASAKI_ref.disconnect();
|
||||
connectionOk = false;
|
||||
lgInfo(szStatusConnection);
|
||||
lgInfo("Effettuata disconnessione adapter KAWASAKI!");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgFatal(exc, "Errore nella disconnessione dall'adapter KAWASAKI");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lgError("IMPOSSIBILE effettuare disconnessione KAWASAKI: Connessione non disponibile...");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Override connessione
|
||||
/// </summary>
|
||||
public override void tryConnect()
|
||||
{
|
||||
if (!connectionOk)
|
||||
{
|
||||
// controllo che il ping sia stato tentato almeno pingTestSec fa...
|
||||
if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec"))
|
||||
{
|
||||
if (verboseLog || periodicLog)
|
||||
{
|
||||
lgInfo("KAWASAKI: ConnKO - tryConnect");
|
||||
}
|
||||
// in primis salvo data ping...
|
||||
lastPING = DateTime.Now;
|
||||
// se passa il ping faccio il resto...
|
||||
if (testPing() == IPStatus.Success)
|
||||
{
|
||||
string szStatusConnection = "";
|
||||
try
|
||||
{
|
||||
// ora provo connessione...
|
||||
parentForm.commPlcActive = true;
|
||||
string connPar = string.Format("TCP {0}", cIobConf.cncIpAddr);
|
||||
KAWASAKI_ref.connect(connPar);
|
||||
parentForm.commPlcActive = false;
|
||||
lgInfo("szStatusConnection: " + KAWASAKI_ref.IsConnected);
|
||||
connectionOk = true;
|
||||
// refresh stato allarmi!!!
|
||||
if (connectionOk)
|
||||
{
|
||||
if (adpRunning)
|
||||
{
|
||||
// carico status allarmi (completo)
|
||||
lgInfo("Inizio refresh completo stato allarmi...");
|
||||
forceAlarmCheck();
|
||||
lgInfo("Completato refresh completo stato allarmi!");
|
||||
}
|
||||
else
|
||||
{
|
||||
lgInfo("Connessione OK");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lgError("Impossibile procedere, connessione mancante...");
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgFatal(string.Format("Errore nella connessione all'adapter KAWASAKI: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc));
|
||||
connectionOk = false;
|
||||
lgInfo(string.Format("Eccezione in TryConnect, Adapter KAWASAKI NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec")));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// loggo no risposta ping ...
|
||||
connectionOk = false;
|
||||
if (verboseLog || periodicLog)
|
||||
{
|
||||
lgInfo(string.Format("Attenzione: KAWASAKI controllo PING fallito per IP {0}", cIobConf.cncIpAddr));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// se non è ancora connesso faccio procesisng memoria caso disconnesso...
|
||||
if (!connectionOk)
|
||||
{
|
||||
// processo semafori ed invio...
|
||||
processMemoryDiscon();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Oggetto per lettura counter pezzi PRELEVATI
|
||||
/// </summary>
|
||||
protected int pzPrelevati
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = 0;
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE i_prelevati", 3000); // num pz prelevati --> "0\r\n"
|
||||
int.TryParse(resDataArray[1].ToString().Replace("\n", "").Replace("\r", ""), out answ);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Oggetto per lettura ULTIMO TC rilevato
|
||||
/// </summary>
|
||||
protected decimal lastTC
|
||||
{
|
||||
get
|
||||
{
|
||||
decimal answ = 0;
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE r_tempo", 3000); // ultimo TCiclo rilevato --> " 349.19\r\n"
|
||||
decimal.TryParse(resDataArray[1].ToString().Replace("\n", "").Replace("\r", "").Replace(".", ","), out answ);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Oggetto per lettura/scrittura counter pezzi robot
|
||||
/// </summary>
|
||||
protected int pzCounter
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = 0;
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE i_cicli", 3000); // num cicli depositati/fatti --> " 0\r\n"
|
||||
int.TryParse(resDataArray[1].ToString().Replace("\n", "").Replace("\r", ""), out answ);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
comando = string.Format("i_cicli={0}", value);
|
||||
// scrivo valore cicli
|
||||
resDataArray = KAWASAKI_ref.command(comando, 3000); // imposto cicli depositati/fatti a 3 --> " 0\r\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Verifica se il thread 4 di comm sia attivo
|
||||
/// </summary>
|
||||
protected bool commThreadOk
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = false;
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
int retVal = 0;
|
||||
resDataArray = KAWASAKI_ref.command("TYPE TASK (1004)", 3000); // thread 4 ok --> " 1\r\n"
|
||||
int.TryParse(resDataArray[1].ToString().Replace("\n", "").Replace("\r", ""), out retVal);
|
||||
answ = (retVal == 1);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Recupera nome e seriale macchina
|
||||
/// </summary>
|
||||
protected string machineName
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE $id_true", 3000); // id macchina --> "BX100N-B001 Sn. 2366\r\n"
|
||||
answ = resDataArray[1].ToString().Replace("\n", "").Replace("\r", "");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Recupera ultima missione svolta
|
||||
/// </summary>
|
||||
protected string lastMission
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE $exe", 3000); // missione --> "\r\n" (vuoto, no missione)
|
||||
answ = resDataArray[1].ToString().Replace("\n", "").Replace("\r", "");
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Restituisce stato macchina nel formato (da sx a dx):
|
||||
/// B0: POWER_ON
|
||||
/// B1: AUTO
|
||||
/// B2: RUN
|
||||
/// B3: ERROR
|
||||
/// B4: ALLARME
|
||||
/// B5: EMERGENZA OK
|
||||
/// B6: PORTA CHIUSA
|
||||
/// B7: PRONTO AL LOAD
|
||||
/// </summary>
|
||||
protected string currBitmapStatus
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE $status", 3000); // status --> "0|0|1|0|0|1|0|0\r\n"
|
||||
answ = resDataArray[1].ToString().Replace("\n", "").Replace("\r", "").Replace("|", "");
|
||||
#if false
|
||||
// reverse stringa (B0 portato a sx)
|
||||
szBitmap = utils.reverseStr(szBitmap);
|
||||
// ora converto bitmap string in INT
|
||||
answ = Convert.ToInt32(szBitmap, 2);
|
||||
#endif
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Restituisce SEGNALI macchina nel formato:
|
||||
/// B0: Transfer in auto
|
||||
/// B1: Punzonatrice in AUTO
|
||||
/// B2: Barriera tavola ripristinata
|
||||
/// B3: Aria in linea OK
|
||||
/// B4: Console Transfer in fuori ingombro
|
||||
/// B5: TAV A
|
||||
/// B6: TAV B
|
||||
/// B7: Richiesta accesso attiva
|
||||
/// </summary>
|
||||
protected string currBitmapSignals
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
resDataArray = KAWASAKI_ref.command("TYPE $signal", 3000); // segnali --> "1|0|1|1|1|0|0|0\r\n"
|
||||
answ = resDataArray[1].ToString().Replace("\n", "").Replace("\r", "").Replace("|", "");
|
||||
#if false
|
||||
// reverse stringa (B0 portato a sx)
|
||||
szBitmap = utils.reverseStr(szBitmap);
|
||||
// ora converto bitmap string in INT
|
||||
answ = Convert.ToInt32(szBitmap, 2);
|
||||
#endif
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua salvataggio del programma corrente
|
||||
/// </summary>
|
||||
/// <param name="progDir">Dir di riferimento</param>
|
||||
/// <param name="progName">Nome Programma (se mancasse *.as lo aggiunge)</param>
|
||||
private void saveProgram(string progDir = "prog", string progName = "current.as")
|
||||
{
|
||||
// path completo
|
||||
progName = progName.EndsWith(".as") ? progName : progName + ".as";
|
||||
string prgPath = progName;// string.Format("{0}/{1}", progDir, progName);
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
// comandi x setup programma...
|
||||
resDataArray = KAWASAKI_ref.command("ferma", 3000); // ferma processi (all) --> ""
|
||||
resDataArray = KAWASAKI_ref.command("togli", 3000); // toglie processi da pronta esecuzione --> ""
|
||||
|
||||
//resp = com.command("SAVE nome_del_file", 3000); // salvataggio file... FORSE --> "\u0005\u0002Bnome_del_file.as\u0017" --> verificare DOVE salva...
|
||||
|
||||
int ret = KAWASAKI_ref.save(prgPath); // SAVE current.as[RET]
|
||||
if (ret == 0)
|
||||
{
|
||||
// Success
|
||||
}
|
||||
if (ret == -1)
|
||||
{
|
||||
// Communication error
|
||||
}
|
||||
if (ret == -2)
|
||||
{
|
||||
// Robot Controller error
|
||||
}
|
||||
if (ret == -3)
|
||||
{
|
||||
// Internal error
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Effettua invio del programma di alvorazione al ROBOT
|
||||
/// <param name="progDir">Dir di riferimento</param>
|
||||
/// <param name="progName">Nome Programma (se mancasse *.as lo aggiunge)</param>
|
||||
/// </summary>
|
||||
private void sendProgram(string progDir = "prog", string progName = "default.as")
|
||||
{
|
||||
// path completo
|
||||
progName = progName.EndsWith(".as") ? progName : progName + ".as";
|
||||
string prgPath = progName;// string.Format("{0}/{1}", progDir, progName);
|
||||
|
||||
// comandi x setup programma...
|
||||
resDataArray = KAWASAKI_ref.command("ferma", 3000); // ferma processi (all) --> ""
|
||||
resDataArray = KAWASAKI_ref.command("togli", 3000); // toglie processi da pronta esecuzione --> ""
|
||||
|
||||
if (KAWASAKI_ref.IsConnected)
|
||||
{
|
||||
// carico...
|
||||
KAWASAKI_ref.asInquiry = delegate (string as_msg)
|
||||
{
|
||||
Console.WriteLine(as_msg); if (as_msg.StartsWith("Are you sure ?"))
|
||||
{
|
||||
return "0\n"; // 0 [RET]
|
||||
}
|
||||
|
||||
if (as_msg.StartsWith("Load data?"))
|
||||
{
|
||||
return "1\n"; // 1 [RET]
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
int retLoad = KAWASAKI_ref.load(prgPath, "/Q"); // LOAD/Q default.as[RET]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region Metodi specifici (da verificare/completare in implementazione)
|
||||
|
||||
/// <summary>
|
||||
/// Effettua vero processing contapezzi
|
||||
/// </summary>
|
||||
public override void processContapezzi()
|
||||
{
|
||||
if (utils.CRB("enableContapezzi"))
|
||||
{
|
||||
try
|
||||
{
|
||||
// hard coded... !!!FARE!!! rivedere megio conf
|
||||
lastCountCNC = pzCounter;
|
||||
// verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area)
|
||||
if (cIobConf.optPar.Count > 0 && cIobConf.optPar["PZCOUNT_MODE"] != "")
|
||||
{
|
||||
#if false
|
||||
string memAddr = cIobConf.optPar["PZCOUNT_MODE"];
|
||||
if (memAddr.StartsWith("STD"))
|
||||
{
|
||||
// inizio verifica area memoria/parametro levando prima parte codice
|
||||
memAddr = memAddr.Replace("STD.", "");
|
||||
object outputVal = new object();
|
||||
// verifico se si tratta di lettura area DB... formato tipo STD.DB700.DBB22.W
|
||||
if (memAddr.StartsWith("DB"))
|
||||
{
|
||||
memAreaSiemens areaCounter = new memAreaSiemens(memAddr);
|
||||
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo("[0] area memoria: {1}.{2}.{3}", memAddr, areaCounter.DbNum, areaCounter.indiceMem, areaCounter.tipoMem);
|
||||
}
|
||||
// copio da blocco già letto... con switch x tipo dati --> tipo lettura... e salvo ultimo conteggio rilevato
|
||||
switch (areaCounter.tipoMem)
|
||||
{
|
||||
case "B":
|
||||
byte valB = RawInput[areaCounter.indiceMem];
|
||||
outputVal = valB;
|
||||
break;
|
||||
case "W":
|
||||
ushort valW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(2).ToArray());
|
||||
outputVal = valW;
|
||||
break;
|
||||
case "DW":
|
||||
uint valDW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(areaCounter.indiceMem).Take(4).ToArray());
|
||||
outputVal = valDW;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// salvo...
|
||||
Int32.TryParse(outputVal.ToString(), out lastCountCNC);
|
||||
if (utils.CRB("verbose"))
|
||||
{
|
||||
lgInfo("[2] outputVal contapezzi: {0}", outputVal);
|
||||
lgInfo("[3] lastCountCNC contapezzi: {0}", lastCountCNC);
|
||||
}
|
||||
}
|
||||
stopwatch.Stop();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
lgError(exc, "Errore in contapezzi KAWASAKI");
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||
/// </summary>
|
||||
public override void processOverride()
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// lettura bit semafori
|
||||
/// </summary>
|
||||
public override void readSemafori()
|
||||
{
|
||||
base.readSemafori();
|
||||
if (verboseLog)
|
||||
{
|
||||
lgInfo("inizio read semafori");
|
||||
}
|
||||
|
||||
parentForm.sIN = Semaforo.SV;
|
||||
|
||||
// effettuo TUTTE le letture
|
||||
threadOk = commThreadOk;
|
||||
cStatus = currBitmapStatus;
|
||||
cSignals = currBitmapSignals;
|
||||
lastCountCNC = pzCounter;
|
||||
// decodifica e gestione
|
||||
decodeToBaseBitmap();
|
||||
decodeOtherData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||
/// </summary>
|
||||
private void decodeToBaseBitmap()
|
||||
{
|
||||
// init a zero...
|
||||
B_input = 0;
|
||||
/* -----------------------------------------------------
|
||||
* bitmap MAPO
|
||||
* B0: POWER_ON
|
||||
* B1: RUN
|
||||
* B2: pzCount
|
||||
* B3: allarme
|
||||
* B4: manuale
|
||||
* B5: emergenza
|
||||
* B6: error prog
|
||||
* B7: auto mode
|
||||
----------------------------------------------------- */
|
||||
// bit 0 (poweron) imposto a 1 SE connected...
|
||||
B_input = KAWASAKI_ref.IsConnected ? 1 : 0;
|
||||
// RUN
|
||||
if (cStatus[2] == '1')
|
||||
{
|
||||
B_input += (1 << 1);
|
||||
}
|
||||
// ERROR prog/macchina
|
||||
if (cStatus[3] == '1')
|
||||
{
|
||||
B_input += (1 << 6);
|
||||
}
|
||||
// allarme
|
||||
if (cStatus[4] == '1')
|
||||
{
|
||||
B_input += (1 << 3);
|
||||
}
|
||||
// Automatico (porta chiusa)
|
||||
if (cStatus[6] == '1' || cStatus[1] == '1')
|
||||
{
|
||||
B_input += (1 << 4);
|
||||
}
|
||||
// NON EMERGENZA (1=armed, 0=triggered)
|
||||
if (cStatus[5] == '0')
|
||||
{
|
||||
B_input += (1 << 5);
|
||||
}
|
||||
|
||||
// process ODL e contapezzi
|
||||
string currODL = "";
|
||||
try
|
||||
{
|
||||
currODL = utils.callUrl(urlGetCurrODL);
|
||||
// solo SE HO un ODL...
|
||||
if (currODL == "" || currODL == "0")
|
||||
{
|
||||
if (periodicLog)
|
||||
{
|
||||
lgInfo(string.Format("Kawasaki | Lettura ODL andata a vuoto: currODL: {0}", currODL));
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // se variato o scaduto timeout log...
|
||||
if (periodicLog || (currIdxODL.ToString() != currODL))
|
||||
{
|
||||
lgInfo(string.Format("Kawasaki | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL));
|
||||
}
|
||||
// provo a salvare nuovo ODL
|
||||
int.TryParse(currODL, out currIdxODL);
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15)
|
||||
{
|
||||
lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL);
|
||||
lastWarnODL = DateTime.Now;
|
||||
}
|
||||
}
|
||||
if (currODL != null && currODL != "" && currODL != "0")
|
||||
{
|
||||
// ora processo il contapezzi...
|
||||
// controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x distanziare invio e ridurre letture
|
||||
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||
{
|
||||
// se sono differenti MOSTRO...
|
||||
if (lastCountCNC != contapezzi)
|
||||
{
|
||||
// registro contapezzi
|
||||
lgInfo(string.Format("Differenza Contapezzi: READ: {0} | Interno {1}", lastCountCNC, contapezzi));
|
||||
}
|
||||
// verifico se variato contapezzi... e se passato ritardo minimo...
|
||||
if (lastCountCNC > contapezzi)
|
||||
{
|
||||
// salvo nuovo contapezzi (incremento di 1...)
|
||||
contapezzi++;
|
||||
// salvo in semaforo!
|
||||
B_input += (1 << 2);
|
||||
// registro contapezzi
|
||||
lgInfo(string.Format("Contapezzi KAWASAKI: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi));
|
||||
}
|
||||
|
||||
// invio a server contapezzi (aggiornato)
|
||||
string retVal = utils.callUrl(urlSetPzCount + contapezzi.ToString());
|
||||
// verifica se tutto OK
|
||||
if (retVal != "OK")
|
||||
{
|
||||
// errore salvataggio contapezzi
|
||||
lgInfo(string.Format("Errore salvataggio Contapezzi KAWASAKI {0} | Contapezzi interno {1} | Errore salvataggio: {2}", lastCountCNC, contapezzi, retVal));
|
||||
}
|
||||
// resetto timer...
|
||||
lastPzCountSend = DateTime.Now;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||
{
|
||||
lgInfo(string.Format("Attenzione: mancanza ODL non procedo con gestione contapezzi. Contapezzi KAWASAKI {0} | Contapezzi interno {1}", lastCountCNC, contapezzi));
|
||||
// resetto timer...
|
||||
lastPzCountSend = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
// log opzionale!
|
||||
if (verboseLog)
|
||||
{
|
||||
lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decodifica il resto dell'area x i dati accessori (allarmi, ...)
|
||||
/// </summary>
|
||||
private void decodeOtherData()
|
||||
{
|
||||
if (verboseLog)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero programma in lavorazione
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override string getPrgName()
|
||||
{
|
||||
// valore non presente in vers default... se gestito fare override
|
||||
string prgName = "";
|
||||
return prgName;
|
||||
}
|
||||
/// <summary>
|
||||
/// Recupero info sistema generiche
|
||||
/// <returns></returns>
|
||||
public override Dictionary<string, string> getSysInfo()
|
||||
{
|
||||
// valore non presente in vers default... se gestito fare override
|
||||
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||
outVal.Add("MACHINE", machineName);
|
||||
return outVal;
|
||||
}
|
||||
/// <summary>
|
||||
/// Recupero dati dinamici...
|
||||
/// </summary>
|
||||
public override Dictionary<string, string> getDynData()
|
||||
{
|
||||
// valore non presente in vers default... se gestito fare override
|
||||
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||
outVal.Add("LAST_MISS", lastMissRobot);
|
||||
outVal.Add("LAST_TC", lastTC.ToString());
|
||||
outVal.Add("NUM_PZ_PREL", pzPrelevati.ToString());
|
||||
outVal.Add("NUM_PZ_LAV", pzCounter.ToString());
|
||||
outVal.Add("CURR_SIGNALS", currBitmapSignals.ToString());
|
||||
return outVal;
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -16,7 +16,7 @@ pipeline {
|
||||
|
||||
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
|
||||
script {
|
||||
withEnv(['NEXT_BUILD_NUMBER=384']) {
|
||||
withEnv(['NEXT_BUILD_NUMBER=385']) {
|
||||
// env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
|
||||
env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
|
||||
env.APP_NAME = 'MAPO-IOB-WIN'
|
||||
|
||||
Reference in New Issue
Block a user