加载中…
个人资料
非彼亦非此
非彼亦非此
  • 博客等级:
  • 博客积分:0
  • 博客访问:79
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【TwinCat3经验】一种基于TwinCat3创建XML文件的方式

(2019-12-11 13:47:28)

一、步骤简述:

1首先采用TwinCat3的库文件Tc3_JsonXml,取得包含所需内容的字符串;

2对该字符串文本内容进行加工,得到包含XML文件所有正文内容的字符串;

3使用FB_FileOpen创建一个空的且自定义了文件名的XML文件;

4使用FB_FileWrite,将正文内容写入文件;

5使用FB_FileClose,关闭文件,即创建完成。

TwinCat3库文件Tc3_JsonXmFB_FileOpenFB_FileWriteFB_FileClose的官网示例链接:https://infosys.beckhoff.com/链接不能直达,需要依次展开左侧树状分支才能看到,请参考下图)

【TwinCat3经验】一种基于TwinCat3创建XML文件的方式
【TwinCat3经验】一种基于TwinCat3创建XML文件的方式

二、程序代码

Active 1(* Create Xml Document*)

  (* Create an empty XML document *)

  _objRoot :=_objempty;

  _fbXml.NewDocument();

  _objRoot := _fbXml.GetDocumentNode();

  (* Create a new XML node 'McYield' and add to the empty document *)

  _objMcYield := _fbXml.AppendNode(_objRoot, 'McYield');

  

  (* Create a new XML node 'D_PRODUCTGROUP' and add some Childs to this node. Append node to 'McYield' *)

  _objD_PRODUCTGROUP := _fbXml.AppendNode(_objMcYield, 'D_PRODUCTGROUP');

  _objChild          := _fbXml.A(_objD_PRODUCTGROUP, 'ID_D_PRODUCTGROUP_S', '1',FALSE);

  _objChild          := _fbXml.A(_objD_PRODUCTGROUP, 'PRODUCTGROUP_NAME', 'A2F_RG',FALSE);


  (* Create a new XML node 'D_PROCESS' and add some Childs to the 'McYield' node *)

  _objD_PROCESS := _fbXml.AppendNode(_objMcYield, 'D_PROCESS');

  _objChild     := _fbXml.A(_objD_PROCESS, 'ID_D_PROCESS_S', '1',FALSE);

  _objChild     := _fbXml.A(_objD_PROCESS, 'PROCESS_NAME', 'ST10',FALSE);


IF XmlData.ScanOrder.ResultValid  THEN

  (* Create a new XML node 'D_PHASE' and add some Childs. Append node to 'McYield'. *)

  _objD_PHASE   := _fbXml.AppendNode(_objMcYield, 'D_PHASE');

  _objChild     := _fbXml.A(_objD_PHASE, 'ID_D_PHASE_S', '1',FALSE);

  _objChild     := _fbXml.A(_objD_PHASE, 'PHASE_NAME', 'Scan Order',FALSE);

  END_IF 

                                                

IF XmlData.Press.ResultValid THEN

  (* Create a new XML node 'D_PHASE' and add some Childs. Append node to 'McYield'. *)

  _objD_PHASE   := _fbXml.AppendNode(_objMcYield, 'D_PHASE');

  _objChild     := _fbXml.A(_objD_PHASE, 'ID_D_PHASE_S', '2',FALSE);

  _objChild     := _fbXml.A(_objD_PHASE, 'PHASE_NAME', 'Press Outer Bearing',FALSE);

  END_IF 

  (* Create a new XML node 'F_EXEMPLAR' and add some Childs. Append node to 'McYield'. *)

  _objF_EXEMPLAR := _fbXml.AppendNode(_objMcYield, 'F_EXEMPLAR');

  _objChild     := _fbXml.A(_objF_EXEMPLAR, 'ID_F_EXEMPLAR_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_EXEMPLAR, 'ID_D_PRODUCTGROUP_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_EXEMPLAR, 'TYPE_NUMBER', XmlData.F_Exemplar.TypeNumber,FALSE);

  _objChild     := _fbXml.A(_objF_EXEMPLAR, 'TYPE_INDEX', XmlData.F_Exemplar.TypeIndex,FALSE);

  _objChild     := _fbXml.A(_objF_EXEMPLAR, 'SERIAL_NUMBER',XmlData.F_Exemplar.Serial,FALSE);


  (* Create a new XML node 'F_PROCESS' and add some Childs. Append node to 'McYield'. *)

  _objF_PROCESS := _fbXml.AppendNode(_objMcYield, 'F_PROCESS');

  _objChild     := _fbXml.A(_objF_PROCESS, 'ID_F_PROCESS_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'ID_D_PROCESS_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'ID_F_EXEMPLAR_S', '1',FALSE);  

  _objChild     := _fbXml.AAsInt(_objF_PROCESS, 'RESULT_STATE',XmlData.F_Process.ResultState);

  _objChild     := _fbXml.A(_objF_PROCESS, 'RESULT_DATE_START',XmlData.F_Process.Date_Start,FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'RESULT_DATE_END',XmlData.F_Process.Date_End,FALSE);

  _objChild     := _fbXml.AAsUint(_objF_PROCESS, 'COUNTER_STATION',1);

  _objChild     := _fbXml.A(_objF_PROCESS, 'OPERATOR',XmlData.F_Process.Operator,FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'LOCATION', 'PKP',FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'AREA','A2',FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'STATION', 'ST10',FALSE);

  _objChild     := _fbXml.A(_objF_PROCESS, 'LINE', 'A2F_RG',FALSE);

  _objChild     := _fbXml.AAsint(_objF_PROCESS, 'SHIFT', XmlData.F_Process.Shift);

 

IF XmlData.ScanOrder.ResultValid  THEN

  (* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S', '11',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME', 'OrderCode',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE', '1',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER', '0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','8',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','3',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','0',FALSE);

  END_IF  

                                                

IF XmlData.Press.ResultValid THEN

  (* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S', '21',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME', 'ProgramID',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE', '2',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER', '0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','3',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','3',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','0',FALSE);


  (* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S','22',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME','PeakForce',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE','2',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','4',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','5',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_UNIT','N',FALSE);


(* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S','23',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME','PeakPosition',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE','2',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','4',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','5',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','3',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_UNIT','mm',FALSE);


(* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S','24',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME','MaxForce',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE','2',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','4',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','5',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_UNIT','N',FALSE);


(* Create a new XML node 'D_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objD_PARAMETER := _fbXml.AppendNode(_objMcYield, 'D_PARAMETER');

  _objChild       := _fbXml.A(_objD_PARAMETER, 'ID_D_PARAMETER_S','25',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_NAME','MaxPosition',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TYPE','2',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_CUSTOMER','0',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_DATA_TYPE','4',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_TOLERANCE_TYPE','5',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_FORMAT','3',FALSE);

  _objChild       := _fbXml.A(_objD_PARAMETER, 'PARAMETER_UNIT','mm',FALSE);

  END_IF


IF XmlData.ScanOrder.ResultValid  THEN

  (* Create a new XML node 'F_PHASE' and add some Childs. Append node to 'McYield'. *)

  _objF_PHASE   := _fbXml.AppendNode(_objMcYield, 'F_PHASE');

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_F_PHASE_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_F_PROCESS_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_D_PHASE_S', '1',FALSE);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'RESULT_STATE', XmlData.ScanOrder.ResultState);

  _objChild     := _fbXml.A(_objF_PHASE, 'RESULT_DATE_START',XmlData.ScanOrder.Date_Start,FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'RESULT_DATE_END',XmlData.ScanOrder.Date_End,FALSE);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'COUNTER_STATION',1);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'LAST_LOOP',1);


  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '11',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '11',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '1',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_STRING', XmlData.ScanOrder.P1.ResultString,FALSE);

  _objChild       := _fbXml.Aasint(_objF_PARAMETER, 'RESULT_STATE',XmlData.ScanOrder.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.ScanOrder.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.ScanOrder.Date_End,FALSE);

  END_IF 

 

                                                

