Đăng Ký
Kết quả 1 đến 7 của 7

Threaded View

  1. #1
    Thành viên cấp 4
    Ngày tham gia
    Oct 2011
    Bài viết
    300
    Thanks
    17
    89 lượt trong 75 bài viết

    Chuẩn đoán và Phát hiện lỗi kết nối các slave trong mạng profilebus (version TIA)

    Cái này mình từng viết cho Step 7 manager, giờ TIA phổ biến qua nên cũng đua đòi update, các bạn có thể tham khảo link cho phiên bản Step 7
    https://plcvietnam.com.vn/forum/show...1ng-profilebus

    1. Ví dụ cấu hình phần cứngh0.jpg, trong hệ thống mình dùng CPU1518F để quản lý các slave. Trong ví dụ mình sẽ viết chương trình cho 5 slave ở nhánh profibus số 2 cho nó gọn:1 DP/DP coupler, 2ABB drive và 2 ASi module

    2. Bắt đầu viết chương trình
    - Tạo hàm FCxxx rồi khai báo biến như hình
    h2.1.PNG
    - Trong FC này viết ct
    network 1: ghi địa chỉ phần cứng của salve và địa chỉ profibus vào các biến tạm
    // Node: 4
    L 1038 // con số này là địa chỉ trong phần cứng
    T #RIO_DEVs[0]
    L 4
    T #RIO_NODEs[0]
    // Node: 5
    L 941
    T #RIO_DEVs[1]
    L 5
    T #RIO_NODEs[1]
    // Node: 6
    L 944
    T #RIO_DEVs[2]
    L 6
    T #RIO_NODEs[2]
    // Node: 7
    L 542
    T #RIO_DEVs[3]
    L 7
    T #RIO_NODEs[3]
    // Node: 8
    L 547
    T #RIO_DEVs[4]
    L 8
    T #RIO_NODEs[4]
    // số node
    L 4
    T #RIO_NNodes

    NW2: Tạo xung 1s để cập nhật trạng tháih3.PNG
    * DB300.DBW1278 sẽ tăng lên 1 sau mỗi vòng quét để scan toàn bộ slave.
    * Chỗ chân RIOSts của FC440, trong DB300 khai báo như sau h6.PNG
    Mỗi phần tử array[x,y] là 1 slave: x là slave, y là vị trí của submodule gắn trên slave (-1 chính là bản thân slave).


    * Tiếp tục viết ham FC440, trong FC440 khai báo như sauh4.PNG

    Hôm qua co bạn hỏi mình cách viết SCl nên sẵn mình dùng SCl cho hàm này luôn. Trong hàm này mình dùng hàm thư viện ModuleStates của siemen để kiểm tra trạng thái của các slave, và kiểm tra cả các module gắn trên remote IO( ET200). Code chương trình này khá dể hiểu, chỉ cần mở của hàm ModuleStates của siemen lên là hiểu ngay.
    // Kiem tra xem module co ton tai trong mang hay khong
    #Temp_I:=ModuleStates(LADDR := #HW_DEV, MODE := 4, STATE := #StatusExist);

    // Kiem tra bit ket noi
    #Temp_B := (#Temp_I = 0) AND (#StatusExist[0]);
    #RIOSts[#DEV_NUM, -1] := NOT(#Temp_B);
    #COM_FLT := NOT(#Temp_B);

    IF #Temp_B THEN
    // Kiem tra neu co bat ky module fault
    #Temp_I := ModuleStates(LADDR := #HW_DEV, MODE := 2, STATE := #StatusFlt);

    #Temp_B := (#Temp_I = 0) AND (#StatusFlt[0]);
    #RIOSts[#DEV_NUM, 0] := #Temp_B;
    #SYS_FLT := #Temp_B;


    // Max number of modules to scan
    #Temp_I3 := MIN(IN1 := 126, IN2 := MIN(IN1 := #MDL_NUM, IN2 := #K_MAX_RIO_MODULES));

    FOR #Temp_I1 := 1 TO #Temp_I3 DO
    #Temp_I2 := #Temp_I1 +1;
    #RIOSts[#DEV_NUM, #Temp_I1] := #StatusExist[#Temp_I2] AND #StatusFlt[#Temp_I2];
    END_FOR;
    ELSE

    FOR #Temp_I1 := 1 TO #K_MAX_RIO_MODULES DO
    #Temp_I2 := #Temp_I1 + 1;
    #RIOSts[#DEV_NUM, #Temp_I1] := 0;
    END_FOR;

    #SYS_FLT := FALSE;

    END_IF;

    ENO := true;


    Tiếp theo lấy bit của slave tương ứng ra dùng, ví dụ slave số 4
    A DB300.RIO_DIAG_NET[1].STS[4, -1] // slave số 4
    = M0.0
    A DB300.RIO_DIAG_NET[1].STS[4, 2] // submodule nằm ở slot 2 của slave 4
    = M0.1

    Tương tự bạn có thể lấy được cho tất cả, các bạn có thể làm ngắn gọn hơn bằng cách dùng trực tiếp hàm của siemen cho từng module, hàm này viết tổng quan nên tạo mảng hơi phức tạp.
    Những tín hiệu này đưa về HMI, khi có lỗi xảy ra người bảo trì và vận hành sẽ biết được chính xác module và submodule nào bi lỗi
    Lần sửa cuối bởi Mechatronic_Hieu, ngày 09-12-2016 lúc 02:53 PM.

  2. The Following 2 Users Say Thank You to Mechatronic_Hieu For This Useful Post:


Đánh dấu

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Back to Top