功能說明
本文將以Python代碼為例,講解如何通過Python代碼調用博靈語音通知終端A4實現聲光語音告警。
本代碼實現Python觸發Modbus寫多寄存器和寫單寄存器實現調用通知終端模板播報功能(通知終端內置TTS語音合成技術,本案例不講解如何文本轉語音)。
代碼實現
本文使用環境
- python 3.13
- pymodbus v3.9.2
在報警燈后臺開啟Modbus TCP服務開關,可以自定義端口
創建模版指令,播報模式支單次、周期、循環播報
寫單寄存器
執行以下腳本,即可向報警燈發送寫單寄存器
from pymodbus.client import ModbusTcpClient
from pymodbus.exceptions import ModbusException
from pymodbus.pdu import ExceptionResponsedef write_single_register():# 創建Modbus TCP客戶端client = ModbusTcpClient("192.168.0.88", port=502)try:# 連接到Modbus服務器if not client.connect():print("無法連接到Modbus服務器")return# 地址addr = 99# 值val = 0x000A# 寫入單個寄存器# 參數: 寄存器地址, 值, 從站IDresponse = client.write_register(address=addr, value=val, slave=1)# 檢查響應if isinstance(response, ExceptionResponse):print(f"Modbus異常: {response}")elif response.isError():print(f"Modbus錯誤: {response}")else:print(f"成功寫入寄存器{addr},值: {val}")except ModbusException as e:print(f"Modbus錯誤: {e}")finally:# 關閉連接client.close()if __name__ == "__main__":write_single_register()
寫多寄存器
執行以下腳本,即可向報警燈發送寫多寄存器
from pymodbus.client import ModbusTcpClient
from pymodbus.exceptions import ModbusException
from pymodbus.pdu import ExceptionResponsedef write_multiple_registers():# 創建Modbus TCP客戶端client = ModbusTcpClient("192.168.0.88", port=502)try:# 連接到Modbus服務器if not client.connect():print("無法連接到Modbus服務器")return# 地址addr = 100# 準備要寫入的值列表(使用整數而不是字符串)values = [0x000F, # 150x008A, # 1380x2BE2, # 112340x0000, # 00x0000, # 00x0000, # 00x0000, # 00x0000, # 00x0000, # 00x0000, # 00x0001, # 10x0000, # 00x0301, # 7690x0000, # 00x0000, # 00x00E6, # 2300xACA2, # 441940x00E8, # 2320xBF8E, # 490380x00E4, # 2280xBDBF, # 485750x00E7, # 2310x94A8, # 38056]# 寫入多個寄存器# 參數: 起始地址, 值列表, 從站IDresponse = client.write_registers(address=addr, values=values, slave=1)# 檢查響應if isinstance(response, ExceptionResponse):print(f"Modbus異常: {response}")elif response.isError():print(f"Modbus錯誤: {response}")else:print(f"成功寫入寄存器{addr}-{addr+len(values)-1},值: {values}")except ModbusException as e:print(f"Modbus錯誤: {e}")except Exception as e:print(f"其他錯誤: {e}")finally:# 關閉連接client.close()if __name__ == "__main__":write_multiple_registers()