READ_DBL: Đọc từ khối dữ liệu trong thẻ nhớ

READ_DBL: Đọc từ khối dữ liệu trong thẻ nhớ

Giới thiệu

Với lệnh này, bạn có thể sao chép một DB hoặc một phạm vi của một DB trong thẻ nhớ (Micro Memory Card) vào khu vực dữ liệu của một DB đích. Khối dữ liệu đích phải liên quan đến thời gian chạy, điều này có nghĩa là nó không được tạo với thuộc tính “Only store in load memory“. Nội dung của bộ nhớ tải không thay đổi trong quá trình sao chép.

Để đảm bảo tính nhất quán của dữ liệu, bạn không được thay đổi khu vực đích trong khi “READ_DBL” đang được thực hiện (tức là khi tham số BUSY có giá trị TRUE).

Cả hai tham số SRCBLKDSTBLK (khối nguồn và khối đích) phải đều có kiểu dữ liệu VARIANT. Những hạn chế sau đây được áp dụng:

  • Đối với các khu vực bộ nhớ tiêu chuẩn: Nếu bạn muốn nối kết một tham số có kiểu dữ liệu VARIANT (khu vực nguồn hoặc khu vực đích) với một thẻ có kiểu dữ liệu BOOL hoặc một ARRAY của BOOL, bạn có các lựa chọn sau:
    • Bạn có thể địa chỉ hóa nó một cách biểu tượng. Ví dụ: Tham số SRCBLK: “Data_block”.myArray
    • Bạn có thể địa chỉ hóa nó một cách tuyệt đối bằng cách sử dụng con trỏ ANY. Tuy nhiên, bạn phải lưu ý rằng chiều dài đã xác định của khu vực phải chia hết cho 8, hoặc nếu không, lệnh sẽ không được thực hiện.
    • Ví dụ: Tham số SRCBLK: P#DB123.DBX456.0 BOOL 1000
  • Đối với một con trỏ VARIANT kiểu STRING, chiều dài phải bằng 1.
  • Khối nguồn và khối đích phải được tạo với cùng một quyền truy cập khối, nghĩa là cả hai đều phải sử dụng truy cập “Optimized” hoặc “Standard“.
  • Khi khối nguồn và khối đích có quyền truy cập tối ưu hóa, bạn không được sử dụng kiểu dữ liệu STRUCT.

Lưu ý:READ_DBL” được xử lý không đồng bộ và do đó, nó không phù hợp cho việc đọc thường xuyên (hoặc chu kỳ) các thẻ trong bộ nhớ tải.

Một công việc khi đã bắt đầu sẽ luôn được hoàn thành. Nếu số lượng tối đa các lệnh “READ_DBL” đang hoạt động đồng thời đã đạt đến và bạn gọi “READ_DBL” một lần nữa trong thời gian này trong một lớp ưu tiên có ưu tiên cao hơn, mã lỗi W#16#80C3 sẽ được trả lại. Do đó, không có ý nghĩa gì khi khởi động lại công việc ưu tiên cao ngay lập tức.

Mô Tả Chức Năng

Lệnh “READ_DBL” hoạt động không đồng bộ. Xử lý diễn ra qua nhiều lời gọi. Bạn bắt đầu công việc bằng cách gọi “READ_DBL” với REQ = 1.

Các tham số đầu ra RET_VALBUSY chỉ trạng thái của công việc.

Xem thêm: Sự khác biệt giữa các lệnh đồng bộ và không đồng bộ

Các Tham Số
Bảng dưới đây mô tả các tham số của lệnh “READ_DBL”:

Tham SốKhai BáoKiểu Dữ LiệuKhu Vực NhớMô Tả
REQĐầu VàoBOOLI, Q, M, D, L hoặc hằng sốREQ = 1: Yêu cầu đọc
SRCBLKĐầu VàoVARIANTDCon trỏ đến khối dữ liệu trong bộ nhớ tải mà muốn đọc
RET_VALTrả VềINTI, Q, M, D, LThông tin lỗi
BUSYĐầu RaBOOLI, Q, M, D, LBUSY = 1: Quá trình đọc vẫn chưa hoàn thành
DSTBLKĐầu RaVARIANTDCon trỏ đến khối dữ liệu trong bộ nhớ làm việc mà được ghi vào

