私は Python (FYI) の初心者で、minimalmodbus ライブラリ (Python + Mac) を使用して Gefran 800P プログラマー/コントローラーと通信しようとしています。USB - RS485 シリアル コンバータ ケーブル ( http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_USB_RS485_CABLES.pdf ) を使用して、Gefran デバイスと通信しています。デバイスの背面からのピン (15+17(Rx+Tx) & 16+18(Gnd+Gnd)) は、変換ケーブルのデータ +(A) およびデータ -(B) にそれぞれ接続されます (RS485-2wired繋がり)。このデバイスのスレーブ アドレスがわからず、マニュアル ( http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf ) のどこにもアドレスについて言及されていません。
私が試してみました:
- スレーブフォームのアドレスを 0 から 247 に変更すると、常に同じメッセージが表示されます。
- 異なるレジスタ アドレスをチェックして、関数コード (3&4) をいじり、プログラマー設定をいじって、コードとデバイスの両方のパラメーターが同じであることを確認しました。何も機能しません!多分私は何かが欠けています。あなたの助けを楽しみにしています。私はこの時点で1週間以上本当に立ち往生しています!
以下は私のコードで、実行すると、「ValueError: Modbus RTU 応答が短すぎます (最小長 4 バイト)。応答: '\x00'」というエラーが表示されます。
import minimalmodbus
import serial
import sys
import time
import sh
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = False
print "scanning for addresses..."
for i in range(1,247):
programmer = minimalmodbus.Instrument('/dev/tty.usbserial-FT0C9E5S', i, 'rtu')
print "address is", i
programmer.mode = minimalmodbus.MODE_RTU
programmer.serial.timeout = 8
programmer.handle_local_echo = False
# If RS-485 adapter has local echo enabled
programmer.serial.bytesize = 8
programmer.precalculate_read_size = True
programmer.serial.baudrate = 9600
programmer.serial.parity = minimalmodbus.serial.PARITY_NONE
programmer.debug = True
print "all parameters set... now reading"
print programmer
try:
setpoint = programmer.read_register(79,1,4)
print setpoint
print "This is the address", i
except sh.ErrorReturnCode_1:
print "no response"