Thông báo

Collapse
No announcement yet.

Phương pháp lập trình ngẫu nhiên

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    Nguyên văn bởi natra2k2 Xem bài viết
    Anh này nói hay nè, CFC là cái gì gì anh trình diễn cho mọi người xem cái.

    Bài 1 đảo trạng thái đèn thì tớ chỉ làm như hình này thôi
    Hoặc là dùng lệnh quay.

    Bài 2 chủ topic phải giải trước chứ. hihi
    Thứ 1: bài 1 có nhiều cách để giải, tất nhiên là ko dùng timer hay couter rồi, mình thì có được 4 cách để giải, thêm cách ngẫu nhiên nữa là 5 và bạn có thêm 1 cách đảo bit nữa là 6, nhưng vì topic này là mình làm theo phương pháp ngẫu nhiên nên mình lấy bài 1 giải theo cách này để các bạn yếu thấy được 1 cách tổng quát về cách lập trình này.

    Thứ 2: là bài 2 thì mình đã làm rồi nên mới có đoạn video pót lên cho các bạn xem, tại vì bạn natra2k2 mún bài phức tạp hơn nên mình đưa bài đó lên để thảo luận. Vậy bạn natra2k2 thảo luận cùng mình nhé !!
    Last edited by nguyenphong; 05-03-2010, 11:09.

    Comment


    • #32
      Nguyên văn bởi nghia_bk Xem bài viết
      tuy không được thỏa mãn nhưng cũng cám ơn bác quan tâm đến câu hỏi
      Câu trả lời của bạn hac_am2003 là ok nhưng đó là làm bên wincc, nếu thích thì bạn lập trình bên PLC luôn, có mấy dòng lệnh so sánh là xong, bên wincc chỉ việc gán biến ko cần viết C hay VB

      Comment


      • #33
        Ai biết sử dụng ngôn ngữ lập trình bằng CFC thì cho mình hỏi cách định địa chỉ cho các biến vào ra với. Mình đang làm đồ án về nghiên cứu ngôn ngữ lập trình CFC mà thấy bí tài liệu quá.

        Comment


        • #34
          Bắt đầu nào!!!
          Bài tập thảo luận: 3 bơm luân phiên theo mức LOW, MEDIUM, HIGH.
          Ta có 1 bồn nước, trong bồn có 3 cái bơm chìm, và 3 con cảm biến lần lượt là X1, X2, X3. X1 là mức LOW, X2 là mức MEDIUM, X3 là mức HIGH. Khi mực nước thấp thì con X1 đóng lại, mức giữa thì con X2 đóng lại, mức cao thì con X3 đóng lại. Bắt đầu:
          - Giả sử ban đầu bồn cạn dưới X1. Khi mực nước cao hơn X2 thì bơm A chạy, mực nước rút dưới X1 thì bơm A tắt. Khi mực nước 1 lần nữa cao hơn X2 thì bơm B chạy, tương tự điều đó cho bơm C. Nếu mực nước cao hơn X3 thì 2 bơm cùng chạy ( nếu hồi nãy mực nước dâng lên X2 thì bơm B chạy thì mực nước dâng lên X3 thì bơm C chạy, vì bơm A hồi nãy chạy rồi ). Nếu mực nước rút dưới X2 thì bơm nào chạy trước sẽ tắt trước ( nếu hồi nãy là bơm B, C đã chạy rồi thì mực nước rút dưới X2 thì bơm B tắt trước, rút dưới X1 luôn thì bơm C tắt luôn ).
          - Quy tắc: bơm nào chạy trước sẽ tắt trước. Khi nước dâng lên thì X2 đề 1 bơm, X3 đề 2 bơm, Khi nước xuống thì X2 tắt 1 bơm, X1 tắt bơm còn lại.


          Từ yêu cầu bài toán ta nhận thấy các thời điểm để thay đổi số bơm hoạt động hoặc thay đổi luân phiên bơm là các thời điểm sau:

          - Sườn lên của S2

          - Sườn lên của S3
          - Sườn xuống của S2
          - Sườn xuống của S1
          Thoạt đầu là như vậy!!!


          Đến đây các bạn thử liệt kê lại xem có đúng như vậy không! 5 phút hẵng tiếp tục đọc nhé!
          ..... 5 minutes ...

          Nếu nghĩ là nước cứ dâng lên đều đều thì bật 1 bơm sẽ hút nước cạn, nếu 1 bơm không tháo nổi thì nước cứ tiếp tục dâng lên lên mức HIGH, lúc này 2 bơm làm việc (giả sử như tính toán bơm đủ công suất để 2 bơm hoạt động thì đủ sức làm cho mực nước hạ xuống). Tuy nhiên có những trường hợp nước cứ mấp mé ở mức MEDIUM hoặc HIGH, tức khi 1 bơm hoạt động ban đầu đủ sức làm nước hạ xuống nhưng lúc sau nước dâng lên mạnh hơn làm bơm không hút nổi, lúc nữa nước vào lại yếu đi, tóm lại là nước mấp mé lên xuống ở mức MEDIUM và HIGH.


          ... OK!!!???
          ............ more 5 minutes ...

          Lúc này ta phải xét đến trường hợp

          - Sườn lên của S3 khi số bơm đang làm việc bằng 2: lúc này sẽ chuyển luân phiên cho 1 bơm (hoạt động trước) nghỉ và bơm đang nghỉ sẽ hoạt động.
          - Sườn lên của S3 khi số bơm đang làm việc bằng 1: lúc này sẽ đóng thêm 1 bơm nữa

          - Sườn xuống của S2 khi số bơm đang làm việc bằng 2: lúc này sẽ cắt bớt 1 bơm (để loại trừ trường hợp chỉ có 1 bơm đang hoạt động).

          Tóm lại các thời điểm cần xét là:

          - Sườn lên của S2
          - Sườn lên của S3 khi số bơm đang làm việc bằng 2
          - Sườn lên của S3 khi số bơm đang làm việc bằng 1
          - Sườn xuống của S2 khi số bơm đang làm việc bằng 2
          - Sườn xuống của S1
          Tổng cộng 5 thời điểm

          Phần phân tích logic đến đây là xong!
          Any idea every body?

          Comment


          • #35
            Nguyên văn bởi natra2k2 Xem bài viết
            Bắt đầu nào!!!
            Bài tập thảo luận: 3 bơm luân phiên theo mức LOW, MEDIUM, HIGH.
            Ta có 1 bồn nước, trong bồn có 3 cái bơm chìm, và 3 con cảm biến lần lượt là X1, X2, X3. X1 là mức LOW, X2 là mức MEDIUM, X3 là mức HIGH. Khi mực nước thấp thì con X1 đóng lại, mức giữa thì con X2 đóng lại, mức cao thì con X3 đóng lại. Bắt đầu:
            - Giả sử ban đầu bồn cạn dưới X1. Khi mực nước cao hơn X2 thì bơm A chạy, mực nước rút dưới X1 thì bơm A tắt. Khi mực nước 1 lần nữa cao hơn X2 thì bơm B chạy, tương tự điều đó cho bơm C. Nếu mực nước cao hơn X3 thì 2 bơm cùng chạy ( nếu hồi nãy mực nước dâng lên X2 thì bơm B chạy thì mực nước dâng lên X3 thì bơm C chạy, vì bơm A hồi nãy chạy rồi ). Nếu mực nước rút dưới X2 thì bơm nào chạy trước sẽ tắt trước ( nếu hồi nãy là bơm B, C đã chạy rồi thì mực nước rút dưới X2 thì bơm B tắt trước, rút dưới X1 luôn thì bơm C tắt luôn ).
            - Quy tắc: bơm nào chạy trước sẽ tắt trước. Khi nước dâng lên thì X2 đề 1 bơm, X3 đề 2 bơm, Khi nước xuống thì X2 tắt 1 bơm, X1 tắt bơm còn lại.


            Từ yêu cầu bài toán ta nhận thấy các thời điểm để thay đổi số bơm hoạt động hoặc thay đổi luân phiên bơm là các thời điểm sau:

            - Sườn lên của S2

            - Sườn lên của S3
            - Sườn xuống của S2
            - Sườn xuống của S1
            Thoạt đầu là như vậy!!!


            Đến đây các bạn thử liệt kê lại xem có đúng như vậy không! 5 phút hẵng tiếp tục đọc nhé!
            ..... 5 minutes ...

            Nếu nghĩ là nước cứ dâng lên đều đều thì bật 1 bơm sẽ hút nước cạn, nếu 1 bơm không tháo nổi thì nước cứ tiếp tục dâng lên lên mức HIGH, lúc này 2 bơm làm việc (giả sử như tính toán bơm đủ công suất để 2 bơm hoạt động thì đủ sức làm cho mực nước hạ xuống). Tuy nhiên có những trường hợp nước cứ mấp mé ở mức MEDIUM hoặc HIGH, tức khi 1 bơm hoạt động ban đầu đủ sức làm nước hạ xuống nhưng lúc sau nước dâng lên mạnh hơn làm bơm không hút nổi, lúc nữa nước vào lại yếu đi, tóm lại là nước mấp mé lên xuống ở mức MEDIUM và HIGH.


            ... OK!!!???
            ............ more 5 minutes ...

            Lúc này ta phải xét đến trường hợp

            - Sườn lên của S3 khi số bơm đang làm việc bằng 2: lúc này sẽ chuyển luân phiên cho 1 bơm (hoạt động trước) nghỉ và bơm đang nghỉ sẽ hoạt động.
            - Sườn lên của S3 khi số bơm đang làm việc bằng 1: lúc này sẽ đóng thêm 1 bơm nữa

            - Sườn xuống của S2 khi số bơm đang làm việc bằng 2: lúc này sẽ cắt bớt 1 bơm (để loại trừ trường hợp chỉ có 1 bơm đang hoạt động).

            Tóm lại các thời điểm cần xét là:

            - Sườn lên của S2
            - Sườn lên của S3 khi số bơm đang làm việc bằng 2
            - Sườn lên của S3 khi số bơm đang làm việc bằng 1
            - Sườn xuống của S2 khi số bơm đang làm việc bằng 2
            - Sườn xuống của S1
            Tổng cộng 5 thời điểm

            Phần phân tích logic đến đây là xong!
            Any idea every body?
            Nghe sặc mùi thầy Đức anh Nam nhẩy ?? hihi
            ------------------
            Ngày hôm nay tốt hơn ngày hôm qua

            Comment


            • #36
              Nguyên văn bởi Tanco Xem bài viết
              Nghe sặc mùi thầy Đức anh Nam nhẩy ?? hihi
              Thằng nào đó, hehehe! It's up to you!

              Comment


              • #37
                Nguyên văn bởi natra2k2 Xem bài viết

                Tóm lại các thời điểm cần xét là:[/SIZE]
                - Sườn lên của S2
                - Sườn lên của S3 khi số bơm đang làm việc bằng 2
                - Sườn lên của S3 khi số bơm đang làm việc bằng 1
                - Sườn xuống của S2 khi số bơm đang làm việc bằng 2
                - Sườn xuống của S1
                Tổng cộng 5 thời điểm

                Phần phân tích logic đến đây là xong!
                Any idea every body?
                Phân tích của natra2k2 là ok , tính toán là khi 2 bơm chạy thì công suất của nó đủ sức để lôi mực nước ko dâng lên tràn bể, vì vậy có thể mức HIGH sẽ =0 hoặc 1 liên tục, như vậy có nhất thiết là cần tính "Sườn lên của S3 khi số bơm đang làm việc bằng 2" .

                Như vậy tổng kết lại nó sẽ như sau: y chang cái đề bài mà mình đưa, khi đã 2 bơm chạy thì mặc kệ mức HIGH =0 hay 1, nó phải xuống mức MEDIUM thì nó tắt 1 bơm . Cứ theo quy tắc của bài mà làm: khi nước dâng lên mức MEDIUM là đề 1 bơm, mức HIGH là đề thêm 1 bơm nữa. Khi nước xuống thì mức MEDIUM là tắt 1 bơm (bơm nào chạy trước phải tắt trước), xuống mức LOW thì tắt bơm còn lại.

                Phần phân tích là tạm ok, nhưng phân tích và làm là 2 chuyện khác nhau.

                Comment


                • #38
                  Nguyên văn bởi nguyenphong Xem bài viết
                  ... HIGH sẽ =0 hoặc 1 liên tục, như vậy có nhất thiết là cần tính "Sườn lên của S3 khi số bơm đang làm việc bằng 2..." .
                  .
                  Cần chứ, yêu cầu kỹ thuật và yêu cầu kinh tế vẫn phải đi song song, thế nên mới có chuyện nhà thiết kế chỉ cho bão cấp 10, khi bão cấp 12 vào thì bay. hehehe, nước thiên nhiên ai biết đâu mà lường.

                  Comment


                  • #39
                    Tiếp tục nào!!!

                    Sau khi phân tích trạng thái logic xong.
                    Xét về nguyên tắc đóng bơm thì cái nào đóng trước sẽ được nghỉ trước và các bơm hoạt động luân phiên theo thứ tự 1 2 3 1 2 3 1 2 3 ...
                    Từ đó ta nghĩ ... phải tạo ra trạng thái chạy vòng và nhớ như vậy bằng cách nào đó
                    - Có thể dùng thanh ghi dịch để quay vòng
                    - Có thể sử dụng biến đếm để đánh số bơm nào đã hoạt động
                    ...
                    Ở bài này tôi chọn phương pháp sử dụng biến đếm để lưu
                    Nguyên tắc là khi một trong các thời điểm chuyển luân phiên hoạt động (5 thời điểm đã xét ở trên) xảy ra thì biến này sẽ tăng 1 đơn vị, thể hiện là bơm 1, bơm 2, bơm 3, nếu quá 3 thì lại về bằng 1, cứ thế đi vòng như số xe máy vậy.

                    .... Right! ...


                    Lại phải nghĩ: một biến liệu có đủ, chúng ta có trường hợp 1 và 2 bơm hoạt động cùng lúc, do đó lại dùng thêm 1 biến đếm nữa như trên ( 1 2 3 1 2 3 1 2 3 ...) để lưu trạng thái của bơm nào hoạt động sau. Vậy là 2 biến!

                    Ta có bảng phân công đầu vào ra và khai báo các biến như sau:


                    Ta xét từng network của chương trình như sau:

                    NETWORK 1
                    Khởi tạo các biến



                    NETWORK 2
                    Xét sườn lên của S2.
                    Lúc này chỉ có 1 bơm hoạt động, do đó ta tăng biến Bơm hoạt động sau (BOM_HD_SAU) lên 1 đơn vị và SET các đầu ra tương ứng với giá trị 1 2 3 của nó. Nhưng để nhớ trạng thái bơm này đã hoạt động thì ta gán nó vào biến BOM_HD_TRUOC.




                    NETWORK 3
                    Xét sườn lên của S3 khi số bơm đang làm việc bằng 2
                    .
                    Lúc này sẽ phải có 2 bơm làm việc, đơn giảnchỉ cần tăng 2 biến BOM_HD_TRUOC và BOM_HD_SAU và bật các bơm tương ứng với giá trị chứa trong 2 biến đó.


                    NETWORK 4
                    Xét sườn lên của S3 khi số bơm đang làm việc bằng 1
                    Lúc này ta tăng biến BOM_HD_TRUOC 1 đơn vị và bật bơm tương ứng với giá trị của nó. Lưu ý là khi tăng lên thì phải xét xem nó có bằng BOM_HD_SAU không, nếu có thì phải tăng thêm 1 đơn vị nữa, mục đích là 2 biến này phải khác nhau thì mới có 2 bơm hoạt động.
                    Lệnh SWAP là để hoán đổi giá trị 2 byte BOM_HD_TRUOCBOM_HD_SAU cho nhau, mục đích làm gì nào ...




                    NETWORK 5
                    Xét sườn xuống của S2 khi số bơm đang hoạt động bằng 2
                    .
                    Nguyên tắc bơm hoạt động trước sẽ được nghỉ, do đó ta dựa vào giá trị biến BOM_HD_TRUOC để cắt bơm.




                    NETWORK 6
                    Sườn xuống của S1
                    Tắt tất cả các bơm. Lưu ý là vẫn giữ nguyên giá trị các biến BOM_HD_TRUOC và BOM_HD_SAU.




                    Kết thúc!!!!

                    Comment


                    • #40
                      Còn cái file nữa đây!
                      Attached Files

                      Comment


                      • #41
                        Nguyên văn bởi natra2k2 Xem bài viết
                        Còn cái file nữa đây!
                        Đây là bài bơm của bạn, mình chuyển lên s7-300 để dễ mô phỏng, vì ko có plc thật để chơi. Bạn down về xem mình chuyển đúng ko nhé. Lệnh INC thì mình thay bằng lệnh ADD với 1, lệnh swap thì mình mov ra 2 ô nhớ , rồi lấy 2 ô nhớ đó mov lại. ok ??

                        Nếu mình chuyển có gì sai xót mong bạn bỏ qua và sửa lại giùm mình. Theo kết quả mô phỏng thì ko chạy, chắc là mình chuyển sai cái gì rồi.
                        Attached Files

                        Comment


                        • #42
                          Và có điều này nữa là nguyên tắc là nguyên tắc: bạn phải hiểu là phải theo đúng đề bài. Sườn lên của S3 trong khi 2 bơm hoạt động thì ko tính, nếu nó cứ 0 hay 1 hoài thì làm sao?? Liên tục trong thời gian ngắn??

                          Nguyên tắc: khi nước dâng lên thì X2 đề 1 bơm, X3 đề 1 bơm nữa . Khi nước dâng xuống thì X2 tắt 1 bơm, x1 tắt bơm còn lại.
                          ==> Vì vậy khi mà nước đang còn ở X1 và 1 bơm đang chạy thì mặc kệ nước có dâng lên hay dâng xuống X2 ( MEDIUM) thì vẫn ko đổi bơm, điều đó tương tự đối với X3. Theo nguyên tắc như vậy thì mới đúng là luân phiên, còn lại thì ko phải, sai đề, ko phải luân phiên.

                          Các bạn lưu ý là mực nước thì nó có lắc lư, nó làm cho cảm biến đóng mở liên tục. Ví dụ như là có 1 cái van ở trên, mức nước đang ở MEDIUM, bơm A đang chạy. Mình khóa van thì mực nước đang tụt xuống, mình mở van cho nước vào, giả sử mực nước dâng lên qua X2 (MEDIUM) , rồi mình khóa van lại, mực nước rút xuống dưới X2.
                          ==> Ko thể dùng bộ đếm để nhớ trạng thái của cảm biến.
                          Last edited by nguyenphong; 06-03-2010, 15:40.

                          Comment


                          • #43
                            Các bạn xem video để hiểu thêm về chế độ luân phiên. Trong đoạn video mình nhấn rất nhiều lần cảm biến để cho các bạn thấy là ko thể dùng bộ đếm để nhớ được.

                            Và 1 điều rất đặc biệt là : khi đang chạy nếu ta nhấn PLC từ RUN --> STOP, hay từ STOP sang RUN thì ko ảnh hưởng đến sự luân phiên.

                            Ví dụ: Mực nước dâng lên X1, rồi X2, bơm A đang chạy, rồi mực nước xuống X1 luôn, ta nhấn tắt PLC từ RUN sang STOP, rồi sau đó thì sao?????? Ta bật PLC từ STOP sang RUN, rồi mực nước dâng lên X1, rồi X2, bơm nào sẽ chạy????? Đó chính là bơm B, ko phải bơm A nhé.
                            ==> ko thể gán giá trị ban đầu được (tức là qua tiếp điểm SM0.1 hay OB100)

                            Mún bít mình nói sạo hay nói chơi , các bạn down file đính kèm coi sẽ thấy, thấy mới tin.
                            Attached Files

                            Comment


                            • #44
                              Sorry vì nói hơi nhiều. Rất cám ơn bạn natra2k2 đã cùng nhau thảo luận và giải bài tập với mình. 1 tinh thần khó tìm thấy được trong mục PLC và ứng dụng. 1 lần nữa cảm ơn nhiều, chúng ta cùng tiếp tục nhé...

                              Comment


                              • #45
                                Nguyên văn bởi nguyenphong Xem bài viết
                                Sorry vì nói hơi nhiều. Rất cám ơn bạn natra2k2 đã cùng nhau thảo luận và giải bài tập với mình. 1 tinh thần khó tìm thấy được trong mục PLC và ứng dụng. 1 lần nữa cảm ơn nhiều, chúng ta cùng tiếp tục nhé...

                                Ở bài đầu tiên bác Nguyen Phong có thể nói rõ hơn giùm mình nha.Chẳng hạn như: ta có bảng trạng thái rồi,làm sao ta có thể lập hàm y1,y2,y3,y4 được,ở đây thấy bác dùng s1,r1 tương ứng ta gán giá trị 1,0 cho y1 hả?Rồi từ giá trị gán đó bác viết hàm cho s1,r1 theo biến x rồi viết theo y2 ,y3 bác căn cứ vào đâu?
                                Thật sự đây là lần đầu tiên mình biết về phương pháp lập trình này,nên mình hiểu còn mơ hồ lắm.

                                thank so much.

                                Comment

                                Về tác giả

                                Collapse

                                nguyenphong Tìm hiểu thêm về nguyenphong

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X