update (many!) for endianness on S7 & bit/byte
This commit is contained in:
+103
-110
@@ -552,8 +552,9 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_RWManageWatchdog()
|
||||
{
|
||||
// watchdog in memoria WORD --> true x endianness!
|
||||
bool plcWatchdog = false;
|
||||
CmsError libraryError = MEM_RWBoolean(R, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 0, ref plcWatchdog);
|
||||
CmsError libraryError = MEM_RWBoolean(R, true, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 0, ref plcWatchdog);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -561,7 +562,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
return PLC_NOT_RUNNING_ERROR;
|
||||
// tira su il bit...
|
||||
plcWatchdog = true;
|
||||
return MEM_RWBoolean(W, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 0, ref plcWatchdog);
|
||||
return MEM_RWBoolean(W, true, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 0, ref plcWatchdog);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -598,7 +599,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
ALARMS_STATUS.Address,
|
||||
ALARMS_STATUS.SubAddress,
|
||||
0,
|
||||
(ALARMS_STATUS.Size), // status_bytes / 4 + data_word / 2
|
||||
(ALARMS_STATUS.Size), // status_bytes
|
||||
ref currMem);
|
||||
|
||||
if (libraryError.IsError())
|
||||
@@ -652,8 +653,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (id > ALARMS_NUMBER)
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Call restore message
|
||||
CmsError libraryError = PLC_WStrobe(ALARM_ACK, ALARM_RESTORATION_STROBE, id);
|
||||
// Call restore message: is a BIT ARRAY --> true!
|
||||
CmsError libraryError = PLC_WStrobe(true, ALARM_ACK, ALARM_RESTORATION_STROBE, id);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -666,8 +667,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (id > ALARMS_NUMBER)
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Call restore message
|
||||
CmsError libraryError = PLC_WStrobe(ALARM_ACK, ALARM_REFRESH_STROBE, id);
|
||||
// Call restore message: is a BIT ARRAY --> false!
|
||||
CmsError libraryError = PLC_WStrobe(false, ALARM_ACK, ALARM_REFRESH_STROBE, id);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -676,7 +677,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_WRefreshAllMessages()
|
||||
{
|
||||
return PLC_WNcSoftKey(REFRESH_ALL_ALARMS_SFKEY_INDEX);
|
||||
// imposto come UserSoftKey
|
||||
return PLC_WUserSoftKey(REFRESH_ALL_ALARMS_SFKEY_INDEX);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RPowerOnData(ref PreAndPostPowerOnModel powerOnModel)
|
||||
@@ -734,7 +736,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Call restore message
|
||||
CmsError libraryError = PLC_WStrobe(PRE_POST_POWER_ON_ACK, PRE_POST_POWER_ON_CLICKED, id);
|
||||
CmsError libraryError = PLC_WStrobe(false, PRE_POST_POWER_ON_ACK, PRE_POST_POWER_ON_CLICKED, id);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -771,7 +773,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
byte value = 0;
|
||||
// Read byte from memory
|
||||
CmsError libraryError = MEM_RWByte(R, 0, AXIS_RESET_PROCEDURE.MemType, AXIS_RESET_PROCEDURE.Address, AXIS_RESET_PROCEDURE.SubAddress, 0, ref value);
|
||||
CmsError libraryError = MEM_RWByte(R, true, 0, AXIS_RESET_PROCEDURE.MemType, AXIS_RESET_PROCEDURE.Address, AXIS_RESET_PROCEDURE.SubAddress, 0, ref value);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -792,15 +794,6 @@ namespace CMS_CORE_Library.S7Net
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_RNcSoftKeys(ref List<SoftKeysModel> ncSoftKeys)
|
||||
{
|
||||
CmsError libraryError = PLC_RSoftKeys(NC_SOFTKEYS_VALUE, NC_SOFTKEYS_CLICKABLE, ref ncSoftKeys);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_RUserSoftKeys(ref List<SoftKeysModel> softKeys)
|
||||
{
|
||||
CmsError libraryError = PLC_RSoftKeys(USER_SOFTKEYS_VALUE, USER_SOFTKEYS_CLICKABLE, ref softKeys);
|
||||
@@ -846,28 +839,14 @@ namespace CMS_CORE_Library.S7Net
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_WNcSoftKey(uint id)
|
||||
{
|
||||
// Check id range
|
||||
if (id > NC_SOFTKEYS_NUMBER)
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Write strobe into memory
|
||||
CmsError libraryError = PLC_WStrobe(NC_SOFT_KEYS_ACK, NC_SOFT_KEYS_CLICKED, id);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_WUserSoftKey(uint id)
|
||||
{
|
||||
// Check id range
|
||||
if (id > USER_SOFTKEYS_NUMBER)
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Write strobe into memory
|
||||
CmsError libraryError = PLC_WStrobe(USER_SOFT_KEYS_ACK, USER_SOFT_KEYS_CLICKED, id);
|
||||
// Write strobe into memory --> check if bitArray
|
||||
CmsError libraryError = PLC_WStrobe(false, USER_SOFT_KEYS_ACK, USER_SOFT_KEYS_CLICKED, id);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -901,6 +880,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_WResetWorkedTimeMachine(uint time)
|
||||
{
|
||||
//FIXME TODO verificare endianness aree memoria
|
||||
|
||||
uint actTime = 0;
|
||||
|
||||
// Read actual Value
|
||||
@@ -919,7 +900,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
//Scrivo il bit
|
||||
bitValue = true;
|
||||
nTry = 0;
|
||||
libraryError = MEM_RWBoolean(W, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
libraryError = MEM_RWBoolean(W, true, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -928,7 +909,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
Thread.Sleep(50);
|
||||
nTry += 1;
|
||||
libraryError = MEM_RWBoolean(R, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
libraryError = MEM_RWBoolean(R, true, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -938,7 +919,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (bitValue)
|
||||
{
|
||||
bitValue = true;
|
||||
libraryError = MEM_RWBoolean(W, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
libraryError = MEM_RWBoolean(W, true, 0, MACHINE_RESET_WORKED_TIME.MemType, MACHINE_RESET_WORKED_TIME.Address, MACHINE_RESET_WORKED_TIME.SubAddress, 0, ref bitValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -983,15 +964,16 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_WResetMachineCounters(uint counter)
|
||||
{
|
||||
// FIXME TODO verifica se endianness vada gestita o meno (qui FALSE)
|
||||
bool isResettable = false;
|
||||
CmsError libraryError = MEM_RWBoolean(R, 0, COUNTER_IS_RESETTABLE.MemType, COUNTER_IS_RESETTABLE.Address, COUNTER_IS_RESETTABLE.SubAddress, (int)(counter - 1), ref isResettable);
|
||||
CmsError libraryError = MEM_RWBoolean(R, false, 0, COUNTER_IS_RESETTABLE.MemType, COUNTER_IS_RESETTABLE.Address, COUNTER_IS_RESETTABLE.SubAddress, (int)(counter - 1), ref isResettable);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
if (!isResettable)
|
||||
return FUNCTION_NOT_ALLOWED_ERROR;
|
||||
|
||||
libraryError = PLC_WStrobe(COUNTER_IS_RESETTABLE_ACK, COUNTER_IS_RESETTABLE_STROBE, counter);
|
||||
libraryError = PLC_WStrobe(false, COUNTER_IS_RESETTABLE_ACK, COUNTER_IS_RESETTABLE_STROBE, counter);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1010,16 +992,16 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> data, ref bool MTCOnOff)
|
||||
{
|
||||
// FIXME TODO - levare?
|
||||
// FIXME TODO - levare? inserito anche endiannes
|
||||
|
||||
MTCOnOff = false;
|
||||
CmsError libraryError = MEM_RWBoolean(R, 0, M154_SWITCH_ONOFF.MemType, M154_SWITCH_ONOFF.Address, M154_SWITCH_ONOFF.SubAddress, 1, ref MTCOnOff);
|
||||
CmsError libraryError = MEM_RWBoolean(R, true, 0, M154_SWITCH_ONOFF.MemType, M154_SWITCH_ONOFF.Address, M154_SWITCH_ONOFF.SubAddress, 1, ref MTCOnOff);
|
||||
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
byte val = 0;
|
||||
libraryError = MEM_RWByte(R, 0, M154_STROBE.MemType, M154_STROBE.Address, M154_STROBE.SubAddress, 0, ref val);
|
||||
libraryError = MEM_RWByte(R, true, 0, M154_STROBE.MemType, M154_STROBE.Address, M154_STROBE.SubAddress, 0, ref val);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1053,7 +1035,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_W154ManageAck(int processId)
|
||||
{
|
||||
return PLC_ManageActiveAck(M154_STROBE.Address, M154_STROBE.SubAddress, processId - 1, M154_ACK.Address, M154_ACK.SubAddress, processId - 1, M154_STROBE.MemType);
|
||||
return PLC_ManageActiveAck(M154_STROBE.Address, M154_STROBE.SubAddress, processId - 1, M154_ACK.Address, M154_ACK.SubAddress, processId - 1, M154_STROBE.MemType, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -1061,7 +1043,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
byte val = 0;
|
||||
List<byte> vals = new List<byte>();
|
||||
CmsError libraryError = MEM_RWByte(R, 0, M156_INPUT_NEEDED.MemType, M156_INPUT_NEEDED.Address, M156_INPUT_NEEDED.SubAddress, 0, ref val);
|
||||
CmsError libraryError = MEM_RWByte(R, true, 0, M156_INPUT_NEEDED.MemType, M156_INPUT_NEEDED.Address, M156_INPUT_NEEDED.SubAddress, 0, ref val);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1106,11 +1088,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_WM156Response(int process, double responseVal)
|
||||
{
|
||||
//CmsError libraryError = MEM_RWDouble(W, 0, MEMORY_TYPE.Osai_GD, 900 + (process - 1), ref responseVal);
|
||||
//if (libraryError.IsError())
|
||||
// return libraryError;
|
||||
|
||||
return PLC_WStrobe(M156_INPUT_ACK, M156_INPUT_STROBE, (uint)process);
|
||||
// FIXME TODO verifica se endianness vada gestita o meno (qui FALSE)
|
||||
return PLC_WStrobe(false, M156_INPUT_ACK, M156_INPUT_STROBE, (uint)process);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
|
||||
@@ -1160,17 +1139,21 @@ namespace CMS_CORE_Library.S7Net
|
||||
value = val;
|
||||
}
|
||||
else
|
||||
{ // read BYTE
|
||||
{
|
||||
// FIXME TODO verificare endianness (qui true)
|
||||
// read BYTE
|
||||
byte val = 0;
|
||||
libraryError = MEM_RWByte(R, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), 0, ref val);
|
||||
libraryError = MEM_RWByte(R, true, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), 0, ref val);
|
||||
|
||||
value = val;
|
||||
}
|
||||
}
|
||||
else if (index.Count() == 3 && memType == SCADA_MEM_TYPE.BOOL)
|
||||
{ // read BOOL
|
||||
{
|
||||
// FIXME TODO verificare endianness, qui false
|
||||
// read BOOL
|
||||
bool val = false;
|
||||
libraryError = MEM_RWBoolean(R, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), Convert.ToInt32(index[2]), ref val);
|
||||
libraryError = MEM_RWBoolean(R, false, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), Convert.ToInt32(index[2]), ref val);
|
||||
|
||||
value = val;
|
||||
}
|
||||
@@ -1214,15 +1197,17 @@ namespace CMS_CORE_Library.S7Net
|
||||
libraryError = MEM_RWDouble(W, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
|
||||
}
|
||||
else
|
||||
{ // write byte
|
||||
{
|
||||
// write byte
|
||||
byte val = Convert.ToByte(value);
|
||||
libraryError = MEM_RWByte(W, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), 0, ref val);
|
||||
libraryError = MEM_RWByte(W, true, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), 0, ref val);
|
||||
}
|
||||
}
|
||||
else if (index.Count() == 3 && memType == SCADA_MEM_TYPE.BOOL)
|
||||
{ // write BOOL
|
||||
{
|
||||
// write BOOL
|
||||
bool val = Convert.ToBoolean(value);
|
||||
libraryError = MEM_RWBoolean(W, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), Convert.ToInt32(index[2]), ref val);
|
||||
libraryError = MEM_RWBoolean(W, false, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), Convert.ToInt32(index[2]), ref val);
|
||||
}
|
||||
|
||||
return libraryError;
|
||||
@@ -1245,11 +1230,12 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <summary>
|
||||
/// Write strobe and manage ack from PLC
|
||||
/// </summary>
|
||||
/// <param name="fixEndian">Apply endianness swap (word=yes, bitArray=no)</param>
|
||||
/// <param name="ackCell"></param>
|
||||
/// <param name="strobeCell"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
private CmsError PLC_WStrobe(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
|
||||
private CmsError PLC_WStrobe(bool fixEndian, MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
|
||||
{
|
||||
CmsError libraryError;
|
||||
bool readValue = false;
|
||||
@@ -1258,7 +1244,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
SetupAckStrobeAddresses(ackCell.SubAddress, strobeCell.SubAddress, id, out int ackByte, out int strobeByte, out int alarmBitId);
|
||||
|
||||
// Check Strobe
|
||||
libraryError = MEM_RWBoolean(R, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1267,7 +1253,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
return NO_ERROR;
|
||||
|
||||
// Check ACK
|
||||
libraryError = MEM_RWBoolean(R, 0, ackCell.MemType, ackCell.Address, ackByte, alarmBitId, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, ackCell.MemType, ackCell.Address, ackByte, alarmBitId, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1276,12 +1262,12 @@ namespace CMS_CORE_Library.S7Net
|
||||
return NO_ERROR;
|
||||
|
||||
// Write strobe into memory
|
||||
libraryError = MEM_RWBoolean(W, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
// Reset wait ack = 1 and reset the strobe
|
||||
libraryError = ResetStrobe(alarmBitId, strobeByte, ackByte, ackCell.MemType);
|
||||
libraryError = ResetStrobe(alarmBitId, strobeByte, ackByte, ackCell.MemType, fixEndian);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1290,11 +1276,12 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <summary>
|
||||
/// Write ack for strobe received from PLC
|
||||
/// </summary>
|
||||
/// <param name="fixEndian">Apply endianness swap (word=yes, bitArray=no)</param>
|
||||
/// <param name="ackCell"></param>
|
||||
/// <param name="strobeCell"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
private CmsError PLC_WAck(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
|
||||
private CmsError PLC_WAck(bool fixEndian, MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
|
||||
{
|
||||
CmsError libraryError;
|
||||
bool readValue = false;
|
||||
@@ -1303,7 +1290,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
SetupAckStrobeAddresses(ackCell.SubAddress, strobeCell.SubAddress, id, out int ackByte, out int strobeByte, out int alarmBitId);
|
||||
|
||||
// Check Strobe
|
||||
libraryError = MEM_RWBoolean(R, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, strobeCell.MemType, strobeCell.Address, strobeByte, alarmBitId, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1311,7 +1298,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (readValue)
|
||||
{
|
||||
// abbasso ack se fosse su...
|
||||
libraryError = MEM_RWBoolean(W, 0, ackCell.MemType, ackCell.Address, ackByte, alarmBitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, ackCell.MemType, ackCell.Address, ackByte, alarmBitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1319,7 +1306,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
Thread.Sleep(50);
|
||||
|
||||
// Reset wait ack = 1 and reset the strobe
|
||||
libraryError = ResetAck(alarmBitId, strobeByte, ackByte, ackCell.MemType);
|
||||
libraryError = ResetAck(alarmBitId, strobeByte, ackByte, ackCell.MemType, fixEndian);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1332,12 +1319,12 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <summary>
|
||||
/// Setup memory for ack/strobe processing
|
||||
/// </summary>
|
||||
/// <param name="ackAddress"></param>
|
||||
/// <param name="strobeAddress"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ackByte"></param>
|
||||
/// <param name="strobeByte"></param>
|
||||
/// <param name="bit">1..8</param>
|
||||
/// <param name="ackAddress">base addr for ack zone</param>
|
||||
/// <param name="strobeAddress">base addr for strobe zone</param>
|
||||
/// <param name="id">parameters to set (id 1...n)</param>
|
||||
/// <param name="ackByte">ack byte to use (OUT)</param>
|
||||
/// <param name="strobeByte">strobe byte to use (out)</param>
|
||||
/// <param name="bit">bit 1..8</param>
|
||||
private void SetupAckStrobeAddresses(int ackAddress, int strobeAddress, uint id, out int ackByte, out int strobeByte, out int bit)
|
||||
{
|
||||
ackByte = ackAddress + (((int)id - 1) / 8);
|
||||
@@ -1345,7 +1332,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
bit = (((int)id - 1) % 8);
|
||||
}
|
||||
|
||||
private CmsError ResetStrobe(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType)
|
||||
private CmsError ResetStrobe(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType, bool fixEndian)
|
||||
{
|
||||
int n = 600;
|
||||
bool readValue = false;
|
||||
@@ -1356,7 +1343,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
do
|
||||
{
|
||||
// Check ACK
|
||||
libraryError = MEM_RWBoolean(R, 0, memType, TABLE, ackByte, bitId, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, memType, TABLE, ackByte, bitId, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1364,7 +1351,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (readValue == true)
|
||||
{
|
||||
// Reset strobe
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, TABLE, strobeByte, bitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, TABLE, strobeByte, bitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
// Exit from cycle
|
||||
@@ -1383,14 +1370,14 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (!ok)
|
||||
{
|
||||
// Reset strobe
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, TABLE, strobeByte, bitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, TABLE, strobeByte, bitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
return libraryError;
|
||||
}
|
||||
private CmsError ResetAck(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType)
|
||||
private CmsError ResetAck(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType, bool fixEndian)
|
||||
{
|
||||
int n = 600;
|
||||
bool readValue = false;
|
||||
@@ -1404,7 +1391,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
do
|
||||
{
|
||||
// Check Strobe
|
||||
libraryError = MEM_RWBoolean(R, 0, memType, TABLE, strobeByte, bitId, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, memType, TABLE, strobeByte, bitId, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1412,7 +1399,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (readValue == false)
|
||||
{
|
||||
// Reset strobe
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, TABLE, ackByte, bitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, TABLE, ackByte, bitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
// Exit from cycle
|
||||
@@ -1433,7 +1420,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
// Reset ack (forced)
|
||||
writeValue = false;
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, TABLE, ackByte, bitId, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, TABLE, ackByte, bitId, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -1441,21 +1428,21 @@ namespace CMS_CORE_Library.S7Net
|
||||
return libraryError;
|
||||
}
|
||||
|
||||
private CmsError PLC_ManageActiveAck(int strobeByte, int strobeSubByte, int strobeBit, int ackByte, int ackSubByte, int ackBit, MEMORY_TYPE memType)
|
||||
private CmsError PLC_ManageActiveAck(int strobeByte, int strobeSubByte, int strobeBit, int ackByte, int ackSubByte, int ackBit, MEMORY_TYPE memType, bool fixEndian)
|
||||
{
|
||||
int n = 1200; // 30 seconds
|
||||
bool readValue = false;
|
||||
bool writeValue = true;
|
||||
bool ok = false;
|
||||
// Set ack to 1
|
||||
CmsError libraryError = MEM_RWBoolean(W, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
CmsError libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
do
|
||||
{
|
||||
// Check strobe
|
||||
libraryError = MEM_RWBoolean(R, 0, memType, strobeByte, strobeSubByte, strobeBit, ref readValue);
|
||||
libraryError = MEM_RWBoolean(R, fixEndian, 0, memType, strobeByte, strobeSubByte, strobeBit, ref readValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1464,7 +1451,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
writeValue = false;
|
||||
// Reset acknowledge
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
// Exit from cycle
|
||||
@@ -1485,7 +1472,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
{
|
||||
// Reset acknowledge
|
||||
writeValue = false;
|
||||
libraryError = MEM_RWBoolean(W, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
libraryError = MEM_RWBoolean(W, fixEndian, 0, memType, ackByte, ackSubByte, ackBit, ref writeValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -1498,7 +1485,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
bool newVal = false;
|
||||
|
||||
//Scrivo il dato
|
||||
CmsError libraryError = MEM_RWBoolean(W, 0, EXP_CANDY_MEM.MemType, EXP_CANDY_MEM.Address, EXP_CANDY_MEM.SubAddress, 5, ref value);
|
||||
CmsError libraryError = MEM_RWBoolean(W, true, 0, EXP_CANDY_MEM.MemType, EXP_CANDY_MEM.Address, EXP_CANDY_MEM.SubAddress, 5, ref value);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
else
|
||||
@@ -1519,7 +1506,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
public override CmsError PLC_RExpiredCandy(ref bool value)
|
||||
{
|
||||
CmsError libraryError = MEM_RWBoolean(R, 0, EXP_CANDY_MEM.MemType, EXP_CANDY_MEM.Address, EXP_CANDY_MEM.SubAddress, 5, ref value);
|
||||
CmsError libraryError = MEM_RWBoolean(R, true, 0, EXP_CANDY_MEM.MemType, EXP_CANDY_MEM.Address, EXP_CANDY_MEM.SubAddress, 5, ref value);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
return NO_ERROR;
|
||||
@@ -1583,7 +1570,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
return libraryError;
|
||||
|
||||
byte readValues = 0;
|
||||
libraryError = MEM_RWByte(R, 0, ACTIVE_CLIENT.MemType, ACTIVE_CLIENT.Address, ACTIVE_CLIENT.SubAddress, 0, ref readValues);
|
||||
libraryError = MEM_RWByte(R, true, 0, ACTIVE_CLIENT.MemType, ACTIVE_CLIENT.Address, ACTIVE_CLIENT.SubAddress, 0, ref readValues);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1806,7 +1793,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
return INCORRECT_PARAMETERS_ERROR;
|
||||
|
||||
// Write process number
|
||||
libraryError = MEM_RWByte(W, 0, SELECT_PROCESS.MemType, SELECT_PROCESS.Address, SELECT_PROCESS.SubAddress, 0, ref processNum);
|
||||
libraryError = MEM_RWByte(W, true, 0, SELECT_PROCESS.MemType, SELECT_PROCESS.Address, SELECT_PROCESS.SubAddress, 0, ref processNum);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1979,7 +1966,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// Call ack for config request RISK
|
||||
libraryError = PLC_WAck(REQ_CONF_ACK, REQ_CONF_STROBE, 8);
|
||||
libraryError = PLC_WAck(true, REQ_CONF_ACK, REQ_CONF_STROBE, 8);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -1994,7 +1981,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// Call ack for config request RECIPE
|
||||
libraryError = PLC_WAck(REQ_CONF_ACK, REQ_CONF_STROBE, 9);
|
||||
libraryError = PLC_WAck(true, REQ_CONF_ACK, REQ_CONF_STROBE, 9);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -2009,7 +1996,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// Call ack for prod update
|
||||
libraryError = PLC_WAck(REQ_CONF_ACK, REQ_CONF_STROBE, 4);
|
||||
libraryError = PLC_WAck(true, REQ_CONF_ACK, REQ_CONF_STROBE, 4);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -2024,7 +2011,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// Call ack for prod update
|
||||
libraryError = PLC_WAck(REQ_CONF_ACK, REQ_CONF_STROBE, 11);
|
||||
libraryError = PLC_WAck(true, REQ_CONF_ACK, REQ_CONF_STROBE, 11);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -2039,7 +2026,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
CmsError libraryError = NO_ERROR;
|
||||
|
||||
// Call ack for prod update
|
||||
libraryError = PLC_WAck(REQ_CONF_ACK, REQ_CONF_STROBE, 12);
|
||||
libraryError = PLC_WAck(true, REQ_CONF_ACK, REQ_CONF_STROBE, 12);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -2147,7 +2134,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (confirmUpdate)
|
||||
{
|
||||
// Call confirm update
|
||||
CmsError libraryError = PLC_WStrobe(PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 2);
|
||||
CmsError libraryError = PLC_WStrobe(true, PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 2);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -2155,7 +2142,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
else
|
||||
{
|
||||
// Call cancel update
|
||||
CmsError libraryError = PLC_WStrobe(PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 3);
|
||||
CmsError libraryError = PLC_WStrobe(true, PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 3);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -2309,7 +2296,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (doReset)
|
||||
{
|
||||
// send strobe of NEW WorkOrder / reset QTY
|
||||
libraryError = PLC_WStrobe(PROD_ACK, PROD_STROBE, 10);
|
||||
libraryError = PLC_WStrobe(true, PROD_ACK, PROD_STROBE, 10);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -3150,7 +3137,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (mode == 1)
|
||||
{
|
||||
// Call confirm update
|
||||
CmsError libraryError = PLC_WStrobe(REQ_MODE_ACK, REQ_MODE_STROBE, 6);
|
||||
CmsError libraryError = PLC_WStrobe(true, REQ_MODE_ACK, REQ_MODE_STROBE, 6);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -3158,7 +3145,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (mode == 2)
|
||||
{
|
||||
// Call confirm update
|
||||
CmsError libraryError = PLC_WStrobe(REQ_MODE_ACK, REQ_MODE_STROBE, 5);
|
||||
CmsError libraryError = PLC_WStrobe(true, REQ_MODE_ACK, REQ_MODE_STROBE, 5);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -3166,7 +3153,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
if (mode == 3)
|
||||
{
|
||||
// Call confirm update
|
||||
CmsError libraryError = PLC_WStrobe(REQ_MODE_ACK, REQ_MODE_STROBE, 7);
|
||||
CmsError libraryError = PLC_WStrobe(true, REQ_MODE_ACK, REQ_MODE_STROBE, 7);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -3238,7 +3225,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
#region NC Low-level function: single valiable in memory
|
||||
|
||||
//Read-Write a Boolean-Value inside the NC.
|
||||
public override CmsError MEM_RWBoolean(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int MemBit, ref bool Value)
|
||||
public override CmsError MEM_RWBoolean(bool bWrite, bool fixEndian, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int MemBit, ref bool Value)
|
||||
{
|
||||
//Check if the NC is Connected
|
||||
CmsError libraryError = CheckConnection();
|
||||
@@ -3254,7 +3241,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
ushort pow = (ushort)Math.Pow(2, MemBit);
|
||||
|
||||
//Read the Byte where is the bit
|
||||
libraryError = MEM_RWByte(R, Process, MemType, MemTable, MemIndex, 0, ref bValue);
|
||||
libraryError = MEM_RWByte(R, fixEndian, Process, MemType, MemTable, MemIndex, 0, ref bValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
|
||||
@@ -3266,7 +3253,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
else
|
||||
bValue = (byte)(bValue & ~(1 << MemBit));
|
||||
|
||||
libraryError = MEM_RWByte(W, Process, MemType, MemTable, MemIndex, 0, ref bValue);
|
||||
libraryError = MEM_RWByte(W, fixEndian, Process, MemType, MemTable, MemIndex, 0, ref bValue);
|
||||
if (libraryError.IsError())
|
||||
return libraryError;
|
||||
}
|
||||
@@ -3282,7 +3269,8 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <summary>
|
||||
/// Read-Write a SINGLE Byte inside the NC. In writing-mode the field "Number" is not required
|
||||
/// </summary>
|
||||
/// <param name="bWrite"></param>
|
||||
/// <param name="bWrite">R/W mode</param>
|
||||
/// <param name="fixEndian">fix endianness</param>
|
||||
/// <param name="Process"></param>
|
||||
/// <param name="MemType"></param>
|
||||
/// <param name="MemTable"></param>
|
||||
@@ -3290,7 +3278,7 @@ namespace CMS_CORE_Library.S7Net
|
||||
/// <param name="MemByte"></param>
|
||||
/// <param name="Value"></param>
|
||||
/// <returns></returns>
|
||||
public override CmsError MEM_RWByte(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int MemByte, ref byte Value)
|
||||
public override CmsError MEM_RWByte(bool bWrite, bool fixEndian, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int MemByte, ref byte Value)
|
||||
{
|
||||
//Check if the NC is Connected
|
||||
CmsError libraryError = CheckConnection();
|
||||
@@ -3304,9 +3292,14 @@ namespace CMS_CORE_Library.S7Net
|
||||
|
||||
libraryError = null;
|
||||
|
||||
// attenzione endianness! invertire byte...
|
||||
int fixIndex = MemIndex % 2 == 0 ? MemIndex + 1 : MemIndex - 1;
|
||||
// attenzione endianness! inverte byte se richiesto...
|
||||
int fixIndex = MemIndex;
|
||||
if (fixEndian)
|
||||
{
|
||||
fixIndex = MemIndex % 2 == 0 ? MemIndex + 1 : MemIndex - 1;
|
||||
}
|
||||
|
||||
// vere operazioni R/W
|
||||
if (bWrite)
|
||||
{
|
||||
// try/catch
|
||||
@@ -4732,14 +4725,14 @@ namespace CMS_CORE_Library.S7Net
|
||||
internal static MEMORY_CELL USER_SOFTKEYS_VALUE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6552, 16);
|
||||
internal static MEMORY_CELL USER_SOFTKEYS_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6568, 16);
|
||||
internal static MEMORY_CELL USER_SOFT_KEYS_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6584, 16);
|
||||
internal static MEMORY_CELL USER_SOFT_KEYS_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6616, 16);
|
||||
internal static MEMORY_CELL USER_SOFT_KEYS_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6600, 16);
|
||||
|
||||
internal static MEMORY_CELL ALARMS_STATUS = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 14, 128);
|
||||
internal static MEMORY_CELL ALARMS_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 142, 1024);
|
||||
|
||||
internal static MEMORY_CELL ALARM_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2190, 128);
|
||||
internal static MEMORY_CELL ALARM_RESTORATION_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2318, 128);
|
||||
internal static MEMORY_CELL ALARM_REFRESH_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2446, 128);
|
||||
internal static MEMORY_CELL ALARM_REFRESH_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2318, 128);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user