Lấy từng bit trong một thanh ghi của iNut PLC - Lấy từng bit trong một luồng cảm biến của iNut cảm biến

Mô tả dự án: 

Làm thế nào để lấy từng bit của một thanh ghi? Bạn lưu trạng thái của INPUT/OUTPUT hoặc cảm biến digital vào một bit của thanh ghi và bạn muốn đọc nó để thiết kế giao diện? Đừng lo lắng. Giải pháp cực kỳ đơn giản, nó chỉ là một khối lệnh kéo thả thôi mà! Nào, cùng khám phá!

Bài toán

Trong thực tế, chúng ta sẽ gặp nhiều bài toán quản lý đến vài chục IO đến vài trăm IO. Nhưng iNut Cảm biến hoặc iNut PLC chỉ có tối đa 8 luồn (cho phiên bản đầu tiên). Vậy mạch iNut PLC có phù hợp trong trường hợp này ko?

Câu trả lời là được! iNut Cảm biến / iNut PLC hỗ trợ đọc được 128 IO. Và nếu kĩ thuật lạp trình của bạn tốt, để vận dụng các trick về số nguyên thì có thể lên đến 160 IO.

Nào, chúng ta cùng thử giải bài toán này nhé. Mình sẽ chọn iNut PLC để giải thích cho các phần bên dưới, các iNut cảm biến khác tương tự.

Bài toán về IO

Ví dụ như dòng FX3U-48 MR. Chúng ta có đến 48 IO. Vậy làm thế nào để đưa 48 IO này lên Internet?

Mỗi IO chỉ có 2 trạng thái 0 và 1. Vì vậy, ta sẽ đưa vào từng bit.

Ví dụ X0-X7 => đưa vào thanh ghi D101. (dùng 1 byte trong khả năng chứa được 1 word = 2 byte của PLC). Y0-Y15 => đưa vào thanh ghi D108.

Cùng thử nghiệm nhé.

 

 

 

iNut PLC là gì?

Mỗi bo iNut PLC sẽ giúp bạn đồng bộ 8 thanh ghi D lên Internet thông qua cổng RS485 chuẩn modbus rtu. Các đặc tính kĩ thuật của module này như sau:

  • Thông số RS-485 Modbus RTU Master của iNut PLC: 
  • Các thanh ghi được đồng bộ: D101, D102, D103, D104, D105, D106, D107, D108. Thay đổi được. Đọc được 1 word hoặc 2 word hoặc floating point.
  • 8 thanh ghi từ PLC đồng bộ lên Internet / không giới hạn số lần gửi thay đổi giá trị thanh ghi từ Internet xuống PLC.
    • ​Baudrate: 19200
    • Databits: 8 
    • Stopbits: 1
    • No parity
    • Modbus RTU protocol
    • Modbus Maser (nghĩa là thiết bị PLC của các bạn sẽ phải làm Modbus Slave với Slave Address là1 - chỉnh được qua phần mềm)
    • Thời gian đồng bộ modbus rtu 50ms - chỉnh được.
  • Hỗ trợ lập trình bằng giao diện kéo thả.
  • Hỗ trợ webHMI
  • Hỗ trợ hosting miễn phí chạy webHMI
  • 1400+ module cho webHMI Node-red miễn phí. 3300+ module có phí. Giúp bạn giải quyết mọi bài toán kỹ thuật từ dễ đến khó và cực khó. 
    • Như bài toán lưu trữ CSDL để xem lại data.
    • Bài toán giám sát gửi email / gửi tin nhắn.
    • Bài toán phân tích dữ liệu thu thập (AI - Trí tuệ nhân tạo).
    • Bài toán điều khiển từ xa qua máy tính và điện thoại di động.
    • Bài toán cảnh báo.
    • ...
  • Tài liệu mở
  • Hướng dẫn sử dụng tiếng Việt / tiếng Anh
  • Cộng đồng hơn 1 triệu người sử dụng webHMI, dễ dàng tìm kiếm tài liệu tại stack overflow với từ khóa bạn cần tìm + "node-red" hoặc + "arduino.vn".
  • Không cần NAT PORT.
  • Có dịch vụ cho thuê server với độ bảo mật cao HTTPS, username / password.

