2

私は 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 ) のどこにもアドレスについて言及されていません。

私が試してみました:

  1. スレーブフォームのアドレスを 0 から 247 に変更すると、常に同じメッセージが表示されます。
  2. 異なるレジスタ アドレスをチェックして、関数コード (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"
4

2 に答える 2