python hardware / mqtt / CoAP / modbus / freemodbus / rs485 / tcp / udp / http / https / SOME / DDS / ICMP
s
- 嵌入式協議環境準備
[openeuler@tc ~]$ pip install paho-mqtt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com [openeuler@tc ~]$ pip install aiocoap -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com [openeuler@tc ~]$ pip install modbus -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com [openeuler@tc ~]$ pip install pymodbus -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com [openeuler@tc ~]$ pip install pyserial -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
- 嵌入式學習路線
嵌入式學習路線可以分為以下幾個階段:
-
基礎理論階段:
- 計算機組成原理:理解計算機硬件的基本工作原理,包括CPU、存儲器、I/O設備等。
- 操作系統原理:熟悉進程管理、內存管理、文件系統等內容,特別是實時操作系統RTOS的理解。
- 數據結構與算法:這是所有編程技術的基礎,對于嵌入式開發也至關重要。
-
編程語言階段:
- C語言:嵌入式開發的主流語言,需要深入理解和掌握,包括指針、內存管理等高級用法。
- Python或C++:部分嵌入式應用可能需要Python進行上位機開發,或者C++進行更復雜的應用開發。
-
嵌入式Linux開發階段:
- Linux環境搭建與使用:熟練使用Linux命令行工具,了解shell腳本編寫。
- 嵌入式Linux編程:學習Linux下驅動開發、系統調用、進程間通信等技術。
- Bootloader和內核裁剪移植:理解Bootloader的作用和工作流程,學會對Linux內核進行定制和裁剪。
-
嵌入式硬件相關知識:
- 微控制器(MCU)/微處理器(MPU):學習ARM、MIPS等架構的MCU/MPU工作原理和外設接口。
- 電路設計與PCB制板:具備基本的電路知識,能看懂原理圖,理解硬件設計原理。
-
實戰項目階段:
- STM32等單片機開發:從簡單的GPIO控制到復雜的外設驅動開發,結合實際項目進行操作。
- 嵌入式Linux開發板實踐:在開發板上實現文件系統操作、設備驅動編寫、網絡編程等。
-
進階提升階段:
- 實時操作系統RTOS應用開發:如FreeRTOS、RT-Thread等的學習和實踐。
- 高級主題:物聯網、AIoT、邊緣計算等相關技術的學習與實踐。
-
持續跟進與擴展:
- 跟蹤最新的嵌入式軟硬件技術,例如RISC-V架構、嵌入式人工智能、5G通訊等前沿技術。
以上就是一個較為全面的嵌入式學習路線,每個階段都需要通過大量的實踐操作來鞏固所學知識。同時,由于嵌入式領域廣泛,可根據自己的興趣和職業規劃進一步細化學習路徑。
- ICMP(Internet Control Message Protocol) ping協議
from scapy.all import IP, ICMP, sr1
'''
1、pip install scapy 安裝包
2、在Python中,你可以使用第三方庫Scapy來構建和解析ICMP(Internet Control Message Protocol)消息。
3、Scapy是一個功能強大的網絡工具,可以用于創建、發送和接收各種網絡協議的數據包。
4、以下是一個簡單的Python示例,演示如何使用Scapy發送和接收ICMP消息:
5、示例中,我們使用Scapy創建了兩種不同類型的ICMP消息,一個普通的ICMP請求(不關聯ping),另一個是ICMP回顯請求(ping)。
6、然后,我們使用sr1函數發送這些請求并等待響應。最后,我們顯示接收到的ICMP響應或回顯響應的信息。
'''
# 構建 ICMP 請求數據包
target_ip = "www.example.com"
icmp_request = IP(dst=target_ip) / ICMP()
# 發送 ICMP 請求并等待響應
icmp_response = sr1(icmp_request, timeout=2, verbose=False)
# 處理響應
if icmp_response:
print("ICMP Response received from", target_ip)
icmp_response.show()
else:
print("No ICMP Response received")
# 構建 ICMP 回顯請求(ping)數據包
ping_request = IP(dst=target_ip) / ICMP(type=8, code=0) # ICMP Echo Request
# 發送 ICMP 回顯請求
ping_response = sr1(ping_request, timeout=2, verbose=False)
# 處理回顯響應
if ping_response:
print("Ping Response received from", target_ip)
ping_response.show()
else:
print("No Ping Response received")
- DDS(Data Distribution Service)實時系統中數據分發和通信的協議
- 發布者示例
from rticonnextdds_connector import Connector, ConnextDynamicData
'''
DDS(Data Distribution Service)是一種用于實時系統中數據分發和通信的協議。
DDS提供了一種高性能、松耦合、實時性強的消息傳遞機制。
在Python中,你可以使用第三方的DDS庫來實現DDS通信。
其中一種流行的DDS實現是RTI Connext DDS。
以下是一個簡單的示例,演示如何使用RTI Connext DDS的Python API進行發布和訂閱消息:
首先,確保你已經安裝了RTI Connext DDS,并按照相關的文檔設置好你的環境。
然后,你可以使用以下代碼示例:
'''
# 創建DDS連接
connector = Connector('MyPublisher::MyParticipantLibrary::MyParticipant', 'MyPublisher::MyPublisherProfile')
# 獲取輸出實體
output_entity = connector.getOutput('MyPublisher::MyWriter::MyWriterProfile')
# 創建DynamicData實例
output_data = ConnextDynamicData(output_entity.type)
# 準備發送的數據
data_values = {'x': 42, 'y': 3.14, 'message': 'Hello, DDS!'}
output_data.set_dictionary(data_values)
# 發布數據
output_entity.instance.set_values_from(output_data)
output_entity.write()
# 關閉連接
connector.close()
- 訂閱者示例
from rticonnextdds_connector import Connector, ConnextDynamicData
'''
這是一個簡化的示例。在實際應用中,你需要更多的錯誤處理和配置。
此外,確保配置文件(MyPublisher.xml和MySubscriber.xml)中的實體和配置與你的DDS實例匹配。
確保查閱RTI Connext DDS的文檔以獲取更詳細的信息和配置。
'''
# 創建DDS連接
connector = Connector('MySubscriber::MyParticipantLibrary::MyParticipant', 'MySubscriber::MySubscriberProfile')
# 獲取輸入實體
input_entity = connector.getInput('MySubscriber::MyReader::MyReaderProfile')
# 創建DynamicData實例
input_data = ConnextDynamicData(input_entity.type)
# 訂閱數據
input_entity.read()
# 獲取數據
for sample in input_entity.samples.valid_data_iter:
input_data.copy_from(sample.get_dictionary())
# 處理接收到的數據
received_values = input_data.get_dictionary()
print("Received Data:", received_values)
# 關閉連接
connector.close()
- SOME/IP (Service-Oriented Middleware for Embedded Systems over IP) 嵌入式中間件協議
import socket
import struct
import msgpack
'''
SOME/IP協議的Python實現通常需要使用第三方庫或模塊,而目前并沒有標準的Python庫專門用于SOME/IP。
然而,你可以使用一些支持UDP通信和消息序列化的庫來創建自己的SOME/IP通信實現。
以下是Python簡單示例,使用Socket和MessagePack庫模擬SOME/IP的部分功能,實際應用中可能需要更多的功能和錯誤處理。
此外,確保接收端服務器(在示例中是localhost:12345)能夠解析和處理SOME/IP消息。
'''
# 定義SOME/IP消息頭
def create_someip_header(service_id, method_id):
header = {
"message_id": 0, # 消息ID,通常在實際應用中需要唯一標識每個消息
"length": 0, # 消息長度,后續根據實際消息內容計算
"request_id": 1, # 請求ID,用于匹配請求和響應
"protocol_version": 1, # SOME/IP協議版本
"interface_version": 1, # 接口版本
"message_type": 0x01, # 請求消息類型
"return_code": 0, # 返回代碼,通常為0表示成功
"service_id": service_id, # 服務ID
"method_id": method_id, # 方法ID
}
return msgpack.packb(header)
# 發送SOME/IP消息
def send_someip_message(service_id, method_id, payload):
# 創建Socket連接
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
# 服務器地址和端口
server_address = ('localhost', 12345)
# 構造SOME/IP消息頭
header = create_someip_header(service_id, method_id)
# 計算消息長度
length = len(header) + len(payload)
struct.pack_into('!I', header, 4, length)
# 合并消息頭和有效載荷
message = header + payload
# 發送消息
s.sendto(message, server_address)
# 例子:發送一個簡單的SOME/IP消息
service_id = 0x1234
method_id = 0x5678
payload_data = {'param1': 42, 'param2': 'Hello, SOME/IP!'}
payload = msgpack.packb(payload_data)
send_someip_message(service_id, method_id, payload)
- mqtt 協議
輕量級消息傳輸協議,消息隊列遙測傳輸,發布和訂閱,適用于遠程通信和帶寬有限環境。IBM 1999年為連接油管遠程傳感器而設計?,F在為開放OASIS標準。
OASIS(結構化信息標準促進組織,Organization for the Advancement of Structured Information Standards)是一個推進電子商務標準的發展、融合與采納的非盈利性國際化組織。
import paho.mqtt.client as mqtt import time """ 創建了一個 MQTT 客戶端,連接到指定的 MQTT 代理服務器,并訂閱了一個主題("example_topic")。 然后,它進入一個循環,等待用戶輸入消息并將其發布到指定的主題。 同時,它也監聽來自訂閱主題的消息,并在收到消息時調用 on_message 函數來處理消息。 這里需要將 broker_address 更改為實際的 MQTT 代理服務器地址,并根據你的需求更改主題名稱和其他設置。此示例用于演示基本的 MQTT 消息發布和訂閱功能。 """ # MQTT 代理服務器的地址和端口 broker_address = "mqtt.eclipse.org" port = 1883 # 創建 MQTT 客戶端 client = mqtt.Client("Python_Client") # 連接到 MQTT 代理服務器 client.connect(broker_address, port) # 訂閱一個主題 def on_message(client, userdata, message): print(f"Received message '{message.payload}' on topic '{message.topic}'") client.on_message = on_message client.subscribe("example_topic") # 啟動 MQTT 客戶端的循環 client.loop_start() # 發布消息 while True: message = input("Enter a message to publish: ") client.publish("example_topic", message) time.sleep(1) # 程序結束時斷開連接 client.disconnect()
- coap 協議
輕量級受限應用web傳輸協議,專門為緊湊設備設計的web協議。使能夠映射http模型以簡化從物理網到web世界的集成。
1、coap在UDP之上,減少TCP連接開銷。
2、異步消息轉換:支持非確認和確認消息,前者不需應答,后者需要
3、資源發現:使設設備能夠自己宣告或發現網絡中的資源
4、四種請求類型:GET、POST、PUT、DELETE
- CoAP 協議和 HTTP 協議在設計目標、特性和應用場景等方面存在一些區別,以下是它們的主要區別:
file:///opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_coap_client.py
import logging import asyncio import aiocoap """ 安裝包:pip install aiocoap CoAP服務器提供一個資源 "hello",用于響應 GET 請求,并返回 "Hello, CoAP World!"。 CoAP(Constrained Application Protocol)是一種用于受限環境的輕量級應用層協議,通常用于物聯網(IoT)設備之間的通信。 CoAP客戶端構建一個 GET 請求,請求服務器上的資源。確保將服務器示例中的 coap://localhost/hello 替換為你的服務器地址和資源路徑。 CoAP是一種輕量級協議,適用于受限環境,適合IoT設備和嵌入式系統。 """ # 設置日志級別以查看詳細信息 logging.basicConfig(level=logging.INFO) async def coap_client(): protocol = await aiocoap.Context.create_client_context() # 構建CoAP請求 request = aiocoap.Message(code=aiocoap.GET) request.set_request_uri('coap://localhost/hello') try: response = await protocol.request(request).response print("Response: %s" % response.payload.decode('utf-8')) except Exception as e: print("Failed to fetch resource:") print(e) if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(coap_client())
file:///opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_coap_server.py
import logging import asyncio import aiocoap.resource as resource import aiocoap # 設置日志級別以查看詳細信息 logging.basicConfig(level=logging.INFO) # 定義一個CoAP資源 class HelloWorldResource(resource.Resource): def __init__(self): super(HelloWorldResource, self).__init__() async def render_get(self, request): return aiocoap.Message(payload=b"Hello, CoAP World!") # 創建CoAP服務器 root = resource.Site() root.add_resource(('hello',), HelloWorldResource()) # 運行服務器 def main(): asyncio.Task(aiocoap.Context.create_server_context(root)) asyncio.get_event_loop().run_forever() if __name__ == "__main__": main()
- modbus 協議 / freemodbus
file:///opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_mobbus_client.py
from pymodbus.client.sync import ModbusTcpClient """ Modbus是一種用于工業自動化和通信的通信協議,它被廣泛用于監控和控制設備。 以下是一個簡單的Python Modbus示例,使用pymodbus庫來與Modbus設備通信。 在這個示例中,我們將使用Modbus TCP通信,它是一種常見的Modbus通信方式。 Modbus客戶端連接到Modbus服務器,讀取保持寄存器中的數據,然后斷開連接。 Modbus服務器創建一個數據存儲塊,該塊包含保持寄存器中的數據,并在指定的IP地址和端口上啟動Modbus TCP服務器。 請注意,這只是一個非常簡單的示例,你可以根據你的具體需求和Modbus設備的特點來進行更復雜的通信和數據處理。 Modbus有多個變種和數據類型,你需要根據你的設備和協議規范進行適當的設置。 """ # Modbus服務器的IP地址和端口 server_ip = '127.0.0.1' server_port = 502 # 創建Modbus TCP客戶端 client = ModbusTcpClient(server_ip, port=server_port) # 連接到Modbus服務器 client.connect() # 讀取保持寄存器中的數據 result = client.read_holding_registers(0, 2, unit=1) # 從單元ID 1中讀取前兩個保持寄存器 if not result.isError(): print(f'Read data: {result.registers}') else: print(f'Error reading data: {result.message}') # 斷開連接 client.close()
file:///opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_mobbus_server.py
from pymodbus.server.sync import StartTcpServer from pymodbus.datastore import ModbusSequentialDataBlock from pymodbus.datastore import ModbusServerContext # 創建Modbus服務器上的數據存儲塊 store = ModbusServerContext(slaves=1, single=True) block = ModbusSequentialDataBlock(0, [0, 1, 2, 3], 0, [0]*4) store.register(block, 0) # 啟動Modbus TCP服務器 StartTcpServer(store, address=('127.0.0.1', 502))
- rs485 協議
import serial import time """ 安裝包:pip install pyserial Python中與RS-485通信的示例需要使用適當的硬件支持(例如RS-485適配器)以及串口通信庫,通常使用pyserial庫進行RS-485通信。 以下是一個簡單的Python RS-485示例,假設你已經配置好了RS-485硬件。 在這個示例中,我們使用pyserial庫配置了RS-485通信參數,包括串口設備路徑、波特率、校驗位、停止位、數據位和超時時間。 然后,我們發送了一個字符串數據并嘗試讀取從RS-485設備返回的響應數據。 確保將port設置為你的RS-485串口設備的路徑(通常是/dev/ttyUSB0或/dev/ttyS0等,具體取決于你的系統)。 此示例僅用于演示RS-485通信的基本原理,你可以根據你的應用需求進行更復雜的通信和數據處理。 """ # 配置串口參數 ser = serial.Serial( port='/dev/ttyUSB0', # 串口設備路徑,根據實際情況修改 baudrate=9600, # 波特率 parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 # 超時時間(秒) ) try: # 發送數據 ser.write(b'Hello, RS-485!') # 讀取數據 response = ser.readline().decode('utf-8').strip() print(f'Received: {response}') except Exception as e: print(f'Error: {e}') finally: # 關閉串口連接 ser.close()
- tcp 協議
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_tcp_client.py
import socket """ TCP/IP 服務器等待客戶端連接,接收來自客戶端的數據,發送響應數據,然后關閉客戶端連接。 TCP協議提供了可靠的、面向連接的通信,適用于需要穩定數據傳輸的應用程序。 確保在服務器和客戶端示例中的 server_address 中設置正確的IP地址和端口號,以便它們能夠相互通信。 這只是一個簡單的示例,你可以根據需要構建更復雜的 TCP/IP 應用程序 """ # 創建TCP客戶端套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 服務器地址和端口 server_address = ('127.0.0.1', 12345) # 連接到服務器 client_socket.connect(server_address) # 發送數據給服務器 message = "Hello, TCP Server!" client_socket.send(message.encode('utf-8')) # 接收服務器的響應 response = client_socket.recv(1024) print(f"Received response: {response.decode('utf-8')}") # 關閉客戶端連接 client_socket.close()
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_tcp_server.py
import socket # 創建TCP服務器套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 綁定服務器地址和端口 server_address = ('127.0.0.1', 12345) server_socket.bind(server_address) # 監聽客戶端連接 server_socket.listen(5) print("TCP Server is listening...") while True: # 等待客戶端連接 client_socket, client_address = server_socket.accept() print(f"Connected to client: {client_address}") # 接收客戶端發送的數據 data = client_socket.recv(1024) if data: print(f"Received data: {data.decode('utf-8')}") # 發送響應數據給客戶端 response = "Hello, TCP Client!" client_socket.send(response.encode('utf-8')) # 關閉客戶端連接 client_socket.close()
- udp 協議
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_udp_client.py
import socket """ Python UDP(User Datagram Protocol)示例,其中一個程序作為UDP服務器接收消息,另一個程序作為UDP客戶端發送消息。 UDP是一種面向無連接的協議,通常用于實現簡單的消息傳遞。 UDP是一種無連接協議,不提供可靠的數據傳輸,也不保證消息的順序。 因此,在實際應用中,你可能需要添加錯誤檢查和恢復機制來處理丟失的消息或消息亂序的情況,具體取決于你的需求。 """ # 創建UDP套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 服務器地址和端口 server_address = ('localhost', 12345) while True: message = input("Enter a message to send to the server: ") if not message: break # 發送消息到服務器 client_socket.sendto(message.encode(), server_address) # 關閉套接字 client_socket.close()
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_udp_server.py
import socket # 創建UDP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 綁定服務器地址和端口 server_address = ('localhost', 12345) server_socket.bind(server_address) print("UDP Server is listening...") while True: # 接收來自客戶端的數據 data, client_address = server_socket.recvfrom(1024) print(f"Received message: {data.decode()} from {client_address}") # 關閉套接字 server_socket.close()
- http 協議
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_http_client.py
import requests """ 在Python中,你可以使用內置的HTTP庫 http.server 來創建一個簡單的HTTP服務器,或使用第三方庫 requests 來創建HTTP客戶端。 在這個示例中,我們使用第三方庫 requests 發起一個HTTP GET請求,然后檢查響應的狀態碼和解析響應數據。 此示例中,我們使用一個公共的 JSONPlaceholder API 作為示例,你可以根據自己的需求修改URL。 """ # 發起HTTP GET請求 url = "https://jsonplaceholder.typicode.com/posts/1" response = requests.get(url) # 檢查響應狀態碼 if response.status_code == 200: # 解析響應數據 data = response.json() print("Response data:") print(data) else: print(f"Failed to retrieve data. Status code: {response.status_code}")
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_http_server.py
# 導入HTTP服務器模塊 import http.server import socketserver # 指定端口號 port = 8000 # 創建HTTP服務器 with socketserver.TCPServer(("", port), http.server.SimpleHTTPRequestHandler) as httpd: print(f"HTTP server is running on port {port}") httpd.serve_forever()
- https 協議
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_https_client.py
import requests """ 在Python中創建一個HTTPS服務器和使用HTTPS客戶端,你需要使用SSL/TLS協議來加密通信。分別使用內置庫和第三方庫requests 我們創建一個HTTPS服務器并配置SSL證書和密鑰文件(server.pem)。你需要自己生成或獲取有效的SSL證書和密鑰文件。 在HTTPS客戶端示例中,我們使用 requests 庫發送一個HTTPS GET請求,同時提供了服務器的SSL證書文件(server.pem)來驗證服務器的身份。 請確保將示例URL替換為你要訪問的實際HTTPS網站。 這只是一個簡單的HTTPS服務器和HTTPS客戶端示例。 要在生產環境中使用HTTPS,你需要獲取有效的SSL證書,通常從信任的證書頒發機構(CA)購買或申請。 不要在生產環境中使用自簽名證書(像上面示例中的server.pem),因為瀏覽器和應用程序通常不會信任它們。 """ # 發起HTTPS GET請求 url = "https://example.com" # 請將示例URL替換為實際的HTTPS網站 response = requests.get(url, verify="server.pem") # 檢查響應狀態碼 if response.status_code == 200: # 處理響應數據 data = response.text print("Response data:") print(data) else: print(f"Failed to retrieve data. Status code: {response.status_code}")
/opt/lindows/vscode/vscodeProject/lindows/python/hardware/f_https_server.py
import http.server import socketserver import ssl # 指定端口號 port = 8443 # 創建HTTP服務器 with socketserver.TCPServer(("", port), http.server.SimpleHTTPRequestHandler) as httpd: # 配置SSL證書和密鑰 httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True) print(f"HTTPS server is running on port {port}") httpd.serve_forever()
- 韋根接口/門禁系統
韋根接口(Wiegand Interface)是一種常用于門禁系統中的通信接口,主要用于傳輸身份驗證數據,如門禁卡或讀卡器的信息。它是由韋根公司(Wiegand)在1980年代初開發的一種技術。
韋根接口的主要特點是簡單和可靠。它使用兩根線(數據線和地線)來傳輸數據,每根線上傳輸的信號是單向的。數據線可以傳輸0和1的信號,其中一根線用于傳輸0,另一根線用于傳輸1。這種接口能夠傳輸較長的數據序列,通常用于門禁卡號等信息的傳輸。
韋根接口廣泛應用于各種門禁系統、電子門鎖和身份驗證設備中。由于其簡單和可靠的特點,它成為了門禁系統領域的一種標準接口。
在Python中,要實現與韋根接口的通信,通常需要使用特定的硬件,例如韋根讀卡器,以及相應的庫來讀取數據。以下是一個簡單的Python示例,展示了如何使用wiegand庫來讀取韋根接口的數據。請注意,這需要相應的硬件支持。
首先,你需要安裝wiegand庫,這可以通過pip完成:
|
|
pip install wiegand |
然后,你可以編寫一個簡單的Python腳本來讀取韋根數據:
|
|
from wiegand import Wiegand |
|
|
# 創建Wiegand對象實例 |
|
|
w = Wiegand() |
|
|
# 定義一個函數來處理讀取到的數據 |
|
|
def data_received(data): |
|
|
print(f"Data received: {data}") |
|
|
# 綁定data_received函數到data_event事件 |
|
|
w.data_event += data_received |
|
|
# 啟動Wiegand監聽 |
|
|
w.start() |
|
|
# 持續運行,直到你決定停止 |
|
|
try: |
|
|
while True: |
|
|
pass |
|
|
except KeyboardInterrupt: |
|
|
print("Stopping Wiegand reader...") |
|
|
# 停止Wiegand監聽 |
|
|
w.stop() |
這個腳本創建了一個Wiegand對象,并將其連接到data_event事件。每當韋根讀卡器讀取到數據時,data_received函數就會被調用,并打印出接收到的數據。腳本會一直運行,直到你手動停止它。
請注意,這個示例假設你已經正確配置了硬件,并且wiegand庫支持你的系統。不同的韋根讀卡器和系統可能需要不同的配置和驅動程序。因此,你可能需要根據你的具體硬件和系統環境來調整這個示例。
- PLC 編程相關 / 電氣工程師