iNut PLC ngoài tài liệu tại đây thì đều có thể sử dụng tài liệu của iNut Platform. Vì iNut PLC là một thiết bị thuộc hệ thống iNut Platform.

Nếu bạn cư có project mẫu về iNut PLC, vui lòng đọc bài này trước [iNut PLC]Hệ thống giám sát nước sinh hoạt bằng - Hướng dẫn giám sát PLC trên Internet

Block đọc 8 bit và block đọc 16 bit

Với giá trị D101 = 13 tương đương với 0b00001101 đã được bóc tách ra.

Với giá trị D108 = 60000, tương đương với 0b11101010 01100000

Vậy block nào ở node-red giúp chúng ta làm được điều trên?

Chính việc sử dụng hai khối lệnh màu đỏ với đầu vào là dữ liệu thanh ghi, chúng ta đã bóc tách được.

Các bạn có thể Import đoạn mã sau vào node-red để có thể có khả năng đọc 8 bit và đọc 16 bit từ thanh ghi.

[{"id": "792dad88.5b0384","type": "subflow","name": "Thanh ghi => 8 bit","info": "","in": [{"x": 50,"y": 30,"wires": [{"id": "fedd3b2.a95aec8"}]}],"out": [{"x": 607.0000019073486,"y": 94,"wires": [{"id": "fedd3b2.a95aec8","port": 0}]},{"x": 604.0000038146973,"y": 142,"wires": [{"id": "fedd3b2.a95aec8","port": 1}]},{"x": 609.0000038146973,"y": 190,"wires": [{"id": "fedd3b2.a95aec8","port": 2}]},{"x": 618.0000038146973,"y": 238,"wires": [{"id": "fedd3b2.a95aec8","port": 3}]},{"x": 635.0000038146973,"y": 290,"wires": [{"id": "fedd3b2.a95aec8","port": 4}]},{"x": 654.0000038146973,"y": 364,"wires": [{"id": "fedd3b2.a95aec8","port": 5}]},{"x": 587.0000057220459,"y": 390.00000381469727,"wires": [{"id": "fedd3b2.a95aec8","port": 6}]},{"x": 612.0000057220459,"y": 435.00000381469727,"wires": [{"id": "fedd3b2.a95aec8","port": 7}]}]},{"id": "fedd3b2.a95aec8","type": "function","z": "792dad88.5b0384","name": "Chuyển thành 8 bits","func": "const REGISTER_COUNT = 8\nvar msgs = []\nvar value = parseInt(msg.payload, 10)\nfor (var i = 0; i < REGISTER_COUNT; i++) {\nmsgs.push({\npayload: (value >> i) & 1\n});\n}\nreturn msgs;","outputs": 8,"noerr": 0,"x": 312.3888854980469,"y": 299.55555725097656,"wires": [[],[],[],[],[],[],[],[]],"inputLabels": ["Dữ liệu từ iNut nhé"],"outputLabels": [".0",".1",".2",".3",".4",".5",".6",".7"]},{"id": "21113f47.814fa","type": "subflow","name": "Thanh ghi => 16 bit","info": "","in": [{"x": 50,"y": 30,"wires": [{"id": "d748b130.c4b2d"}]}],"out": [{"x": 564.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 0}]},{"x": 619.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 1}]},{"x": 674.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 2}]},{"x": 729.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 3}]},{"x": 784.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 4}]},{"x": 839.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 5}]},{"x": 894.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 6}]},{"x": 949.0000009536743,"y": 50,"wires": [{"id": "d748b130.c4b2d","port": 7}]},{"x": 839.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 8}]},{"x": 891.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 9}]},{"x": 946.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 10}]},{"x": 1001.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 11}]},{"x": 1056.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 12}]},{"x": 1111.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 13}]},{"x": 1166.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 14}]},{"x": 1221.0000076293945,"y": 231,"wires": [{"id": "d748b130.c4b2d","port": 15}]}],"outputLabels": [".0",".1",".2",".3",".4",".5",".6",".7",".8",".9",".10",".11",".12",".13",".14",".15"]},{"id": "d748b130.c4b2d","type": "function","z": "21113f47.814fa","name": "Chuyển thành 16 bits","func": "const REGISTER_COUNT = 16\nvar msgs = []\nvar value = parseInt(msg.payload, 10)\nfor (var i = 0; i < REGISTER_COUNT; i++) {\nmsgs.push({\npayload: (value >> i) & 1\n});\n}\nreturn msgs;","outputs": 16,"noerr": 0,"x": 349,"y": 230,"wires": [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"inputLabels": ["Dữ liệu từ iNut nhé"],"outputLabels": [".0",".1",".2",".3",".4",".5",".6",".7",null,null,null,null,null,null,null,null]},{"id": "b4d90abf.aa8b18","type": "subflow:21113f47.814fa","z": "6c281c8f.cbebc4","x": 971.3888931274414,"y": 1026.7777862548828,"wires": [["5e5dbe0c.1fa7f"],["5c309d2a.c21894"],["22434536.3aecaa"],["ca9395ea.8ee738"],["7190ba4b.003234"],["a544de52.b9e2"],["2f30360f.63efba"],["d1e1cebb.8314d"],["5ca57c9c.e435f4"],["32b114ff.75314c"],["239d926e.421bae"],["b10f9e86.37c1f"],["533da6ba.56e9f8"],["8b5cc7cd.6c0bf8"],["ec94ca91.c27068"],["9b3dd18e.80937"]]},{"id": "e44b9894.26eb98","type": "subflow:792dad88.5b0384","z": "6c281c8f.cbebc4","x": 967.3888969421387,"y": 480.8888854980469,"wires": [["d399617d.e9842"],["4ac2685d.0ab698"],["f2773088.1c11e"],["8ebf47c1.6c2b18"],["86510fae.825dd"],["43d5b365.f0c3fc"],["bb8b7604.798f68"],["fed53ef3.893f5"]]}]

