はじめに
こちらの記事の内容と比較すると、今回やってみるのはNode-RED使用せずにPythonから直接Modbusを叩いて通信させるという方法です。
CoolMaster本体側の設定でModbusが有効化されていないと動作しません。初めてCoolMasterのModbusに触るということであれば上記記事からやってみるのがいいかもしれません。前回の記事の内容で、レジスタアドレスが18ということは分かっているので、こちらを流用します。
流れとしては、Visual Studio Codeを立ち上げて下記のプログラムを実行するのみです。
ソースコード:modbus_control.py
from pymodbus.client import ModbusTcpClient
# CoolMasterのModbus設定
MODBUS_IP = "192.168.1.100" # Node-REDの設定に合わせる
MODBUS_PORT = 502
UNIT_ID = 1 # Node-REDでは"1"
SETPOINT_REGISTER = 18 # セットポイントのレジスタアドレス
# Modbusクライアントの作成
client = ModbusTcpClient(MODBUS_IP, port=MODBUS_PORT)
def read_setpoint():
"""セットポイントを読み取る"""
##response = client.read_holding_registers(SETPOINT_REGISTER, 1, unit=UNIT_ID)
response = client.read_holding_registers(address=SETPOINT_REGISTER, count=1, slave=UNIT_ID)
if response.isError():
print("❌ 読み取りエラー:", response)
else:
value = response.registers[0] / 10 # Node-REDと同じ処理
print(f"📋 セットポイント: {value}°C")
def write_setpoint(value):
"""セットポイントを書き換える"""
value_scaled = int(value * 10) # Modbusのスケールに合わせる
response = client.write_register(address=SETPOINT_REGISTER, value=value_scaled, slave=UNIT_ID)
if response.isError():
print("❌ 書き込みエラー:", response)
else:
print(f"✅ セットポイントを {value}°C に変更しました")
# 通信開始
if client.connect():
print("🔗 Modbusに接続しました")
# 現在のセットポイントを取得
read_setpoint()
# セットポイントを変更(例: 25.0℃)
write_setpoint(26.0)
# 変更後のセットポイントを再取得
read_setpoint()
client.close()
else:
print("❌ Modbusに接続できませんでした")
実行結果

「現在のセットポイントを取得→プログラム内で指定している温度に変更」という流れで動作します。

接続できなかった場合は、エラーが出力されます。
まとめ
実はこのソースコード、Chat-GPTに「前回Node-REDで組んだModbus通信の内容をPythonで動作するように置き換えて」と依頼してみたら用意してくれた内容だったりします。こちらの内容を人力で組み上げるとしたら、どれだけ時間が掛かっていたことやら。1週間経っても終わらず、頭を抱えていたままだったかもしれません。
Node-REDでModbus通信させた1つの完成形をベースにChatGPTに依頼したら本当に組み上げてしまったので、AIの進化には日々驚かされるばかりです。1から全部お願いしてしまうのではなく、用途を汲み取りやすくした状態で依頼をして、「答え合わせをしながら動作確認をする」というのがAIを活用しながら作業を進めるコツなのかもしれませんね。