Как использовать.NET LLRP Library: Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage

Я занимаюсь разработкой приложения с использованием библиотеки LLRP. После того, как шлюз (компьютер) получил мое сообщение от читателя (смоделированного читателя с использованием localhost), я хотел бы преобразовать его в LLRPMessage, используя

Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType);

Тем не менее, я проверяю это в часах (VS2013 Ultimate): msg имеет значение null и enumType равно 0.

Могу ли я получить ваш совет по этому поводу?

Мой код:

public static void ConvertXmlToLLRPMessage()
{
    Org.LLRP.LTK.LLRPV1.DataType.Message msg;  //Only Message type is accepted.
    Org.LLRP.LTK.LLRPV1.ENUM_LLRP_MSG_TYPE enumType; //Only ENUM_LLRP_MSG_TYPE type is accepted.

    Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType);

    Console.WriteLine();
    Console.WriteLine("Print out _xmlReceived, inside ConvertXmlToLLRPMessage.");
    Console.WriteLine(_xmlReceived);
    Console.WriteLine();
    Console.WriteLine("Out msg from ParseXMLToLLRPMessage:\n"); Console.WriteLine(msg); Console.WriteLine();
    Console.WriteLine("Out enumType from ParseXMLToLLRPMessage:\n"); Console.WriteLine(enumType); Console.WriteLine();
}

_xmlReceived это преобразованные в XML данные, полученные с 127.0.0.1:5084. Я должен проверить это, и это правильно, это то, что читатель разослал.

Со стороны Reader я симулирую ридер для отправки сообщения на шлюз. На стороне читателя код:

public static void testData_PARAM_ROSpecID()
{
    //create and object
    PARAM_ROSpecID _rec_PARAM_ROSpecID = new PARAM_ROSpecID();

    //assign value to an object
    _rec_PARAM_ROSpecID.ROSpecID = 789;

    //Convert obj to xml
    string _xmlData = ConvertObjectToXml(_rec_PARAM_ROSpecID);

    //Convert xml to byte array
    byte [] _byteArray = CommServerSend.getSendBuffInByteAry(_xmlData);

    //Send out.
    CommServerReceive._incomingDataObj.Send(_byteArray);

    return;
}

Распечатать из считывателя данных отправить на шлюз:

<?xml version="1.0" encoding="utf-16"?>
<PARAM_ROSpecID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ROSpecID>789</ROSpecID>
</PARAM_ROSpecID> 

Распечатать из шлюза данных получить от читателя:

<?xml version="1.0" encoding="utf-16"?>
<PARAM_ROSpecID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ROSpecID>789</ROSpecID>
</PARAM_ROSpecID>

но после обработки с помощью Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType); и распечатайте msg и enumType:

Out msg from ParseXMLToLLRPMessage:
Out enumType from ParseXMLToLLRPMessage: 0

Пожалуйста, помогите мне и ответьте в ближайшее время. Ваши усилия очень ценятся.

1 ответ

Переменная null obj будет означать, что метод не смог извлечь сообщение из переданного XML-файла. Я бы более внимательно изучил XML-файл, чтобы выяснить, есть ли там что-то не так.

Вот пример того, как код должен выглядеть для использования ParseXMLToLLRPMessage():

            Org.LLRP.LTK.LLRPV1.DataType.Message obj;
            ENUM_LLRP_MSG_TYPE msg_type;

            // read the XML from a file and validate its an SET_READER_CONFIG
            try
            {
                FileStream fs = new FileStream(@"setReaderConfig.xml", FileMode.Open);
                StreamReader sr = new StreamReader(fs);
                string s = sr.ReadToEnd();
                fs.Close();

                LLRPXmlParser.ParseXMLToLLRPMessage(s, out obj, out msg_type);

                if (obj == null || msg_type != ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG)
                {
                    Console.WriteLine("Could not extract message from XML");
                    return;
                }
            }
            catch
            {
                Console.WriteLine("Unable to convert to valid XML");
                return;
            }

            // Communicate that message to the reader
            MSG_SET_READER_CONFIG msg = (MSG_SET_READER_CONFIG)obj;
Другие вопросы по тегам