Штрих-код декодирования и разделения значений в SCL - PullRequest
0 голосов
/ 27 ноября 2018

Таким образом, мы постепенно обновляем наши штрих-коды в течение следующих нескольких месяцев для другого производителя, который неудобно использует совсем другой декодированный формат. См. Пример изображения.Первый ряд - наш текущий формат, второй и третий - обновленный.Нам нужно будет прочитать все 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-й раздел в третьем примере необходимо будет добавить в качестве переменных, так как они являются обновленным месяцем и годом.Любая помощь с любым из этого высоко ценится.Спасибо!

...