Chuyển đổi code PLC: từ ladder sang văn bản cấu trúc, Siemens sang Rockwell
Dán một chương trình TIA Portal, Studio 5000 hoặc TwinCAT. PLC Gym tìm ra nó thuộc hãng nào, trả lại bằng code của hãng kia, chạy cả hai phiên bản song song và cho bạn thấy điểm khác nhau, từng dòng một. Đây là cách học hãng kia bằng chính code của bạn, và là bước khởi đầu cho một cuộc di chuyển. Nó chỉ chuyển đổi logic, nên vẫn cần kiểm tra trên máy thật.
- Mỗi dòng đều được ánh xạ Rê chuột lên một nấc hoặc dòng để xem nó đến từ đâu
- Được kiểm tra, không phải đoán Cả hai chương trình chạy trên cùng các đầu vào trong trình mô phỏng của chúng tôi, từng chu kỳ quét
- Code của bạn không được giữ lại Nó được gửi đến máy chủ của chúng tôi để chuyển đổi, và không được lưu hay ghi nhật ký
Biết Siemens hoặc Rockwell, nhưng không biết cả hai?
Dán code của chính bạn và xem nó theo cách hãng kia viết, kèm một bản tóm tắt những gì khác với bạn và các dòng mà mỗi điểm khác nằm ở đó. Rồi chạy nó trên bảng điều khiển và thử nó trong một nhiệm vụ. Đây là cách để học và là bước khởi đầu cho một cuộc di chuyển, không phải code cho một nhà máy đang vận hành.
Siemens sang Rockwell
TIA Portal sang Studio 5000, và SCL sang văn bản cấu trúc
- Bộ định thời
#Delay(IN := #Start, PT := T#2s);Delay.PRE := 2000; Delay.TimerEnable := Start; TONR(Delay);- Bit hoàn thành
#Delay.QDelay.DN- Xung một lần
#Edge(CLK := #Eye);Edge.InputBit := Eye; OSRI(Edge);
Rockwell sang Siemens
Studio 5000 sang TIA Portal, và văn bản cấu trúc sang SCL
- Bộ định thời
Delay.PRE := 2000; Delay.TimerEnable := Start; TONR(Delay);#Delay(IN := #Start, PT := T#2s);- Bit hoàn thành
Delay.DN#Delay.Q- Xung một lần
Edge.InputBit := Eye; OSRI(Edge);#Edge(CLK := #Eye);
Bảng tra nhanh Siemens, Rockwell, TwinCAT: một lệnh, ba cái tên
Công cụ chuyển đổi ánh xạ từng cái này cho bạn. Nó cũng là một bảng tra nhanh tiện lợi khi bạn chuyển giữa các nhà máy.
| Chức năng | Rockwell Studio 5000 | Siemens TIA Portal | Văn bản cấu trúc (ST) Beckhoff TwinCAT 3 |
|---|---|---|---|
| Tiếp điểm thường mở và thường đóng | XIC, XIO | Tiếp điểm NO và NC | Viết dưới dạng logic: A AND NOT B |
| Cuộn dây, chốt và nhả chốt | OTE, OTL, OTU | Cuộn dây, S, R | x := …, IF … THEN x := TRUE |
| Bộ định thời trễ đóng | TON trên một TIMER (.PRE .ACC .DN); TONR trên một FBD_TIMER trong ST | TON_TIME (PT, ET, Q) | TON (PT, ET, Q) |
| Bộ định thời trễ ngắt | TOF; TOFR trong ST | TOF_TIME | TOF |
| Bộ đếm tiến | CTU trên một COUNTER, reset bằng RES; CTUD trong ST | CTU trên một IEC_COUNTER (PV, CV, Q, R) | CTU (PV, CV, Q, RESET) |
| Sườn lên | ONS, OSR; OSRI trong ST | Tiếp điểm P, P_TRIG, R_TRIG | R_TRIG |
| Sườn xuống | OSF; OSFI trong ST | Tiếp điểm N, N_TRIG, F_TRIG | F_TRIG |
| Chuyển một giá trị | MOVE (MOV trước v36) | MOVE | x := y |
| So sánh | EQ, NE, LT, GT, LE, GE (EQU, NEQ, LES, GRT, LEQ, GEQ trước v36) | CMP ==, <>, <, >, <=, >= | =, <>, <, >, <=, >= |
| Phép toán | ADD, SUB, MUL, DIV, CPT | ADD, SUB, MUL, DIV, CALCULATE | +, -, *, / |
| Quy đổi đầu vào analog | SCP | NORM_X rồi SCALE_X | Viết ra dưới dạng công thức |
| Số nguyên | DINT (có INT, nhưng DINT là kiểu gốc) | Int, DInt | INT, DINT |
| Thời gian | DINT mili giây: 2000 | Time: T#2s | TIME: T#2S |
| Tag bên trong một khối | “Tag của chương trình”, không có tiền tố | #Name (block interface) | Không có tiền tố (các phần VAR) |
| Kiểu dữ liệu của riêng bạn | UDT (các biến kiểu bool được gói vào một SINT ẩn) | Kiểu dữ liệu PLC: TYPE … STRUCT | STRUCT trong một DUT |
| Khối của riêng bạn | Add-On Instruction (AOI) với một tag đi kèm | FB, được gọi dưới dạng đa instance | FUNCTION_BLOCK với một instance |
| Cách gọi | PumpCtl(Pump1, Start, Stop, Run): instance trước, các tham số bắt buộc theo thứ tự | #Pump1(Start := …, Run => …) | Pump1(Start := …, Run => …) |
| Khối có nấc đang tắt | EnableIn thành sai: logic không chạy (routine EnableInFalse của nó chạy, nếu có) | EN tắt: FB không được gọi (ENO false) | Không được gọi: đặt lời gọi bên trong IF |
| Chạy một lần khi khởi động | Routine Prescan của AOI: chạy trong prescan, khi bộ điều khiển chuyển sang Run | OB khởi động (OB100), hoặc cờ lần gọi đầu tiên trong FB | Cờ lần gọi đầu tiên trong FB (hoặc FB_init) |
Nó chuyển đổi gì, và không chuyển đổi gì
Nó chuyển đổi logic. Bất cứ thứ gì nó không mang sang được đều được liệt kê kèm dòng và việc cần làm, không bao giờ bị lặng lẽ bỏ sót.
Chuyển đổi được
- Ngôn ngữ ladder sang văn bản cấu trúc, lần nào cũng được
- Văn bản cấu trúc sang ngôn ngữ ladder, khi logic phù hợp với ladder: tiếp điểm, cuộn dây, set và reset, bộ định thời, bộ đếm, sườn, so sánh, chuyển giá trị và phép toán
- Siemens sang Rockwell và ngược lại, bằng văn bản cấu trúc hoặc ngôn ngữ ladder, và TwinCAT theo cả hai chiều
- Thành phần của bộ định thời và bộ đếm (IN/PT/Q/ET sang TimerEnable/PRE/DN/ACC), biến cục bộ #, kiểu dữ liệu, sườn, MOVE và MOV, so sánh và phép toán
- Khai báo tag kèm chú thích, và các chú thích trong code của bạn
- Khối chức năng, Add-On Instruction và UDT của riêng bạn: định nghĩa, lời gọi và mọi Tag.Member, theo đúng dạng của từng hãng
- AOI viết bằng ngôn ngữ ladder, cùng routine Prescan và EnableInFalse của chúng: giữ nguyên dạng nấc cho đích ladder, hoặc viết lại thành văn bản cấu trúc
- Khối LAD và FBD của Siemens, từ bản xuất XML của TIA Portal: mỗi network được đọc thành đoạn SCL làm cùng việc
- Cả chương trình trong một lần: một nguồn Siemens cùng các khối dữ liệu, một chương trình Studio 5000 có routine chính gọi các routine khác, và nhiều tệp TwinCAT hoặc TIA Portal mở cùng lúc
- Nấc Studio 5000 có sao chép và điền (COP, CPS và FLL, tối đa 64 phần tử), bộ đếm đếm cả hai chiều (CTU với CTD), logic bit, MOD, ABS, SQR và MVM
- Bộ định thời xung (TP) chuyển sang văn bản cấu trúc Studio 5000, vốn không có lệnh này: được viết lại quanh một TONR và đối chiếu với bản gốc theo từng chu kỳ quét
- Một báo cáo bạn có thể lưu thành tệp văn bản: những gì cần bạn xử lý, những gì đã thay đổi và vì sao, và phép đối chiếu song song đã thử và chưa thử những gì
Không chuyển đổi được
- Cấu hình phần cứng, địa chỉ I/O, mạng và truyền thông (MSG, PUT/GET, EtherNet/IP, PROFINET)
- Tag, cảnh báo và màn hình HMI
- Khối thư viện của hãng như PID, chuyển động và biến tần
- AOI có logic là sơ đồ khối chức năng hoặc SFC: được đánh dấu, để bạn viết lại routine đó bằng ngôn ngữ ladder hoặc văn bản cấu trúc trước
- Phương thức, thuộc tính, hành động và union của TwinCAT
- Chuỗi văn bản: các dòng dùng chúng được đánh dấu và để lại cho bạn
- Vòng lặp FOR sang ngôn ngữ ladder: được đánh dấu kèm số dòng và một gợi ý
- STL, IL, SFC và GRAPH, và sơ đồ khối chức năng từ Studio 5000
Bằng chứng hoạt động thế nào
Code của bạn được đọc vào một dạng trung tính, rồi được viết ra theo cách hãng đích viết: ghi vào thành viên và TONR trong Logix, một lệnh gọi TON_TIME trong SCL, T#2s hoặc 2000.
Trình mô phỏng của PLC Gym chạy chương trình gốc và chương trình đã chuyển đổi trong 3.000 chu kỳ quét (60 giây mô phỏng). Đầu vào được nhấn, giữ và thả, và các con số đi qua mọi giới hạn mà code của bạn so sánh.
Mọi đầu ra đều được so sánh ở mọi chu kỳ quét. Ở những chỗ các hãng thực sự khác nhau (một xung một lần ở chu kỳ quét đầu, một lần đặt lại bộ đếm), công cụ chuyển đổi viết code sao cho hành vi vẫn khớp, và nói rõ điều đó.
Nó chạy trên trình mô phỏng của PLC Gym, nên đây là một bước kiểm tra logic mạnh, không phải bảo đảm cho nhà máy của bạn: hãy kiểm tra trên máy thật theo yêu cầu của công trường bạn. Muốn xem nó chạy? Nhấn Chạy nó để mở chương trình đã chuyển đổi trên trình mô phỏng PLC trực tuyến(bảng điều khiển), hoặc kiểm tra code PLC của bạn trên một máy 3D.
Những câu hỏi các kỹ sư hay hỏi
Những gì mọi người kiểm tra trước khi tin một công cụ chuyển đổi.
Nó có chuyển đổi code Siemens TIA Portal sang Rockwell Studio 5000 không?
Có. Dán SCL hoặc mở tệp .scl và mặc định nó sẽ chuyển sang Rockwell, dưới dạng văn bản cấu trúc hoặc ngôn ngữ ladder. SCL sang văn bản cấu trúc thay đổi nhiều hơn tên tag: lời gọi TON_TIME thành TONR với .PRE và .TimerEnable, R_TRIG thành OSRI, .Q thành .DN, T#2s thành 2000 và INT thành DINT. Bạn có thể tải xuống tệp .L5X để nhập. Nó chỉ chuyển đổi logic, và cho đến nay tệp đó mới chỉ được thử bằng cách đọc ngược lại vào PLC Gym, nên hãy kiểm tra việc nhập trong Studio 5000.
Nó có chuyển đổi code Rockwell Studio 5000 sang Siemens TIA Portal không?
Có. Dán văn bản cấu trúc hoặc văn bản nấc, hoặc mở bản xuất L5X, và mặc định nó sẽ chuyển sang Siemens: SCL từ văn bản cấu trúc, LAD từ ngôn ngữ ladder. Bộ định thời TONR thành TON_TIME, bộ đếm CTUD thành CTU, xung một lần OSRI thành R_TRIG, DN thành Q và ACC thành ET hoặc CV, và mọi tag cục bộ đều có dấu # trong SCL.
Tôi biết Siemens nhưng không biết Rockwell. Công cụ này có giúp tôi học không?
Có, và cả chiều ngược lại. Dán code của chính bạn và bạn sẽ nhận được bản tóm tắt những điểm khác biệt dành cho bạn: bộ định thời, xung một lần và tên tag thay đổi thế nào, kèm các dòng trong chương trình của bạn có từng điểm đó. Sau đó chạy chương trình đã chuyển đổi trên bảng điều khiển của PLC Gym, và chơi một nhiệm vụ bằng ngôn ngữ của hãng đó. Bảng tra cứu nhanh trên trang này bao quát phần còn lại.
Code đã chuyển đổi có sẵn sàng để đưa lên nhà máy đang vận hành không?
Không. Hãy xem nó như một cách để học và một bước khởi đầu cho việc chuyển đổi hệ thống. Nó chỉ chuyển đổi logic: cấu hình phần cứng, địa chỉ I/O, truyền thông, HMI, PID, chuyển động và biến tần vẫn do bạn xử lý. Phép đối chiếu song song chạy trên trình mô phỏng của PLC Gym, không phải trên máy của bạn, và các tệp cần được kiểm tra trong phần mềm của chính hãng. Hãy xem xét nó như khi xem code của đồng nghiệp, và thử nó trên máy thật theo yêu cầu của nhà máy bạn.
Làm sao nó biết code của tôi thuộc hãng nào?
Nó đọc code, giống như người phiên dịch nhận ra một ngôn ngữ. Dấu # trước tên tag nghĩa là Siemens, TONR hoặc .DN nghĩa là Studio 5000, và T#2s trên tag không có # nghĩa là TwinCAT. Nó cho bạn biết nó đã thấy gì, và nếu code có thể thuộc bất kỳ hãng nào thì nó sẽ nói vậy và để bạn chọn. Tệp tự cho biết chúng là gì: .scl, .L5X, .TcPOU và bản xuất .xml của TIA Portal.
Nó có đọc ngôn ngữ ladder (LAD) và FBD của Siemens từ TIA Portal không?
Có, từ bản xuất XML của TIA Portal. Khối LAD hoặc FBD không có nguồn .scl, nên XML là cách nó ra khỏi TIA Portal: từ V16, thêm một không gian làm việc dưới “Version control interface” trong cây dự án và đưa khối vào đó, rồi TIA Portal sẽ ghi khối thành tệp .xml. Các tập lệnh Openness cũng ghi ra cùng tệp đó. Mỗi network được đọc thành đoạn SCL làm cùng việc, một cuộn dây thành mọi thứ được nối vào đầu vào của nó và một hộp thành một lời gọi, rồi từ đó chuyển sang Rockwell hoặc TwinCAT, bằng văn bản cấu trúc hoặc ngôn ngữ ladder. Mở cùng lúc các khối dữ liệu và kiểu dữ liệu của khối đó thì chúng được đọc cùng nhau. Bộ đọc được viết dựa trên mô tả định dạng của Siemens và chưa được thử với mọi phiên bản TIA Portal, nên network nào có phần nó không đọc được sẽ được nêu tên và để lại cho bạn, còn phần còn lại của khối vẫn được chuyển đổi.
Có thể chuyển logic ngôn ngữ ladder sang văn bản cấu trúc không?
Có, luôn luôn. Mỗi nấc thành một hoặc hai dòng văn bản cấu trúc: tiếp điểm thành AND và OR, cuộn dây thành phép gán, OTL và OTU thành IF … THEN, còn bộ định thời, bộ đếm và xung một lần thành lời gọi theo đúng phong cách của hãng đích. Chú thích của nấc được giữ lại dưới dạng chú thích.
Có thể chuyển mọi văn bản cấu trúc sang ngôn ngữ ladder không?
Hầu hết logic điều khiển đều được: tiếp điểm, cuộn dây, set và reset, bộ định thời, bộ đếm, sườn, so sánh, chuyển giá trị và phép toán. Vòng lặp FOR thì không, vì ngôn ngữ ladder chạy mỗi nấc một lần mỗi chu kỳ quét, nên công cụ chuyển đổi đánh dấu dòng đó và gợi ý viết một nấc cho mỗi phần tử hoặc giữ phần đó ở văn bản cấu trúc.
Nó có chuyển đổi khối chức năng, Add-On Instruction và UDT của riêng tôi không?
Có. Một AOI Studio 5000 thành FB của TIA Portal hoặc FUNCTION_BLOCK của TwinCAT, và ngược lại. AOI viết bằng ngôn ngữ ladder vẫn là ladder khi bạn chuyển sang LAD của TIA Portal, và thành văn bản cấu trúc trong các trường hợp khác. Một UDT thành kiểu dữ liệu PLC hoặc STRUCT của TwinCAT. Lời gọi cũng thay đổi: Studio 5000 truyền instance rồi đến các tham số bắt buộc theo thứ tự, còn TIA Portal và TwinCAT đặt tên cho từng tham số. Cấu trúc đầu vào vào AOI dưới dạng InOut, TIME thành DINT mili giây, và giá trị mặc định của UDT được chuyển sang các tag, vì UDT của Logix không chứa được giá trị mặc định. Mọi thay đổi đều được liệt kê trong báo cáo, và lần chạy đối chiếu cũng so sánh từng thành phần của cấu trúc.
Routine EnableInFalse và Prescan của AOI sẽ ra sao trong TIA Portal hoặc TwinCAT?
Cả hai đều không có routine theo chế độ quét, nên khối chức năng tự làm việc đó. EnableInFalse thành đầu vào EnableIn: khối được gọi ở mọi chu kỳ quét với EnableIn lấy từ nấc của nó, và IF … ELSE của nó chạy logic EnableInFalse khi nấc tắt. Prescan thành đoạn code chạy một lần, ở đầu lần gọi đầu tiên của khối. Postscan chỉ chạy khi một hành động SFC kết thúc, nên nó được giữ lại cho Studio 5000 và được ghi chú ở nơi khác. Lần chạy đối chiếu kiểm tra rằng cả hai phiên bản hoạt động giống nhau.
Làm sao tôi biết code đã chuyển đổi làm đúng như bản gốc?
PLC Gym chạy bản gốc của bạn và chương trình đã chuyển đổi song song trong trình mô phỏng qua hàng nghìn chu kỳ quét, cấp cùng đầu vào cho cả hai, và so sánh mọi đầu ra ở mọi chu kỳ quét. Các đầu vào số được đẩy vượt qua các ngưỡng trong code của bạn và trên toàn dải của kiểu dữ liệu, và trang hiển thị dải đã thử. Nó chỉ báo khớp khi mọi dòng trong chương trình của bạn đã chạy, mọi đầu ra bật/tắt đã thay đổi, và mọi bộ định thời và bộ đếm đã chạy đến cuối trong lần chạy. Những gì nó không thử được sẽ được nêu tên, và kết quả sẽ báo một phần. Khớp nghĩa là chúng giống nhau trong các phép thử đó, nên đó không phải là sự đảm bảo. Bạn xem kết quả dưới dạng dạng sóng của bộ phân tích logic. Nhấn Chạy nó để mở chương trình đã chuyển đổi trên bảng điều khiển của PLC Gym, với nút nhấn, công tắc và đèn tạo từ các tag của nó, và tự mình thử. Luôn thử trên máy thật theo yêu cầu của nhà máy bạn.
Công cụ chuyển đổi có miễn phí không?
Các ví dụ có sẵn mở cho mọi người, không cần tài khoản. Mọi tài khoản đều được Dùng thử Pro miễn phí đến ngày 5 tháng 12 năm 2026, nên đến lúc đó một tài khoản miễn phí chuyển đổi bao nhiêu code của bạn cũng được. Sau đó, tài khoản miễn phí chuyển đổi được 3 chương trình của bạn, và chuyển đổi lại cùng code đó hoặc sang hãng khác không tính thêm lượt.
Code của tôi có bị tải lên đâu không?
Code của bạn được gửi đến máy chủ của chúng tôi qua kết nối mã hóa để chuyển đổi, và kết quả được trả về ngay. Chúng tôi không lưu hay ghi log code đó, và nó bị ẩn khỏi các bản ghi phiên truy cập chúng tôi dùng để cải thiện trang web. Với tài khoản miễn phí, chúng tôi giữ một dấu vân tay đã xáo trộn của tối đa 3 chương trình, để cùng một code không bị tính hai lần. Nó không thể chuyển ngược lại thành code của bạn, và sẽ bị xóa khi tài khoản của bạn bị xóa.
Tôi có thể nhập kết quả vào TIA Portal, Studio 5000 hoặc TwinCAT không?
Có. Tải xuống nguồn .scl và dùng “Generate blocks from source” trong TIA Portal, tệp .L5X để nhập vào Studio 5000, hoặc tệp .TcPOU để thêm vào dự án TwinCAT 3. Kiểu dữ liệu và khối của riêng bạn cũng đi kèm: trong tệp .scl và .L5X, hoặc dưới dạng tệp zip chứa các tệp .TcDUT và .TcPOU cho TwinCAT. TIA Portal không có định dạng văn bản cho ngôn ngữ ladder, nên với Siemens LAD bạn vẽ lại các network được hiển thị, hoặc dùng tệp SCL. Hãy xem các tệp này là bản thử nghiệm: cho đến nay tệp .L5X mới chỉ được thử bằng cách đọc ngược lại vào PLC Gym, nên hãy kiểm tra từng lần nhập trong phần mềm của chính hãng.
Nó không chuyển đổi những gì?
Chỉ logic: không có cấu hình phần cứng, truyền thông, tag HMI hay khối thư viện của hãng như PID và chuyển động. Khối chức năng, AOI và UDT của riêng bạn thì có chuyển đổi, miễn là logic của chúng là ngôn ngữ ladder hoặc văn bản cấu trúc. Những gì nó không chuyển sang được đều được liệt kê kèm số dòng và cách xử lý, không bao giờ bị bỏ qua lặng lẽ.
Chuyển đổi giữa các hãng? Trao đổi mẹo trong Phòng thay đồ.