Elimde ASDA-A2 servo sürücü var ve RS-232 üzerinden encoder okuma işlemi yapmak istiyorum. Forumdaki dökümanları inceleyerek CN3 konnektörüne FireWire kablo ile RS232 üzerinden haberleşebilmek için gerekli olan bağlantıları yaptım. (1- GND, 2-TX, 4-RX olacak şekilde). Karşılığındaki uçları FTDI (FT232-RL çipine sahip USB-RS232 çevirici) kartına bağlayarak USB üzerinden PC'den encoder okuma işlemini denedim, fakat başaramadım. Sürekli checksum hatası alıyorum.
Parametre ayarlarım şu şekildedir:
P3-01 : 5 = 115200 bps
P3-02 : 6 = 8,N,2 Modbus, RTU
P3-03 : 1
P3-04 : 0
P3-05 : 0
P3-06 : 0
Okuma yaptığım adres : 0x520 = P5-16 parametresi
Deneme için kullandığım python kodu:
Kod: Tümünü seç
import minimalmodbus
import serial
import time
import sys
servo_x_addr = int("0x71",0)
instrument = minimalmodbus.Instrument('COM7', servo_x_addr)
instrument.serial.baudrate = 115200
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.stopbits = 2
instrument.serial.timeout = 0.2
instrument.mode = minimalmodbus.MODE_RTU
while True:
encoder_read = instrument.read_registers(int("0x520", 0), 2) # Registernumber, number of decimals
encoder_val = encoder_read[1] #HIGH BIT
encoder_val <<= 16
encoder_val |= encoder_read[0] #LOW BIT
print "Encoder: ", encoder_val
time.sleep(2)
Kod: Tümünü seç
Traceback (most recent call last):
File "ppdeneme.py", line 18, in <module>
encoder_read = instrument.read_registers(int("0x520", 0), 2) # Registernumber, number of decimals
File "C:\Python27\lib\site-packages\minimalmodbus.py", line 498, in read_registers
numberOfRegisters=numberOfRegisters, payloadformat='registers')
File "C:\Python27\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand
payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
File "C:\Python27\lib\site-packages\minimalmodbus.py", line 798, in _performCommand
payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
File "C:\Python27\lib\site-packages\minimalmodbus.py", line 1075, in _extractPayload
raise ValueError(text)
ValueError: Checksum error in rtu mode: '\x00\x00' instead of '\x1b\x00' . The response is: '\x00\x00\x00\x00\x00\x00\x00\x00\x00' (plain response: '\x00\x00\x00\x00\x00\x00\x00\x00\x00')