Beckhoff#Let’ use TwinCAT3 Tc3_JsonXml

Thư viện Beckhoff TwinCAT PLC Tc3_JsonXml có thể được sử dụng để tạo tệp JSON và XML. Trong bài viết này chúng ta sẽ sử dụng  Tc3_JsonXml để tạo một đối tượng JSON 

Bắt đầu thôi nào!

Thanks!

Thanks Mr Quang dai for the translation.he is a professional factory automation engineer in Vietnam .And here is his LinkedIn profile:

https://www.linkedin.com/in/quang-%C4%91%E1%BA%A1i-990165224/

SAX ( Simple API for XML)

SAX được phát triển với mục đích ban đầu để sử dụng cho tài liệu XML nhưng cũng có thể được sử dụng cho các định dạng dữ liệu khác như JSON.

DOM (Document Object Model)

DOM là một chuẩn truy cập và thao tác trên các tài liệu XML, nhưng nó cũng có thể được sử dụng cho các dạng tài liệu khác như HTML và JSON.

Dữ liệu JSON 

Đây là một ví dụ về dữ liệu JSON.

{
  “VariableNameX”: 0.0,
  “VariableNameY”: 0.0,
  “VariableNameZ”: 0.0
}

Siêu dữ liệu

Thư viện Tc3_JsonXml chứa khối chức năng FB_JsonReadWriteDataType, cho phép tự động tạo các siêu dữ liệu theo thuộc tính của plc.

{
  “Values”: {
    “VariableNameX”: 0.0,
    “VariableNameY”: 0.0,
    “VariableNameZ”: 0.0
  },
  “MetaData”: {
    “VariableNameX”: {
      “Unit”: “A”
    },
    “VariableNameY”: {
      “Unit”: “V”
    },
    “VariableNameZ”: {
      “Unit”: “mA”
    }
  }
}

Khối chức năng

FB_JsonSaxWriter

Các biến String được sử dụng trong khối chức năng này có định dạng UTF-8, được sử dụng phổ biến trong MQTT và tài liệu Json

AddKey

Phương thức này giúp thêm 1 thuộc tính key vào trình ghi SAX. Giá trị của thuộc tính mới thường được đặt sau đó.

Ví dụ: Bạn có thể tạo giá trị mới bằng cách sử dụng các phương thức sau:

  • AddBase64
  • AddBool
  • AddDateTime
  • AddDcTime
  • AddDint
  • AddFileTime
  • AddHexBinary
  • AddLint
  • AddLreal
  • AddNull
  • AddRawArray
  • AddRawObject
  • AddReal
  • AddString
  • AddUdint
  • AddUlint.

Cú pháp

Tham số đầu vào là 1 chuỗi được thêm làm thuộc tính key mới tại vị trí hiện tại

METHOD AddKey
VAR_IN_OUT CONSTANT
key : STRING;
END_VAR

Ví dụ

Đoạn code này sẽ thêm thuộc tính “‘PropertyName'” vào vị trí hiện tại

fbJson.AddKey(‘PropertyName’);

AddReal

Phương thức này sẽ thêm 1 giá trị kiểu Real vào thuộc tính. Lưu ý nó phải được tạo trước bằng AddKey()

Cú pháp

Tham số đầu vào là 1 biến REAL được thêm vào thành giá trị của thuộc tính hiện tại.

METHOD AddReal
VAR_INPUT
value : REAL;
END_VAR

Ví dụ

Tạo thuộc tính “PropertyName” và 42.42 là giá trị hiện tại của nó

fbJson.AddKey(‘PropertyName’);
fbJson.AddReal(42.42);

AddDint

Phương thức này sẽ thêm 1 giá trị kiểu Dint vào thuộc tính. Lưu ý nó phải được tạo trước bằng AddKey()

Cú pháp

Tham số đầu vào là 1 biến REAL được thêm vào thành giá trị của thuộc tính hiện tại.

METHOD AddDint
VAR_INPUT
value : DINT;
END_VAR

Ví dụ

Tạo thuộc tính “nNumber” và 42 là giá trị hiện tại của nó

fbJson.AddKey(‘nNumber’);
fbJson.AddDint(42);

StartArray

Phương thức này tạo 1 mảng Json mới bắt đầu với dấu ngoặc [ và chèn vào vị trí hiện tại của trình ghi SAX .

Cú pháp

Tham số đầu vào là 1 biến Real, sẽ tạo 1 array mới vào vị trí hiện tại

METHOD StartArray : HRESULT

Ví dụ

Tạo 1 array ở vị trí hiện tại

fbJson.StartArray();

AddRawArray

Phương thức này ghi 1 mảng Json thành giá trị của 1 thuộc tính chỉ định. Nó cũng yêu cầu trình ghi SAX ở vị trí hợp lệ tương ứng

  • Ngay sau AddKey() 
  • Ngay sau StartArray() 
  • Sau ResetDocument() 

Cú pháp

METHOD AddRawArray
VAR_IN_OUT CONSTANT
rawJson : STRING;
END_VAR

Ví dụ

Thêm mảng Json “‘PropertyName'” ở vị trí hiện tại với các giá trị thành phần gồm 1,2,4.

fbJson.AddKey(‘PropertyName’);
fbJson.AddRawArray(‘1, 2, 4’);

EndArray

Phương thức này kết thúc mảng với dấu ngoặc ] và chèn vào ngay vị trí hiện tại của trình ghi SAX.

