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