Giter VIP home page Giter VIP logo

pydnp3's Introduction

pydnp3

Python bindings for the opendnp3 library, an open source implementation of the DNP3 protocol stack written in C++14.

Note: This is a work in progress. See Issues for things we know about and feel free to add your own.

Supported Platforms: Linux, MacOS

Dependencies

To build the library from source, you must have:

This repository includes two repositories as submodules (under deps/):

Build & Install

At the moment, this library must be built from source:

    $ clone --recursive http://github.com/Kisensum/pydnp3
    $ cd pydnp3
    $ python setup.py install

Documentation

pydnp3 is a thin wrapper around most all of the opendnp3 classes. Documentation for the opendnp3 classes is available at automatak.

Use python's help to discover the available wrapper classes and functions. For example,

> import pydnp3
> help (pydnp3.opendnp3)
Help on module pydnp3.opendnp3 in pydnp3:

NAME
    pydnp3.opendnp3 - Bindings for opendnp3 namespace

FILE
    (built-in)

CLASSES
    pybind11_builtins.pybind11_object(__builtin__.object)
        AnalogCommandEvent
        AnalogInfo
            AnalogSpec
...

pydnp3's People

Contributors

anhnguyen-cpi avatar bbarcklay avatar jmgnc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pydnp3's Issues

'pybind11::cast_error' on DirectOperate command

I'm trying to use pydnp3 in one project and when I tried to send DirectOperate commands from the master I faced this issue: terminate called after throwing an instance of 'pybind11::cast_error' what(): return_value_policy = copy, but type is non-copyable! (#define PYBIND11_DETAILED_ERROR_MESSAGES or compile in debug mode for details).
Then I tested the example master_cmd.py which sends DirectOperate commands but got the same error. Is there anyone facing the same issue?

Here is my python and g++ version:
Python 3.10.12
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

Setting up Multiple Outstations

I have used the automatak C++ code base to run DNP3 system with multiple outstations on a single TCP server.

I thought of trying it out using Python.
I am getting the following error
libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Tried to call pure virtual function "IChannelListener::OnStateChange"

I tried using the example outstation and it worked for a single outstation.

This is my code for multiple outstations.

import sys

from pydnp3 import opendnp3, openpal, asiopal, asiodnp3


LOG_LEVELS = opendnp3.levels.NORMAL | opendnp3.levels.ALL_COMMS
LOCAL_IP = "0.0.0.0"
PORT = 20000
REMOTE_ADDR = 1

stdout_stream = logging.StreamHandler(sys.stdout)
stdout_stream.setFormatter(logging.Formatter('%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s'))

_log = logging.getLogger(__name__)
_log.addHandler(stdout_stream)
_log.setLevel(logging.DEBUG)


class OutstationApplication(opendnp3.IOutstationApplication):
    """
        Interface for all outstation application callback info except for control requests.
    """

    def __init__(self):
        super(OutstationApplication, self).__init__()
        self.link_status = None

    def OnStateChange(self, value):
        """
            Called when a the reset/unreset status of the link layer changes.
        """
        self.link_status = value


class AppChannelListener(asiodnp3.IChannelListener):
    """
        Override IChannelListener in this manner to implement application-specific channel behavior.
    """

    def __init__(self):
        super(AppChannelListener, self).__init__()

    def OnStateChange(self, state):
        _log.debug('In AppChannelListener.OnStateChange: state={}'.format(state))


class ChannelListener(asiodnp3.IChannelListener):
    """
        Callback interface for receiving information about a running channel.
    """

    def __init__(self):
        super(ChannelListener, self).__init__()
        self.state = None

    def OnStateChange(self, state):
        """
            State change notification.
        """
        _log.debug(
            'In AppChannelListener.OnStateChange: state={}'.format(state))
        self.state = state


def setup_tcp_server(manager):
    _log.debug('Creating the DNP3 channel, a TCP server.')

    channel = manager.AddTCPServer(
        "server",
        LOG_LEVELS,
        asiopal.ChannelRetry().Default(),
        LOCAL_IP,
        PORT,
        ChannelListener())

    return channel


def configure_stack_app(tag_data):
    """Set up the OpenDNP3 configuration."""
    if tag_data['application'] == 'sewer':
        return configure_sewer_stack(tag_data)
    return None


def configure_sewer_stack(tag_data):
    stack_config = asiodnp3.OutstationStackConfig(
        opendnp3.DatabaseSizes(3, 0, 8, 1, 0, 0, 0, 0))
    stack_config.outstation.eventBufferConfig = opendnp3.EventBufferConfig(
        10, 0, 10, 10, 0, 0, 0, 0)
    stack_config.outstation.params.allowUnsolicited = True
    stack_config.link.LocalAddr = tag_data['localaddr']
    stack_config.link.RemoteAddr = REMOTE_ADDR
    stack_config.link.KeepAliveTimeout = openpal.TimeDuration().Max()

    # Configure database config
    configure_sewer_dbconfig(stack_config.dbConfig)

    return stack_config


def configure_sewer_dbconfig(db_config):
    # Swipe
    db_config.binary[0].clazz = opendnp3.PointClass.Class1
    db_config.binary[0].svariation = opendnp3.StaticBinaryVariation.Group1Var2
    db_config.binary[0].evariation = opendnp3.EventBinaryVariation.Group2Var2

    # Bottom Switch State
    db_config.binary[1].clazz = opendnp3.PointClass.Class1
    db_config.binary[1].svariation = opendnp3.StaticBinaryVariation.Group1Var2
    db_config.binary[1].evariation = opendnp3.EventBinaryVariation.Group2Var2

    # Top Switch State
    db_config.binary[2].clazz = opendnp3.PointClass.Class1
    db_config.binary[2].svariation = opendnp3.StaticBinaryVariation.Group1Var2
    db_config.binary[2].evariation = opendnp3.EventBinaryVariation.Group2Var2

    # Analog 0 - Packet ID
    db_config.analog[0].clazz = opendnp3.PointClass.Class1
    db_config.analog[0].svariation = opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[0].evariation = opendnp3.EventAnalogVariation.Group32Var3

    # Analog 1 - Bottom Switch Count0
    db_config.analog[1].clazz = opendnp3.PointClass.Class1
    db_config.analog[1].svariation = opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[1].evariation = opendnp3.EventAnalogVariation.Group32Var3

    # Analog 2 - Bottom Switch Count1
    db_config.analog[2].clazz = opendnp3.PointClass.Class1
    db_config.analog[2].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[2].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Analog 3 - Bottom Switch Count2
    db_config.analog[3].clazz = opendnp3.PointClass.Class1
    db_config.analog[3].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[3].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Analog 4 - Top Switch Count0
    db_config.analog[4].clazz = opendnp3.PointClass.Class1
    db_config.analog[4].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[4].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Analog 5 - Top Switch Count1
    db_config.analog[5].clazz = opendnp3.PointClass.Class1
    db_config.analog[5].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[5].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Analog 6 - Top Switch Count2
    db_config.analog[6].clazz = opendnp3.PointClass.Class1
    db_config.analog[6].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[6].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Analog 7 - RSSI
    db_config.analog[7].clazz = opendnp3.PointClass.Class1
    db_config.analog[7].svariation = \
        opendnp3.StaticAnalogVariation.Group30Var1
    db_config.analog[7].evariation = \
        opendnp3.EventAnalogVariation.Group32Var3

    # Counters - Sequence Number
    db_config.counter[0].clazz = opendnp3.PointClass.Class1
    db_config.counter[0].svariation = \
        opendnp3.StaticCounterVariation.Group20Var1
    db_config.counter[0].evariation = \
        opendnp3.EventCounterVariation.Group22Var5


