etherlab/EthercatCFileGenerator.py
author Edouard Tisserant <edouard.tisserant@gmail.com>
Wed, 30 Jun 2021 15:51:59 +0200
branchsvghmi
changeset 3267 5f20f391ae31
parent 2643 b98d9e08231f
permissions -rw-r--r--
SVGHMI: Prepare accepting multiple clients on multiple HMI: Use POULibrary new capability to add variables to PLC Configuration. Now heartbeat and HMI tree root are added by the library part of SVGHMI, and not by each instance.
2165
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     1
#!/usr/bin/env python
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     2
# -*- coding: utf-8 -*-
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     3
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     4
# This file is part of Beremiz
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     5
#
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     6
# Copyright (C) 2011-2014: Laurent BESSARD, Edouard TISSERANT
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     7
#                          RTES Lab : CRKim, JBLee, youcu
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     8
#                          Higen Motor : Donggu Kang
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     9
#
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
    10
# See COPYING file for copyrights details.
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
    11
2405
af050469fc5c clean etherlab: pylint, W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2397
diff changeset
    12
from __future__ import absolute_import
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
    13
from __future__ import division
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    14
import os
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    15
2405
af050469fc5c clean etherlab: pylint, W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2397
diff changeset
    16
from etherlab.EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    17
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    18
SLAVE_PDOS_CONFIGURATION_DECLARATION = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    19
/* Slave %(slave)d, "%(device_type)s"
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    20
 * Vendor ID:       0x%(vendor).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    21
 * Product code:    0x%(product_code).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    22
 * Revision number: 0x%(revision_number).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    23
 */
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    24
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    25
ec_pdo_entry_info_t slave_%(slave)d_pdo_entries[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    26
%(pdos_entries_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    27
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    28
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    29
ec_pdo_info_t slave_%(slave)d_pdos[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    30
%(pdos_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    31
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    32
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    33
ec_sync_info_t slave_%(slave)d_syncs[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    34
%(pdos_sync_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    35
    {0xff}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    36
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    37
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    38
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    39
SLAVE_CONFIGURATION_TEMPLATE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    40
    if (!(slave%(slave)d = ecrt_master_slave_config(master, %(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x))) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    41
        SLOGF(LOG_CRITICAL, "EtherCAT failed to get slave %(device_type)s configuration at alias %(alias)d and position %(position)d.");
2121
11102245e1d4 Fixed (again) some non-clean exit in case of SDO failure at init
Edouard Tisserant
parents: 2117
diff changeset
    42
        goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    43
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    44
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    45
    if (ecrt_slave_config_pdos(slave%(slave)d, EC_END, slave_%(slave)d_syncs)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    46
        SLOGF(LOG_CRITICAL, "EtherCAT failed to configure PDOs for slave %(device_type)s at alias %(alias)d and position %(position)d.");
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    47
        goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    48
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    49
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    50
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    51
SLAVE_INITIALIZATION_TEMPLATE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    52
    {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    53
        uint8_t value[%(data_size)d];
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    54
        EC_WRITE_%(data_type)s((uint8_t *)value, %(data)s);
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    55
        if (ecrt_master_sdo_download(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &abort_code)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    56
            SLOGF(LOG_CRITICAL, "EtherCAT Failed to initialize slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%d", abort_code);
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    57
            goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    58
        }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    59
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    60
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    61
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    62
SLAVE_OUTPUT_PDO_DEFAULT_VALUE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    63
    {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    64
        uint8_t value[%(data_size)d];
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    65
        if (ecrt_master_sdo_upload(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &result_size, &abort_code)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    66
            SLOGF(LOG_CRITICAL, "EtherCAT failed to get default value for output PDO in slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%ud", abort_code);
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    67
            goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    68
        }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    69
        %(real_var)s = EC_READ_%(data_type)s((uint8_t *)value);
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    70
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    71
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    72
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    73
SLAVE_OUTPUT_PDO_DEFAULT_VALUE_BIT = """
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    74
    {
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    75
        uint8_t value[%(data_size)d];
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    76
        if (ecrt_master_sdo_upload(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &result_size, &abort_code)) {
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    77
            SLOGF(LOG_CRITICAL, "EtherCAT failed to get default value for output PDO in slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%ud", abort_code);
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    78
            goto ecat_failed;
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    79
        }
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    80
        %(real_var)s = EC_READ_%(data_type)s((uint8_t *)value, %(subindex)d);
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    81
    }
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    82
"""
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    83
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    84
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    85
SLAVE_INPUT_PDO_DEFAULT_VALUE = """
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    86
    {
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    87
        uint8_t value[%(data_size)d];
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    88
        if (ecrt_master_sdo_upload(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &result_size, &abort_code)) {
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    89
            SLOGF(LOG_CRITICAL, "EtherCAT failed to get default value for input PDO in slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%ud", abort_code);
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    90
            goto ecat_failed;
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    91
        }
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    92
        %(real_var)s = EC_READ_%(data_type)s((uint8_t *)value);
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    93
    }
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    94
"""
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    95
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    96
DC_VARIABLE ="""
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    97
#define DC_ENABLE       %(dc_flag)d
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    98
"""
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
    99
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   100
CONFIG_DC = """
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   101
    ecrt_slave_config_dc (slave%(slave)d, 0x0%(assign_activate)ld, %(sync0_cycle_time)d, %(sync0_shift_time)d, %(sync1_cycle_time)d, %(sync1_shift_time)d);
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   102
"""
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   103
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   104
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   105
def ConfigureVariable(entry_infos, str_completion):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   106
    entry_infos["data_type"] = DATATYPECONVERSION.get(entry_infos["var_type"], None)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   107
    if entry_infos["data_type"] is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   108
        msg = _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"]
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   109
        raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   110
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   111
    if not entry_infos.get("no_decl", False):
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
   112
        if "real_var" in entry_infos:
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   113
            str_completion["located_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   114
                "IEC_%(var_type)s %(real_var)s;" % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   115
        else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   116
            entry_infos["real_var"] = "beremiz" + entry_infos["var_name"]
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   117
            str_completion["located_variables_declaration"].extend(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   118
                ["IEC_%(var_type)s %(real_var)s;" % entry_infos,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   119
                 "IEC_%(var_type)s *%(var_name)s = &%(real_var)s;" % entry_infos])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   120
        for declaration in entry_infos.get("extra_declarations", []):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   121
            entry_infos["extra_decl"] = declaration
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   122
            str_completion["located_variables_declaration"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   123
                "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos)
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
   124
    elif "real_var" not in entry_infos:
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   125
        entry_infos["real_var"] = "beremiz" + entry_infos["var_name"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   126
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   127
    str_completion["used_pdo_entry_offset_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   128
        "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x;" % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   129
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   130
    if entry_infos["data_type"] == "BIT":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   131
        str_completion["used_pdo_entry_offset_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   132
            "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x_bit;" % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   133
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   134
        str_completion["used_pdo_entry_configuration"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   135
            ("    {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   136
             "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   137
             "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   138
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   139
        if entry_infos["dir"] == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   140
            str_completion["retrieve_variables"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   141
                ("    %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   142
                 "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos)
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   143
        elif entry_infos["dir"] == "Q":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   144
            str_completion["publish_variables"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   145
                ("    EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   146
                 "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   147
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   148
    else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   149
        str_completion["used_pdo_entry_configuration"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   150
            ("    {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   151
             "%(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x},") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   152
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   153
        if entry_infos["dir"] == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   154
            str_completion["retrieve_variables"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   155
                ("    %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   156
                 "slave%(slave)d_%(index).4x_%(subindex).2x);") % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   157
        elif entry_infos["dir"] == "Q":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   158
            str_completion["publish_variables"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   159
                ("    EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   160
                 "%(real_var)s);") % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   161
2360
2a3d022a7dac cleanup etherlab: pep8, E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2355
diff changeset
   162
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   163
def ExclusionSortFunction(x, y):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   164
    if x["matching"] == y["matching"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   165
        if x["assigned"] and not y["assigned"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   166
            return -1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   167
        elif not x["assigned"] and y["assigned"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   168
            return 1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   169
        return cmp(x["count"], y["count"])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   170
    return -cmp(x["matching"], y["matching"])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   171
2360
2a3d022a7dac cleanup etherlab: pep8, E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2355
diff changeset
   172
2397
25f16349644b clean etherlab: pylint, C1001 # (old-style-class) Old-style class defined.
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2381
diff changeset
   173
class _EthercatCFileGenerator(object):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   174
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   175
    def __init__(self, controler):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   176
        self.Controler = controler
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   177
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   178
        self.Slaves = []
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   179
        self.UsedVariables = {}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   180
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   181
    def __del__(self):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   182
        self.Controler = None
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   183
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   184
    def DeclareSlave(self, slave_index, slave):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   185
        self.Slaves.append((slave_index, slave.getInfo().getAutoIncAddr(), slave))
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   186
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   187
    def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name, no_decl=False):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   188
        slave_variables = self.UsedVariables.setdefault(slave_index, {})
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   189
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   190
        entry_infos = slave_variables.get((index, subindex), None)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   191
        if entry_infos is None:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   192
            slave_variables[(index, subindex)] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   193
                "infos": (iec_type, dir, name, no_decl, []),
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   194
                "mapped": False}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   195
            return name
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   196
        elif entry_infos["infos"][:2] == (iec_type, dir):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   197
            if name != entry_infos["infos"][2]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   198
                if dir == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   199
                    entry_infos["infos"][4].append(name)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   200
                    return entry_infos["infos"][2]
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   201
                else:
2425
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   202
                    msg = _("Output variables can't be defined with different locations ({a1} and {a2})").\
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   203
                          format(a1=entry_infos["infos"][2], a2=name)
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   204
                    raise ValueError(msg)
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   205
        else:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   206
            raise ValueError(_("Definition conflict for location \"%s\"") % name)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   207
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   208
    def GenerateCFile(self, filepath, location_str, master_number):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   209
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   210
        # Extract etherlab master code template
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   211
        plc_etherlab_filepath = os.path.join(os.path.split(__file__)[0], "plc_etherlab.c")
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   212
        plc_etherlab_file = open(plc_etherlab_filepath, 'r')
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   213
        plc_etherlab_code = plc_etherlab_file.read()
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   214
        plc_etherlab_file.close()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   215
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   216
        # Initialize strings for formatting master code template
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   217
        str_completion = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   218
            "location": location_str,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   219
            "master_number": master_number,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   220
            "located_variables_declaration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   221
            "used_pdo_entry_offset_variables_declaration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   222
            "used_pdo_entry_configuration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   223
            "pdos_configuration_declaration": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   224
            "slaves_declaration": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   225
            "slaves_configuration": "",
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   226
            # add jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   227
            "slaves_input_pdos_default_values_extraction": "",
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   228
            "slaves_output_pdos_default_values_extraction": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   229
            "slaves_initialization": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   230
            "retrieve_variables": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   231
            "publish_variables": [],
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   232
            #-----------This Code templete for dc -------------------#
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   233
            "dc_variable" : "",
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   234
            "config_dc": ""
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   235
        }
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   236
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   237
        # Initialize variable storing variable mapping state
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   238
        for slave_entries in self.UsedVariables.itervalues():
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   239
            for entry_infos in slave_entries.itervalues():
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   240
                entry_infos["mapped"] = False
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   241
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   242
        # Sort slaves by position (IEC_Channel)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   243
        self.Slaves.sort()
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   244
        # Initialize dictionary storing alias auto-increment position values
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   245
        alias = {}
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   246
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   247
        # add jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   248
        slotNumber = 1
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   249
        
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   250
        # Generating code for each slave
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   251
        for (slave_idx, slave_alias, slave) in self.Slaves:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   252
            type_infos = slave.getType()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   253
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   254
            # Defining slave alias and auto-increment position
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   255
            if alias.get(slave_alias) is not None:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   256
                alias[slave_alias] += 1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   257
            else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   258
                alias[slave_alias] = 0
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   259
            slave_pos = (slave_alias, alias[slave_alias])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   260
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   261
            # Extract slave device informations
2137
b65abacdbdf9 Added support for multiple module extra params in ModulesLibrary
Laurent Bessard
parents: 2121
diff changeset
   262
            device, module_extra_params = self.Controler.GetModuleInfos(type_infos)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   263
            if device is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   264
                msg = _("No informations found for device %s!") \
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   265
                      % (type_infos["device_type"])
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   266
                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   267
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   268
            # Extract slaves variables to be mapped
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   269
            slave_variables = self.UsedVariables.get(slave_idx, {})
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   270
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   271
            # Extract slave device object dictionary entries
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   272
            device_entries = device.GetEntriesList()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   273
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   274
            # Adding code for declaring slave in master code template strings
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   275
            for element in ["vendor", "product_code", "revision_number"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   276
                type_infos[element] = ExtractHexDecValue(type_infos[element])
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   277
            type_infos.update(dict(zip(["slave", "alias", "position"], (slave_idx,) + slave_pos)))
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   278
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   279
            # Extract slave device CoE informations
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   280
            device_coe = device.getCoE()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   281
            if device_coe is not None:
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   282
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   283
                # If device support CanOpen over Ethernet, adding code for calling
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   284
                # init commands when initializing slave in master code template strings
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   285
                initCmds = []
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   286
                
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   287
                for initCmd in device_coe.getInitCmd():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   288
                    initCmds.append({
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   289
                        "Index": ExtractHexDecValue(initCmd.getIndex()),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   290
                        "Subindex": ExtractHexDecValue(initCmd.getSubIndex()),
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   291
                        #"Value": initCmd.getData().getcontent()})
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   292
                        "Value": int(initCmd.getData().text, 16)})
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   293
                
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   294
                initCmds.extend(slave.getStartupCommands())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   295
                for initCmd in initCmds:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   296
                    index = initCmd["Index"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   297
                    subindex = initCmd["Subindex"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   298
                    entry = device_entries.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   299
                    if entry is not None:
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
   300
                        data_size = entry["BitSize"] // 8
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   301
                        data_str = ("0x%%.%dx" % (data_size * 2)) % initCmd["Value"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   302
                        init_cmd_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   303
                            "index": index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   304
                            "subindex": subindex,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   305
                            "data": data_str,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   306
                            "data_type": DATATYPECONVERSION.get(entry["Type"]),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   307
                            "data_size": data_size
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   308
                        }
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   309
                        init_cmd_infos.update(type_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   310
                        str_completion["slaves_initialization"] += SLAVE_INITIALIZATION_TEMPLATE % init_cmd_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   311
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   312
                # Extract slave device PDO configuration capabilities
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   313
                PdoAssign = device_coe.getPdoAssign()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   314
                PdoConfig = device_coe.getPdoConfig()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   315
            else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   316
                PdoAssign = PdoConfig = False
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   317
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   318
            # Test if slave has a configuration or need one
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   319
            if len(device.getTxPdo() + device.getRxPdo()) > 0 or len(slave_variables) > 0 and PdoConfig and PdoAssign:
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   320
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   321
                str_completion["slaves_declaration"] += "static ec_slave_config_t *slave%(slave)d = NULL;\n" % type_infos
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   322
                str_completion["slaves_configuration"] += SLAVE_CONFIGURATION_TEMPLATE % type_infos
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   323
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   324
                # Initializing
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   325
                pdos_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   326
                    "pdos_entries_infos": [],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   327
                    "pdos_infos": [],
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   328
                    "pdos_sync_infos": [],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   329
                }
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   330
                pdos_infos.update(type_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   331
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   332
                sync_managers = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   333
                for sync_manager_idx, sync_manager in enumerate(device.getSm()):
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   334
                    sync_manager_infos = {
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   335
                        "index": sync_manager_idx,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   336
                        "name": sync_manager.getcontent(),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   337
                        "slave": slave_idx,
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   338
                        "pdos": [],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   339
                        "pdos_number": 0,
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   340
                    }
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   341
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   342
                    sync_manager_control_byte = ExtractHexDecValue(sync_manager.getControlByte())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   343
                    sync_manager_direction = sync_manager_control_byte & 0x0c
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   344
                    sync_manager_watchdog = sync_manager_control_byte & 0x40
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   345
                    if sync_manager_direction:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   346
                        sync_manager_infos["sync_manager_type"] = "EC_DIR_OUTPUT"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   347
                    else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   348
                        sync_manager_infos["sync_manager_type"] = "EC_DIR_INPUT"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   349
                    if sync_manager_watchdog:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   350
                        sync_manager_infos["watchdog"] = "EC_WD_ENABLE"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   351
                    else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   352
                        sync_manager_infos["watchdog"] = "EC_WD_DISABLE"
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   353
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   354
                    sync_managers.append(sync_manager_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   355
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   356
                pdos_index = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   357
                exclusive_pdos = {}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   358
                selected_pdos = []
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   359
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   360
                # add jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   361
                TxPdoData = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   362
                RxPdoData = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   363
                PdoData = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   364
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   365
                # add jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   366
                if len(device.getTxPdo() + device.getRxPdo()) > 0:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   367
                    for pdo in device.getTxPdo():
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   368
                        PdoData.append((pdo, "Inputs"))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   369
                    for pdo in device.getRxPdo():
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   370
                        PdoData.append((pdo, "Outputs"))               
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   371
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   372
                # mod jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   373
                #for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   374
                #                      [(pdo, "Outputs") for pdo in device.getRxPdo()]):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   375
                #for pdo, pdo_type in (TxPdoData + RxPdoData):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   376
                data_files = os.listdir(self.Controler.CTNPath())
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   377
                PDODataList = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   378
                MDPData = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   379
                RxPDOData = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getRxPDO()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   380
                TxPDOData = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getTxPDO()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   381
                PDOList = RxPDOData.split() + TxPDOData.split()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   382
                for PDOIndex in PDOList:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   383
                    if PDOIndex in ["RxPDO", "TxPDO", "None"]:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   384
                        continue
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   385
                    PDODataList.append(int(PDOIndex, 0))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   386
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   387
                # add jblee for DC Configuration
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   388
                dc_enable = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Enable()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   389
                sync0_cycle_time = 0
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   390
                sync0_shift_time = 0
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   391
                sync1_cycle_time = 0
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   392
                sync1_shift_time = 0
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   393
                if dc_enable :
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   394
                    sync0_cycle_token = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Sync0_Cycle_Time()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   395
                    if sync0_cycle_token != "None":
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   396
                        sync0_cycle_time = int(sync0_cycle_token.split("_")[1]) * 1000
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   397
                    sync0_shift_token = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Sync0_Shift_Time()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   398
                    if sync0_shift_token != "None":
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   399
                        sync0_shift_time = int(sync0_shift_token) * 1000
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   400
                    sync1_cycle_token = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Sync1_Cycle_Time()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   401
                    if sync1_cycle_token != "None":
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   402
                        sync1_cycle_time = int(sync1_cycle_token.split("_")[1]) * 1000
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   403
                    sync1_shift_token = self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Sync1_Shift_Time()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   404
                    if sync1_shift_token != "None":
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   405
                        sync1_shift_time = int(sync1_shift_token) * 1000
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   406
                    
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   407
                    dc_config_data = {
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   408
                        "slave" : slave_idx,
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   409
                        "assign_activate" : int(self.Controler.GetChildByIECLocation((slave_idx,)).BaseParams.getDC_Assign_Activate()),
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   410
                        "sync0_cycle_time" : sync0_cycle_time,
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   411
                        "sync0_shift_time" : sync0_shift_time,
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   412
                        "sync1_cycle_time" : sync1_cycle_time,
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   413
                        "sync1_shift_time" : sync1_shift_time,
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   414
                    }
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   415
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   416
                    if dc_enable and not str_completion["dc_variable"] :
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   417
                        str_completion["dc_variable"] += DC_VARIABLE % {"dc_flag" : dc_enable}
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   418
                    str_completion["config_dc"] += CONFIG_DC % dc_config_data
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   419
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   420
                for data_file in data_files:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   421
                    slave_path = os.path.join(self.Controler.CTNPath(), data_file)
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   422
                    if os.path.isdir(slave_path):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   423
                        CheckConfNodePath = os.path.join(slave_path, "baseconfnode.xml")
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   424
                        confNodeFile = open(CheckConfNodePath, 'r')
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   425
                        checklines = confNodeFile.readlines()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   426
                        confNodeFile.close()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   427
                        # checklines(ex) : <BaseParams xmlns:xsd="http://www.w3.org/2001/XMLSchema" IEC_Channel="0" Name="EthercatSlave_0"/>
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   428
                        # checklines[1].split() : [<BaseParams, xmlns:xsd="http://www.w3.org/2001/XMLSchema",
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   429
                        #                           IEC_Channel="0", Name="EthercatSlave_0"/>]
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   430
                        # checklines[1].split()[2] : IEC_Channel="0"
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   431
                        # checklines[1].split()[2].split("\"") = [IEC_Channel=, 0, ]
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   432
                        pos_check = int(checklines[1].split()[2].split("\"")[1])
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   433
                        if slave_idx == pos_check:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   434
                            MDPDataFilePath = os.path.join(slave_path, "DataForMDP.txt")
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   435
                            if os.path.isfile(MDPDataFilePath):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   436
                                MDPDataFile = open(MDPDataFilePath, 'r')
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   437
                                MDPData = MDPDataFile.readlines()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   438
                                MDPDataFile.close()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   439
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   440
                        for MDPLine in MDPData:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   441
                            if MDPLine == "\n":
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   442
                                continue
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   443
                            module_pos = int(MDPLine.split()[-1])
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   444
                            module = self.Controler.CTNParent.GetSelectModule(module_pos)
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   445
                            for pdo in module.getTxPdo():
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   446
                                PdoData.append((pdo, "Inputs"))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   447
                                PDODataList.append(ExtractHexDecValue(pdo.getIndex().getcontent()))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   448
                            for pdo in module.getRxPdo():
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   449
                                PdoData.append((pdo, "Outputs"))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   450
                                PDODataList.append(ExtractHexDecValue(pdo.getIndex().getcontent()))
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   451
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   452
                for pdo, pdo_type in PdoData:
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   453
                    pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   454
                    pdos_index.append(pdo_index)
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   455
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   456
                    if PDODataList and (pdo_index in PDODataList):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   457
                        continue
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   458
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   459
                    excluded_list = pdo.getExclude()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   460
                    if len(excluded_list) > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   461
                        exclusion_list = [pdo_index]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   462
                        for excluded in excluded_list:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   463
                            exclusion_list.append(ExtractHexDecValue(excluded.getcontent()))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   464
                        exclusion_list.sort()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   465
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   466
                        exclusion_scope = exclusive_pdos.setdefault(tuple(exclusion_list), [])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   467
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   468
                        entries = pdo.getEntry()
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   469
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   470
                        pdo_mapping_match = {
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   471
                            "index": pdo_index,
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   472
                            "matching": 0,
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   473
                            "count": len(entries),
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   474
                            "assigned": pdo.getSm() is not None
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   475
                        }
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   476
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   477
                        exclusion_scope.append(pdo_mapping_match)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   478
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   479
                        for entry in entries:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   480
                            index = ExtractHexDecValue(entry.getIndex().getcontent())
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   481
                            subindex = ExtractHexDecValue(entry.getSubIndex())
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   482
                            if slave_variables.get((index, subindex), None) is not None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   483
                                pdo_mapping_match["matching"] += 1
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   484
2374
aed3ca79a10a clean etherlab: pep8, E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2360
diff changeset
   485
                        if pdo.getFixed() is not True:
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   486
                            pdo_mapping_match["matching"] += \
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   487
                                module_extra_params["max_pdo_size"] - \
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   488
                                pdo_mapping_match["count"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   489
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   490
                    elif pdo.getMandatory():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   491
                        selected_pdos.append(pdo_index)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   492
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   493
                excluded_pdos = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   494
                for exclusion_scope in exclusive_pdos.itervalues():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   495
                    exclusion_scope.sort(ExclusionSortFunction)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   496
                    start_excluding_index = 0
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   497
                    if exclusion_scope[0]["matching"] > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   498
                        selected_pdos.append(exclusion_scope[0]["index"])
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   499
                        start_excluding_index = 1
2381
1c40e3976cc2 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2379
diff changeset
   500
                    excluded_pdos.extend([
1c40e3976cc2 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2379
diff changeset
   501
                        pdo["index"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   502
                        for pdo in exclusion_scope[start_excluding_index:]
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   503
                        if PdoAssign or not pdo["assigned"]])
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   504
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   505
                # mod jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   506
                #for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   507
                #                      [(pdo, "Outputs") for pdo in device.getRxPdo()]):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   508
                #for pdo, pdo_type in (TxPdoData + RxPdoData):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   509
                entry_check_list = []
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   510
                index_padding = 1
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   511
                for pdo, pdo_type in PdoData:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   512
                    entries = pdo.getEntry()                   
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   513
                    
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   514
                    pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   515
                    if pdo_index in excluded_pdos:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   516
                        continue
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   517
                    if PDODataList and (pdo_index not in PDODataList):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   518
                        continue
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   519
                    
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   520
                    #pdo_needed = pdo_index in selected_pdos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   521
                    pdo_needed = pdo_index in PDODataList
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   522
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   523
                    if len(MDPData) > 0:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   524
                        pdo_index += index_padding
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   525
                        index_padding += 1
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   526
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   527
                    entries_infos = []                   
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   528
                    for entry in entries:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   529
                        index = ExtractHexDecValue(entry.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   530
                        subindex = ExtractHexDecValue(entry.getSubIndex())
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   531
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   532
                        # add jblee
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   533
                        if len(MDPData) > 0:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   534
                            increse = self.Controler.CTNParent.GetMDPInfos(type_infos)                          
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   535
                            if increse and index != 0:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   536
                                index += int(increse[0][2]) * slotNumber
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   537
                                
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   538
                        entry_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   539
                            "index": index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   540
                            "subindex": subindex,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   541
                            "name": ExtractName(entry.getName()),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   542
                            "bitlen": entry.getBitLen(),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   543
                        }
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   544
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   545
                        entry_infos.update(type_infos)
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   546
                        #temp_data = "    {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   547
                        check_data = "{0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}" % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   548
                        if entry_check_list and check_data in entry_check_list:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   549
                            if (entry_infos["index"] == 0) or (entry_infos["name"] == None):
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   550
                                pass
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   551
                            else: 
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   552
                        entry_infos.update(type_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   553
                        entries_infos.append("    {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   554
                        entry_check_list.append(check_data)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   555
                        
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   556
                        entry_declaration = slave_variables.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   557
                        if entry_declaration is not None and not entry_declaration["mapped"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   558
                            pdo_needed = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   559
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   560
                            entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   561
                                                        entry_declaration["infos"])))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   562
                            entry_declaration["mapped"] = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   563
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   564
                            entry_type = entry.getDataType().getcontent()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   565
                            if entry_infos["var_type"] != entry_type:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   566
                                message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   567
                                if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   568
                                   self.Controler.GetSizeOfType(entry_type):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   569
                                    raise ValueError(message)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   570
                                else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   571
                                    self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   572
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   573
                            if (entry_infos["dir"] == "I" and pdo_type != "Inputs") or \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   574
                               (entry_infos["dir"] == "Q" and pdo_type != "Outputs"):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   575
                                raise ValueError(_("Wrong direction for location \"%s\"!") % entry_infos["var_name"])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   576
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   577
                            ConfigureVariable(entry_infos, str_completion)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   578
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   579
                        elif pdo_type == "Outputs" and entry.getDataType() is not None and device_coe is not None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   580
                            data_type = entry.getDataType().getcontent()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   581
                            entry_infos["dir"] = "Q"
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
   582
                            entry_infos["data_size"] = max(1, entry_infos["bitlen"] // 8)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   583
                            entry_infos["data_type"] = DATATYPECONVERSION.get(data_type)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   584
                            entry_infos["var_type"] = data_type
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   585
                            entry_infos["real_var"] = "slave%(slave)d_%(index).4x_%(subindex).2x_default" % entry_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   586
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   587
                            ConfigureVariable(entry_infos, str_completion)
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   588
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   589
                            if entry_infos["data_type"] == "BIT" :
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   590
                                str_completion["slaves_output_pdos_default_values_extraction"] += \
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   591
                                    SLAVE_OUTPUT_PDO_DEFAULT_VALUE_BIT % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   592
                            else :
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   593
                                str_completion["slaves_output_pdos_default_values_extraction"] += \
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   594
                                    SLAVE_OUTPUT_PDO_DEFAULT_VALUE % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   595
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   596
                        elif pdo_type == "Inputs" and entry.getDataType() is not None and device_coe is not None:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   597
                            data_type = entry.getDataType().getcontent()
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   598
                            entry_infos["dir"] = "I"
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   599
                            entry_infos["data_size"] = max(1, entry_infos["bitlen"] / 8)
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   600
                            entry_infos["data_type"] = DATATYPECONVERSION.get(data_type)
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   601
                            entry_infos["var_type"] = data_type
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   602
                            entry_infos["real_var"] = "slave%(slave)d_%(index).4x_%(subindex).2x_default" % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   603
                            
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   604
                            ConfigureVariable(entry_infos, str_completion)
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   605
                            
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   606
                            str_completion["slaves_input_pdos_default_values_extraction"] += \
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   607
                                SLAVE_INPUT_PDO_DEFAULT_VALUE % entry_infos
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   608
                    
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   609
                    if pdo_needed:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   610
                        for excluded in pdo.getExclude():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   611
                            excluded_index = ExtractHexDecValue(excluded.getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   612
                            if excluded_index not in excluded_pdos:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   613
                                excluded_pdos.append(excluded_index)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   614
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   615
                        sm = pdo.getSm()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   616
                        if sm is None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   617
                            for sm_idx, sync_manager in enumerate(sync_managers):
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   618
                                if sync_manager["name"] == pdo_type:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   619
                                    sm = sm_idx
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   620
                        if sm is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   621
                            raise ValueError(_("No sync manager available for %s pdo!") % pdo_type)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   622
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   623
                        sync_managers[sm]["pdos_number"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   624
                        sync_managers[sm]["pdos"].append(
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   625
                            {"slave": slave_idx,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   626
                             "index": pdo_index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   627
                             "name": ExtractName(pdo.getName()),
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   628
                             "type": pdo_type,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   629
                             "entries": entries_infos,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   630
                             "entries_number": len(entries_infos),
2374
aed3ca79a10a clean etherlab: pep8, E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2360
diff changeset
   631
                             "fixed": pdo.getFixed() is True})
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   632
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   633
                    # for MDP
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   634
                    slotNumber += 1
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   635
            
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   636
                if PdoConfig and PdoAssign:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   637
                    dynamic_pdos = {}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   638
                    dynamic_pdos_number = 0
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   639
                    for category, min_index, max_index in [("Inputs", 0x1600, 0x1800),
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   640
                                                           ("Outputs", 0x1a00, 0x1C00)]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   641
                        for sync_manager in sync_managers:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   642
                            if sync_manager["name"] == category:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   643
                                category_infos = dynamic_pdos.setdefault(category, {})
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   644
                                category_infos["sync_manager"] = sync_manager
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   645
                                category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"]
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   646
                                                          if not pdo["fixed"] and pdo["type"] == category]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   647
                                category_infos["current_index"] = min_index
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   648
                                category_infos["max_index"] = max_index
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   649
                                break
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   650
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   651
                    for (index, subindex), entry_declaration in slave_variables.iteritems():
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   652
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   653
                        if not entry_declaration["mapped"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   654
                            entry = device_entries.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   655
                            if entry is None:
2425
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   656
                                msg = _("Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}").\
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   657
                                      format(a1=index, a2=subindex, a3=type_infos["device_type"])
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   658
                                raise ValueError(msg)
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   659
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   660
                            entry_infos = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   661
                                "index": index,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   662
                                "subindex": subindex,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   663
                                "name": entry["Name"],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   664
                                "bitlen": entry["BitSize"],
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   665
                            }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   666
                            entry_infos.update(type_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   667
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   668
                            entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   669
                                                        entry_declaration["infos"])))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   670
                            entry_declaration["mapped"] = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   671
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   672
                            if entry_infos["var_type"] != entry["Type"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   673
                                message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   674
                                if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   675
                                   self.Controler.GetSizeOfType(entry["Type"]):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   676
                                    raise ValueError(message)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   677
                                else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   678
                                    self.Controler.GetCTRoot().logger.write_warning(message + "\n")
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   679
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   680
                            if entry_infos["dir"] == "I" and entry["PDOMapping"] in ["T", "RT"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   681
                                pdo_type = "Inputs"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   682
                            elif entry_infos["dir"] == "Q" and entry["PDOMapping"] in ["R", "RT"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   683
                                pdo_type = "Outputs"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   684
                            else:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   685
                                msg = _("Wrong direction for location \"%s\"!") \
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   686
                                      % entry_infos["var_name"]
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   687
                                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   688
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
   689
                            if pdo_type not in dynamic_pdos:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   690
                                msg = _("No Sync manager defined for %s!") % pdo_type
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   691
                                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   692
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   693
                            ConfigureVariable(entry_infos, str_completion)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   694
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   695
                            if len(dynamic_pdos[pdo_type]["pdos"]) > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   696
                                pdo = dynamic_pdos[pdo_type]["pdos"][0]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   697
                            elif module_extra_params["add_pdo"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   698
                                while dynamic_pdos[pdo_type]["current_index"] in pdos_index:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   699
                                    dynamic_pdos[pdo_type]["current_index"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   700
                                if dynamic_pdos[pdo_type]["current_index"] >= dynamic_pdos[pdo_type]["max_index"]:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   701
                                    raise ValueError(_("No more free PDO index available for %s!") % pdo_type)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   702
                                pdos_index.append(dynamic_pdos[pdo_type]["current_index"])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   703
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   704
                                dynamic_pdos_number += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   705
                                pdo = {"slave": slave_idx,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   706
                                       "index": dynamic_pdos[pdo_type]["current_index"],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   707
                                       "name": "Dynamic PDO %d" % dynamic_pdos_number,
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   708
                                       "type": pdo_type,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   709
                                       "entries": [],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   710
                                       "entries_number": 0,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   711
                                       "fixed": False}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   712
                                dynamic_pdos[pdo_type]["sync_manager"]["pdos_number"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   713
                                dynamic_pdos[pdo_type]["sync_manager"]["pdos"].append(pdo)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   714
                                dynamic_pdos[pdo_type]["pdos"].append(pdo)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   715
                            else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   716
                                break
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   717
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   718
                            pdo["entries"].append("    {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   719
                            if entry_infos["bitlen"] < module_extra_params["pdo_alignment"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   720
                                pdo["entries"].append("    {0x0000, 0x00, %d}, /* None */" % (
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   721
                                    module_extra_params["pdo_alignment"] - entry_infos["bitlen"]))
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   722
                            pdo["entries_number"] += 1
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   723
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   724
                            if pdo["entries_number"] == module_extra_params["max_pdo_size"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   725
                                dynamic_pdos[pdo_type]["pdos"].pop(0)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   726
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   727
                pdo_offset = 0
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   728
                entry_offset = 0
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   729
                slotNumber = 1
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   730
                for sync_manager_infos in sync_managers:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   731
                    for pdo_infos in sync_manager_infos["pdos"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   732
                        pdo_infos["offset"] = entry_offset
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   733
                        pdo_entries = pdo_infos["entries"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   734
                        pdos_infos["pdos_infos"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   735
                            ("    {0x%(index).4x, %(entries_number)d, " +
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   736
                             "slave_%(slave)d_pdo_entries + %(offset)d}, /* %(name)s */") % pdo_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   737
                        entry_offset += len(pdo_entries)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   738
                        pdos_infos["pdos_entries_infos"].extend(pdo_entries)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   739
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   740
                    sync_manager_infos["offset"] = pdo_offset
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   741
                    pdo_offset_shift = sync_manager_infos["pdos_number"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   742
                    pdos_infos["pdos_sync_infos"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   743
                        ("    {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " +
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   744
                         ("slave_%(slave)d_pdos + %(offset)d" if pdo_offset_shift else "NULL") +
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   745
                         ", %(watchdog)s},") % sync_manager_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   746
                    pdo_offset += pdo_offset_shift
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   747
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   748
                for element in ["pdos_entries_infos", "pdos_infos", "pdos_sync_infos"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   749
                    pdos_infos[element] = "\n".join(pdos_infos[element])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   750
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   751
                str_completion["pdos_configuration_declaration"] += SLAVE_PDOS_CONFIGURATION_DECLARATION % pdos_infos
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   752
            
2641
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   753
            #for (index, subindex), entry_declaration in slave_variables.iteritems():
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   754
            #    if not entry_declaration["mapped"]:
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   755
            #        message = _("Entry index 0x%4.4x, subindex 0x%2.2x not mapped for device %s") % \
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   756
            #                        (index, subindex, type_infos["device_type"])
c9deff128c37 EtherCat master plugin : commit changes recovered from KOSMOS 2018 installer, unkown author(s).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2165
diff changeset
   757
            #        self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   758
                    
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   759
        for element in ["used_pdo_entry_offset_variables_declaration", 
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   760
                        "used_pdo_entry_configuration", 
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   761
                        "located_variables_declaration", 
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   762
                        "retrieve_variables", 
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   763
                        "publish_variables"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   764
            str_completion[element] = "\n".join(str_completion[element])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   765
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   766
        etherlabfile = open(filepath, 'w')
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   767
        etherlabfile.write(plc_etherlab_code % str_completion)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   768
        etherlabfile.close()