IF XmlData.Press.ResultValid THEN

  (* Create a new XML node 'F_PHASE' and add some Childs. Append node to 'McYield'. *)

  _objF_PHASE   := _fbXml.AppendNode(_objMcYield, 'F_PHASE');

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_F_PHASE_S', '2',FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_F_PROCESS_S', '1',FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'ID_D_PHASE_S', '2',FALSE);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'RESULT_STATE', XmlData.Press.ResultState);

  _objChild     := _fbXml.A(_objF_PHASE, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild     := _fbXml.A(_objF_PHASE, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'COUNTER_STATION',1);

  _objChild     := _fbXml.AAsInt(_objF_PHASE, 'LAST_LOOP',1);


  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '21',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '21',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '2',FALSE);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_VALUE',XmlData.Press.P1.ResultDint);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_STATE',XmlData.Press.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);

 

  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '22',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '22',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '2',FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P2.ResultReal);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_VALUE',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P2.Lowerlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'LOWER_LIMIT',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P2.Upperlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'UPPER_LIMIT',_tempString,FALSE);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_STATE',XmlData.Press.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);

 

  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '23',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '23',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '2',FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P3.ResultReal);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_VALUE',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P3.Lowerlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'LOWER_LIMIT',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P3.Upperlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'UPPER_LIMIT',_tempString,FALSE);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_STATE',XmlData.Press.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);

 

  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '24',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '24',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '2',FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P4.ResultReal);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_VALUE',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P4.Lowerlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'LOWER_LIMIT',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P4.Upperlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'UPPER_LIMIT',_tempString,FALSE);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_STATE',XmlData.Press.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);


  (* Create a new XML node 'F_PARAMETER' and add some Childs. Append node to 'McYield'. *)

  _objF_PARAMETER := _fbXml.AppendNode(_objMcYield, 'F_PARAMETER');

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PARAMETER_S', '25',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_D_PARAMETER_S', '25',FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'ID_F_PHASE_S', '2',FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P5.ResultReal);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_VALUE',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P5.Lowerlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'LOWER_LIMIT',_tempString,FALSE);

_tempString:= REAL_TO_STRING(XmlData.Press.P5.Upperlimit);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'UPPER_LIMIT',_tempString,FALSE);

  _objChild       := _fbXml.AAsInt(_objF_PARAMETER, 'RESULT_STATE',XmlData.Press.ResultState);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_START',XmlData.Press.Date_Start,FALSE);

  _objChild       := _fbXml.A(_objF_PARAMETER, 'RESULT_DATE_END',XmlData.Press.Date_End,FALSE);

  END_IF 

 

 

  (* Retrieve XML document and store in a variable of data type STRING(1000) *)

  opconmemset(ADR(_tempXmlArray_1),0,SIZEOF(_tempXmlArray_1));

  _nXmlStringLength := _fbXml.CopyDocument(_sXmlString, SIZEOF(_sXmlString));

MemCpy(ADR(_tempXmlArray_1),ADR(_sXmlString),_nXmlStringLength-1);

_tempString:=

'

';//108

