sp64
sp64

Reputation: 1

MinimalModbus and Circutor

I own a power analyzer, Circutor CVM-1D, and I'm trying to read data with Arduino Yun via MinimalModbus. The code in Python is:

import minimalmodbus
CVM_1D = minimalmodbus.Instrument('/dev/ttyUSB0',1)
CVM_1D.mode = minimalmodbus.MODE_RTU
CVM_1D.serial.baudrate = 9600        # Baud
CVM_1D.serial.bytesize = 8
CVM_1D.serial.parity   = minimalmodbus.serial.PARITY_NONE
CVM_1D.serial.stopbits = 1
CVM_1D.serial.timeout  = 1            # seconds
CVM_1D.close_port_after_each_call = True
CVM_1D.clear_buffers_before_each_transaction = True
print(CVM_1D)
value = CVM_1D.read_float(0,4,2)                                                          
print 'Volt:', value

When I run the code I get this error message:

> root@ArduinoYun:/Python/scripts# python an_rete.py
> minimalmodbus.Instrument\<id=0x76f6e648, address=1, mode=rtu, close_port_after_each_call=True, precalculate_read_size=True, debug=False, serial=Serial\<id=0x76ec2a50, open=True\>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)\>
> Traceback (most recent call last):
> File "an_rete.py", line 32, in \<module\>
> value = CVM_1D.read_float(0,4,2)
> File "/usr/lib/python2.7/site-packages/minimalmodbus.py", line 392, in read_float return self.\_genericCommand(functioncode, registeraddress,         numberOfRegisters=numberOfRegisters, payloadformat='float')
> File "/usr/lib/python2.7/site-packages/minimalmodbus.py", line 697, in \_genericCommand
> payloadFromSlave = self.\_performCommand(functioncode, payloadToSlave)
> File "/usr/lib/python2.7/site-packages/minimalmodbus.py", line 795, in \_performCommand
> response = self.\_communicate(request, number_of_bytes_to_read)
> File "/usr/lib/python2.7/site-packages/minimalmodbus.py", line 857, in \_communicate
> self.serial.open()
> File "/usr/lib/python2.7/site-packages/serial/serialposix.py", line 261, in open
> raise SerialException("Port is already open.")
> serial.serialutil.SerialException: Port is already open.

I tried all MinimalModbus read functions without success. Can someone help me?

Upvotes: 0

Views: 114

Answers (1)

sp64
sp64

Reputation: 1

This code works:

import minimalmodbus

import serial

minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True

CVM_1D = minimalmodbus.Instrument('/dev/ttyUSB0',1)

CVM_1D.mode = minimalmodbus.MODE_RTU CVM_1D.serial.baudrate = 19200   
CVM_1D.serial.bytesize = 8 CVM_1D.serial.parity   =
minimalmodbus.serial.PARITY_NONE CVM_1D.serial.stopbits = 1
CVM_1D.serial.timeout  = 1   

CVM_1D.close_port_after_each_call = True
CVM_1D.clear_buffers_before_each_transaction = True

value = CVM_1D.read_long(4,functioncode=4)

Upvotes: 0

Related Questions