以下是一些常見的 PLC 品牌:
1. 西門子(Siemens):在工業自動化領域具有廣泛的應用和良好的口碑。
2. 三菱(Mitsubishi):產品性能穩定,性價比較高。
3. 歐姆龍(Omron):提供多種類型的 PLC 產品。
4. 施耐德(Schneider):具有豐富的產品線和強大的技術支持。
5. ABB:在電力和工業自動化領域有一定的市場份額。
6. 臺達(Delta):國內知名品牌,產品涵蓋多個領域。
7. 匯川(Inovance):近年來發展迅速,在一些領域得到廣泛應用。
8. 信捷(Xinje):提供多種規格和類型的 PLC 產品。
這些品牌在市場上都有一定的知名度和用戶基礎,你可以根據項目的具體需求、預算和技術要求來選擇適合的品牌。
以下是一些適合初學者學習 PLC 的平臺或網站:
1. 西門子官方網站:提供豐富的產品信息、技術文檔和教程。
2. 工控網:包含 PLC 相關的技術文章、案例分享和論壇交流。
3. 電子發燒友論壇:有大量的 PLC 學習資源和交流版塊。
4. 技成培訓網:專業的工控技術學習平臺,提供 PLC 課程和資料。
5. 自動化之家:涵蓋各種自動化技術,包括 PLC 的學習資源。
6. PLC 愛好者論壇:聚集了眾多 PLC 愛好者,可進行交流和學習。
7. 工控人家園:提供工控技術的交流和學習平臺。
8. 中華工控網:包含工控行業的新聞、技術文章和產品信息。
通過這些平臺或網站,你可以獲取到豐富的學習資源,與其他學習者交流經驗,加快自己的學習進度。
初學者學習 PLC 通常需要具備以下基礎知識:
1. 電氣控制基礎:了解電路原理、繼電器等基礎電氣元件的工作原理。
2. 計算機基礎:熟悉計算機操作和基本概念。
3. 數學基礎:具備一定的邏輯思維和數學運算能力。
4. 電路知識:如直流電、交流電等。
5. 自動化概念:了解自動化系統的基本組成和工作原理。
6. 編程基礎:雖然 PLC 編程語言相對簡單,但有編程基礎會更容易上手。
7. 物理基礎:對物理概念有一定的了解。
8. 電子元件知識:例如傳感器、接觸器等。
9. 系統集成概念:理解各個組件如何協同工作。
具備這些基礎知識將有助于更好地理解和掌握 PLC 編程技術。同時,學習者還需要具備以下素質:
10. 學習興趣和動力。
11. 耐心和細心,注重細節。
12. 良好的問題解決能力。
13. 實踐動手能力,通過實際操作加深理解。
14. 持續學習的態度,跟上技術的發展。
end

浙公網安備 33010602011771號