コード例 #1
0
def main():
    # 1. Extend IDataObserver and IStackObserver
    # 2. Add a Physical Layer (TCP Client) to the StackManager
    # 3. Create a MasterConfig.
    # 4. Add a Master Stack to the StackManager
    # 5. Let the process run
    print "Running the Slave"

    stack_observer = StackObserver()
    # observer = DataObserver()
    acceptor = CmdAcceptor()

    phys_layer_settings = opendnp3.PhysLayerSettings()

    stack_manager = opendnp3.StackManager()
    # stack_manager.AddTCPClient('tcpclient', phys_layer_settings, '127.0.0.1', 20000)
    stack_manager.AddTCPServer('tcpserver', phys_layer_settings, '10.0.0.2',
                               20000)
    #stack_manager.AddTCPServer('tcpserver', phys_layer_settings, '10.0.60.17', 20000)

    # master_stack_config = opendnp3.MasterStackConfig()
    slave_stack_config = opendnp3.SlaveStackConfig()
    #	master_stack_config.master.DoUnsolOnStartup = True

    # master_stack_config.link.LocalAddr = 100
    # master_stack_config.link.RemoteAddr = 1
    slave_stack_config.link.LocalAddr = 1
    slave_stack_config.link.RemoteAddr = 100
    #	master_stack_config.link.useConfirms = True

    # set the stack observer callback to our Python-extended class
    # master_stack_config.master.mpObserver = stack_observer
    slave_stack_config.slave.mpObserver = stack_observer

    # the integrity rate is the # of milliseconds between integrity scans
    #master_stack_config.master.IntegrityRate = 1000

    # The third argument needs to be a log FilterLevel.  The Python
    # API does not have access to this enum, but it can be "fed" to
    # the AddMaster method because the PhysLayerSettings LogLevel
    # member is a FilterLevel enum.
    # command_acceptor = stack_manager.AddMaster('tcpclient', 'master', phys_layer_settings.LogLevel, observer, master_stack_config)
    command_acceptor = stack_manager.AddSlave('tcpserver', 'slave',
                                              phys_layer_settings.LogLevel,
                                              acceptor, slave_stack_config)
    # Need to wait because the polling is now occurring on its own
    # thread.  If we exited immediately, the callbacks would never
    # be called.
    sleep(2)

    print('Binaries: %d' % (len(binary_list)))
    print('Analogs: %d' % (len(analog_list)))
    print('Counters: %d' % (len(counter_list)))
    print('ControlStatus: %d' % (len(controlstatus_list)))
    print('Setpointstatus: %d' % (len(setpointstatus_list)))

    while (True):
        sleep(60)
コード例 #2
0
def main():

    parser = argparse.ArgumentParser()
    parser.add_argument('--slave_ip',
                        dest="slave_ip",
                        help='IP Address of the slave node.',
                        required=True)
    parser.add_argument('--life_time',
                        dest="life_time",
                        help='Time after which slave must die!',
                        required=True)
    parser.add_argument('--vt',
                        dest="vt",
                        help='Is virtual time enabled',
                        required=True)
    args = parser.parse_args()

    # 1. Extend IDataObserver and IStackObserver
    # 2. Add a Physical Layer (TCP Client) to the StackManager
    # 3. Create a MasterConfig.
    # 4. Add a Master Stack to the StackManager
    # 5. Let the process run
    print "Running the Slave. Pid = ", os.getpid()

    stack_observer = StackObserver()
    # observer = DataObserver()
    acceptor = CmdAcceptor()

    phys_layer_settings = opendnp3.PhysLayerSettings()

    stack_manager = opendnp3.StackManager()
    stack_manager.AddTCPServer('tcpserver', phys_layer_settings, args.slave_ip,
                               20000)

    # master_stack_config = opendnp3.MasterStackConfig()
    slave_stack_config = opendnp3.SlaveStackConfig()
    #	master_stack_config.master.DoUnsolOnStartup = True

    # master_stack_config.link.LocalAddr = 100
    # master_stack_config.link.RemoteAddr = 1
    slave_stack_config.link.LocalAddr = 1
    slave_stack_config.link.RemoteAddr = 100
    #	master_stack_config.link.useConfirms = True

    # set the stack observer callback to our Python-extended class
    # master_stack_config.master.mpObserver = stack_observer
    slave_stack_config.slave.mpObserver = stack_observer

    # the integrity rate is the # of milliseconds between integrity scans
    #master_stack_config.master.IntegrityRate = 1000

    # The third argument needs to be a log FilterLevel.  The Python
    # API does not have access to this enum, but it can be "fed" to
    # the AddMaster method because the PhysLayerSettings LogLevel
    # member is a FilterLevel enum.
    # command_acceptor = stack_manager.AddMaster('tcpclient', 'master', phys_layer_settings.LogLevel, observer, master_stack_config)
    command_acceptor = stack_manager.AddSlave('tcpserver', 'slave',
                                              phys_layer_settings.LogLevel,
                                              acceptor, slave_stack_config)
    # Need to wait because the polling is now occurring on its own
    # thread.  If we exited immediately, the callbacks would never
    # be called.
    sleep(2)

    print('Binaries: %d' % (len(binary_list)))
    print('Analogs: %d' % (len(analog_list)))
    print('Counters: %d' % (len(counter_list)))
    print('ControlStatus: %d' % (len(controlstatus_list)))
    print('Setpointstatus: %d' % (len(setpointstatus_list)))
    sys.stdout.flush()

    if int(args.vt) == 0:
        for tid in get_thread_ids(os.getpid()):
            set_def_cpu_affinity(tid, "2-3")

    while (True):
        sleep(int(args.life_time) - 2)
        break