This commit is contained in:
Lucio Maranta
2019-01-30 16:20:32 +00:00
parent a98b8ee1f3
commit ec0ac12c94
9 changed files with 311 additions and 186 deletions
+3 -3
View File
@@ -850,7 +850,7 @@ namespace CMS_CORE_Library.Demo
return MEM_RWByte(W, 0, MEMORY_TYPE.Demo, procAddress, 0, ref approxymatedVal);
}
public override CmsError PLC_RMTConnectData(ref List<MtConnectDataIsNeededModel> value)
public override CmsError PLC_RM154Data(ref List<M154DataModel> value)
{
return NO_ERROR;
}
@@ -1089,7 +1089,7 @@ namespace CMS_CORE_Library.Demo
CmsError cmsError;
bool readValue = false;
for (int i = 0; i < PROCESS_NUMBER; i++)
for (int i = 0; i < MAX_PROCESS_NUMBER; i++)
{
int memoryAddress = SELECTED_PROCESS.Address + i * (2);
// Read memory from plc
@@ -1113,7 +1113,7 @@ namespace CMS_CORE_Library.Demo
byte processNum = (byte)procNumber;
// Check parameter
if (processNum > PROCESS_NUMBER)
if (processNum > MAX_PROCESS_NUMBER)
return INCORRECT_PARAMETERS_ERROR;
// Write process number
+75 -71
View File
@@ -832,36 +832,37 @@ namespace CMS_CORE_Library.Fanuc
bool[] bits = ByteToBits(val);
uint processId = 1;
foreach(bool bit in bits)
string[] parameters;
string actualLine = "";
for (uint processId = 1; processId <= MAX_PROCESS_NUMBER; processId++)
{
if (bit)
if (bits[processId - 1])
{
string actualLine = "";
// Read active program line
cmsError = PROC_ReadActiveLine(processId, ref actualLine);
if (cmsError.IsError())
return cmsError;
// Extract parameters
string[] parameters = ExtractM155ParametersFromNcCodeLine(actualLine);
byte i = 0;
// Populate buttons
// Parse line & get parameters
parameters = ExtractM155ParametersFromNcCodeLine(actualLine);
byte i = 1;
// Skip first parameter because it's the message string
// Set button with -> id = 1..5 -> value = parameter value
Dictionary<byte, string> buttons = parameters.Skip(1)?.ToDictionary(x => i++, x => x);
// Create output model
value.Add(new M155InputIsNeededModel()
{
Process = processId,
IsNeeded = bit,
Process = (uint)processId,
IsNeeded = bits[processId - 1],
Message = parameters[0] ?? "",
Type = parameters.Count() > 1 ? M155_TYPE.MULTIPLE_BUTTONS : M155_TYPE.REAL, // if there aren't buttons is a simple request
Buttons = buttons
});
}
processId++;
}
return NO_ERROR;
}
@@ -870,19 +871,37 @@ namespace CMS_CORE_Library.Fanuc
return NO_ERROR;
}
public override CmsError PLC_RMTConnectData(ref List<MtConnectDataIsNeededModel> value)
public override CmsError PLC_RM154Data(ref List<M154DataModel> data)
{
short nReturn = 0;
for (int i = 0; i < nLibHandle.Count(); i++)
{
// Read block number
nReturn = Focas1.cnc_rdblkcount(nLibHandle[i], out int blockNum);
if (nReturn != 0)
return GetNcError(nReturn);
byte val = 0;
CmsError cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
if (cmsError.IsError())
return cmsError;
ushort length = 256;
char[] line = new char[256];
nReturn = Focas1.cnc_rdexecprog(nLibHandle[i], ref length, out short b, line);
// 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])
{
// Read active program line
cmsError = PROC_ReadActiveLine(processId, ref tmpStr);
if (cmsError.IsError())
return cmsError;
// Parse parameters
parameters = ExtractM154ParametersFromNcCodeLine(tmpStr);
data.Add(new M154DataModel()
{
Process = processId,
IsNeeded = bits[processId - 1],
ActualLine = parameters
});
}
}
return NO_ERROR;
@@ -978,6 +997,8 @@ namespace CMS_CORE_Library.Fanuc
processData.Type = bits[1] ? "WORK" : "AUX";
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
// Choose process status
if (bytes[1] == 1)
@@ -1186,7 +1207,7 @@ namespace CMS_CORE_Library.Fanuc
CmsError cmsError;
bool readValue = false;
for (int i = 0; i < PROCESS_NUMBER; i++)
for (int i = 0; i < MAX_PROCESS_NUMBER; i++)
{
int memoryAddress = SELECTED_PROCESS.Address + i * (2);
// Read memory from plc
@@ -1207,7 +1228,7 @@ namespace CMS_CORE_Library.Fanuc
byte processNum = (byte)procNumber;
// Check parameter
if (processNum > PROCESS_NUMBER)
if (processNum > MAX_PROCESS_NUMBER)
return INCORRECT_PARAMETERS_ERROR;
// Write process number
@@ -2270,42 +2291,13 @@ namespace CMS_CORE_Library.Fanuc
string absolutePath = FormatPathForNc(path, baseDir.drive1);
ODBPDFNFIL dataNum = new ODBPDFNFIL();
// Get the number of the directories and of files
nReturn = Focas1.cnc_rdpdf_subdirn(nLibHandle[0], absolutePath, dataNum);
if (nReturn != 0)
return GetNcError(nReturn);
IDBPDFSDIR currDirInput = new IDBPDFSDIR();
ODBPDFSDIR currDirOutData = new ODBPDFSDIR();
short maxDir = 1;
// Check if there are directories
if (dataNum.dir_num > 0)
{
// Setup input data
currDirInput.dummy = 0;
currDirInput.path = absolutePath;
for (short i = 0; i < dataNum.dir_num; i++)
{
// Update index
currDirInput.req_num = i;
// Read directory data
nReturn = cnc_rdpdf_subdir(nLibHandle[0], ref maxDir, currDirInput, currDirOutData);
if (nReturn != 0)
return GetNcError(nReturn);
// Add to list read data
files.Add(new PreviewFileModel()
{
AbsolutePath = FormatPathForHighLevel(absolutePath + currDirOutData.d_f, true),
IsDirectory = true,
Name = currDirOutData.d_f,
Path = path + currDirOutData.d_f
});
}
}
// Check if there are files
if (dataNum.file_num > 0)
{
@@ -2325,15 +2317,28 @@ namespace CMS_CORE_Library.Fanuc
nReturn = Focas1.cnc_rdpdf_alldir(nLibHandle[0], ref maxDir, funcInput, fileData);
if (nReturn != 0)
return GetNcError(nReturn);
// Add to list read data
files.Add(new PreviewFileModel()
if(fileData.data_kind == 0)
{
AbsolutePath = FormatPathForHighLevel(absolutePath + fileData.d_f, false),
IsDirectory = false,
Name = fileData.d_f,
Path = path + fileData.d_f
});
// Add directory to list
files.Add(new PreviewFileModel()
{
AbsolutePath = FormatPathForHighLevel(absolutePath + fileData.d_f, true),
IsDirectory = true,
Name = fileData.d_f,
Path = path + fileData.d_f
});
}
else
{
// Add file to list
files.Add(new PreviewFileModel()
{
AbsolutePath = FormatPathForHighLevel(absolutePath + fileData.d_f, false),
IsDirectory = false,
Name = fileData.d_f,
Path = path + fileData.d_f
});
}
}
}
}
@@ -2349,16 +2354,15 @@ namespace CMS_CORE_Library.Fanuc
{
string partProgramContent = "";
// Read NC part program content
string absolutePath = FormatPathForNc(path, "");
CmsError cmsError = ReadPartProgramContent(absolutePath, ref partProgramContent);
CmsError cmsError = ReadPartProgramContent(path, ref partProgramContent);
if (cmsError.IsError())
return cmsError;
// Add to list read data
fileInfo = new InfoFile()
{
AbsolutePath = absolutePath,
AbsolutePath = path,
Name = Path.GetFileName(path),
Content = partProgramContent.Split('\n').ToList()
};
@@ -2657,7 +2661,7 @@ namespace CMS_CORE_Library.Fanuc
private string FormatPathForHighLevel(string path, bool isFolder)
{
string tmp = path.Replace('/', '\\');
string tmp = path.Replace('\\', '/');
if (isFolder)
tmp = tmp + "/";
+12 -3
View File
@@ -20,7 +20,7 @@ namespace CMS_CORE_Library.Models
public const int USER_SOFTKEYS_NUMBER = 128;
public const int NC_SOFTKEYS_NUMBER = 32;
public const int PROCESS_NUMBER = 6;
public const int MAX_PROCESS_NUMBER = 6;
public const int ALARMS_NUMBER = 1024;
public const int MAX_HEADS_NUMBER = 20;
@@ -240,6 +240,7 @@ namespace CMS_CORE_Library.Models
public bool Visible;
public ushort Reps;
public bool IsSelected;
public bool CanLoadProgram;
}
public class FunctionalityModel
@@ -296,7 +297,7 @@ namespace CMS_CORE_Library.Models
public Dictionary<byte, string> Buttons;
}
public struct MtConnectDataIsNeededModel
public struct M154DataModel
{
public uint Process;
public bool IsNeeded;
@@ -316,8 +317,14 @@ namespace CMS_CORE_Library.Models
public bool Value;
}
public class HeadDataModel
public class ToolInSpindleModel
{
public string ToolName;
public int ChildId;
}
public class HeadDataModel
{
public uint Id;
public byte Process;
public byte Override;
@@ -329,6 +336,8 @@ namespace CMS_CORE_Library.Models
public bool IsSelected;
public bool OverrideEditable;
public bool AbrasiveIsActive;
public ToolInSpindleModel Tool;
}
public class AxisModel
+1 -1
View File
@@ -141,8 +141,8 @@ namespace CMS_CORE_Library.Models
MaxLoad = obj.MaxLoad,
MinLoadDynamicCompensation = obj.MinLoadDynamicCompensation,
MaxLoadDynamicCompensation = obj.MaxLoadDynamicCompensation,
MaxLoadPctAutoload = obj.MaxLoadPctAutoload,
MinLoadPctAutoload = obj.MinLoadPctAutoload,
MaxLoadPctAutoload = obj.MaxLoadPctAutoload,
DynamicCompensation = obj.DynamicCompensation,
LifeType = obj.LifeType,
NominalLife = obj.NominalLife,
@@ -114,6 +114,7 @@ namespace CMS_CORE_Library.Models
public POSITION_TYPE PhysicalType;
public int Type;
public bool Disabled;
public bool UsedBySpindle;
}
public class EdgeConfigModel
+1 -1
View File
@@ -558,7 +558,7 @@ namespace CMS_CORE_Library
public abstract CmsError PLC_WOperatorInputResponse(int process, double responseVal);
public abstract CmsError PLC_RMTConnectData(ref List<MtConnectDataIsNeededModel> value);
public abstract CmsError PLC_RM154Data(ref List<M154DataModel> value);
public abstract CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value);
+116 -51
View File
@@ -43,8 +43,8 @@ namespace CMS_CORE_Library.Osai
private const string PLC_MESSAGE_PATH = @"C:\CMS\OSAI\";
private readonly string WINNBI_PATH = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\OSAI\WinNBI\";
private const string TOOL_MANAGER_DIRECTORY_PATH = @"ACTIVE\";
private const string NC_PROGRAM_PATH = @"CAMBIO\";
private const string NC_PROGRAM_UPLOAD_PATH = @"CAMBIO\UPLOADED_PP\";
private const string NC_PROGRAM_PATH = @"Programs\";
private const string NC_PROGRAM_UPLOAD_PATH = @"Programs\UPLOADED_PP\";
//private const string TOOL_MANAGER_DIRECTORY_PATH = @"active\OEM\CMS\SYS\ACTIVE\";
@@ -782,14 +782,13 @@ namespace CMS_CORE_Library.Osai
bool[] bits = ByteToBits(val);
string[] parameters;
string actualLine = "";
int processId = 0;
foreach (bool bit in bits)
for(uint processId = 1; processId <= MAX_PROCESS_NUMBER; processId ++)
{
if (bit)
if (bits[processId - 1])
{
// Read active program line
cmsError = ReadActiveLine(processId, ref actualLine);
cmsError = PROC_ReadActiveLine(processId, ref actualLine);
if (cmsError.IsError())
return cmsError;
@@ -803,32 +802,18 @@ namespace CMS_CORE_Library.Osai
value.Add(new M155InputIsNeededModel()
{
Process = (uint)processId,
IsNeeded = bit,
Process = processId,
IsNeeded = bits[processId - 1],
Message = parameters[0] ?? "",
Type = parameters.Count() > 1 ? M155_TYPE.MULTIPLE_BUTTONS : M155_TYPE.REAL, // if there aren't buttons is a simple request
Buttons = buttons
});
}
// Next path
processId++;
}
return NO_ERROR;
}
private CmsError ReadActiveLine(int processId, ref string line)
{
List<string> lines = new List<string>();
CmsError cmsError = PROC_RPPLines((ushort)processId,ref lines);
if (cmsError.IsError())
return cmsError;
line = lines.First();
return NO_ERROR;
}
public override CmsError PLC_WOperatorInputResponse(int process, double responseVal)
{
@@ -839,66 +824,132 @@ namespace CMS_CORE_Library.Osai
return PLC_WStrobe(M155_INPUT_ACK, M155_INPUT_STROBE, (uint)process);
}
public override CmsError PLC_RMTConnectData(ref List<MtConnectDataIsNeededModel> value)
public override CmsError PLC_RM154Data(ref List<M154DataModel> data)
{
byte val = 0;
CmsError 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])
{
// Read active program line
cmsError = PROC_ReadActiveLine(processId, ref tmpStr);
if (cmsError.IsError())
return cmsError;
// Parse parameters
parameters = ExtractM154ParametersFromNcCodeLine(tmpStr);
data.Add(new M154DataModel()
{
Process = (uint)processId,
IsNeeded = bits[processId - 1],
ActualLine = parameters
});
}
}
return NO_ERROR;
}
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
{
return NO_ERROR;
}
public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value)
{
string[] index = memIndex.Split('.');
CmsError cmsError = NO_ERROR;
if (index.Count() == 0)
{
return INCORRECT_PARAMETERS_ERROR;
}
else if (index.Count() == 1)
{
if (memType == SCADA_MEM_TYPE.INT)
{
// READ INT
// read INT
int val = 0;
CmsError cmsError = MEM_RWInteger(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWInteger(R, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
value = val;
}
else if (memType == SCADA_MEM_TYPE.WORD)
{ // READ WORD
{ // read WORD
ushort val = 0;
CmsError cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWWord(R, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
value = val;
}
else if (memType == SCADA_MEM_TYPE.REAL)
{ // read DOUBLE
double val = 0;
cmsError = MEM_RWDouble(R, 0, MEMORY_TYPE.Osai_GD, Convert.ToInt32(index[0]), ref val);
value = val;
}
else
{ // READ byte
{ // read BYTE
byte val = 0;
CmsError cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), 0, ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWByte(R, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), 0, ref val);
value = val;
}
}
else if (index.Count() == 2 && memType == SCADA_MEM_TYPE.BOOL)
{ // READ BOOL
{ // read BOOL
bool val = false;
CmsError cmsError = MEM_RWBoolean(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWBoolean(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
value = val;
}
return NO_ERROR;
return cmsError;
}
public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value)
{
string[] index = memIndex.Split('.');
CmsError cmsError = NO_ERROR;
if (index.Count() == 0)
return INCORRECT_PARAMETERS_ERROR;
else if (index.Count() == 1)
{
if (memType == SCADA_MEM_TYPE.INT)
{
// write INT
int val = 0;
cmsError = MEM_RWInteger(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
}
else if (memType == SCADA_MEM_TYPE.WORD)
{ // write WORD
ushort val = 0;
cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
}
else if (memType == SCADA_MEM_TYPE.REAL)
{ // write DOUBLE
double val = 0;
cmsError = MEM_RWDouble(W, 0, MEMORY_TYPE.Osai_GD, Convert.ToInt32(index[0]), ref val);
value = val;
}
else
{ // write byte
byte val = 0;
cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), 0, ref val);
}
}
else if (index.Count() == 2 && memType == SCADA_MEM_TYPE.BOOL)
{ // write BOOL
bool val = false;
cmsError = MEM_RWBoolean(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
}
return cmsError;
}
private CmsError PLC_WStrobe(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
@@ -1255,6 +1306,7 @@ namespace CMS_CORE_Library.Osai
processData.Type = bits[1] ? "WORK" : "AUX";
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
// Choose process status
if (bytes[1] == 1)
@@ -1278,7 +1330,7 @@ namespace CMS_CORE_Library.Osai
CmsError cmsError;
bool readValue = false;
for (int i = 0; i < PROCESS_NUMBER; i++)
for (int i = 0; i < MAX_PROCESS_NUMBER; i++)
{
int memoryAddress = SELECTED_PROCESS.Address + i * (2);
// Read memory from plc
@@ -1299,7 +1351,7 @@ namespace CMS_CORE_Library.Osai
byte processNum = (byte)procNumber;
// Check parameter
if (processNum > PROCESS_NUMBER)
if (processNum > MAX_PROCESS_NUMBER)
return INCORRECT_PARAMETERS_ERROR;
// Write process number
@@ -1310,6 +1362,19 @@ namespace CMS_CORE_Library.Osai
return NO_ERROR;
}
private CmsError PROC_ReadActiveLine(uint processId, ref string line)
{
List<string> lines = new List<string>();
CmsError cmsError = PROC_RPPLines((ushort)processId, ref lines);
if (cmsError.IsError())
return cmsError;
// The second line is the one under execution
line = lines[1];
return NO_ERROR;
}
#endregion PROCESS (PATH) High-level data
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+94 -49
View File
@@ -983,17 +983,25 @@ namespace CMS_CORE_Library.Siemens
{
// Head address = posizion * size of single head in memory
var headOffset = i * headsByte;
short toolId = SwapShortEndianFormat(BitConverter.ToInt16(readValues.ToArray(), headOffset + 4));
// Find tool
var tool = ToolTableData.Where(x => x.Id == toolId).FirstOrDefault();
heads.Add(new HeadDataModel()
{
Id = (uint)i + 1,
Process = readValues[headOffset],
Override = readValues[headOffset + 1],
Load_Abrasive = SwapShortEndianFormat(BitConverter.ToUInt16(readValues.ToArray(), headOffset + 2)), // Uint 16 = 2byte
MountedTool_Vacum = SwapShortEndianFormat(BitConverter.ToInt16(readValues.ToArray(), headOffset + 4)), // Uint 16 = 2byte
MountedTool_Vacum = toolId, // Uint 16 = 2byte
ActualSpeed_Pressure = SwapIntEndianFormat(BitConverter.ToInt32(readValues.ToArray(), headOffset + 6)), // Int32 = 4byte
IsActive = (readValues[headOffset + 10] & 1) != 0, // bit 0
IsSelected = (readValues[headOffset + 10] & 2) != 0, // bit 1
OverrideEditable = (readValues[headOffset + 10] & 4) != 0 // bit 2
OverrideEditable = (readValues[headOffset + 10] & 4) != 0, // bit 2
Tool = new ToolInSpindleModel()
{
ChildId = tool == null ? 0 : tool.ChildId,
ToolName = tool == null ? "" : tool.FamilyName,
}
});
}
@@ -1096,8 +1104,6 @@ namespace CMS_CORE_Library.Siemens
dataSvc.Write(item);
return PLC_WStrobe(M155_INPUT_ACK, M155_INPUT_STROBE,(uint)process);
}
catch (Exception ex)
@@ -1106,7 +1112,7 @@ namespace CMS_CORE_Library.Siemens
}
}
public override CmsError PLC_RMTConnectData(ref List<MtConnectDataIsNeededModel> data)
public override CmsError PLC_RM154Data(ref List<M154DataModel> data)
{
byte val = 0;
CmsError cmsError = MEM_RWByte(R, 0, MTCONNECT_DATA_NEEDED.MemType, MTCONNECT_DATA_NEEDED.Address, 0, ref val);
@@ -1115,90 +1121,125 @@ namespace CMS_CORE_Library.Siemens
// Convert a byte to an array of booleans
bool[] bits = ByteToBits(val);
uint processId = 1;
string[] parameters;
string tmpStr = "";
foreach (bool bit in bits)
for (uint processId = 1; processId <= MAX_PROCESS_NUMBER; processId++)
{
// Read active program line
cmsError = PROC_ReadActiveLine(processId, ref tmpStr);
if (cmsError.IsError())
return cmsError;
// Parse parameters
parameters = ExtractM154ParametersFromNcCodeLine(tmpStr);
data.Add(new MtConnectDataIsNeededModel()
if(bits[processId - 1])
{
Process = processId,
IsNeeded = bit,
ActualLine = parameters
});
// Read active program line
cmsError = PROC_ReadActiveLine(processId, ref tmpStr);
if (cmsError.IsError())
return cmsError;
// Next path
processId++;
// Parse parameters
parameters = ExtractM154ParametersFromNcCodeLine(tmpStr);
data.Add(new M154DataModel()
{
Process = processId,
IsNeeded = bits[processId - 1],
ActualLine = parameters
});
}
}
return NO_ERROR;
}
public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value)
{
return NO_ERROR;
}
public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value)
{
string[] index = memIndex.Split('.');
CmsError cmsError = NO_ERROR;
if (index.Count() == 0)
{
return INCORRECT_PARAMETERS_ERROR;
}
else if (index.Count() == 1)
{
if (memType == SCADA_MEM_TYPE.INT)
{
// READ INT
// read INT
int val = 0;
CmsError cmsError = MEM_RWInteger(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWInteger(R, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), ref val);
value = val;
}
else if (memType == SCADA_MEM_TYPE.WORD)
{ // READ WORD
{ // read WORD
ushort val = 0;
CmsError cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWWord(R, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), ref val);
value = val;
}
else if (memType == SCADA_MEM_TYPE.REAL)
{ // read DOUBLE
double val = 0;
cmsError = MEM_RWDouble(R, 0, MEMORY_TYPE.Siemens_DB, Convert.ToInt32(index[0]), ref val);
value = val;
}
else
{ // READ byte
{ // read BYTE
byte val = 0;
CmsError cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), 0, ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWByte(R, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), 0, ref val);
value = val;
}
}
else if (index.Count() == 2 && memType == SCADA_MEM_TYPE.BOOL)
{ // READ BOOL
{ // read BOOL
bool val = false;
CmsError cmsError = MEM_RWBoolean(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
if (cmsError.IsError())
return cmsError;
cmsError = MEM_RWBoolean(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
value = val;
}
return NO_ERROR;
return cmsError;
}
public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value)
{
string[] index = memIndex.Split('.');
CmsError cmsError = NO_ERROR;
if (index.Count() == 0)
return INCORRECT_PARAMETERS_ERROR;
else if (index.Count() == 1)
{
if (memType == SCADA_MEM_TYPE.INT)
{
// write INT
int val = 0;
cmsError = MEM_RWInteger(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
}
else if (memType == SCADA_MEM_TYPE.WORD)
{ // write WORD
ushort val = 0;
cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), ref val);
}
else if (memType == SCADA_MEM_TYPE.REAL)
{ // write DOUBLE
double val = 0;
cmsError = MEM_RWDouble(W, 0, MEMORY_TYPE.Osai_GD, Convert.ToInt32(index[0]), ref val);
value = val;
}
else
{ // write byte
byte val = 0;
cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Osai_MW, Convert.ToInt32(index[0]), 0, ref val);
}
}
else if (index.Count() == 2 && memType == SCADA_MEM_TYPE.BOOL)
{ // write BOOL
bool val = false;
cmsError = MEM_RWBoolean(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val);
}
return cmsError;
}
private CmsError PLC_WStrobe(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id)
{
CmsError cmsError;
@@ -1487,7 +1528,8 @@ namespace CMS_CORE_Library.Siemens
processData.Type = bits[1] ? "WORK" : "AUX";
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
// Choose process status
if (bytes[1] == 1)
processData.Status = "HOLD";
@@ -1536,7 +1578,7 @@ namespace CMS_CORE_Library.Siemens
byte processNum = (byte)procNumber;
// Check parameter
if (processNum > PROCESS_NUMBER)
if (processNum > MAX_PROCESS_NUMBER)
return INCORRECT_PARAMETERS_ERROR;
// Write process number
@@ -4688,7 +4730,10 @@ namespace CMS_CORE_Library.Siemens
{
int index = MagazinePositionsData.FindIndex(x => x.PositionId == secondId && x.MagazineId == firstId);
if (index >= 0)
{
MagazinePositionsData[index].Disabled = GetBitValue(Convert.ToInt32(actualString.Split('=').LastOrDefault()), 1);
MagazinePositionsData[index].UsedBySpindle = GetBitValue(Convert.ToInt32(actualString.Split('=').LastOrDefault()), 2);
}
}
break;
+8 -7
View File
@@ -100,8 +100,7 @@ namespace CMS_CORE_Library
{6, "loading_station" },
{7, "loading_point" }
};
private static Dictionary<int, string> cmsRotationTypeList = new Dictionary<int, string>()
{
{0, "none"},
@@ -109,6 +108,7 @@ namespace CMS_CORE_Library
{2, "counterClockWhise"},
{3, "doubleRotation"}
};
#endregion PRIVATE_SELECTS_VALUES
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -187,11 +187,12 @@ namespace CMS_CORE_Library
public static List<FieldsConfiguration> SiemensMagazinePosFieldsConfig = new List<FieldsConfiguration>()
{
new FieldsConfiguration{ Name = "magazineId", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "positionId", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "type", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "physicalType", Type = "select", SelectValues = physicalType, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "disabled", Type = "boolean", SelectValues = null, Category = "general", ReadOnly = false, MinValue = 0, MaxValue = 0 }
new FieldsConfiguration{ Name = "magazineId", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "positionId", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "type", Type = "int", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "physicalType", Type = "select", SelectValues = physicalType, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "usedBySpindle", Type = "boolean", SelectValues = null, Category = "general", ReadOnly = true, MinValue = 0, MaxValue = 0 },
new FieldsConfiguration{ Name = "disabled", Type = "boolean", SelectValues = null, Category = "general", ReadOnly = false, MinValue = 0, MaxValue = 0 }
};
public static EdgesConfiguration SiemensEdgesFieldsConfiguration = new EdgesConfiguration()