A. PWM_1_Pulse_P → %QD1010 (DOUBLE WORD)
Dựa trên hình bạn gửi, tôi đã hiểu chính xác nguồn gốc việc 1s ON – 1s OFF.
Hình đó cho thấy bạn đang ghi giá trị trực tiếp ra vùng QD/QW (output memory) theo đúng cấu trúc PTO/PWM của S7-1200.
✔ 1) Ý nghĩa chính xác từ hình của bạn
A. PWM_1_Pulse_P → %QD1010 (DOUBLE WORD)
Giá trị bạn ghi: 1 000 000
→ Đây KHÔNG PHẢI microsecond như bạn nghĩ.
→ Trong PTO/PWM của S7-1200 Pulse Period được tính theo nanosecond (ns).
1 000 000 ns = 1 ms
➡ Chu kỳ PWM = 1 ms → tần số 1 kHz
→ CHÍNH XÁC.
B. PWM_1_Pulse_t → %QW008 (WORD)
Giá trị bạn ghi: 50
→ Đơn vị của Pulse Width (t) lại không phải ns, mà là 0.1% (tỷ lệ duty) hoặc máy bạn cấu hình theo ms tùy chế độ.
Trong trường hợp của bạn, nhìn hiệu ứng 1s → chắc chắn giá trị không đi theo chuẩn ns.
🔥 Nhưng quan trọng nhất:
❗ Lý do bạn thấy 1 giây ON – 1 giây OFF là vì khối PWM của bạn đang chạy ở chế độ TEST PWM (DB21.DBX12.0)
Khi test PWM được bật:
PLC không dùng period 1 ms, mà dùng một bộ tạo xung test theo giây ở bên trong (Siemens test mode).
⇒ Đây là lý do dù bạn ghi:
-
Pulse_P = 1 000 000 ns (1 ms)
-
Pulse_t = 50
Bạn vẫn thấy nháy 1 giây ON – 1 giây OFF.
✔ 2) Để PWM chạy đúng (không nháy 1 giây)
Bạn cần tắt test_pwm:
Khi OFF, PLC sẽ dùng đúng giá trị:
→ Lúc đó bạn sẽ thấy PWM thật với tần số cao (không còn 1s blink).
✔ 3) Code mẫu SCL đúng cho điều khiển PWM S7-1200
✔ 4) Nếu bạn muốn 1s ON – 1s OFF thật
Không dùng PWM mà dùng timer:
✔ Tóm lại
👉 Việc nháy 1 giây KHÔNG phải do PWM_P = 1 000 000.
👉 DO BẠN BẬT test_pwm → PLC tạo xung test 1 giây.
Nếu bạn gửi tôi block FB/FC PWM bạn đang dùng (có thể là khối của hãng khác hoặc tự viết), tôi sẽ phân tích đơn vị Pulse_P, Pulse_t chính xác và đưa code chuẩn theo đúng thư viện đó.

