Fix
This commit is contained in:
@@ -589,41 +589,6 @@ namespace CMS_CORE_Library.Demo
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError PLC_RSoftKeys(MEMORY_CELL softKeyStatusMemory, MEMORY_CELL softKeysClickableMemory, ref List<SoftKeysModel> softKeys)
|
||||
{
|
||||
softKeys = new List<SoftKeysModel>();
|
||||
List<int> readValue = new List<int>();
|
||||
|
||||
int memorySizeToRead = (softKeyStatusMemory.Size + softKeysClickableMemory.Size);
|
||||
// Offset between status and clicable data
|
||||
int offset = softKeyStatusMemory.Size * 8;
|
||||
|
||||
// Read on data from memory
|
||||
CmsError cmsError = MEM_RWIntegerList(R, 0,
|
||||
softKeyStatusMemory.MemType,
|
||||
softKeyStatusMemory.Address,
|
||||
memorySizeToRead / 4,
|
||||
ref readValue);
|
||||
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
bool[] bits = new BitArray(readValue.ToArray()).Cast<bool>().ToArray();
|
||||
|
||||
// Convert array into structured data
|
||||
for (ushort i = 0; i < bits.Count() / 2; i++)
|
||||
{
|
||||
softKeys.Add(new SoftKeysModel()
|
||||
{
|
||||
Id = (uint)i + 1,
|
||||
Value = bits[i],
|
||||
Active = bits[i + offset]
|
||||
});
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_WNcSoftKey(uint id)
|
||||
{
|
||||
// Check id range
|
||||
@@ -774,42 +739,7 @@ namespace CMS_CORE_Library.Demo
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError ResetStrobe(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 5;
|
||||
bool readValue = false;
|
||||
bool writeValue = false;
|
||||
CmsError cmsError;
|
||||
do
|
||||
{
|
||||
// Check ACK
|
||||
cmsError = MEM_RWBoolean(R, 0, memType, ackByte, bitId, ref readValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// If true reset strobe
|
||||
if (readValue == true)
|
||||
{
|
||||
// Reset strobe
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, strobeByte, bitId, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Exit from cycle
|
||||
n = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Decrement
|
||||
n--;
|
||||
// Wait befor next cycle
|
||||
Thread.Sleep(20);
|
||||
}
|
||||
} while (n > 0);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
|
||||
public override CmsError PLC_ROperatorInputIsNeeded(ref List<M155InputIsNeededModel> value)
|
||||
{
|
||||
byte val = 0;
|
||||
@@ -850,11 +780,52 @@ namespace CMS_CORE_Library.Demo
|
||||
return MEM_RWByte(W, 0, MEMORY_TYPE.Demo, procAddress, 0, ref approxymatedVal);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> value, ref bool MTCCmd)
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> data, ref bool MTCOnOff)
|
||||
{
|
||||
MTCOnOff = false;
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, MTCONNECT_ONOFF.MemType, MTCONNECT_ONOFF.Address, MTCONNECT_ONOFF.SubAddress, ref MTCOnOff);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
byte val = 0;
|
||||
cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// Convert a byte to an array of booleans
|
||||
bool[] bits = ByteToBits(val);
|
||||
string[] parameters;
|
||||
string tmpStr = "";
|
||||
|
||||
for (uint processId = 1; processId <= MAX_PROCESS_NUMBER; processId++)
|
||||
{
|
||||
if (bits[processId - 1])
|
||||
{
|
||||
// Parse parameters
|
||||
parameters = ExtractM154ParametersFromNcCodeLine(tmpStr);
|
||||
data.Add(new M154DataModel()
|
||||
{
|
||||
Process = processId,
|
||||
IsNeeded = bits[processId - 1],
|
||||
Parameters = new string[]
|
||||
{
|
||||
"MTC",
|
||||
"Partid",
|
||||
"55"
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_W154ManageAck(int processId)
|
||||
{
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
|
||||
{
|
||||
string[] index = memIndex.Split('.');
|
||||
@@ -959,6 +930,77 @@ namespace CMS_CORE_Library.Demo
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError ResetStrobe(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 5;
|
||||
bool readValue = false;
|
||||
bool writeValue = false;
|
||||
CmsError cmsError;
|
||||
do
|
||||
{
|
||||
// Check ACK
|
||||
cmsError = MEM_RWBoolean(R, 0, memType, ackByte, bitId, ref readValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// If true reset strobe
|
||||
if (readValue == true)
|
||||
{
|
||||
// Reset strobe
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, strobeByte, bitId, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Exit from cycle
|
||||
n = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Decrement
|
||||
n--;
|
||||
// Wait befor next cycle
|
||||
Thread.Sleep(20);
|
||||
}
|
||||
} while (n > 0);
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
private CmsError PLC_RSoftKeys(MEMORY_CELL softKeyStatusMemory, MEMORY_CELL softKeysClickableMemory, ref List<SoftKeysModel> softKeys)
|
||||
{
|
||||
softKeys = new List<SoftKeysModel>();
|
||||
List<int> readValue = new List<int>();
|
||||
|
||||
int memorySizeToRead = (softKeyStatusMemory.Size + softKeysClickableMemory.Size);
|
||||
// Offset between status and clicable data
|
||||
int offset = softKeyStatusMemory.Size * 8;
|
||||
|
||||
// Read on data from memory
|
||||
CmsError cmsError = MEM_RWIntegerList(R, 0,
|
||||
softKeyStatusMemory.MemType,
|
||||
softKeyStatusMemory.Address,
|
||||
memorySizeToRead / 4,
|
||||
ref readValue);
|
||||
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
bool[] bits = new BitArray(readValue.ToArray()).Cast<bool>().ToArray();
|
||||
|
||||
// Convert array into structured data
|
||||
for (ushort i = 0; i < bits.Count() / 2; i++)
|
||||
{
|
||||
softKeys.Add(new SoftKeysModel()
|
||||
{
|
||||
Id = (uint)i + 1,
|
||||
Value = bits[i],
|
||||
Active = bits[i + offset]
|
||||
});
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
#endregion PLC High-level data
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -3235,7 +3277,9 @@ namespace CMS_CORE_Library.Demo
|
||||
|
||||
internal static MEMORY_CELL OPERATOR_INPUT_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Demo, 450, 1);
|
||||
internal static MEMORY_CELL OPERATOR_INPUT_RESPONSE = new MEMORY_CELL(MEMORY_TYPE.Demo, 451, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Demo, 452, 1);
|
||||
|
||||
internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Demo, 457, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Demo, 458, 1);
|
||||
}
|
||||
|
||||
#endregion Memory addresses
|
||||
|
||||
@@ -874,12 +874,12 @@ namespace CMS_CORE_Library.Fanuc
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> data, ref bool MTCOnOff)
|
||||
{
|
||||
MTCOnOff = false;
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, MTCONNECT_ONOFF.MemType, MTCONNECT_ONOFF.Address, MTCONNECT_ONOFF.SubAddress, ref MTCOnOff);
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, M154_SWITCH_ONOFF.MemType, M154_SWITCH_ONOFF.Address, M154_SWITCH_ONOFF.SubAddress, ref MTCOnOff);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
byte val = 0;
|
||||
cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
|
||||
cmsError = MEM_RWByte(R, 0, M154_STROBE.MemType, M154_STROBE.Address, 0, ref val);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
@@ -912,6 +912,11 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_W154ManageAck(int processId)
|
||||
{
|
||||
return PLC_ManageActiveAck(M154_STROBE.Address, processId - 1, M154_ACK.Address, processId - 1, M154_STROBE.MemType);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
|
||||
{
|
||||
return NO_ERROR;
|
||||
@@ -3263,7 +3268,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
// Manage ack and strobe
|
||||
bitIndex = bitIndex % 16;
|
||||
cmsError = ManageActivePLCAcknowledge(strobeByteIndex, bitIndex, ackByteIndex, bitIndex, MEMORY_TYPE.Osai_MW);
|
||||
cmsError = PLC_ManageActiveAck(strobeByteIndex, bitIndex, ackByteIndex, bitIndex, MEMORY_TYPE.Osai_MW);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
@@ -3500,59 +3505,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
private CmsError ManageActivePLCAcknowledge(int strobeByte, int strobeBit, int ackByte, int ackBit, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 1200; // 30 seconds
|
||||
bool readValue = false;
|
||||
bool writeValue = true;
|
||||
bool ok = false;
|
||||
// Set ack to 1
|
||||
CmsError cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
do
|
||||
{
|
||||
// Check strobe
|
||||
cmsError = MEM_RWBoolean(R, 0, memType, strobeByte, strobeBit, ref readValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// If true reset acknowledge
|
||||
if (!readValue)
|
||||
{
|
||||
writeValue = false;
|
||||
// Reset acknowledge
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Exit from cycle
|
||||
n = 0;
|
||||
ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Decrement
|
||||
n--;
|
||||
// Wait befor next cycle
|
||||
Thread.Sleep(25);
|
||||
}
|
||||
} while (n > 0);
|
||||
|
||||
// If loop timeout goes in timeout
|
||||
if (!ok)
|
||||
{
|
||||
// Reset acknowledge
|
||||
writeValue = false;
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
|
||||
#endregion Nc Tool Manager
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -3689,6 +3642,59 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
private CmsError PLC_ManageActiveAck(int strobeByte, int strobeBit, int ackByte, int ackBit, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 1200; // 30 seconds
|
||||
bool readValue = false;
|
||||
bool writeValue = true;
|
||||
bool ok = false;
|
||||
// Set ack to 1
|
||||
CmsError cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
do
|
||||
{
|
||||
// Check strobe
|
||||
cmsError = MEM_RWBoolean(R, 0, memType, strobeByte, strobeBit, ref readValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// If true reset acknowledge
|
||||
if (!readValue)
|
||||
{
|
||||
writeValue = false;
|
||||
// Reset acknowledge
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Exit from cycle
|
||||
n = 0;
|
||||
ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Decrement
|
||||
n--;
|
||||
// Wait befor next cycle
|
||||
Thread.Sleep(25);
|
||||
}
|
||||
} while (n > 0);
|
||||
|
||||
// If loop timeout goes in timeout
|
||||
if (!ok)
|
||||
{
|
||||
// Reset acknowledge
|
||||
writeValue = false;
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
#endregion Memory private Functions
|
||||
|
||||
private Focas1.page_code ConvertStepToFanucScreen(SCREEN_PAGE page)
|
||||
@@ -4221,10 +4227,12 @@ namespace CMS_CORE_Library.Fanuc
|
||||
internal static MEMORY_CELL COUNTER_IS_RESETTABLE_STROBE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3002, 0, 2);
|
||||
|
||||
internal static MEMORY_CELL M155_INPUT_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3004, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3031, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS, 2);
|
||||
internal static MEMORY_CELL AXES_BUTTON_VISIBLE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3033, 16);
|
||||
|
||||
internal static MEMORY_CELL M154_SWITCH_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS, 2);
|
||||
internal static MEMORY_CELL M154_STROBE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3031, 1);
|
||||
internal static MEMORY_CELL M154_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3032, 1);
|
||||
|
||||
internal static MEMORY_CELL AXES_BUTTON_VISIBLE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 3033, 16);
|
||||
|
||||
// Tool manager areas
|
||||
internal static MEMORY_CELL MAGAZINE_ACTION = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 4000, 16);
|
||||
|
||||
@@ -445,7 +445,7 @@ namespace CMS_CORE_Library
|
||||
* <returns cref="CmsError">Returns an error when an internal or a library error occours</returns>
|
||||
* </summary>
|
||||
**/
|
||||
|
||||
|
||||
public abstract CmsError PLC_RFunctionAccess(ref List<FunctionalityModel> functions);
|
||||
|
||||
/**
|
||||
@@ -560,6 +560,8 @@ namespace CMS_CORE_Library
|
||||
|
||||
public abstract CmsError PLC_RM154Data(ref List<M154DataModel> value, ref bool MTCCmd);
|
||||
|
||||
public abstract CmsError PLC_W154ManageAck(int processId);
|
||||
|
||||
public abstract CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value);
|
||||
|
||||
public abstract CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value);
|
||||
|
||||
@@ -827,12 +827,12 @@ namespace CMS_CORE_Library.Osai
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> data, ref bool MTCOnOff)
|
||||
{
|
||||
MTCOnOff = false;
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, MTCONNECT_ONOFF.MemType, MTCONNECT_ONOFF.Address, MTCONNECT_ONOFF.SubAddress, ref MTCOnOff);
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, M154_SWITCH_ONOFF.MemType, M154_SWITCH_ONOFF.Address, M154_SWITCH_ONOFF.SubAddress, ref MTCOnOff);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
byte val = 0;
|
||||
cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
|
||||
cmsError = MEM_RWByte(R, 0, M154_STROBE.MemType, M154_STROBE.Address, 0, ref val);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
@@ -865,6 +865,11 @@ namespace CMS_CORE_Library.Osai
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_W154ManageAck(int processId)
|
||||
{
|
||||
return PLC_ManageActiveAck(M154_STROBE.Address, processId - 1, M154_ACK.Address, processId - 1, M154_STROBE.MemType);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
|
||||
{
|
||||
string[] index = memIndex.Split('.');
|
||||
@@ -1043,7 +1048,7 @@ namespace CMS_CORE_Library.Osai
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
private CmsError ManageActivePLCAcknowledge(int strobeByte, int strobeBit, int ackByte, int ackBit, MEMORY_TYPE memType)
|
||||
private CmsError PLC_ManageActiveAck(int strobeByte, int strobeBit, int ackByte, int ackBit, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 1200; // 30 seconds
|
||||
bool readValue = false;
|
||||
@@ -3279,7 +3284,7 @@ namespace CMS_CORE_Library.Osai
|
||||
|
||||
// Manage ack and strobe
|
||||
bitIndex = bitIndex % 16;
|
||||
cmsError = ManageActivePLCAcknowledge(strobeByteIndex, bitIndex, ackByteIndex, bitIndex, MEMORY_TYPE.Osai_MW);
|
||||
cmsError = PLC_ManageActiveAck(strobeByteIndex, bitIndex, ackByteIndex, bitIndex, MEMORY_TYPE.Osai_MW);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
@@ -3761,16 +3766,17 @@ namespace CMS_CORE_Library.Osai
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
ushort nReturn;
|
||||
ushort Level = 0;
|
||||
ushort Level = 1;
|
||||
string mainPath = "";
|
||||
string SubPath = "";
|
||||
|
||||
uint errorClass = 0; uint errorNum = 0;
|
||||
//Try to get information
|
||||
try
|
||||
{
|
||||
//Execute the method
|
||||
nReturn = OpenNC.GetActivePartProgramFullPath(procNumber, out Level, out mainPath, out SubPath, out uint errorClass, out uint errorNum);
|
||||
nReturn = OpenNC.GetActivePartProgramFullPath(procNumber, out Level, out mainPath, out SubPath, out errorClass, out errorNum);
|
||||
|
||||
//If there's an error launch exception\
|
||||
if (errorClass != 0 || errorNum != 0 || nReturn == 0)
|
||||
@@ -4068,8 +4074,10 @@ namespace CMS_CORE_Library.Osai
|
||||
internal static MEMORY_CELL M155_INPUT_ACK = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4308, 1);
|
||||
internal static MEMORY_CELL M155_INPUT_STROBE = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4310, 1);
|
||||
|
||||
internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4312, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4000, 2);
|
||||
internal static MEMORY_CELL M154_SWITCH_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4000, 2);
|
||||
internal static MEMORY_CELL M154_STROBE = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4312, 1);
|
||||
internal static MEMORY_CELL M154_ACK = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4314, 1);
|
||||
|
||||
internal static MEMORY_CELL AXES_BUTTON_VISIBLE = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 4320, 16);
|
||||
|
||||
// Tool manager areas
|
||||
|
||||
@@ -1115,12 +1115,12 @@ namespace CMS_CORE_Library.Siemens
|
||||
public override CmsError PLC_RM154Data(ref List<M154DataModel> data, ref bool MTCOnOff)
|
||||
{
|
||||
MTCOnOff = false;
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, MTCONNECT_ONOFF.MemType, MTCONNECT_ONOFF.Address, MTCONNECT_ONOFF.SubAddress, ref MTCOnOff);
|
||||
CmsError cmsError = MEM_RWBoolean(R, 0, M154_SWITCH_ONOFF.MemType, M154_SWITCH_ONOFF.Address, M154_SWITCH_ONOFF.SubAddress, ref MTCOnOff);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
byte val = 0;
|
||||
cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
|
||||
cmsError = MEM_RWByte(R, 0, M154_STROBE.MemType, M154_STROBE.Address, 0, ref val);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
@@ -1153,6 +1153,11 @@ namespace CMS_CORE_Library.Siemens
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError PLC_W154ManageAck(int processId)
|
||||
{
|
||||
return PLC_ManageActiveAck(M154_STROBE.Address, processId - 1, M154_ACK.Address, processId - 1, M154_STROBE.MemType);
|
||||
}
|
||||
|
||||
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
|
||||
{
|
||||
string[] index = memIndex.Split('.');
|
||||
@@ -1325,6 +1330,58 @@ namespace CMS_CORE_Library.Siemens
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
private CmsError PLC_ManageActiveAck(int strobeByte, int strobeBit, int ackByte, int ackBit, MEMORY_TYPE memType)
|
||||
{
|
||||
int n = 1200; // 30 seconds
|
||||
bool readValue = false;
|
||||
bool writeValue = true;
|
||||
bool ok = false;
|
||||
// Set ack to 1
|
||||
CmsError cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
do
|
||||
{
|
||||
// Check strobe
|
||||
cmsError = MEM_RWBoolean(R, 0, memType, strobeByte, strobeBit, ref readValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// If true reset acknowledge
|
||||
if (!readValue)
|
||||
{
|
||||
writeValue = false;
|
||||
// Reset acknowledge
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Exit from cycle
|
||||
n = 0;
|
||||
ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Decrement
|
||||
n--;
|
||||
// Wait befor next cycle
|
||||
Thread.Sleep(25);
|
||||
}
|
||||
} while (n > 0);
|
||||
|
||||
// If loop timeout goes in timeout
|
||||
if (!ok)
|
||||
{
|
||||
// Reset acknowledge
|
||||
writeValue = false;
|
||||
cmsError = MEM_RWBoolean(W, 0, memType, ackByte, ackBit, ref writeValue);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
#endregion PLC High-level data
|
||||
|
||||
@@ -5696,8 +5753,9 @@ namespace CMS_CORE_Library.Siemens
|
||||
internal static MEMORY_CELL M155_INPUT_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3015, 1);
|
||||
internal static MEMORY_CELL M155_INPUT_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3016, 1);
|
||||
|
||||
internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3042, 1);
|
||||
internal static MEMORY_CELL MTCONNECT_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 0, 2);
|
||||
internal static MEMORY_CELL M154_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3042, 1);
|
||||
internal static MEMORY_CELL M154_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3043, 1);
|
||||
internal static MEMORY_CELL M154_SWITCH_ONOFF = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 0, 2);
|
||||
|
||||
internal static MEMORY_CELL AXES_BUTTON_VISIBLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3044, 16);
|
||||
|
||||
|
||||
@@ -201,7 +201,6 @@ namespace CMS_CORE_Library.Utils
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
internal static SIEMENS_MAGAZINE_TYPE ConvertToSiemensMagazineType(NC_MAGAZINE_TYPE type)
|
||||
{
|
||||
switch (type)
|
||||
|
||||
Reference in New Issue
Block a user