Mình có 1 phao điện, 2 máy bơm, plc s7-200. Mình muốn đk 2 bơm chạy luân phiên thì sao mọi người.
Printable View
Mình có 1 phao điện, 2 máy bơm, plc s7-200. Mình muốn đk 2 bơm chạy luân phiên thì sao mọi người.
Viết chương trình cho PLC S7 200 haha
Đùa chút cho vui bạn hỏi buồn cười quá. Dĩ nhiên là lập trình cho nó. Bạn muốn yêu cầu như thế nào? hoạt động ra sao ? Có phải ý bạn
Start > bơm 1 chạy > đầy thì dưng
- Cạn nước > bơm 2 chạy > đầy dừng
- Cạn nước > quay lại bơm 1 ?
bạn viết để làm gì ??? mục đích sử dụng cái này ấy
Kỹ thuật điều khiển bơm luân phiên thường được sử dụng trong các dự án ngành nước. Tuy nhiên chỉ dùng 1 phao để điều khiển bơm thì không đủ, ít nhất phải 2 phao cho 2 mức Start và Stop. Nếu dùng 1 phao bạn phải delay để có 2 khoảng Start Stop.
Cách 1: dễ - bài toán đơn giản
Thông thường nếu chỉ có 2 bơm thì dùng giải thuật "gắn cờ".
Ví dụ bơm 1 chạy rồi thì bạn gắn cờ cho nó, lần sau nó không chạy nữa để bơm 2 chạy. Bơm 2 chạy xong thì cờ trả cho bơm 2. Cứ luân phiên như vậy.
Cách 2: khó - dùng cho bài toán tổng quát
Nếu nhiều hơn 2 bơm và áp dụng cho trường hợp tổng quát thì bạn dùng giải thuật so sánh thời gian thực. Tức là xem khoảng thời gian nghỉ của thằng nào nhiều nhất thì thằng đó được ưu tiên chạy cho lần tiếp theo.
Ví dụ hệ thống có 4 bơm:
Bơm 1 đang chạy
Bơm 2 đang nghỉ, thời gian nghỉ đạt 2.5 tiếng
Bơm 3 đang nghỉ, thời gian nghỉ đạt 2 tiếng
Bơm 4 đang nghỉ, thời gian nghỉ đạt 3 tiếng
Sau khi mực nước đạt mức Stop, bơm 1 dừng. Khi mực nước đạt mức Start trở lại hệ thống sẽ so sánh thời gian nghỉ của cả 4 bơm. Tất nhiên vì bơm 1 vừa chạy xong nên thời gian nghỉ của nó là ngắn nhất. Như vậy lúc này Bơm 4 sẽ được ưu tiên chạy trước vì nãy giờ "ngồi chơi" quá lâu rồi.
Tất nhiên trong thực tế thì số lượng bơm chạy phụ thuộc vào nhu cầu của process (có thể chia làm nhiều mức chạy khác nhau - 2, 3 hay 4 bơm cùng lúc) và bạn phải có giải thuật sắp xếp ưu tiên. Nhưng tóm lại chỉ cần dựa trên hướng mình vừa nêu là giải quyết được bài toán.
Cuối cùng, làm cách nào là do bạn quyết định, làm cách 2 thì cực hơn nhưng bạn sẽ giải quyết được bài toán tổng quát.
E mới mò mẫm vào lập trình S7-300 có 1 đề bài như sau:
+ Có 2 máy bơm chạy theo 3 mức phao: mức thấp(MT),Mức trung bình(MTB), mức cao(MC):
- MT: 2 bơm không hoạt động
- MTB: 2 bơm hoạt động luân phiên cho tới khi xuống MT thì dừng
- MC: 2 bơm hoạt động cùng lúc cho tới khi xuống MT thì dừng
Đối với loại bài này e không biết chia quá trình sao cho hợp lí,ko có hướng đi,mong các anh chỉ giáo cho thằng em
-
Thôi vậy chỉ bạn làm cách dễ trước vì bài toán của bạn cũng chỉ có 2 bơm.
Trước hết là mức Stop (Mức thấp) 2 bơm dừng, cái này thì quá dễ, so sánh level dùng 2 lệnh Reset là xong.
Kế tiếp là mức cao, 2 bơm đều chạy, cái này cũng dễ, so sánh level dùng 2 lệnh Set cho cả 2 bơm.
Phần khó nhất là đây, mức trung bình (Mức Start), chạy luân phiên:
Xem code này nhé, lưu ý code này chỉ để tham khảo thôi chứ chưa tối ưu cho hệ thống của bạn:
//Nếu mực nước đạt mức Start thì trigger bằng 1
IF #Trigger=1 THEN
IF #Mem=1 THEN #Mem:=0;
//Đảo trạng thái cờ nhớ vì chỉ có 2 bơm nên đảo bit là được
ELSE #Mem:=1;
END_IF;
END_IF;
IF #"1 Pump Mode"=0 THEN
//Chế độ Alternative - đảo bơm dựa vào cờ nhớ, cứ mỗi lần trigger là đảo
IF #Mem=0 THEN #"Pump 1":=1; #"Pump 2":=0;
ELSE #"Pump 1":=0; #"Pump 2":=1;
END_IF;
ELSE
//Chế độ 1 bơm, chỉ chạy 1 bơm chứ không đảo, dùng trong trường hợp bảo trì 1 bơm, biến "Pump No" dùng để chọn bơm
IF #"Pump No"=1 THEN
#"Pump 1":=1;
#"Pump 2":=0;
END_IF;
IF #"Pump No"=2 THEN
#"Pump 1":=0;
#"Pump 2":=1;
END_IF;
END_IF;
Còn làm kiểu xét thời gian thì có vẻ hơi khó so với bạn nên khi nào gặp bài toán thực tế mình hướng dẫn sau. Vẫn dùng ngôn ngữ SCL vì nó dễ hiểu và gần với giải thuật.
bài toán của e,em đã viết giải thuật rồi,những chuyển xuống code thì e chưa làm được,em viết LAD thôi aĐính kèm 2361
ngôn ngữ anh Lợi viết bằng SCL rất gần với thực tế và giải thuật,nhưng e lại ko biết viết ngôn ngữ đó,a có tài liệu gì ko chia sẻ e với
Chuyển lưu đồ của bạn về dạng GRAFCET rồi viết bằng LAD, không nên để lưu đồ như vầy mà triển khai vì bạn đang viết theo cấu trúc rẽ nhánh và vòng lặp. LAD vẫn có thể làm được dạng vòng lặp nhưng bạn phải Jump rất nhiều nếu thực sự viết theo dạng vòng lặp. Cuối cùng bạn cũng sẽ viết xong thôi nhưng vấn đề nằm ở chỗ, code của bạn nhìn vào có dễ hiểu không, dễ chẩn đoán lỗi không đó mới là quan trọng.
Về SCL thì đó là ngôn ngữ dựa trên Pascal, hỗ trợ rất mạnh các cấu trúc rẽ nhánh và vòng lặp có điều kiện. SCL hiệu quả khi bạn dùng nó để xử lý dữ liệu, còn LAD thì mạnh về điều khiển. Khi mới bắt đầu học PLC, mình cũng làm lưu đồ như bạn bây giờ. Và mình từng thử làm điều ngược lại, nghĩa là dùng LAD để xử lý dữ liệu và dùng SCL để viết điều khiển tuần tự. Kết quả thì cuối cùng mình vẫn làm được nhưng mất rất nhiều thời gian và đưa code cho người khác đọc không hiểu gì cả. Còn như bạn thấy mình viết bằng SCL, bạn đọc vào là hiểu dù bạn không biết viết SCL vì nó gần với giại thuật của bạn.
Khi phát triển PLC, họ phát triển ngôn ngữ LAD với mục đích là giúp các kỹ sư quen với việc thiết kế hệ thống điều khiển bằng relay trước đây có thể chuyển lên dùng PLC dễ dàng. Sau đó thì họ bổ sung thêm nhiều hàm cho LAD khiến nó trở nên mạnh mẽ hơn, không chỉ dừng lại ở các lệnh on off, delay nên ta có thể dùng lad để xử lý các thuật toán điều khiển phức tạp hơn. Tuy nhiên xét về bản chất thì LAD cũng từ hệ thống điều khiển relay phát triển lên. Song song với LAD, các nhà phát triển vẫn muốn hỗ trợ bộ phận kỹ sư làm việc với vi điều khiển, vi xử lý nên đã phát triển thêm ngôn ngữ SCL để giúp các kỹ sư này làm quen với PLC nhanh hơn.
Nên nếu đánh giá so sánh giữa việc viết bằng LAD hay SCL thì bạn nên đi về bản chất của nó. Ngày xưa bạn thiết kế hệ thống điều khiển relay như thế nào (mà mình nghĩ là thế hệ các bạn bây giờ chắc cũng không còn được làm cái đó) hay bạn lập trình vi điều khiển (PIC, ARM, 8051, AVR,...) như thế thì cứ dựa vào đó mà suy nghĩ tiếp.
Và quan trọng nhất đó là áp dụng tư duy (giải thuật) của bạn vào thực tế như thế nào cho gần với cách bạn suy nghĩ giải quyết vấn đề, nếu bạn chọn một con đường vòng thì có khả năng mindset của bạn sẽ bị thay đổi theo dẫn đến khó phát triển các giải thuật cao hơn.
Như vậy không nhất thiết bạn phải dùng SCL. Bạn có 2 lựa chọn, một là thay đổi lưu đồ để triển khai với LAD (bạn có học qua thiết kế tuần tự sẽ biết), hai là thay đổi ngôn ngữ viết để phù hợp với cách mà bạn đang suy nghĩ. Mình khuyên là bạn mới bắt đầu thì làm cái dễ trước - dùng LAD nhưng thay đổi lưu đồ lại. Nếu muốn phát triển các giải thuật cao hơn thì dùng SCL, tài liệu thì bạn xem cuốn "Automation with STEP 7 in STL and SCL của Hans Berger", xem cuốn này biết được cả hai ngôn ngữ STL và SCL.
Cảm ơn Anh nhiều. Em có thế tìm quyển sách ấy ở đâu ạ