Bạn có thể tìm thêm thông tin về các kiểu dữ liệu hợp lệ trong “Tổng quan về các kiểu dữ liệu hợp lệ“.

Tham Số RET_VAL Mã Lỗi
(Mã lỗi W#16#…)

Mã LỗiMô Tả
0000Không có lỗi
0081Khu vực đích lớn hơn khu vực nguồn. Khu vực nguồn được ghi hoàn toàn vào khu vực đích; các byte còn lại của khu vực đích sẽ không thay đổi.
7000Lần gọi đầu tiên với REQ = 0: Không có chuyển dữ liệu hoạt động; BUSY có giá trị “0”.
7001Lần gọi đầu tiên với REQ=1: Truyền dữ liệu đã được kích hoạt; BUSY có giá trị “1”.
7002Lời gọi trung gian (REQ không liên quan): Truyền dữ liệu đã hoạt động; BUSY có giá trị “1”.
8×51Lưu ý: Mã lỗi này chỉ dành cho CPU S7-1200. Lỗi kiểu dữ liệu trong khối dữ liệu.
8081Khu vực nguồn lớn hơn khu vực đích. Toàn bộ khu vực đích được ghi. Các byte còn lại của khu vực nguồn sẽ bị bỏ qua.
8082Kiểu DB đích khác với kiểu DB nguồn (truy cập tối ưu hóa/ tiêu chuẩn). DB đích và nguồn đã được tạo với quyền truy cập tối ưu hóa. Tuy nhiên, bạn đã sử dụng các cấu trúc với DB đích và nguồn mà dẫn đến sắp xếp dữ liệu khác nhau khi biên dịch. (Lưu ý: Sử dụng UDTs thay vì.)
8093Lưu ý: Mã lỗi này chỉ dành cho CPU S7-1500. Không có khối dữ liệu hoặc khối dữ liệu không ở trong bộ nhớ làm việc được chỉ định cho tham số DSTBLK.
80B1Lưu ý: Mã lỗi này chỉ dành cho CPU S7-1500. Ở tham số SRCBLK, chỉ các khối dữ liệu nằm trong bộ nhớ tải được phép.
8xB1Lưu ý: Mã lỗi này chỉ dành cho CPU S7-1200. Không có khối dữ liệu được chỉ định cho tham số SRCBLK, hoặc khối dữ liệu được chỉ định ở đó không phải là một đối tượng bộ nhớ tải.
80B4DSTBLK trỏ đến một DB với thuộc tính F (không được ghi).
8xC0Lưu ý: Mã lỗi này chỉ dành cho CPU S7-1200. DB đích đang được xử lý bởi một lệnh khác hoặc một chức năng giao tiếp.
80C3Số lượng tối đa lệnh “READ_DBL” đang hoạt động đồng thời đã đạt đến.

Chú ý: Các mã lỗi trong trình soạn thảo chương trình được hiển thị dưới dạng giá trị số nguyên hoặc thập lục phân

Ví dụ

Trong ví dụ sau, bạn đọc nội dung của một DB trong bộ nhớ tải vào một DB trong bộ nhớ làm việc.

Để lưu trữ dữ liệu cho việc nối kết, tạo ba thẻ trong một khối dữ liệu toàn cầu.

Để lưu trữ dữ liệu gửi, tạo hai khối dữ liệu toàn cầu với ba thẻ mỗi thẻ kiểu dữ liệu INT.

  • Đối với dữ liệu nhận trong bộ nhớ tải:
  • Đối với dữ liệu nhận trong bộ nhớ làm việc:

Tạo các kết nối sau đây trong một FB “SLI_FB_READ_DBL“.

Network 1: Nối kết các tham số của lệnh “READ_DBL” như sau.

Network 2: Bạn có thể dừng xử lý của READ_DBL như sau.

Nếu tiếp điểm thông thường (“execute“) cung cấp trạng thái tín hiệu “TRUE“, lệnh “READ_DBL” được thực hiện. DB được lưu trữ trong bộ nhớ tải với tham số đầu vào SRCBLK (“SourceDB_LoadMemory“). DB được lưu trữ trong bộ nhớ làm việc với tham số đầu ra DSTBLK (“TargetDB“). Lệnh “READ_DBL” gọi dữ liệu cần chuyển trong bộ nhớ tải (SRCBLK) và đọc dữ liệu trong bộ nhớ làm việc (DSTBLK). Tham số đầu ra RET_VAL (“returnValue“) chỉ ra rằng xử lý đã diễn ra mà không có lỗi.


Làm thế nào “READ_DBL” hoạt động trong SIMATIC S7-1200/S7-1500?


Lệnh “READ_DBL” cho phép sao chép một DB hoặc một phạm vi của một DB từ thẻ nhớ micro vào khu vực dữ liệu của một DB đích mà không làm thay đổi nội dung của thẻ nhớ.


Điều kiện cần thiết khi sử dụng “READ_DBL”?


Khu vực đích phải là quan trọng cho thời gian chạy và không được tạo với thuộc tính “Only store in load memory“. Cần giữ nguyên khu vực đích trong khi “READ_DBL” đang thực hiện để đảm bảo tính nhất quán của dữ liệu.


Làm thế nào để xác định lỗi khi sử dụng “READ_DBL”?


Thông tin lỗi được trả về qua tham số RET_VAL. Các mã lỗi bao gồm việc kiểm tra kích thước khu vực, kiểu DB không đồng nhất, và số lượng “READ_DBL” đang hoạt động đồng thời đã đạt đến giới hạn.


“READ_DBL” hoạt động như thế nào khi có lỗi kiểu dữ liệu trong DB?


Nếu có lỗi kiểu dữ liệu trong DB, mã lỗi sẽ được hiển thị (ví dụ: 8×51 cho S7-1200). Lỗi này yêu cầu sự kiểm tra và hiểu biết về cấu trúc dữ liệu trong DB.


Tại sao “READ_DBL” không phù hợp cho đọc thường xuyên của các thẻ trong bộ nhớ tải?


READ_DBL” được xử lý không đồng bộ và không được thiết kế cho việc đọc thường xuyên. Sử dụng nó cho đọc chu kỳ có thể dẫn đến sự không ổn định trong hệ thống.


Làm thế nào để kiểm tra trạng thái hoạt động của “READ_DBL”?


Trạng thái hoạt động được chỉ ra qua tham số BUSY. Nếu BUSY = 1, quá trình đọc vẫn chưa hoàn thành; nếu BUSY = 0, quá trình đã hoàn tất.


Làm thế nào để dừng xử lý của “READ_DBL” khi cần thiết?


Điều này có thể được thực hiện bằng cách ngừng thực thi một đoạn logic khi một điều kiện nhất định được đáp ứng, giúp quản lý việc sử dụng “READ_DBL“.


Có lưu ý nào quan trọng khi sử dụng “READ_DBL” trên các CPU S7-1200 và S7-1500 không?


Cần lưu ý rằng có các mã lỗi chỉ định cho từng loại CPU như 8×51 (S7-1200) hoặc 8093 (S7-1500), do đó, kiểm tra tài liệu hướng dẫn tương ứng để hiểu rõ hơn về lỗi cụ thể.

Để được tư vấn trực tiếp, quý khách vui lòng liên hệ với chúng tôi theo thông tin sau:
➢ Tư vấn bán hàng: 0904 777 528 / 0799 15 95 95 (call/zalo)
➢ Email: info@mtee.vn

TRỤ SỞ CHÍNH
Địa chỉ: 30/17A Đường Tam Bình, KP8, Phường Hiệp Bình Chánh, Thành Phố Thủ Đức, Thành phố Hồ Chí Minh
MST: 0314561574

Cảm ơn quý khách đã truy cập vào website MTEE.VN. Kính chúc quý khách nhận được những thông tin hữu ích và có những trải nghiệm tuyệt vời trên trang.

Để 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 *