def setup_outstations(taglist, channel):

    _log.debug('Configuring the DNP3 stack.')

    outstations = []
    for tag in taglist:
        print(tag)
        stack_config = configure_stack_app(tag)

        _log.debug('Adding the outstation to the channel.')
        # self.command_handler = OutstationCommandHandler()
        outstation = channel.AddOutstation(
            'outstation-{}'.format(tag['tag_id']),
            opendnp3.SuccessCommandHandler().Create(),
            OutstationApplication(),
            stack_config
        )

        # OutstationApplication.set_outstation(outstation)

        _log.debug('Enabling the outstation. Traffic will now start to flow.')
        outstation.Enable()

        outstations.append({tag['tag_id']: outstation})

    return outstations


def main():
    """
    The Outstation has been started from the command line.
    Execute ad-hoc tests if desired.
    """
    tagdata = [
        {'tag_id': '110765', 'localaddr': 10, 'application': 'sewer'},
        {'tag_id': '110761', 'localaddr': 11, 'application': 'sewer'},
        {'tag_id': '110921', 'localaddr': 12, 'application': 'sewer'},
        {'tag_id': '110948', 'localaddr': 13, 'application': 'sewer'},
        {'tag_id': '110927', 'localaddr': 14, 'application': 'sewer'},
        {'tag_id': '110763', 'localaddr': 15, 'application': 'sewer'},
        {'tag_id': '110652', 'localaddr': 16, 'application': 'sewer'},
        {'tag_id': '110940', 'localaddr': 17, 'application': 'sewer'},
        {'tag_id': '110774', 'localaddr': 18, 'application': 'sewer'},
        {'tag_id': '110905', 'localaddr': 19, 'application': 'sewer'},
        {'tag_id': '110914', 'localaddr': 20, 'application': 'sewer'},
        {'tag_id': '110677', 'localaddr': 21, 'application': 'sewer'},
    ]

    log_handler = asiodnp3.ConsoleLogger().Create()

    _log.debug('Creating a DNP3Manager.')
    threads_to_allocate = 1
    # self.log_handler = MyLogger()

    manager = asiodnp3.DNP3Manager(
        threads_to_allocate, log_handler
    )

    channel = setup_tcp_server(manager)

    outstations = setup_outstations(tagdata, channel)

    _log.debug('Initialization complete. In command loop.')
    while True:
        a = 1

    # app.shutdown()
    # _log.debug('Exiting.')
    # exit()


if __name__ == '__main__':
    main()```

pydnp3 Install Error

I'm trying to get pydnp3 installed on an Ubuntu VM, and am getting the following error. I checked, and the file LinkedList.h exists where the code thinks it should be. Any ideas?

image

error "c++: internal compiler error: Killed (program cc1plus)" when using command "python setup.py install"

I was following the step in readme, but when I used the "python setup.py install" the error happened.

andy88980@ubuntu:~/python_work/pydnp3$ sudo python setup.py install
running install
running bdist_egg
running egg_info
writing requirements to pydnp3.egg-info/requires.txt
writing pydnp3.egg-info/PKG-INFO
writing top-level names to pydnp3.egg-info/top_level.txt
writing dependency_links to pydnp3.egg-info/dependency_links.txt
reading manifest file 'pydnp3.egg-info/SOURCES.txt'
writing manifest file 'pydnp3.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_ext
CMake build is: Release
-- pybind11 v2.3.dev0
CMake build is: Release
ASIO has been checked out as a git submodule: /home/andy88980/python_work/pydnp3/deps/dnp3/deps/asio/asio/include
-- Configuring done
-- Generating done
-- Build files have been written to: /home/andy88980/python_work/pydnp3/build/temp.linux-x86_64-2.7
[ 9%] Built target openpal
[ 16%] Built target asiopal
[ 89%] Built target opendnp3
[ 99%] Built target asiodnp3
[ 99%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3.cpp.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See file:///usr/share/doc/gcc-5/README.Bugs for instructions.
CMakeFiles/pydnp3.dir/build.make:62: recipe for target 'CMakeFiles/pydnp3.dir/src/pydnp3.cpp.o' failed
make[2]: *** [CMakeFiles/pydnp3.dir/src/pydnp3.cpp.o] Error 4
CMakeFiles/Makefile2:70: recipe for target 'CMakeFiles/pydnp3.dir/all' failed
make[1]: *** [CMakeFiles/pydnp3.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
Traceback (most recent call last):
File "setup.py", line 72, in
zip_safe=False,
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/init.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python2.7/distutils/core.py", line 151, in setup
dist.run_commands()
File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/command/install.py", line 67, in run
self.do_egg_install()
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/command/install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/command/bdist_egg.py", line 172, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/command/bdist_egg.py", line 158, in call_command
self.run_command(cmdname)
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/andy88980/.local/lib/python2.7/site-packages/setuptools/command/install_lib.py", line 11, in run
self.build()
File "/usr/lib/python2.7/distutils/command/install_lib.py", line 111, in build
self.run_command('build_ext')
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "setup.py", line 33, in run
self.build_extension(ext)
File "setup.py", line 59, in build_extension
subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=self.build_temp)
File "/usr/lib/python2.7/subprocess.py", line 541, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--config', 'Release', '--', '-j2']' returned non-zero exit status 2

I try to create swap to increase RAM size, but it does not work.
Is there any idea?

building on Python 3.6 requires python 2.7 headers

All of the includes of Python.h include python2.7 in the path. This means that even when you're compiling on Python 3.6, you need to have python2.7-dev installed.

To reproduce, if you have docker, launch a python 3.6 container:

docker run -it --rm python:3.6 bash

Then in the prompt that follows run:

apt-get update
apt-get install -y cmake

pip install --no-binary :all: pydnp3

and after a bit, you'll see the following error:

    [ 99%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3.cpp.o            
    In file included from /tmp/pip-install-ekdqm24w/pydnp3/src/AllHeaders.h:32:0,
                     from /tmp/pip-install-ekdqm24w/pydnp3/src/pydnp3.cpp:38:     
    /tmp/pip-install-ekdqm24w/pydnp3/src/asiodnp3/ConsoleLogger.h:32:30: fatal error: python2.7/Python.h: No such file or directory
     #include <python2.7/Python.h>                                              

As we are building on 3.6, there shouldn't be any need for Python 2.7 to be installed.

root@52b67bd86f9f:/# pip --version
pip 18.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

If you add python2.7-dev to the cmake install line above, it will complete building.

Examples Documentation

I'm trying to use the examples but I'm having difficulty. Is there any documentation other than comments? I'm having some issues to see if there is anything that can help me figure out my issues. For instance, I was able to connect two devices using the example outstation and master scripts. However, trying it again, it doesn't work. I'm not sure why. I was trying to see if I had an issue with IP addresses but wasn't able to find anything on what they need to be. I also don't know if I can connect two outstations to the master.

Intermittent Master and Outstation hang on startup

When starting the example Master and Outstation by executing master_cmd.py and/or outstation_cmd.py, the Master or Outstation occasionally hangs during initialization, in self.channel.AddMaster() or self.channel.AddOutstation(). Killing the process and restarting it often (but not always) leads to a successful start the second time. So far, no pattern has been discovered for when the hang will occur.

Host IP address

Hello, I am trying to make the examples master_cmd.py and outstation_cmd.py work in different computers. I am using 2 raspberry pies 4b and I cannot make it work using master_cmd.py in one raspberry and outstation_cmd.py in the other.

In the same raspberry pi I can make them work when I do not need to change any HOST IP variable value.

RPI1 master_cmd.py has IP: 169.XXX.XXX.155
and RPI2 outstation_cmd.py has IP: 169.XXX.XXX.133

in the outstation_cmd.py I change the variable HOST_IP to 169.XXX.XXX.133 and left the master_cmd.py the same.

What I am missing here?

Thanks in advance,
Eduardo Ronchi

"pip install pydnp3" on windows10

when I use pip install pydnp3 to install pydnp3 package on windows10, there is an error that shows errors as below. Any suggestion? Thx


pip install pydnp3
Collecting pydnp3
Using cached https://files.pythonhosted.org/packages/3d/7b/9da4115503bdce211323caaa12ad7a5128470366a62cdc9c3877549d0be5/pydnp3-0.1.0.tar.gz
Requirement already satisfied: pybind11>=2.2 in c:\program files\python37\lib\site-packages (from pydnp3) (2.2.3)
Installing collected packages: pydnp3
Running setup.py install for pydnp3 ... error
Complete output from command "c:\program files\python37\python.exe" -u -c "import setuptools, tokenize;file='C:\Users\ADMINI1\AppData\Local\Temp\pip-install-phu88ytc\pydnp3\setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record C:\Users\ADMINI1\AppData\Local\Temp\pip-record-w5bs56zh\install-record.txt --single-version-externally-managed --compile:
c:\program files\python37\lib\distutils\dist.py:274: UserWarning: Unknown distribution option: 'long_description_content_type'
warnings.warn(msg)
running install
running build
running build_ext
-- Building for: NMake Makefiles
CMake Error at CMakeLists.txt:3 (project):
Generator

    NMake Makefiles

  does not support platform specification, but platform

    x64

  was specified.


CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "C:/Users/Administrator/AppData/Local/Temp/pip-install-phu88ytc/pydnp3/build/temp.win-amd64-3.7/Release/CMakeFiles/CMakeOutput.log".
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ADMINI~1\AppData\Local\Temp\pip-install-phu88ytc\pydnp3\setup.py", line 89, in <module>
    zip_safe=False,
  File "c:\program files\python37\lib\site-packages\setuptools\__init__.py", line 129, in setup
    return distutils.core.setup(**attrs)
  File "c:\program files\python37\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "c:\program files\python37\lib\distutils\dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "c:\program files\python37\lib\distutils\dist.py", line 985, in run_command
    cmd_obj.run()
  File "c:\program files\python37\lib\site-packages\setuptools\command\install.py", line 61, in run
    return orig.install.run(self)
  File "c:\program files\python37\lib\distutils\command\install.py", line 545, in run
    self.run_command('build')
  File "c:\program files\python37\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "c:\program files\python37\lib\distutils\dist.py", line 985, in run_command
    cmd_obj.run()
  File "c:\program files\python37\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "c:\program files\python37\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "c:\program files\python37\lib\distutils\dist.py", line 985, in run_command
    cmd_obj.run()
  File "C:\Users\ADMINI~1\AppData\Local\Temp\pip-install-phu88ytc\pydnp3\setup.py", line 34, in run
    self.build_extension(ext)
  File "C:\Users\ADMINI~1\AppData\Local\Temp\pip-install-phu88ytc\pydnp3\setup.py", line 59, in build_extension
    subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env)
  File "c:\program files\python37\lib\subprocess.py", line 328, in check_call
    raise CalledProcessError(retcode, cmd)

Configure the Outstation's database of input point definitions.

I have been trying change the point definitions.

But the points didn't change.

In the function:

@staticmethod
 def configure_database(db_config):

I changed the code

print('--------------------------------------')
print(db_config.binary[2].evariation)
db_config.binary[2].evariation = opendnp3.EventBinaryVariation.Group2Var2
print('--------------------------------------')
print(db_config.binary[2].evariation)

But the values didn't change:

--------------------------------------
EventBinaryVariation.Group2Var1
--------------------------------------
EventBinaryVariation.Group2Var1

Someone can help me?

Thanks!

MinGW-x64 Compile error

i compiled on windows 10 using mingw-x64 compiler.
but, in link step failed.

cmake -G "MinGW Makefiles"

mingw32-make

last error message:
[100%] Linking CXX shared module pydnp3.cp37-win_amd64.pyd
C:\Users\pcf\AppData\Local\Temp\ccx9x76d.ltrans14.ltrans.o::(.text+0xa3b1): undefined reference to asiopal::TimeConversions::Convert(std::chrono::time_point<asiopal::SteadyClockWindows, std::chrono::duration<long long, std::ratio<1ll, 1000000000ll> > > const&)' deps/dnp3/libasiopal.a(Executor.cpp.obj):Executor.cpp:(.text+0x145): undefined reference to asiopal::TimeConversions::Convert(std::chrono::time_point<asiopal::SteadyClockWindows, std::chrono::duration<long long, std::ratio<1ll, 1000000000ll> > > const&)'
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [CMakeFiles\pydnp3.dir\build.make:93: pydnp3.cp37-win_amd64.pyd] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:75: CMakeFiles/pydnp3.dir/all] Error 2
mingw32-make: *** [Makefile:129: all] Error 2

please, help me.

regarding pydnp3

i am facing issues with pydnp3, my version in python 3.10.6 , while importing and running code it is showing like
1-Failed building wheel for pydnp3
2-failed to build pydnp3
3-legacy installed failure
4-subprocess-exited-with-error
please suggest solution for my errors
master.txt

Usage tip

Hi! I'm new in this DNP3 world. I used modbus to read some devices, and now this new device only uses DNP3.

How do I start?
I have to do something first? Some configuration?
Can someone give me an example how to send a request that he can answer?. Something simple!

Thanks!

Release recent version pydnp3 to PyPI

Hi,

I'm trying to install pydnp3 via the PyPI package (https://pypi.org/project/pydnp3).

My Python application is using Python 3, but the version that was released to PyPI is from 2018 and depends on Python 2.7 headers. Python 2.7 is End of Life at the end of 2019, so we cannot make our application use 2.x version anymore.

Changes to this library now allow any version of Python to be used. What is needed is to publish a new version to PyPI.

It is possible to publish an update? I'd also be happy to make it happen, but I don't have the required permissions.

Thanks.

Unable to read values from outstation error : erminate called after throwing an instance of 'std::runtime_error' what(): Tried to call pure virtual function "ISOEHandler::Start" Aborted (core dumped) ?

Hi,
I'm new to dnp3 I made a program to read values from outstation but I'm getting this error can anyone help me??
my code:

`from pydnp3 import asiodnp3, asiopal, opendnp3, openpal
import time
from visitors import *

FILTERS = opendnp3.levels.NORMAL | opendnp3.levels.ALL_COMMS
HOST = "192.168.0.69"
LOCAL = "0.0.0.0"
PORT = 20000

class TestMaster:

