一、步骤简述:
1首先采用TwinCat3的库文件Tc3_JsonXml,取得包含所需内容的字符串;
2对该字符串文本内容进行加工,得到包含XML文件所有正文内容的字符串;
3使用FB_FileOpen创建一个空的且自定义了文件名的XML文件;
4使用FB_FileWrite,将正文内容写入文件;
5使用FB_FileClose,关闭文件,即创建完成。
TwinCat3库文件Tc3_JsonXm、FB_FileOpen、FB_FileWrite、FB_FileClose的官网示例链接:https://infosys.beckhoff.com/(链接不能直达,需要依次展开左侧树状分支才能看到,请参考下图)


二、程序代码
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与我联系。
加载中,请稍候......