Đăng Ký
Kết quả 1 đến 7 của 7
  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.
    Nhận hợp tác lập trình các loại PLC và xử lý sự cố về hệ thống tự động hóa
    Gm: Hidden Content

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


  3. #2
    Thành viên cấp 9
    Ngày tham gia
    Jul 2012
    Bài viết
    961
    Thanks
    45
    219 lượt trong 141 bài viết
    - Cho mình hỏi, thông thường thì trong mạng profibus hay profinet, có nhiều slave, 10 slave, 1 trong slave đó mất kết nối thì PLC Master báo lổi hệ thống và treo PLC
    - Phương án nào tạm thời disable slave đó từ HMI nếu người vận hành biết chắc không quan trọng trong hệ thống, chạy tạm. vì lúc đó không có programer can thiệp, xử lí sau

    “Tôi không hề có tài năng gì cả. Tôi chỉ vô cùng tò mò.”A.E



  4. #3
    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
    Trích dẫn Gửi bởi aubaoquoc Xem bài viết
    - Cho mình hỏi, thông thường thì trong mạng profibus hay profinet, có nhiều slave, 10 slave, 1 trong slave đó mất kết nối thì PLC Master báo lổi hệ thống và treo PLC
    - Phương án nào tạm thời disable slave đó từ HMI nếu người vận hành biết chắc không quan trọng trong hệ thống, chạy tạm. vì lúc đó không có programer can thiệp, xử lí sau
    Nếu trong chương trình PLC bạn có các khối OB lỗi thì PLC không bị dừng
    Còn hệ thống có tiếp tục chạy được hay không thì tùy vào logic và interlock trong chương trình.
    Còn nếu bạn biết cái nào không cần thiết thì từ HMI có thể gửi 1 bit disable để bybass tín hiệu đó trong logic
    Nhận hợp tác lập trình các loại PLC và xử lý sự cố về hệ thống tự động hóa
    Gm: Hidden Content

  5. #4
    Thành viên cấp 9
    Ngày tham gia
    Jul 2012
    Bài viết
    961
    Thanks
    45
    219 lượt trong 141 bài viết
    Trích dẫn Gửi bởi Mechatronic_Hieu Xem bài viết
    Nếu trong chương trình PLC bạn có các khối OB lỗi thì PLC không bị dừng
    Còn hệ thống có tiếp tục chạy được hay không thì tùy vào logic và interlock trong chương trình.
    Còn nếu bạn biết cái nào không cần thiết thì từ HMI có thể gửi 1 bit disable để bybass tín hiệu đó trong logic
    Khi hệ thống PLC master báo lổi rồi thì HMI cũng không khiển được, sao mà gởi lệnh gì?

    “Tôi không hề có tài năng gì cả. Tôi chỉ vô cùng tò mò.”A.E



  6. #5
    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
    Chỉ khi PLC Stop hoặc lỗi card truyền thông với HMI thì mới mất kết nối với HMI, chứ lỗi thì vẫn dk bình thường. Còn nếu chỉ vì mất kết nối 1 slave mà PLC stop thì phải xem lại, chẳng ai để Stop PLC.
    Nhận hợp tác lập trình các loại PLC và xử lý sự cố về hệ thống tự động hóa
    Gm: Hidden Content

  7. #6
    Thành viên cấp 3
    Ngày tham gia
    Oct 2011
    Đang ở
    Q9, HCM
    Bài viết
    205
    Thanks
    37
    33 lượt trong 24 bài viết
    Trích dẫn Gửi bởi mechatronic_hieu Xem bài viết
    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.




    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
    không hiểu j luôn. chưa có làm 1500. Hix.
    P/s: Hiếu về thành phố alo cafe mày
    Lần sửa cuối bởi minhhungspk, ngày 09-21-2016 lúc 04:29 PM.

  8. #7
    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
    Trích dẫn Gửi bởi minhhungspk Xem bài viết
    không hiểu j luôn. chưa có làm 1500. Hix.
    P/s: Hiếu về thành phố alo cafe mày
    Cái này ai cần làm thì làm theo và đọc hel.p thì hiểu thôi, có kiến thức cơ bản là được
    Nhận hợp tác lập trình các loại PLC và xử lý sự cố về hệ thống tự động hóa
    Gm: Hidden Content

Đá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