Prima release ok, ma trigger è TROPPO generico --> BIT

This commit is contained in:
Samuele E. Locatelli
2020-07-03 15:33:31 +02:00
parent f8fb7bdde7
commit 1ceb837b70
5 changed files with 117 additions and 69 deletions
+11 -18
View File
@@ -9,7 +9,7 @@
"DB700.DBB0": {
"Column": "Trigger",
"MemConf": "DB700.DBB0",
"DataType": "byte",
"DataType": "Byte",
"memByteSize": 1,
"TriggerVal": "01"
}
@@ -19,64 +19,57 @@
"Column": "Valore 1",
"Index": 1,
"MemConf": "DB700.DBB8",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB700.DBB10": {
"Column": "Valore 2",
"Index": 2,
"MemConf": "DB700.DBB10",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB700.DBB16": {
"Column": "Valore 3",
"Index": 3,
"MemConf": "DB700.DBB16",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB700.DBB20": {
"Column": "Valore 4",
"Index": 4,
"MemConf": "DB700.DBB20",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB700.DBB32": {
"Column": "Valore 5",
"Index": 5,
"MemConf": "DB700.DBB32",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB700.DBB36": {
"Column": "Valore 6",
"Index": 6,
"MemConf": "DB700.DBB36",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB700.DBB40": {
"Column": "Valore 7",
"Index": 7,
"MemConf": "DB700.DBB40",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB700.DBB48": {
"Column": "Valore 8",
"Index": 8,
"MemConf": "DB700.DBB48",
"DataType": "string",
"DataType": "String",
"memByteSize": 20
}
//"parametersList": {
// "DB701.DBD142": {
// "Column": "Valore assoluto",
// "Index": 7,
// "MemConf": "DB701.DBD142",
// "DataType": "real"
// }
//}
}
}
}
+11 -11
View File
@@ -9,7 +9,7 @@
"DB999.DBB0": {
"Column": "Trigger",
"MemConf": "DB999.DBB0",
"DataType": "byte",
"DataType": "Byte",
"memByteSize": 1,
"TriggerVal": "01"
}
@@ -18,49 +18,49 @@
"DB999.DBB8": {
"Column": "Valore 1",
"MemConf": "DB999.DBB8",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB10": {
"Column": "Valore 2",
"MemConf": "DB999.DBB10",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB16": {
"Column": "Valore 3",
"MemConf": "DB999.DBB16",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB999.DBB20": {
"Column": "Valore 4",
"MemConf": "DB999.DBB20",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB999.DBB32": {
"Column": "Valore 5",
"MemConf": "DB999.DBB32",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB999.DBB36": {
"Column": "Valore 6",
"MemConf": "DB999.DBB36",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB999.DBB40": {
"Column": "Valore 7",
"MemConf": "DB999.DBB40",
"DataType": "real",
"memByteSize": 4
"MemConf": "DB999.DBB306",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB48": {
"Column": "Valore 8",
"MemConf": "DB999.DBB48",
"DataType": "string",
"DataType": "String",
"memByteSize": 20
}
}
+11 -11
View File
@@ -9,7 +9,7 @@
"DB999.DBB0": {
"Column": "Trigger",
"MemConf": "DB999.DBB0",
"DataType": "byte",
"DataType": "Byte",
"memByteSize": 1,
"TriggerVal": "01"
}
@@ -18,49 +18,49 @@
"DB999.DBB8": {
"Column": "Valore 1",
"MemConf": "DB999.DBB8",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB10": {
"Column": "Valore 2",
"MemConf": "DB999.DBB10",
"DataType": "word",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB16": {
"Column": "Valore 3",
"MemConf": "DB999.DBB16",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB999.DBB20": {
"Column": "Valore 4",
"MemConf": "DB999.DBB20",
"DataType": "dword",
"DataType": "DWord",
"memByteSize": 4
},
"DB999.DBB32": {
"Column": "Valore 5",
"MemConf": "DB999.DBB32",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB999.DBB36": {
"Column": "Valore 6",
"MemConf": "DB999.DBB36",
"DataType": "real",
"DataType": "Real",
"memByteSize": 4
},
"DB999.DBB40": {
"Column": "Valore 7",
"MemConf": "DB999.DBB40",
"DataType": "real",
"memByteSize": 4
"MemConf": "DB999.DBB306",
"DataType": "Word",
"memByteSize": 2
},
"DB999.DBB48": {
"Column": "Valore 8",
"MemConf": "DB999.DBB48",
"DataType": "string",
"DataType": "String",
"memByteSize": 20
}
}
+74 -28
View File
@@ -223,7 +223,7 @@ namespace IOB.WIN.FileExp
{
Column = "Valore assoluto",
MemConf = "DB701.DBD142",
DataType = "real"
DataType = S7DataType.Byte
};
Dictionary<string, dataConf> paramList = new Dictionary<string, dataConf>();
paramList.Add(newParam.MemConf, newParam);
@@ -307,6 +307,8 @@ namespace IOB.WIN.FileExp
}
// elimino ultimo separatore...
fileContent = fileContent.Substring(0, fileContent.Length - 1);
// aggiungo a capo...
fileContent += Environment.NewLine;
}
// scrivo!
File.WriteAllText(outFilePath, fileContent);
@@ -340,27 +342,68 @@ namespace IOB.WIN.FileExp
/// </summary>
private void saveToFile()
{
// FIXME TODO salvare su file
#if false
// invio TUTTI i dati al PLC secondo configurazione...
string nextRow = "";
// leggo TUTTI i dati dal PLC secondo configurazione...
if (testCncConn())
{
// decodifico memoria...
// init
memAddress memoria = null;
double valore = -999;
foreach (var item in currValues)
int numByte = 0;
List<string> newData = new List<string>();
string outVal = "";
foreach (var item in currDataProxy.parametersList)
{
memoria = new memAddress(item.Key);
double.TryParse(item.Value, out valore);
// hard coded REAL!!!
byte[] DB_Byte = new byte[4];
S7.Net.Types.Double.ToByteArray(valore).CopyTo(DB_Byte, 0);
currPLC.WriteBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, DB_Byte);
// loggo invio al PLC!
lgInfo($"Value sent to PLC: {item.Key} | {valore}");
memoria = new memAddress(item.Value.MemConf);
numByte = item.Value.memByteSize;
outVal = "";
// leggo!
var currMem = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte);
// conferto lettura secondo il tipo!
switch (item.Value.DataType)
{
case S7DataType.Byte:
outVal = S7.Net.Types.Byte.FromByteArray(currMem.ToArray()).ToString();
break;
case S7DataType.Word:
outVal = S7.Net.Types.Word.FromByteArray(currMem.ToArray()).ToString();
break;
case S7DataType.DWord:
outVal = S7.Net.Types.DWord.FromByteArray(currMem.ToArray()).ToString();
//var dwordVal = S7.Net.Types.DWord.FromByteArray(currMem.ToArray());
//newData.Add(dwordVal.ToString());
break;
case S7DataType.Real:
outVal = S7.Net.Types.Double.FromByteArray(currMem.ToArray()).ToString();
//var doubleVal = S7.Net.Types.Double.FromByteArray(currMem.ToArray());
//newData.Add(doubleVal.ToString());
break;
case S7DataType.String:
// prendo 2° valore (num max valori)
int numChar = currMem[1];
// poi prendo la stringa...
for (int i = 2; i < numChar + 2; i++)
{
outVal += Char.ConvertFromUtf32(currMem[i]);
}
break;
default:
outVal = BitConverter.ToString(currMem);
break;
}
newData.Add(outVal);
}
}
#endif
// formatto lista come riga CSV
nextRow = string.Join(utils.CRS("csvSeparator"), newData);
// aggiungo a capo...
nextRow += Environment.NewLine;
}
// e le schianta nella prox riga del file...
if (!string.IsNullOrEmpty(nextRow))
{
File.AppendAllText(outFilePath, nextRow);
}
}
/// <summary>
/// Effettua comparazioen dati vecchi/nuovi
@@ -434,18 +477,21 @@ namespace IOB.WIN.FileExp
/// </summary>
protected void reloadTriggersFromPLC()
{
// init
memAddress memoria = null;
int numByte = 0;
// leggo triggers dal PLC
foreach (var item in currDataProxy.triggerList)
if (testCncConn())
{
memoria = new memAddress(item.Value.MemConf);
numByte = item.Value.memByteSize;
// leggo!
var currMem = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte);
// salvo
upsertValue(item.Value.MemConf, BitConverter.ToString(currMem));
// init
memAddress memoria = null;
int numByte = 0;
// leggo triggers dal PLC
foreach (var item in currDataProxy.triggerList)
{
memoria = new memAddress(item.Value.MemConf);
numByte = item.Value.memByteSize;
// leggo!
var currMem = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte);
// salvo
upsertValue(item.Value.MemConf, BitConverter.ToString(currMem));
}
}
}
+10 -1
View File
@@ -49,10 +49,19 @@ namespace IOB.WIN.FileExp
/// <summary>
/// Tipo di dati
/// </summary>
public string DataType { get; set; } = "";
public S7DataType DataType { get; set; } = S7DataType.Byte;
/// <summary>
/// Dimensione memoria in Byte
/// </summary>
public int memByteSize { get; set; } = 1;
}
public enum S7DataType
{
Byte=0,
Word,
DWord,
Real,
String
}
}