def test_serial_client_send(self): """ Test the serial client send method""" client = ModbusSerialClient() self.assertRaises(ConnectionException, lambda: client.send(None)) client.socket = MockSocket() self.assertEqual(0, client.send(None)) self.assertEqual(4, client.send('1234'))
def test_serial_client_receive(self): """ Test the serial client receive method""" client = ModbusSerialClient() self.assertRaises(ConnectionException, lambda: client.receive(1024)) client.socket = MockSocket() self.assertEqual('', client.receive(0)) self.assertEqual('\x00'*4, client.receive(4))
def test_serial_client_connect(self): """ Test the serial client connection method""" with patch.object(serial, 'Serial') as mock_method: mock_method.return_value = object() client = ModbusSerialClient() self.assertTrue(client.connect()) with patch.object(serial, 'Serial') as mock_method: mock_method.side_effect = serial.SerialException() client = ModbusSerialClient() self.assertFalse(client.connect())
def test_basic_sync_serial_client(self): """ Test the basic methods for the serial sync client""" # receive/send client = ModbusSerialClient() client.socket = MockSocket() self.assertEqual(0, client.send(None)) self.assertEqual(1, client.send('\x00')) self.assertEqual('\x00', client.receive(1)) # connect/disconnect self.assertTrue(client.connect()) client.close() # already closed socket client.socket = False client.close() self.assertEqual('ascii baud[19200]', str(client))
import time import pymodbus3 import serial import traceback from pymodbus3.pdu import ModbusRequest from pymodbus3.client.sync import ModbusSerialClient as ModbusClient from pymodbus3.transaction import ModbusRtuFramer from serial.tools.list_ports import comports import sys READ_COILS_PDU_Addr_Test_1 = 0x1000 SLAVE_UNIT = 0x1 client = ModbusClient("rtu", port="COM9", stopbits=2, bytesize=8, baudrate=9600, timeout=10) connected = client.connect() if connected: print("Tristar Morningstar 1 connected!") else: print("Something went wrong.") exit(1) start = time.time() rr = client.read_holding_registers(0xE000, 1, unit=0) assert (rr.function_code < 0x80) print(rr) #data = client.read_coils(READ_COILS_PDU_Addr_Test_1, 1) stop = time.time()
from pymodbus3.client.sync import ModbusTcpClient from pymodbus3.client.sync import ModbusSerialClient client = ModbusSerialClient(method='rtu',port='/dev/ttyUSB0',parity='N',stopbits=1,bytesize=8,baudrate=9600,timeout=3) result = client.read_holding_registers(1,2,unit=1) client.close()
class Modbus(): # Init modbus device def __init__(self): self._client = ModbusClient(method='rtu', port = PORT, bytesize = BITS, parity = PARITY, baudrate = BAUDRATE, timeout = 1) if self._client.connect() == False: logger_modbus.error(bcolors.FAIL + "*******************************" + bcolors.ENDC) logger_modbus.error(bcolors.FAIL + "*** ERROR, DEVICE NOT FOUND ***" + bcolors.ENDC) logger_modbus.error(bcolors.FAIL + "*******************************" + bcolors.ENDC) time.sleep(1) return # Delete modbus device def __del__(self): logger_modbus.info("Delete modbus device") self.close_connection() return # Toggle relay def toggle_relay(self, channel, address): try: ret = self._client.write_register(channel, 0x0300, unit=address) except: logger_modbus.error(bcolors.FAIL + "Error, slave %s not responde!" + bcolors.ENDC, address) return -1 logger_modbus.info("Toggle relay %s" %ret) return ret # Read status relay def read_status_relay(self, channel, address): try: ret = self._client.read_holding_registers(channel, unit=address) except: logger_modbus.error(bcolors.FAIL + "Error, slave %s not responde!" + bcolors.ENDC, address) return -1 logger_modbus.info("Status relay channel %d: %s" % (channel, int(ret.registers[0]))) return int(ret.registers[0]) # Close device def close_connection(self): logger_modbus.info("Close connection!") self._client.close() return 0
DCCurrentPageNumber = 4 DCCurrentRegisterOffset = 201 STOP = 35700 #This are control keys STOPC = 29835 #This are complements of control keys, must be write together with the control key AUTO = 35701 AUTOC = 29834 MANUAL = 35702 MANUALC = 29833 AUTOM = 35704 AUTOMC = 29831 START = 35705 STARTC = 29830 RESETAL = 35734 print("Connecting to DSE") client = ModbusClient(method = "rtu", port="/dev/ttyUSB2", stopbits = 1, bytesize = 8, parity = 'E' baudrate = 19200) client.connect() time.sleep(0.1) def sync_client_read(registerNumber): try: result = client.read_holding_registers(registerNumber,1, unit=UnitNumber) return result.registers except: print("Connection Error Handled") output = False return output def read_register(PageNumber, RegisterOffset, Scale, UnitNumber): register = 256 * PageNumber + RegisterOffset read = sync_client_read(register)
from pymodbus3.client.sync import ModbusSerialClient client = ModbusSerialClient('/dev/ttyACM0') client.write_coil(1, True) result = client.read_coils(1,1) print (result.bits[0]) client.close()