opconmemset(ADR(_tempXmlArray_2),16#0,SIZEOF(_tempXmlArray_2));

   OpconMemCpy(ADR(_tempXmlArray_2),ADR(_tempString),108);  

 

   OpconMemCpy(ADR(_tempXmlArray_2[109]),ADR(_tempXmlArray_1[22]),_nXmlStringLength-21);  

   _nXmlStringLength := _nXmlStringLength-21+108;

   _sXmlString := '';

OpconMemCpy(ADR(_sXmlString),ADR(_tempXmlArray_2),SIZEOF(_tempXmlArray_2));

   _nXmlStringLength :=OpconStrLen(ADR(_sXmlString),SIZEOF(_sXmlString));  

   _xmlStep :=1;   

分割线(前后段程序不在一个Active)***************************************************************

Active 2 (* Save Xml File*)

CASE _xmlStep OF

 

  1:    sDestPathName:='D:\A2F_RG_XML\ST10\';

  sDestPathName:= CONCAT(sDestPathName,OperatorGuideData.OPOrderData.TypeNo);//Type

  sDestPathName:= CONCAT(sDestPathName,' ');

  sDestPathName:= CONCAT(sDestPathName,OperatorGuideData.OPOrderData.SerialNo);//Serial

  sDestPathName:= CONCAT(sDestPathName,' ');

        sDestPathName:= CONCAT(sDestPathName,'PKP');//Location

  sDestPathName:= CONCAT(sDestPathName,' ');

        sDestPathName:= CONCAT(sDestPathName,'A2F');//Line

  sDestPathName:= CONCAT(sDestPathName,' ');

        sDestPathName:= CONCAT(sDestPathName,'ST10');//Station

  sDestPathName:= CONCAT(sDestPathName,' ');



      MEMset(ADR(_tempArray_3),0,SIZEOF(_tempArray_3));

MEMCPY(ADR(_tempxmlArray_1),ADR(RootNode.SysTime.local.timew3c),25);//Date and time


MEMCPY(ADR(_tempArray_3[0]),ADR(_tempXmlArray_1[1]),4); //Year


MEMCPY(ADR(_tempArray_3[4]),ADR(_tempXmlArray_1[6]),2); //Month


MEMCPY(ADR(_tempArray_3[6]),ADR(_tempXmlArray_1[9]),2); //Day


MEMCPY(ADR(_tempArray_3[8]),ADR(_tempXmlArray_1[12]),2); //Hour


MEMCPY(ADR(_tempArray_3[10]),ADR(_tempXmlArray_1[15]),2);//Minute


MEMCPY(ADR(_tempArray_3[12]),ADR(_tempXmlArray_1[18]),2);//Second

 

_tempString := BYTEARR_TO_MAXSTRING(_tempArray_3);

  sDestPathName:= CONCAT(sDestPathName,_tempString);

      sDestPathName:= CONCAT(sDestPathName,'.xml');//.xml    

      _xmlStep := _xmlStep+1;

   

  2:  (* Open destination file *)       

      fbFileOpen( bExecute  := FALSE );

      fbFileOpen( sNetId    := sDestNetId, 

                  sPathName := sDestPathName,

                  nMode     := FOPEN_MODEWRITE,

                  ePath     := PATH_GENERIC,

                  tTimeout  := tTimeOut,

                  bExecute  := TRUE );

      _xmlStep := _xmlStep+1;

  3:

      fbFileOpen( bExecute := FALSE );

      IF NOT fbFileOpen.bBusy THEN

              IF fbFileOpen.bError THEN

                      nErrId := fbFileOpen.nErrId;

                      bError := TRUE;

                      _xmlStep := 50;

              ELSE

                      hDestFile := fbFileOpen.hFile;

                      _xmlStep := _xmlStep + 1;

              END_IF

      END_IF

    

  4:  (* Write data to destination file *)        

      fbFileWrite( bExecute := FALSE );

      fbFileWrite( sNetId:=sDestNetId, hFile:=hDestFile,

                   pWriteBuff:= ADR(_sXmlString), cbWriteLen:= _nXmlStringLength,

                   bExecute:=TRUE, tTimeout:=tTimeOut );

      _xmlStep := _xmlStep + 1;

  5:

    fbFileWrite( bExecute := FALSE );

      IF NOT fbFileWrite.bBusy 

      THEN

         IF fbFileWrite.bError 

         THEN

           nErrId := fbFileWrite.nErrId;

           bError := TRUE;           

         END_IF

      _xmlStep := 50;(* Cleanup: close the destination *)  

      END_IF

    

  30:  (* Close the destination file *)      

      fbFileClose( bExecute := FALSE );

      fbFileClose( sNetId:=sDestNetId, hFile:=hDestFile, bExecute:=TRUE, tTimeout:=tTimeOut );

      _xmlStep := _xmlStep+ 1;

  31:

      fbFileClose( bExecute := FALSE );

      IF NOT fbFileClose.bBusy THEN

              IF fbFileClose.bError THEN

                      nErrId := fbFileClose.nErrId;

                      bError := TRUE;

              END_IF

 

              _xmlStep := 50;

              hDestFile := 0;

      END_IF

  50 : (* Error or ready => Cleanup *)         

      IF ( hDestFile <> 0 ) 

      THEN

        _xmlStep := 30; (* Close the  file*)         

      ELSE

   _retVal2 := OK;   

        _xmlStep := 0;   

      END_IF


END_CASE


如有需要,可通过邮箱zhangbin21@163.com与我联系。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有