def config_master(self):
    # Callback interface for log messages
    self.handler = asiodnp3.ConsoleLogger().Create()

    # Root DNP3 object used to create channels and sessions
    self.manager = asiodnp3.DNP3Manager(1, self.handler)

    # Connect via a TCPClient socket to an outstation
    self.channel_listener = asiodnp3.PrintingChannelListener().Create()
    self.channel = self.manager.AddTCPClient("tcpclient",
                                            FILTERS,
                                            asiopal.ChannelRetry(),
                                            HOST,
                                            LOCAL,
                                            PORT,
                                            self.channel_listener)

    # Master config object for a master
    stack_config = asiodnp3.MasterStackConfig()
    stack_config.master.responseTimeout = openpal.TimeDuration().Seconds(2)
    stack_config.link.RemoteAddr = 1
    stack_config.link.LocalAddr = 2

    soe_handler = SOEHandler()

    # Add a master to a communication channel
    self.master_application = asiodnp3.DefaultMasterApplication().Create()
    self.master = self.channel.AddMaster("master",
                                        soe_handler,
                                        self.master_application,
                                        stack_config)

    # # Do an integrity poll (Class 3/2/1/0) once per minute
    # self.integrity_scan = self.master.AddClassScan(opendnp3.ClassField().AllClasses(),
    #                                             openpal.TimeDuration().Minutes(1))

    # # Do a Class 1 exception poll every 5 seconds
    # self.exception_scan = self.master.AddClassScan(opendnp3.ClassField(opendnp3.ClassField.CLASS_1),
    #                                             openpal.TimeDuration().Seconds(2))

    # Enable the master. This will start communications.
    self.master.Enable()

def run_master(self, cmd=None):
    self.config_master()
    print('cmd---------------',cmd)

    if cmd == "r":
        # self.master.ScanRange(opendnp3.GroupVariationID(1, 2), 0, 3)
        self.master.ScanRange(opendnp3.GroupVariationID(1, 2),0,3)

    time.sleep(1)
    self.master = Disable()
    self.master = None
    self.channel = Shutdown()
    self.channel = None
    self.manager = Shutdown()

class VisitorIndexedBinaryOutputStatus(opendnp3.IVisitorIndexedBinaryOutputStatus):
def init(self):
super(VisitorIndexedBinaryOutputStatus, self).init()
self.index_and_value = []

def OnValue(self, indexed_instance):
    self.index_and_value.append((indexed_instance.index, indexed_instance.value.value))

class SOEHandler(opendnp3.ISOEHandler):
"""
Override ISOEHandler in this manner to implement application-specific sequence-of-events behavior.

    This is an interface for SequenceOfEvents (SOE) callbacks from the Master stack to the application layer.
"""

def __init__(self):
    super(SOEHandler, self).__init__()

def Process(self, info, values):
    """
        Process measurement data.

    :param info: HeaderInfo
    :param values: A collection of values received from the Outstation (various data types are possible).
    """
    if (values.Count() == 4 and type(values) == opendnp3.ICollectionIndexedBinaryOutputStatus):
        class BOSVisitor(opendnp3.IVisitorIndexedBinaryOutputStatus):
            def __init__(self):
                super(BOSVisitor, self).__init__()
            def OnValue(self, indexed_instance):
                print(indexed_instance.index, indexed_instance.value.value)
        values.Foreach(BOSVisitor())


def Start(self):
    # This is implementing an interface, so this function
    # must be declared.
    pass

def End(self):
    # This is implementing an interface, so this function
    # must be declared.
    pass