Cú pháp

METHOD EndArray : HRESULT
Sample call:

Ví dụ

Cách gọi EndArray

fbJson.EndArray();

StartObject

Phương thức này sẽ tạo đối tượng Json ” { ” và chèn vào vị trí hiện tại của trình ghi SAX

Cú pháp

METHOD StartObject : HRESULT

Ví dụ

Cách gọi phương thức StartObject().

fbJson.StartObject();

EndObject

Phương thức này tạo đối tượng Json ” }” và chèn vào vị trí hiện tại của trình ghi SAX

Cú pháp

METHOD EndObject : HRESULT

Ví dụ

Cách gọi phương thức EndObject().

fbJson.EndObject();

ResetDocument

Phương thức này đặt lại giá trị của đối tượng JSON hiện tại 

Cú pháp

METHOD ResetDocument : HRESULT

Ví dụ

Cách gọi phương thức ResetDocument.

fbJson.ResetDocument();

GetDocument

Phương thức này trả về đối tượng Json đang được tạo bằng trình ghi SAX theo kiểu dữ liệu String(255)

Lưu ý rằng phương thức này chỉ trả về chuỗi tối đa 255 kí tự. Đối với các chuỗi lớn hơn, phương thức này sẽ trả về một chuỗi NULL, và phải sử dụng phương thức CopyDocument()

Cú pháp

METHOD GetDocument : STRING(255)
VAR_OUTPUT
  hrErrorCode: HRESULT;
END_VAR

Ví dụ

Cách gọi phương thức.

sTargetString := fbJson.GetDocument();

Ví dụ 1

Tạo 1 đối tượng Json với giá trị có kiểu dữ liệu Real

Chương trình

VAR
fbJson : FB_JsonSaxWriter;
jsonDoc ,jsonDoc1 :SJsonValue;
bnew:BOOL;
Examples:ARRAY[0..99]OF BOOL;
sJsonDoc:STRING(2000);
r32:REAL;
END_VAR

IF Examples[1] THEN
r32:=r32+0.0002;
IF r32 > 10000 THEN
r32:=0.0;
END_IF

fbJson.StartObject();
fbJson.AddKey(‘Sensor1’);
fbJson.AddReal(r32);
fbJson.EndObject();


sJsonDoc := fbJson.GetDocument();
fbJson.ResetDocument();
END_IF

Kết quả

Nếu phương thức tiếp tục chạy, thì giá trị của Json sẽ được cập nhật liên tục

Chuỗi  sJSONDoc có thể được chuyển đổi thành 1 đối tượng JSON và tiếp tục được cập nhật

Trên thực tế, StartObject và các phương thức khác tạo các đối tượng Json như sau

Ví dụ 2 Array

Tạo 1 đối tượng Json với 1 giá trị real, 1 mảng các giá trị real , và 1 mảng giá trị integer.

Chương trình

IF Examples[2] THEN

r32:=r32+0.0002;

IF r32 > 10000 THEN
r32:=0.0;
END_IF

fbJson.StartObject();

fbJson.AddKey(‘Sensor1’);
r32:=r32+0.0002;
fbJson.AddReal(r32);

fbJson.AddKey(‘r32Array’);
fbJson.StartArray();
fbJson.AddRawArray(‘123.1,444.5,512.3’);
fbJson.EndArray();

fbJson.AddKey(‘iArray’);
fbJson.StartArray();
fbJson.AddRawArray(‘123,1,5,6,7,8,9,0,111’);
fbJson.EndArray();

fbJson.EndObject();

sJsonDoc := fbJson.GetDocument();
fbJson.ResetDocument();

END_IF

Kết quả

Chuỗi  sJSONDoc có thể được chuyển đổi thành 1 đối tượng JSON và tiếp tục được cập nhật

Trên thực tế, StartObject và các phương thức khác tạo nên đối tượng JSON như sau

Ví dụ 3 Add Object

Chúng ta sẽ tạo 1 đối tượng Json không những chứa giá trị số Real, mảng giá trị Real, mảng giá trị INT, mà còn chứa 1 đối tượng Json khác

Chương trình

IF Examples[3] THEN

r32:=r32+0.0002;
IF r32 > 10000 THEN
r32:=0.0;
END_IF
fbJson.StartObject();

fbJson.AddKey(‘Sensor1’);
fbJson.AddReal(r32);

fbJson.AddKey(‘r32Array’);
fbJson.StartArray();
fbJson.AddRawArray(‘123.1,444.5,512.3’);
fbJson.EndArray();

fbJson.AddKey(‘iArray’);
fbJson.StartArray();
fbJson.AddRawArray(‘123,1,5,6,7,8,9,0,111’);
fbJson.EndArray();

fbJson.AddKey(‘MotorData’);
fbJson.StartObject();
fbJson.AddKey(‘Speed’);
fbJson.AddReal(123.4);

fbJson.AddKey(‘Position’);
fbJson.AddReal(512.1);

fbJson.AddKey(‘ErrorCode’);
fbJson.AddDint(1234);
fbJson.EndObject();


fbJson.EndObject();

sJsonDoc := fbJson.GetDocument();
fbJson.ResetDocument();

END_IF;

Kết quả

Chuỗi  sJSONDoc có thể được chuyển đổi thành 1 đối tượng JSON và tiếp tục được cập nhật

Trên thực tế, StartObject và các phương thức khác tạo đối tượng JSON như sau

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする