Sử dụng biểu thức để xây dựng bí danh động (Dynamic Aliases) của riêng bạn

Các ứng dụng nâng cao cho khách hàng khi sử dụng bí danh (Aliases) trong GraphWorX64

Gần đây, chúng tôi đã nhận được câu hỏi này và tôi muốn nhấn mạnh nó vì nó tạo ra một giải pháp thú vị khi thể hiện một số chức năng chính trong GraphWorX64, một công cụ giúp biểu diễn trực quan dữ liệu HMI và SCADA của ICONICS. Cụ thể câu hỏi từ khách hàng là:

 “Làm cách nào tôi có thể thiết lập sao cho khi tôi khởi động một màn hình hiển thị từ một lựa chọn nội dung, tôi có thể chuyển màn hình cùng với đó là một số tên thay thế (ví dụ: Dữ liệu mô tả các nội dung có trong asset) tất cả sẽ được hợp nhất thành một tên thay thế duy nhất trong hiển thị. Thay vì phải vẽ đi vẽ lại nhiều trang giao diện giống nhau mà chỉ khác nhau ở vài dòng dữ liệu?”

Hiểu những điều cơ bản về Assets và Aliases

Trước khi tôi đi vào giải pháp, trước tiên hãy đề cập đến nền tảng của những gì chúng ta đang làm ở đây.
Nội dung mà tôi đang đề cập đến là AssetWorX, đây là mô-đun cho phép chúng tôi xây dựng bản trình bày theo cấp bậc của thiết bị, liên kết các nguồn dữ liệu liên quan với chúng và thậm chí gán các lệnh mà người dùng có thể kích hoạt từ nội dung đó. Khởi động màn hình liên quan đến nội dung, như trong câu hỏi, là một trong những ứng dụng phổ biến nhất của AssetWorX. Các video đào tạo của chúng tôi về Cách tổ chức Asset sẽ trình bày chi tiết hơn về vấn đề này nếu bạn quan tâm.

Bí danh (Aliases) là một công cụ linh hoạt trong các ứng dụng ICONICS. Nói một cách đơn giản, nó cho phép bạn xác định “tên bí danh – alias name” làm phần giữ chỗ mà bạn có thể sử dụng trong văn bản hiển thị, nguồn dữ liệu, kết nối cơ sở dữ liệu, cảnh báo, v.v. Bất cứ nơi nào trong sản phẩm mà bạn có thể kết nối với dữ liệu, bạn đều có thể sử dụng thay vào đó, một trình giữ chỗ bí danh và sau đó xác định giá trị bí danh nào sẽ sử dụng sau này. Dựa trên ví dụ trên, một ứng dụng hoàn hảo cho việc này sẽ là thay vì tạo “Tank1”, “Tank2”, “Tank3”, v.v. với mỗi màn hình được mã hóa cứng trong kết nối dữ liệu của nó, bạn có thể tạo một màn hình “Tank” duy nhất sử dụng các kết nối dữ liệu bí danh (Aliases). Sau đó, trong thời gian chạy, khi tải màn hình đó, bạn có thể chọn kết nối nào mình muốn sử dụng và màn hình sẽ kết nối động.

Cơ sở lý luận cho việc nối các bí danh (Aliases)

Chúng ta cũng nên xem xét lý do tại sao chúng ta lại áp dụng phương pháp này. Nếu bạn chỉ muốn đặt một bí danh (Aliases) để ghép các bí danh riêng lẻ đó, tại sao không tạo bí danh đó trong lệnh “Load Display” để bắt đầu? Ngoài ra, ở bất kỳ đâu trong màn hình mà bạn có thể sử dụng:

 <#MyUnifiedAlias#>  

Bạn cũng có thể ghép chúng theo cách thủ công và sử dụng:

 <#MyValue1#><#MyValue2#><#MyValue3#> 

Đây là những cách tiếp cận tốt và trong nhiều trường hợp có lẽ là đủ. Tuy nhiên, trong trường hợp cụ thể này, màn hình cần tải được sử dụng thường xuyên bởi nhiều hệ thống khác nhau trong ứng dụng và không phải tất cả chúng đều nhất thiết phải biết các giá trị được sử dụng cho cả ba bí danh. Trong những trường hợp đó, các lệnh khác sẽ chỉ đặt một hoặc hai trong số các giá trị bí danh này và dựa vào các bí danh còn lại để giữ nguyên như chúng đã được đặt trước đó. Vì điều này, người dùng chỉ muốn nối các bí danh sau khi màn hình được tải.

Hợp nhất nội dung và bí danh (Aliases) cùng với biểu thức

Để bắt đầu giải quyết thử thách này, trước tiên tôi cần thiết lập môi trường thử nghiệm của mình. Tôi đã xây dựng hai nội dung trong Workbench, “Asset1” và “Asset2”, mỗi nội dung có lệnh “Load Graphics Display” để truyền một số giá trị “GlobalAliases” cho ba bí danh mà chúng tôi muốn ghép nối.

Bí danh Aliases Mitsubishishop

Cấu hình cho lệnh Asset1

Về phía GraphWorX64, đầu tiên tôi xây dựng thử nghiệm khung hiển thị chỉ có “Asset Navigator” và điều khiển màn hình “GraphWorx64 Viewer” được nhúng vào giao diện. Sau đó, tôi xây dựng màn hình để kiểm tra bí danh của mình, trong đó tôi đặt ba giá trị bí danh riêng lẻ cũng như giá trị “MyUnifiedAlias” cuối cùng. Mục tiêu ở đây là tôi có thể xem màn hình đầu tiên, chọn nội dung từ “Asset Navigator” và xem nội dung đó bật lên trong màn hình “GraphWorx64 Viewer” đã được nhúng vào.

Frame.gdfx và Aliases.gdfx

Bây giờ, đây là mẹo để làm cho tất cả hoạt động. Trong màn hình “GraphWorx64 Viewer” được nhúng (được gọi là “Aliases.gdfx”), tôi đã chọn “properties” của chính màn hình và chỉnh sửa trường “GlobalAliases” bằng cách sử dụng tùy chọn “Data Browser” ở phần thả xuống.

Bí danh toàn cầu Mitsubishishop

Điều này cung cấp cho tôi trình duyệt dữ liệu đầy đủ, nhưng tôi đã chuyển đến tab “Expression” và nhập thông tin sau:

 x=”#MyUnifiedValue=”+{{“<#MyValue1#>”}}+{{“<#MyValue2#>”}}+{{“<#MyValue3#>”}}+“/2;”

Để hiểu lý do tại sao điều này hoạt động, hãy lùi lại một bước và thảo luận về cách phân tích cú pháp bí danh (Aliases). Cuối cùng, nếu bạn định đặt bí danh bằng cách sử dụng trường này, lệnh hiển thị tải hoặc lệnh global aliases được đặt chuyên dụng, bạn sẽ chuyển cho nó một chuỗi bao gồm giá trị bí danh và phạm vi mà sau đó nó sẽ phân tích cú pháp và xử lý. Chuỗi này có định dạng sau:

 #[AliasName]=[AliasValue]/[ScopeNumber]

Ví dụ: nếu tôi muốn đặt bí danh “OPCServer” thành “DXP01”, lệnh của tôi sẽ có một chuỗi như sau:

 #OPCServer=DXP01/2; 

Lý do có dấu chấm phẩy ở cuối là để nếu bạn muốn xâu chuỗi nhiều bí danh lại với nhau trong lệnh này, bạn có thể làm như vậy, vì dấu chấm phẩy đóng vai trò như một dấu phân cách.
Cuối cùng, bạn có thể thắc mắc về “scope” được sử dụng và ý nghĩa của nó. Trong trường hợp bạn không quen với Bí danh toàn cầu – Global Aliasing – bằng cách sử dụng các phạm vi khác nhau, nói một cách đơn giản, nó cho phép bạn xác định phạm vi của các cửa sổ, ứng dụng và mô-đun của hệ thống ICONICS sẽ nhận được thay đổi. Một số ví dụ về giá trị phạm vi sẽ là:

    • 0 – Cấp độ ‘Máy’, ảnh hưởng toàn bộ đến tất cả các quy trình mà người dùng của bạn có thể có quyền truy cập.
    • 1 – Cấp độ ‘Quy trình’, ảnh hưởng đến tất cả các phiên bản của bí danh trong cùng một quy trình nơi bí danh được đặt.
    • 2 – Cấp độ ‘Tài liệu’, chỉ ảnh hưởng đến màn hình hiện tại hoặc màn hình mục tiêu đang được mở.

Theo thông tin này, trong ví dụ của chúng tôi ở đây, chúng tôi sẽ sử dụng “2” vì chúng tôi muốn bí danh chỉ áp dụng cho màn hình hiện tại. Điều này để lại tùy chọn mở đồng thời nhiều phiên bản của màn hình này với các giá trị khác nhau, nếu điều đó phù hợp với dự án.
Tất cả những gì tôi đang làm trong giải pháp trên là xây dựng chuỗi sẽ được sử dụng thông qua một biểu thức, cho phép tôi đưa các giá trị động vào trong đó và giải quyết chúng trước khi chuỗi được phân tích cú pháp. Trong trường hợp này, các đầu vào bí danh động đó chỉ được phân giải và gộp lại với nhau, nhưng tôi cũng có thể sử dụng nhiều hàm khác nhau trong trình soạn thảo biểu thức, cũng như đưa các chuỗi văn bản đơn giản khác vào giữa chúng trong phần nối.
Kết quả đúng như dự kiến, khi chọn một nội dung, nó sẽ tải màn hình được nhúng, đặt các bí danh riêng lẻ, sau đó cũng đặt bí danh được nối.

Hiển thị với Asset1 đã chọn và Hiển thị với Asset2 đã chọn

Các ứng dụng rộng hơn cho bí danh (Aliases) trong việc tạo hiển thị thích ứng

Ngoài giải pháp cho vấn đề cụ thể được trình bày, phương pháp này còn có các ứng dụng rộng hơn trong tương tác hiển thị GraphWorX64. Biết cách xây dựng chuỗi cấu hình để đặt bí danh chung có thể hữu ích trong nhiều trường hợp. Kịch bản này xem xét việc định cấu hình nó theo các giá trị tĩnh, nhưng nó cũng hoạt động tốt khi đặt giá trị bí danh cho kết quả của một số nguồn dữ liệu khác. Cá nhân tôi thích sử dụng phương pháp này hơn khi làm việc với các tham số để chuyển đến truy vấn GridWorX, vì cú pháp bí danh rất phù hợp với cài đặt tham số. Nó cũng có thể được sử dụng cho các menu đa cấp, trong đó trước tiên người dùng phải chọn Thuộc tính 1 và sau đó được cung cấp danh sách tùy chọn tùy chỉnh cho Thuộc tính 2, .v.v. Bằng cách đặt bí danh cho kết quả của lựa chọn đầu tiên, việc tùy chỉnh danh sách của bạn về sau sẽ dễ dàng hơn nhiều.

Chỉ cần một lời cảnh báo khi sử dụng phương pháp này. Bạn nên nhớ rằng / và ; là các ký tự đặc biệt trong chuỗi cài đặt bí danh chung. Nếu bạn cho rằng chúng có thể xuất hiện trong các giá trị mà bạn đang sử dụng để xây dựng chuỗi của mình thì bạn nên sử dụng hàm “replace” để sử dụng ký tự thoát cho các ký hiệu đó, chẳng hạn như: 

replace({{MyTagName}},“/”,”&/”).

Điều thứ hai cần xem xét là liệu bạn có mong muốn bí danh ban đầu của mình là chuỗi hay số hay không. Mặc dù các chuỗi chỉ hoạt động tốt nhưng nếu kết quả là một số (số nguyên hoặc số thực) thì công cụ biểu thức sẽ hiểu rằng bạn muốn cộng các số đó lại với nhau chứ không phải nối chúng. Đây không phải là một điều đáng ngạc nhiên trong việc phân tích cú pháp biểu thức, vì ký hiệu ‘+’ có thể được sử dụng cho cả phép cộng và nối số nhưng sẽ mặc định là phép cộng khi nó không rõ ràng. Nếu đây là một rủi ro tiềm ẩn trong ứng dụng của bạn thì chỉ cần sử dụng hàm “tostring” để buộc nó được hiểu là một chuỗi: 

 tostring({{MyTagName}})

Hy vọng rằng mục blog này đã mô tả đầy đủ câu trả lời cho câu hỏi được đề xuất ban đầu và có thể đã trả lời một số câu hỏi khác cho bạn trong quá trình thực hiện. Hãy nhớ truy cập blog này thường xuyên để biết các phản hồi trong tương lai đối với các yêu cầu/trường hợp sử dụng phổ biến cũng như các thông tin thú vị khác từ ICONICS. 

Jotham Kildea

 

 

 

Nguồn bài viết: ICONICS

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *