Таким образом, мы постепенно обновляем наши штрих-коды в течение следующих нескольких месяцев для другого производителя, который неудобно использует совсем другой декодированный формат. См. Пример изображения.Первый ряд - наш текущий формат, второй и третий - обновленный.Нам нужно будет прочитать все 3 Это наш текущий сценарий декодирования SCL:
TYPE UDT_Decoded_Bearing:
STRUCT
Company_ID : byte;
Component_ID : STRING[10];
Mfg_Year : byte;
Mfg_Month : byte;
Serial : STRING[8];
END_STRUCT
END_TYPE
DATA_BLOCK DecodedBearing
STRUCT
dataUDT: UDT_Decoded_Bearing;
Element: STRING[20];
Data: String[20];
END_STRUCT
BEGIN
END_DATA_BLOCK
FUNCTION FC_Decode_Bearing : WORD
VAR_INPUT
Raw_Barcode: ARRAY[1..512] OF CHAR;
END_VAR
VAR_OUTPUT
DecodedData: UDT_Decoded_Bearing;
END_VAR
VAR_TEMP
i: INT;
iStartChar: INT;
iEndChar: INT;
iFoundChar: INT;
// Element: STRING[20];
// Data: STRING[20];
Source: ARRAY[1..512] OF CHAR;
END_VAR
Source:= Raw_Barcode;
iStartChar:= 3; // skip over the initial open tag
DecodedBearing.Element:= '';
DecodedBearing.Data:= '';
DecodedData.Company_ID := 0;
DecodedData.Component_ID := '';
DecodedData.Mfg_Year := 0;
DecodedData.Mfg_Month := 0;
DecodedData.Serial := '';
FOR i:= 0 TO 20 DO
iStartChar:= FIND_CHAR(IN1:= Source, START_CHAR:= iStartChar, SEARCH_CHAR:= '<') + 1; //Finding Start of opening Tag
iFoundChar:= FIND_CHAR(IN1:= Source, START_CHAR:= iStartChar, SEARCH_CHAR:= '>'); //Finding End of opening Tag
DecodedBearing.Element:= CHAR_TO_STR (IN1:= Source, START_CHAR:= iStartChar, Length := iFoundChar - iStartChar); //reading opening tag
iFoundChar:= FIND_CHAR(IN1:= Source, START_CHAR:= iStartChar, SEARCH_CHAR:= '<'); //Finding Start of closing tag
iStartChar:= iStartChar + 1;
DecodedBearing.Data:= CHAR_TO_STR (IN1 := Source, START_CHAR := iStartChar, Length := iFoundChar - iStartChar); //reading tag data
iStartChar:= iStartChar + 1;
IF DecodedBearing.Element = 'companyCode' THEN
IF DecodedBearing.Data = '8AMS' THEN // Brenco - To Be Tested
DecodedData.Company_ID := 1;
ELSIF DecodedBearing.Data = '8FAS' THEN // FAG - To Be Tested
DecodedData.Company_ID := 2;
ELSIF DecodedBearing.Data = 'KOYO' THEN // Guess!!!
DecodedData.Company_ID := 3;
ELSIF DecodedBearing.Data = '8SKF' THEN // To Be Tested
DecodedData.Company_ID := 4;
ELSIF DecodedBearing.Data = '8TIM' THEN // Proven Working - 2D Barcode
DecodedData.Company_ID := 5;
ELSIF DecodedBearing.Data = '8NTN' THEN // Guess - Added 20160410 JCP
DecodedData.Company_ID := 6;
END_IF;
ELSIF DecodedBearing.Element = 'idNumber' THEN
DecodedData.Component_ID := DecodedBearing.Data;
ELSIF DecodedBearing.Element = 'C205' THEN
DecodedData.Serial := DecodedBearing.Data;
ELSIF DecodedBearing.Element = 'C206' THEN
DecodedData.Mfg_Year := INT_TO_BYTE(STRNG_I(DecodedBearing.Data));
ELSIF DecodedBearing.Element = 'C207' THEN
DecodedData.Mfg_Month := INT_TO_BYTE(STRNG_I(DecodedBearing.Data));
END_IF;
END_FOR;
//END_WHILE;
FC_Decode_Bearing:= 0;
END_FUNCTION
Я немного застрял, пытаясь прочитать его между скобками, а другой - вне их ичтобы иметь возможность получить те же данные от них.8-й, 9-й и 10-й раздел в третьем примере необходимо будет добавить в качестве переменных, так как они являются обновленным месяцем и годом.Любая помощь с любым из этого высоко ценится.Спасибо!