Nếu bạn chưa biết cách import? Xin vui lòng theo hướng dẫn ở [iNut PLC]Hệ thống giám sát nước sinh hoạt bằng - Hướng dẫn giám sát PLC trên Internet

Nếu bạn muốn chạy lại ví dụ này trên máy tính của bạn, vui lòng chạy đoạn lệnh sau ở Windows Commands Prompt

git clone -b inut-plc-example4 https://github.com/ngohuynhngockhanh/iNut-Node-RED-Kickstarter inut-plc-example4

cd inut-plc-example4

npm install

npm start

Chúc các bạn thành công!

lên
7 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Nói xin chào với mạch C.H.I.P Pro

Vừa rồi mình nhận được một board C.H.I.P Pro từ anh monsieurvechai. Hôm nay là chủ nhật nên mình quyết định lấy bé C.H.I.P Pro ra để thử nghiệm với board này. Chúc mọi người có những dự án sáng tạo và chuyên nghiệp với board này. Board này có thể sản xuất hàng loạt tự động như mấy con vi điều khiển để lắp vô mạch đó. Hôm nay mình sẽ hướng dẫn các bạn nạp hệ điều hành con này.

lên
9 thành viên đã đánh giá bài viết này hữu ích.

Code Arduino trên MÂY, bạn có muốn thử hay không?

Từ trước đến giờ, mỗi khi muốn lập trình một bé Arduino, bạn cần phải chuẩn bị driver cho Arduino (hiển nhiên buộc phải có, vì phải giao tiếp với thiết bị ngoại vi là mạch Arduino) và phần mềm lập trình Arduino IDE. Và khi bạn muốn chia sẻ code của mình cho bạn của mình thì cách đơn giản nhất là gửi file sketch cho họ, hoặc nếu cao cấp hơn là sử dụng github hoặc bitbucket (tất nhiên là phải include các thư viện bên thứ ba nếu có). Vậy vấn đề đặt ra trong ngày hôm nay là, liệu có cách nào để có thể chia sẻ sketch của mình với bạn bè và lớn hơn nữa là với cộng đồng Arduino trên thế giới (nói chung) và Việt Nam (nói riêng) hay không?

Và mình đã tìm ra câu trả lời, và không những thế, câu trả lời còn vượt ra ngoài sức mong đợi của chúng ta.

lên
18 thành viên đã đánh giá bài viết này hữu ích.