Chuyển đến nội dung chính

TÀI LIỆU ĐƯỢC HỖ TRỢ BỞI AI

Bạn muốn biết điều gì?

Camera Script

Camera script là một script duy nhất cho toàn bộ camera. Nó phản ứng với mọi inspection đã hoàn thành và với các thông điệp đến, và có thể:

  • publish lên bất kỳ topic MQTT nào, theo định dạng của riêng bạn
  • đặt biến, để recipe script đọc
  • phát cảnh báo, hiển thị trong Diagnostic Logs
  • chạy timer và giữ trạng thái, chẳng hạn như bộ đếm và các giá trị gần nhất

Nó không bao giờ thay đổi judgment: việc quyết định OK hay NG là công việc của recipe script. Nó tiếp tục chạy xuyên suốt các lần chuyển đổi recipe.

Mở Integration > Camera Script. Không có gì chạy cho đến khi bạn bật script lên, vì vậy bạn có thể viết và kiểm tra trước.

Trang Camera Script: bắt đầu từ template, script trống hoặc từ file, với bảng Reference ở bên phải

Cách thức chạy​

Script export các hook. Mỗi hook là tùy chọn: một script có thể chỉ export onResult, hoặc chỉ subscriptions và onMessage.

HookChạy khi
onStart()Khi script được load: sau khi lưu, khi bạn bật nó lên, và khi camera khởi động. Khởi tạo timer và thiết lập trạng thái tại đây
onResult(result)Sau mỗi inspection ở production mode. Export options = { setup_results: true } để nhận cả kết quả Setup
onMessage(msg)Khi có thông điệp trên topic trong subscriptions, hoặc khi User Data của PLC thay đổi
onTimer(name)Khi một timer kích hoạt
onStop()Trước khi phiên bản mới tiếp quản, khi bạn tắt script, và khi tắt máy (không áp dụng khi mất điện)

export const subscriptions = ["plant/line3/cmd"]; // MQTT topics this script listens on

export function onStart() {

state.results = 0;
timers.set("heartbeat", 30 * 1000, { repeat: true });
}

export function onResult(result) {

state.results = Number(state.results ?? 0) + 1;
}

export async function onTimer(name) {

if (name !== "heartbeat" || mqtt.status() !== "connected") return;
await mqtt.publish("plant/line3/alive", { alive: true, results: state.results }, { qos: 0 });
}

Mỗi lần một hook. Các hook chạy lần lượt, vì vậy trạng thái không bao giờ thay đổi trong khi một hook đang chạy. Các sự kiện mới chờ trong hàng đợi tối đa 64 kết quả và 256 thông điệp; khi hàng đợi đầy, sự kiện cũ nhất sẽ bị bỏ và được đếm lại.

Awaiting. Trong khi một hook đang await mqtt.publish hoặc vars.set, hook của sự kiện tiếp theo có thể chạy. Hãy đọc lại state sau một await, không phải trước nó.

Thời gian. Mỗi hook có 1 giây cho đến await đầu tiên, và 50 ms cho mỗi phần sau đó. Một hook chạy lâu hơn sẽ bị dừng.

Lỗi. Khi một hook ném lỗi hoặc bị dừng, lỗi sẽ hiển thị trong Log của script và dưới dạng cảnh báo, các lệnh gọi mà nó đã khởi động bị hủy, và sự kiện tiếp theo chạy bình thường.

Những gì script có thể dùng​

GlobalChức năng
mqtt.publish(topic, payload, opts?)Publish văn bản, byte hoặc đối tượng (gửi dưới dạng JSON). Tùy chọn: qos (0, 1 hoặc 2), retain, và các thuộc tính MQTT v5 content_type, response_topic, correlation_data, user_properties, message_expiry_s
mqtt.status()"disabled", "connecting", "connected" hoặc "disconnected"
subscriptionsDanh sách các topic để lắng nghe, dưới dạng chuỗi ký tự. Cho phép dùng wildcard + và #
vars.get(name) / vars.set(name, value)Đọc bất kỳ biến nào; đặt các biến có nguồn là Camera script
timers.set(name, ms, { repeat }) / timers.clear(name)Timer có tên, tối thiểu 100 ms
alert.raise(title, detail?)Phát cảnh báo. Cùng một tiêu đề được phát tối đa một lần mỗi phút
stateBộ nhớ tạm tồn tại giữa các sự kiện, cho đến khi script được load lại
csv(rows), xml.build(), xml.parse()Xây dựng văn bản CSV, và xây dựng hoặc parse XML
pack, unpack, crc, logCác helper giống như trong recipe script

result trong onResult có cấu trúc giống như một thông điệp result: recipe, trigger, judgment và reason cuối cùng, kết quả của từng tool, vars, metadata, tags, image.url và hơn thế nữa. Xem MQTT.

Những gì camera script không thể làm​

  • Thay đổi judgment hoặc ghi vào PLC User Results. Chỉ recipe script mới có thể
  • Truy cập file của camera, hoặc truy cập mạng ngoài MQTT
  • Giữ trạng thái qua lần reload hoặc restart: state và timer sẽ khởi động lại
  • Kích hoạt inspection hoặc chuyển recipe. PLC và HTTP API vẫn làm việc đó

Các giới hạn: 16 MiB bộ nhớ bao gồm state, tối đa 16 lệnh gọi đang chờ, 32 timer, 256 KiB cho mỗi thông điệp MQTT nhận được, 50 dòng log mỗi giây, và 10 tiêu đề cảnh báo mỗi phút.

Reset bộ nhớ sẽ xóa trạng thái

Nếu script hết bộ nhớ nó sẽ bị reset: state và timer bị xóa và onStart chạy lại. Giữ state nhỏ gọn, ví dụ chỉ lưu bộ đếm thay vì danh sách tất cả kết quả.

Templates​

NhómTemplates
Publish resultsPublish mỗi kết quả lên một topic MQTT · Publish heartbeat theo timer
Receive data from the lineTrả lời yêu cầu JSON-RPC qua MQTT · Sao chép một trường từ thông điệp JSON của nhà cung cấp vào một biến
Monitor productionĐếm OK và NG theo ca và publish file CSV · Phát cảnh báo sau một số lần NG liên tiếp

Thư viện Templates của Camera script

// Raise an alert after consecutive rejects

export function onResult(result) {

state.streak = result.judgment === "fail" ? Number(state.streak ?? 0) + 1 : 0;
if (state.streak === 3) {
alert.raise("Reject streak", {
streak: state.streak,
recipe: result.recipe.name,
reason: result.reason,
});
}
}

Dry run​

Test chạy bản nháp của bạn dưới dạng dry run: nó replay các kết quả gần đây qua onStart, onResult và onStop, và ghi lại mọi lần publish, ghi biến, timer, cảnh báo và dòng log mà không thực sự gửi đi bất cứ thứ gì. Các kết quả gần đây được lưu trong bộ nhớ, vì vậy danh sách sẽ trống sau khi khởi động lại.

Kiểm tra kết nối trước khi publish

Bảo vệ các lệnh publish bằng mqtt.status() === "connected", như các template đã làm, và await chúng hoặc thêm .catch(). Một lệnh publish thất bại mà không có gì chờ đợi nó sẽ được ghi log là lỗi.

Đi tiếp đến đâu​