if name == "main":
# app = TestMaster().run_master(cmd="i")
app = TestMaster().run_master(cmd="r")`

Output:
ms(1609309568885) INFO manager - Starting thread (0) channel state change: OPENING ms(1609309568885) INFO tcpclient - Connecting to: 192.168.0.69 cmd--------------- r ms(1609309568889) INFO tcpclient - Connected to: 192.168.0.69 channel state change: OPEN ms(1609309568889) INFO master - Begining task: Disable Unsolicited ms(1609309568889) --AL-> master - C0 15 3C 02 06 3C 03 06 3C 04 06 ms(1609309568889) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 0 FUNC: DISABLE_UNSOLICITED ms(1609309568889) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609309568889) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609309568889) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609309568889) --TL-> master - FIR: 1 FIN: 1 SEQ: 0 LEN: 11 ms(1609309568889) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 12 ms(1609309568895) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 10 ms(1609309568895) <-TL-- master - FIR: 1 FIN: 1 SEQ: 4 LEN: 4 ms(1609309568895) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 0 FUNC: RESPONSE IIN: [0x10, 0x01] ms(1609309568895) WARN master - Task was explicitly rejected via response with error IIN bit(s): Disable Unsolicited ms(1609309568895) INFO master - Begining task: Startup Integrity Poll ms(1609309568895) --AL-> master - C1 01 3C 02 06 3C 03 06 3C 04 06 3C 01 06 ms(1609309568895) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 1 FUNC: READ ms(1609309568895) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609309568895) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609309568895) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609309568895) --AL-> master - 060,001 - Class Data - Class 0 - all objects ms(1609309568895) --TL-> master - FIR: 1 FIN: 1 SEQ: 1 LEN: 14 ms(1609309568895) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 15 ms(1609309568907) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 16 ms(1609309568907) <-TL-- master - FIR: 1 FIN: 1 SEQ: 5 LEN: 10 ms(1609309568908) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 1 FUNC: RESPONSE IIN: [0x10, 0x00] ms(1609309568908) <-AL-- master - 010,002 Binary Output - Output Status With Flags, 8-bit start stop [0, 0] terminate called after throwing an instance of 'std::runtime_error' what(): Tried to call pure virtual function "ISOEHandler::Start" Aborted (core dumped)

Thank you for your help.

install pydnp3 done, how to import it

install pydnp3 library by :
pip install pydnp3
install it success, and pip list as following:
Package Version


pybind11 2.4.3
pydnp3 0.1.0
python-dateutil 2.8.0
pytz 2019.3
query-string 2019.4.13
request 2019.4.13
requests 2.22.0
setuptools 41.2.0
six 1.12.0
soupsieve 1.9.4
trollius 2.2.post1
urllib3 1.25.6
wheel 0.33.6

~\Python_test>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

import pydnp3
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named pydnp3

so, anyone know how to import it?

i use command "pip show -f pydnp3", as following:
Name: pydnp3
Version: 0.1.0
Summary: pydnp3 -- python binding for opendnp3
Home-page: http://github.com/Kisensum/pydnp3
Author: Anh Nguyen
Author-email: [email protected]
License: Apache 2.0
Location: c:\portablegit\usr\bin\lib\site-packages
Requires: pybind11
Required-by:
Files:
pydnp3-0.1.0.dist-info\DESCRIPTION.rst
pydnp3-0.1.0.dist-info\INSTALLER
pydnp3-0.1.0.dist-info\LICENSE.txt
pydnp3-0.1.0.dist-info\METADATA
pydnp3-0.1.0.dist-info\RECORD
pydnp3-0.1.0.dist-info\WHEEL
pydnp3-0.1.0.dist-info\metadata.json
pydnp3-0.1.0.dist-info\top_level.txt
pydnp3.so

so the question is changed to how to import .so file into python?

Can't build in Raspbian.

I'm trying to install pydnp3 on a Raspberry pi 3 B+, and the installation process fails at 99%. I have already expanded the swap file to 2GB, and still have the same problem.
Now it gaves me this message:
cc1plus: out of memory allocating 1420112 bytes after a total of 31375360 bytes

Installation history:

$ sudo python setup.py install
running install
running bdist_egg
running egg_info
writing requirements to pydnp3.egg-info/requires.txt
writing pydnp3.egg-info/PKG-INFO
writing top-level names to pydnp3.egg-info/top_level.txt
writing dependency_links to pydnp3.egg-info/dependency_links.txt
reading manifest file 'pydnp3.egg-info/SOURCES.txt'
writing manifest file 'pydnp3.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-armv7l/egg
running install_lib
running build_ext
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake build is: Release
-- Found PythonInterp: /usr/bin/python (found version "2.7.16")
-- Found PythonLibs: /usr/lib/arm-linux-gnueabihf/libpython2.7.so
-- Performing Test HAS_CPP14_FLAG
-- Performing Test HAS_CPP14_FLAG - Success
-- pybind11 v2.3.dev0
CMake build is: Release
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
ASIO has been checked out as a git submodule: /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include
-- Performing Test HAS_FLTO
-- Performing Test HAS_FLTO - Success
-- LTO enabled
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/share/pydnp3/build/temp.linux-armv7l-2.7
Scanning dependencies of target openpal
[ 1%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/container/Buffer.cpp.o
[ 1%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/container/RSlice.cpp.o
[ 1%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/container/WSlice.cpp.o
[ 2%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/executor/MonotonicTimestamp.cpp.o
[ 2%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/executor/TimeDuration.cpp.o
[ 3%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/executor/TimerRef.cpp.o
[ 3%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/logging/Logger.cpp.o
[ 4%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/logging/StringFormatting.cpp.o
[ 4%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/ByteSerialization.cpp.o
[ 5%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/DoubleFloat.cpp.o
[ 5%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/FloatByteOrder.cpp.o
[ 6%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/Format.cpp.o
[ 6%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/Parse.cpp.o
[ 7%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/SingleFloat.cpp.o
[ 7%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/serialization/UInt48LE.cpp.o
[ 8%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/util/Limits.cpp.o
[ 8%] Building CXX object deps/dnp3/CMakeFiles/openpal.dir/cpp/libs/src/openpal/util/ToHex.cpp.o
[ 9%] Linking CXX static library libopenpal.a
[ 9%] Built target openpal
Scanning dependencies of target asiopal
Scanning dependencies of target opendnp3
[ 10%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/ASIOSerialHelpers.cpp.o
[ 10%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/LogLevels.cpp.o
[ 11%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDUBuilders.cpp.o
[ 11%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDUHeader.cpp.o
[ 12%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDULogging.cpp.o
[ 12%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDURequest.cpp.o
[ 13%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDUResponse.cpp.o
[ 13%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/APDUWrapper.cpp.o
[ 14%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/AnalogCommandEvent.cpp.o
[ 14%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/AnalogOutput.cpp.o
[ 15%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/AppControlField.cpp.o
[ 15%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/BinaryCommandEvent.cpp.o
[ 16%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/ClassField.cpp.o
[ 16%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/ControlRelayOutputBlock.cpp.o
[ 16%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/ChannelRetry.cpp.o
[ 17%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/EventTriggers.cpp.o
[ 18%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/Executor.cpp.o
[ 18%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/Functions.cpp.o
[ 19%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/GroupVariationRecord.cpp.o
[ 19%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/HeaderWriter.cpp.o
[ 19%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/IINField.cpp.o
[ 20%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/MeasurementTypes.cpp.o
[ 20%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/OctetData.cpp.o
[ 21%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/QualityFlags.cpp.o
[ 21%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/SecurityStat.cpp.o
[ 22%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/APDUHeaderParser.cpp.o
[ 22%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/APDUParser.cpp.o
[ 23%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/BitReader.cpp.o
[ 23%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/CountIndexParser.cpp.o
[ 24%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/CountParser.cpp.o
In file included from /usr/include/c++/8/vector:69,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/impl/service_registry.ipp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/service_registry.hpp:141,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/impl/io_service.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/io_service.hpp:765,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_io_object.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/IO.h:24,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/Executor.h:27,
from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/asiopal/Executor.cpp:22:
/usr/include/c++/8/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry&}; _Tp = asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry; _Alloc = std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry>]’:
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type ‘std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> >::iterator’ {aka ‘__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> > >’} changed in GCC 7.1
vector<_Tp, _Alloc>::
^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:64,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/impl/service_registry.ipp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/service_registry.hpp:141,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/impl/io_service.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/io_service.hpp:765,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_io_object.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/IO.h:24,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/Executor.h:27,
from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/asiopal/Executor.cpp:22:
/usr/include/c++/8/bits/stl_vector.h: In member function ‘void asio::detail::epoll_reactor::schedule_timer(asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename asio::detail::timer_queue<Time_Traits>::per_timer_data&, asio::detail::wait_op*) [with Time_Traits = asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock >]’:
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> > >’ changed in GCC 7.1
_M_realloc_insert(end(), __x);
^~~~~~~~~~~~~~~~~
[ 24%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/IOpenDelayStrategy.cpp.o
[ 24%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/ResourceManager.cpp.o
[ 24%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/FreeFormatParser.cpp.o
[ 25%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/SerialChannel.cpp.o
[ 26%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/IAPDUHandler.cpp.o
[ 26%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/NumParser.cpp.o
[ 27%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/ObjectHeaderParser.cpp.o
[ 27%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/app/parsing/RangeParser.cpp.o
[ 28%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/Attributes.cpp.o
[ 28%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/AuthErrorCode.cpp.o
[ 29%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/CertificateType.cpp.o
[ 29%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/ChallengeReason.cpp.o
[ 30%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/ChannelState.cpp.o
[ 30%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/CommandPointState.cpp.o
[ 31%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/CommandStatus.cpp.o
[ 31%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/ControlCode.cpp.o
[ 32%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/DoubleBit.cpp.o
[ 32%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/FlagsType.cpp.o
[ 32%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/FlowControl.cpp.o
[ 33%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/FunctionCode.cpp.o
[ 33%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/GroupVariation.cpp.o
[ 33%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/SocketChannel.cpp.o
[ 34%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/HMACType.cpp.o
[ 34%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/IntervalUnits.cpp.o
[ 35%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/KeyChangeMethod.cpp.o
[ 35%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/KeyStatus.cpp.o
[ 36%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/KeyWrapAlgorithm.cpp.o
[ 36%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/LinkFunction.cpp.o
[ 37%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/LinkStatus.cpp.o
[ 37%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/MasterTaskType.cpp.o
[ 38%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/Parity.cpp.o
[ 38%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/QualifierCode.cpp.o
[ 39%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/StopBits.cpp.o
[ 39%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/TaskCompletion.cpp.o
[ 40%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/UserOperation.cpp.o
[ 40%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/gen/UserRole.cpp.o
[ 41%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/CRC.cpp.o
[ 41%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkContext.cpp.o
[ 42%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkFrame.cpp.o
[ 42%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkHeader.cpp.o
[ 43%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkHeaderFields.cpp.o
[ 43%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkLayer.cpp.o
[ 44%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/LinkLayerParser.cpp.o
[ 45%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/TCPClient.cpp.o
[ 45%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/PriLinkLayerStates.cpp.o
[ 46%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/SecLinkLayerStates.cpp.o
[ 46%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/link/ShiftableBuffer.cpp.o
[ 46%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/AssignClassTask.cpp.o
[ 47%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/ClearRestartTask.cpp.o
[ 47%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/CommandSet.cpp.o
In file included from /usr/include/c++/8/vector:69,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/opendnp3/master/CommandSet.h:30,
from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/CommandSet.cpp:22:
/usr/include/c++/8/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record}; _Tp = opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record; _Alloc = std::allocator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record>]’:
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type ‘std::vector<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record, std::allocator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record> >::iterator’ {aka ‘__gnu_cxx::__normal_iterator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record*, std::vector<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record, std::allocator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record> > >’} changed in GCC 7.1
vector<_Tp, _Alloc>::
^~~~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/vector.tcc: In member function ‘opendnp3::ICommandCollection& opendnp3::TypedCommandHeader::Add(const T&, uint16_t) [with T = opendnp3::AnalogOutputDouble64]’:
/usr/include/c++/8/bits/vector.tcc:109:4: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record*, std::vector<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record, std::allocator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record> > >’ changed in GCC 7.1
_M_realloc_insert(end(), std::forward<_Args>(__args)...);
^~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/vector.tcc: In member function ‘virtual opendnp3::ICommandCollectionopendnp3::AnalogOutputDouble64& opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::_ZThn4_N8opendnp318TypedCommandHeaderINS_20AnalogOutputDouble64EE3AddERKS1_t(const opendnp3::AnalogOutputDouble64&, uint16_t)’:
/usr/include/c++/8/bits/vector.tcc:109:4: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record*, std::vector<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record, std::allocator<opendnp3::TypedCommandHeaderopendnp3::AnalogOutputDouble64::Record> > >’ changed in GCC 7.1
_M_realloc_insert(end(), std::forward<_Args>(__args)...);
^~~~~~~~~~~~~~~~~
[ 48%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/CommandSetOps.cpp.o
[ 48%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/TCPServer.cpp.o
[ 48%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/CommandTask.cpp.o
[ 49%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/CommandTaskResult.cpp.o
[ 49%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/DisableUnsolicitedTask.cpp.o
[ 50%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/EmptyResponseTask.cpp.o
[ 50%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/EnableUnsolicitedTask.cpp.o
[ 51%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/EventScanTask.cpp.o
[ 51%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/HeaderTypes.cpp.o
[ 52%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/IMasterTask.cpp.o
[ 53%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/ThreadPool.cpp.o
[ 53%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/LANTimeSyncTask.cpp.o
[ 54%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/MasterContext.cpp.o
In file included from /usr/include/c++/8/vector:69,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/impl/service_registry.ipp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/service_registry.hpp:141,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/impl/io_service.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/io_service.hpp:765,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_io_object.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/IO.h:24,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/Executor.h:27,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/ThreadPool.h:27,
from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/asiopal/ThreadPool.cpp:21:
/usr/include/c++/8/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry&}; _Tp = asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry; _Alloc = std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry>]’:
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type ‘std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> >::iterator’ {aka ‘__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> > >’} changed in GCC 7.1
vector<_Tp, _Alloc>::
^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:64,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/impl/service_registry.ipp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/detail/service_registry.hpp:141,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/impl/io_service.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/io_service.hpp:765,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_io_object.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio/basic_datagram_socket.hpp:20,
from /home/pi/share/pydnp3/deps/dnp3/deps/asio/asio/include/asio.hpp:19,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/IO.h:24,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/Executor.h:27,
from /home/pi/share/pydnp3/deps/dnp3/./cpp/libs/include/asiopal/ThreadPool.h:27,
from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/asiopal/ThreadPool.cpp:21:
/usr/include/c++/8/bits/stl_vector.h: In member function ‘void asio::detail::epoll_reactor::schedule_timer(asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename asio::detail::timer_queue<Time_Traits>::per_timer_data&, asio::detail::wait_op*) [with Time_Traits = asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock >]’:
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traitsstd::chrono::_V2::steady_clock > >::heap_entry> > >’ changed in GCC 7.1
_M_realloc_insert(end(), __x);
^~~~~~~~~~~~~~~~~
[ 54%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/TimeConversions.cpp.o
[ 55%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/Timer.cpp.o
[ 55%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/MasterSchedulerBackend.cpp.o
[ 56%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/MasterTasks.cpp.o
[ 56%] Building CXX object deps/dnp3/CMakeFiles/asiopal.dir/cpp/libs/src/asiopal/UTCTimeSource.cpp.o
[ 56%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/MeasurementHandler.cpp.o
[ 57%] Linking CXX static library libasiopal.a
[ 57%] Built target asiopal
[ 58%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/PollTaskBase.cpp.o
[ 58%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/RestartOperationTask.cpp.o
[ 59%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/SerialTimeSyncTask.cpp.o
[ 59%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/StartupIntegrityPoll.cpp.o
[ 60%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/TaskBehavior.cpp.o
In file included from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.cpp:22:
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.h: In constructor ‘opendnp3::TaskBehavior::TaskBehavior(const openpal::TimeDuration&, const openpal::MonotonicTimestamp&, const openpal::TimeDuration&, const openpal::TimeDuration&, const openpal::MonotonicTimestamp&)’:
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.h:115:30: warning: ‘opendnp3::TaskBehavior::expiration’ will be initialized after [-Wreorder]
openpal::MonotonicTimestamp expiration;
^~~~~~~~~~
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.h:107:30: warning: ‘const openpal::TimeDuration opendnp3::TaskBehavior::minRetryDelay’ [-Wreorder]
const openpal::TimeDuration minRetryDelay;
^~~~~~~~~~~~~
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.cpp:87:1: warning: when initialized here [-Wreorder]
TaskBehavior::TaskBehavior(
^~~~~~~~~~~~
In file included from /home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.cpp:22:
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.h:118:24: warning: ‘opendnp3::TaskBehavior::currentRetryDelay’ will be initialized after [-Wreorder]
openpal::TimeDuration currentRetryDelay;
^~~~~~~~~~~~~~~~~
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.h:109:36: warning: ‘const openpal::MonotonicTimestamp opendnp3::TaskBehavior::startExpiration’ [-Wreorder]
const openpal::MonotonicTimestamp startExpiration;
^~~~~~~~~~~~~~~
/home/pi/share/pydnp3/deps/dnp3/cpp/libs/src/opendnp3/master/TaskBehavior.cpp:87:1: warning: when initialized here [-Wreorder]
TaskBehavior::TaskBehavior(
^~~~~~~~~~~~
[ 60%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/TaskContext.cpp.o
[ 61%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/master/UserPollTask.cpp.o
[ 61%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group1.cpp.o
[ 61%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group10.cpp.o
[ 62%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group11.cpp.o
[ 62%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group12.cpp.o
[ 63%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group120.cpp.o
[ 63%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group121.cpp.o
[ 64%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group122.cpp.o
[ 64%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group13.cpp.o
[ 65%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group2.cpp.o
[ 65%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group20.cpp.o
[ 66%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group21.cpp.o
[ 66%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group22.cpp.o
[ 67%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group23.cpp.o
[ 67%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group3.cpp.o
[ 68%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group30.cpp.o
[ 68%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group32.cpp.o
[ 69%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group4.cpp.o
[ 69%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group40.cpp.o
[ 70%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group41.cpp.o
[ 70%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group42.cpp.o
[ 71%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group43.cpp.o
[ 71%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group50.cpp.o
[ 72%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group51.cpp.o
[ 72%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/objects/Group52.cpp.o
[ 73%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/ApplicationIIN.cpp.o
[ 73%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/AssignClassHandler.cpp.o
[ 74%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/ClassBasedRequestHandler.cpp.o
[ 74%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/CommandActionAdapter.cpp.o
[ 74%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/CommandResponseHandler.cpp.o
[ 75%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/Database.cpp.o
[ 75%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/DatabaseBuffers.cpp.o
[ 76%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/DatabaseConfigView.cpp.o
[ 76%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/DeferredRequest.cpp.o
[ 77%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/EventBuffer.cpp.o
[ 77%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/EventBufferConfig.cpp.o
[ 78%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/EventCount.cpp.o
[ 78%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/EventWriter.cpp.o
[ 79%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/IINHelpers.cpp.o
[ 79%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/IOutstationApplication.cpp.o
[ 80%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/OutstationContext.cpp.o
[ 80%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/OutstationStates.cpp.o
[ 81%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/ReadHandler.cpp.o
[ 81%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/RequestHistory.cpp.o
[ 82%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/ResponseContext.cpp.o
[ 82%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/SOERecord.cpp.o
[ 83%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/SelectedRanges.cpp.o
[ 83%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/SimpleCommandHandler.cpp.o
[ 84%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/StaticBuffers.cpp.o
[ 84%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/StaticLoadFunctions.cpp.o
[ 85%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/outstation/WriteHandler.cpp.o
[ 85%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/transport/TransportLayer.cpp.o
[ 86%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/transport/TransportRx.cpp.o
[ 86%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/transport/TransportStack.cpp.o
[ 86%] Building CXX object deps/dnp3/CMakeFiles/opendnp3.dir/cpp/libs/src/opendnp3/transport/TransportTx.cpp.o
[ 87%] Linking CXX static library libopendnp3.a
[ 87%] Built target opendnp3
Scanning dependencies of target asiodnp3
[ 87%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/ConsoleLogger.cpp.o
[ 87%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/Conversions.cpp.o
[ 88%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/DNP3Channel.cpp.o
[ 88%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/DNP3Manager.cpp.o
[ 89%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/DNP3ManagerImpl.cpp.o
[ 89%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/DefaultListenCallbacks.cpp.o
[ 90%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/DefaultMasterApplication.cpp.o
[ 90%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/ErrorCodes.cpp.o
[ 91%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/IOHandler.cpp.o
[ 91%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/LinkSession.cpp.o
[ 92%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/MasterScan.cpp.o
[ 92%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/MasterSessionStack.cpp.o
[ 93%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/MasterStack.cpp.o
[ 93%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/MasterTCPServer.cpp.o
[ 94%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/OutstationStack.cpp.o
[ 94%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/PrintingCommandCallback.cpp.o
[ 95%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/PrintingSOEHandler.cpp.o
[ 95%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/SerialIOHandler.cpp.o
[ 96%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/TCPClientIOHandler.cpp.o
[ 96%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/TCPServerIOHandler.cpp.o
[ 97%] Building CXX object deps/dnp3/CMakeFiles/asiodnp3.dir/cpp/libs/src/asiodnp3/UpdateBuilder.cpp.o
[ 97%] Linking CXX static library libasiodnp3.a
[ 97%] Built target asiodnp3
Scanning dependencies of target pydnp3
[ 97%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3.cpp.o
[ 98%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3asiodnp3.cpp.o
[ 98%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3asiopal.cpp.o
[ 99%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3opendnp3.cpp.o
[ 99%] Building CXX object CMakeFiles/pydnp3.dir/src/pydnp3openpal.cpp.o

cc1plus: out of memory allocating 1420112 bytes after a total of 31375360 bytes
make[2]: *** [CMakeFiles/pydnp3.dir/build.make:102: CMakeFiles/pydnp3.dir/src/pydnp3opendnp3.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/pydnp3.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
Traceback (most recent call last):
File "setup.py", line 80, in
zip_safe=False,
File "/usr/lib/python2.7/dist-packages/setuptools/init.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python2.7/distutils/core.py", line 151, in setup
dist.run_commands()
File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/usr/lib/python2.7/dist-packages/setuptools/command/install.py", line 67, in run
self.do_egg_install()
File "/usr/lib/python2.7/dist-packages/setuptools/command/install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/usr/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 172, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "/usr/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 158, in call_command
self.run_command(cmdname)
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/usr/lib/python2.7/dist-packages/setuptools/command/install_lib.py", line 24, in run
self.build()
File "/usr/lib/python2.7/distutils/command/install_lib.py", line 111, in build
self.run_command('build_ext')
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "setup.py", line 33, in run
self.build_extension(ext)
File "setup.py", line 67, in build_extension
subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=self.build_temp)
File "/usr/lib/python2.7/subprocess.py", line 190, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--config', 'Release', '--', '-j2']' returned non-zero exit status 2

Decode dnp3 packets from pcap/pcapng file

Hi,
I would like to decode the DNP3 packets contained in the pcapng file and display their contents (without creating a dnp3 communication stack), but I can't find any function allowing for similar operation.

Thank you in advance

Master read classes output to json?

Hi I'm new to dnp3 protocol I'm reading an outstation using pydnp3 I want to take the required classes output in the program so that I can make the required output format can anyone help me??

my Code :

`
from pydnp3 import asiodnp3, asiopal, opendnp3, openpal
import time

    FILTERS = opendnp3.levels.NORMAL | opendnp3.levels.ALL_COMMS
    HOST = "192.168.0.69"
    LOCAL = "0.0.0.0"
    PORT = 20000


    class TestMaster:

        def config_master(self):
            # Callback interface for log messages
            self.handler = asiodnp3.ConsoleLogger().Create()

            # Root DNP3 object used to create channels and sessions
            self.manager = asiodnp3.DNP3Manager(1, self.handler)

            # Connect via a TCPClient socket to an outstation
            self.channel_listener = asiodnp3.PrintingChannelListener().Create()
            self.channel = self.manager.AddTCPClient("tcpclient",
                                                    FILTERS,
                                                    asiopal.ChannelRetry(),
                                                    HOST,
                                                    LOCAL,
                                                    PORT,
                                                    self.channel_listener)

            # Master config object for a master
            stack_config = asiodnp3.MasterStackConfig()
            stack_config.master.responseTimeout = openpal.TimeDuration().Seconds(2)
            stack_config.link.RemoteAddr = 1
            stack_config.link.LocalAddr = 2

            # Add a master to a communication channel
            self.master_application = asiodnp3.DefaultMasterApplication().Create()
            self.master = self.channel.AddMaster("master",
                                                asiodnp3.PrintingSOEHandler().Create(),
                                                self.master_application,
                                                stack_config)

            # Do an integrity poll (Class 3/2/1/0) once per minute
            self.integrity_scan = self.master.AddClassScan(opendnp3.ClassField().AllClasses(),
                                                        openpal.TimeDuration().Minutes(1))

            # Do a Class 1 exception poll every 5 seconds
            self.exception_scan = self.master.AddClassScan(opendnp3.ClassField(opendnp3.ClassField.CLASS_1),
                                                        openpal.TimeDuration().Seconds(2))

            # Enable the master. This will start communications.
            self.master.Enable()

        def run_master(self, cmd=None):
            self.config_master()


            if cmd == "a":
                self.master.ScanRange(opendnp3.GroupVariationID(1, 2), 0, 3)
            if cmd == "i":
                self.integrity_scan.Demand()
                print("self.integrity_scan.Demand()------",self.integrity_scan.Demand())
            if cmd == "e":
                self.exception_scan.Demand()
                print("self.exception_scan.Demand()-------",self.exception_scan.Demand())
            if cmd == "c1":
                crob = opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON)
                self.master.SelectAndOperate(crob, 0, command_callback)
            if cmd == "c2":
                crob = opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON)
                commands = opendnp3.CommandSet([opendnp3.WithIndex(crob, 0),opendnp3.WithIndex(crob, 1)])
                self.master.SelectAndOperate(commands, command_callback)
            if cmd == "d1":
               self.master.DirectOperate(opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON)
                                                                                                                                          ,4,command_callback)
            if cmd == "d2":
                crob = opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON)
                commands = opendnp3.CommandSet([opendnp3.WithIndex(crob, 0),opendnp3.WithIndex(crob, 1)])
                self.master.DirectOperate(commands, command_callback)
            if cmd == "r":
                self.master.Restart(opendnp3.RestartType.COLD, restart_callback)

            
            time.sleep(1)

        

    if __name__ == "__main__":
        app = TestMaster().run_master(cmd="i")`

Output:

(env) root@ubuntu:/home/saleem/Saleem/DNP3_Python/pydnp3# python3 ./examples/test.py ms(1609218902174) INFO manager - Starting thread (0) channel state change: OPENING ms(1609218902175) INFO tcpclient - Connecting to: 192.168.0.69 self.integrity_scan.Demand()------ None ms(1609218902177) INFO tcpclient - Connected to: 192.168.0.69 channel state change: OPEN ms(1609218902177) INFO master - Begining task: Disable Unsolicited ms(1609218902177) --AL-> master - C0 15 3C 02 06 3C 03 06 3C 04 06 ms(1609218902178) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 0 FUNC: DISABLE_UNSOLICITED ms(1609218902179) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609218902179) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609218902179) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609218902179) --TL-> master - FIR: 1 FIN: 1 SEQ: 0 LEN: 11 ms(1609218902179) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 12 ms(1609218902188) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 10 ms(1609218902188) <-TL-- master - FIR: 1 FIN: 1 SEQ: 7 LEN: 4 ms(1609218902188) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 0 FUNC: RESPONSE IIN: [0x10, 0x01] ms(1609218902188) WARN master - Task was explicitly rejected via response with error IIN bit(s): Disable Unsolicited ms(1609218902188) INFO master - Begining task: Startup Integrity Poll ms(1609218902188) --AL-> master - C1 01 3C 02 06 3C 03 06 3C 04 06 3C 01 06 ms(1609218902188) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 1 FUNC: READ ms(1609218902188) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609218902188) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609218902188) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609218902188) --AL-> master - 060,001 - Class Data - Class 0 - all objects ms(1609218902188) --TL-> master - FIR: 1 FIN: 1 SEQ: 1 LEN: 14 ms(1609218902188) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 15 ms(1609218902207) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 42 ms(1609218902207) <-TL-- master - FIR: 1 FIN: 1 SEQ: 8 LEN: 36 ms(1609218902207) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 1 FUNC: RESPONSE IIN: [0x10, 0x00] ms(1609218902207) <-AL-- master - 001,002 Binary Input - With Flags, 8-bit start stop [0, 0] ms(1609218902207) <-AL-- master - 030,005 Analog Input - Single-precision With Flag, 8-bit start stop [0, 0] ms(1609218902207) <-AL-- master - 010,002 Binary Output - Output Status With Flags, 8-bit start stop [0, 0] ms(1609218902207) <-AL-- master - 040,003 Analog Output Status - Single-precision With Flag, 8-bit start stop [0, 0] [0] : 1 : 129 : 0 [0] : 55.55 : 1 : 0 [0] : 1 : 129 : 0 [0] : 65.76 : 1 : 0 ms(1609218902207) INFO master - Begining task: Enable Unsolicited ms(1609218902207) --AL-> master - C2 14 3C 02 06 3C 03 06 3C 04 06 ms(1609218902207) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 2 FUNC: ENABLE_UNSOLICITED ms(1609218902207) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609218902207) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609218902207) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609218902207) --TL-> master - FIR: 1 FIN: 1 SEQ: 2 LEN: 11 ms(1609218902208) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 12 ms(1609218902228) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 10 ms(1609218902229) <-TL-- master - FIR: 1 FIN: 1 SEQ: 9 LEN: 4 ms(1609218902229) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 2 FUNC: RESPONSE IIN: [0x10, 0x01] ms(1609218902229) WARN master - Task was explicitly rejected via response with error IIN bit(s): Enable Unsolicited ms(1609218902229) INFO master - Begining task: Application Poll ms(1609218902229) --AL-> master - C3 01 3C 02 06 3C 03 06 3C 04 06 3C 01 06 ms(1609218902229) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 3 FUNC: READ ms(1609218902229) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609218902229) --AL-> master - 060,003 - Class Data - Class 2 - all objects ms(1609218902229) --AL-> master - 060,004 - Class Data - Class 3 - all objects ms(1609218902229) --AL-> master - 060,001 - Class Data - Class 0 - all objects ms(1609218902229) --TL-> master - FIR: 1 FIN: 1 SEQ: 3 LEN: 14 ms(1609218902229) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 15 ms(1609218902247) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 42 ms(1609218902247) <-TL-- master - FIR: 1 FIN: 1 SEQ: 10 LEN: 36 ms(1609218902247) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 3 FUNC: RESPONSE IIN: [0x10, 0x00] ms(1609218902247) <-AL-- master - 001,002 Binary Input - With Flags, 8-bit start stop [0, 0] ms(1609218902247) <-AL-- master - 030,005 Analog Input - Single-precision With Flag, 8-bit start stop [0, 0] ms(1609218902247) <-AL-- master - 010,002 Binary Output - Output Status With Flags, 8-bit start stop [0, 0] ms(1609218902247) <-AL-- master - 040,003 Analog Output Status - Single-precision With Flag, 8-bit start stop [0, 0] **[0] : 1 : 129 : 0 [0] : 55.55 : 1 : 0 [0] : 1 : 129 : 0 [0] : 65.76 : 1 : 0** ms(1609218902247) INFO master - Begining task: Application Poll ms(1609218902247) --AL-> master - C4 01 3C 02 06 ms(1609218902247) --AL-> master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 4 FUNC: READ ms(1609218902247) --AL-> master - 060,002 - Class Data - Class 1 - all objects ms(1609218902247) --TL-> master - FIR: 1 FIN: 1 SEQ: 4 LEN: 5 ms(1609218902247) --LL-> master - Function: PRI_UNCONFIRMED_USER_DATA Dest: 1 Source: 2 Length: 6 ms(1609218902266) <-LL-- tcpclient - Function: PRI_UNCONFIRMED_USER_DATA Dest: 2 Source: 1 Length: 10 ms(1609218902266) <-TL-- master - FIR: 1 FIN: 1 SEQ: 11 LEN: 4 ms(1609218902266) <-AL-- master - FIR: 1 FIN: 1 CON: 0 UNS: 0 SEQ: 4 FUNC: RESPONSE IIN: [0x10, 0x00] channel state change: CLOSED channel state change: SHUTDOWN

can anyone help me with how can I take the classes output in my program so that I can make the output in my required structure like a dictionary or list?

Thank you for your help.

Outstation and master hang on shutdown

  • Without communication: if not using subclasses of ILogHandler, master and outstation can shutdown without hanging.
  • With communication between outstation and master:
    + Master always hang on shutdown.
    + If not using subclasses of ILogHandler, outstation can shutdown without hanging.

(opendnp3 javar binding has a similar issue with hanging on shutdown: dnp3/opendnp3#216)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.