HI MIkko,
I am working on updating the invocation counter in a 48-association (logical name: 0.0.43.1.3.255) using the Gurux GXDLMS library. While I am able to successfully update the invocation counter in the 16-association, I am encountering an error when trying to update the counter in the 48-association. The error message returned is: "Error during connection or operation: Connection is permanently rejected. No reason is given. Serial port closed." I am attempting to read the invocation counter from association 16 and update the invocation counter in association 48 with the same value, but the connection is being rejected during this operation. Could you please assist me in resolving this issue and provide guidance on how to successfully update the invocation counter in the 48-association?
here the code i wrote
from gurux_dlms.GXDLMSClient import GXDLMSClient
from gurux_dlms.enums import Security, InterfaceType
from gurux_serial import GXSerial
from gurux_dlms.secure.GXDLMSSecureClient import GXDLMSSecureClient
from gurux_dlms.enums import Security, InterfaceType
from gurux_dlms import GXDLMSReader
from gurux_dlms.GXSettings import GXSettings
from gurux_dlms.GXDLMSReader import GXDLMSReader
from gurux_dlms.objects import *
from datetime import datetime
from gurux_common.enums import TraceLevel
from gurux_dlms.GXCiphering import SecuritySuite
from gurux_dlms.enums.Standard import Standard
from gurux_dlms import ConnectionState, GXByteBuffer
import xml.etree.ElementTree as ET
import time
import logging
import shutil
import tkinter.filedialog as filedialog
import os, os.path
from serial.tools.list_ports import comports
from gurux_net import GXNet
from gurux_net.GXNet import NetworkType
import customtkinter as ctk
from CTkMessagebox import CTkMessagebox
import threading
import gurux_common
from gurux_common import TimeoutException
from tkinter import *
import customtkinter
import pandas as pd
from tabulate import tabulate
from threading import Timer
import gurux_dlms
from tkcalendar import DateEntry
from gurux_dlms import GXDateTime
from PIL import ImageTk, Image
from gurux_dlms import GXCiphering
# Initialize GXSerial connection
ser = GXSerial(port="COM3")
ser.__setBaudRate = 9600
ser.__setDataBits = 8
ser.__setStopBits = 1
ser.__setParity = 0
ser.open()
if ser.isOpen():
print("Serial port opened successfully")
# Initialize settings and secure client for association 16
settings = GXSettings()
client = GXDLMSSecureClient()
print("Initializing association 16...")
# Assign the client and media to settings
settings.client = client
settings.media = ser
settings.trace = TraceLevel.INFO
settings.outputFile = "output.xml"
# Client properties for association 16
client.useLogicalNameReferencing = True
client.clientAddress = 16
client.serverAddress = 1
client.forAuthentication = Authentication.NONE
client.password = None
client.interfaceType = InterfaceType.HDLC
try:
# Initialize GXDLMSReader for association 16
reader = GXDLMSReader(client, ser, TraceLevel.INFO, settings.invocationCounter)
reader.initializeConnection()
# Read invocation counter from association 16
invocation_counter_object = GXDLMSData("0.0.43.1.3.255")
invocation_counter_value = reader.read(invocation_counter_object, 2)
print("Invocation Counter from association 16:", invocation_counter_value)
# Disconnect from association 16
reader.close()
ser.close()
print("Disconnected from association 16.")
# Add a small delay before switching associations
import time
time.sleep(1)
# Open serial port for association 48
ser.open()
print("Serial port reopened for association 48.")
# Update settings for association 48
client.clientAddress = 48
client.forAuthentication = Authentication.HIGH_GMAC # Update based on your actual configuration
client.password = b"VVVVVVVVVVVVVVVV" # Replace with actual password for association 48
reader = GXDLMSReader(client, ser, TraceLevel.INFO, invocationCounter=invocation_counter_value)
reader.initializeConnection()
# Write the invocation counter to association 48
invocation_counter_object = GXDLMSData("0.0.43.1.3.255")
invocation_counter_object.value = invocation_counter_value
reader.write(invocation_counter_object)
print("Updated Invocation Counter in association 48:", invocation_counter_value)
except Exception as ex:
print("Error during connection or operation:", ex)
finally:
if ser.isOpen():
ser.close()
print("Serial port closed.")
Regards
Kavya
Hi, Check this line: client…
Hi,
Check this line:
client.forAuthentication = Authentication.HIGH_GMAC
BR,
Mikko