Logic - Lab V - 2.3 en
Logic - Lab V - 2.3 en
User’s Manual
Logic Lab
Cod. MU00001E00 V_2.3
Index
MU00001E00 V_2.3 1
FIRMWARE VERSIONS: 12.1 / 22.1
2 MU00001E00 V_2.3
1. DATA BLOCKS
The purpose of the data blocks is to allow firmware declared variables to be accessed from the PLC code. These
variables could be read only or read/write.
1.1 GROUP = “I/O VARIABLES”
MU00001E00 V_2.3 3
1.4 GROUP = “MOTOR SENSOR”
4 MU00001E00 V_2.3
1.6 GROUP = “CONTROL VARIABLES”
MU00001E00 V_2.3 5
Memory MD53.1 sysSpeedEndPercReference 1 REAL R Final speed reference referred to
MOT_SPD_MAX for proportional part of
speed regulator.
Memory MD53.2 sysMaxEndPositiveTorque 1 REAL R Actual Maximum positive torque referred to
MOT_T_NOM
Memory MD53.3 sysMaxEndNegativeTorque 1 REAL R Actual Maximum negative torque referred
to MOT_T_NOM
Memory MD53.4 sysTorqueEndReference 1 REAL R Actual torque reference referred to
MOT_T_NOM
Memory MD53.5 sysMaxEndPositivePercSpeed 1 REAL R Final maximum positive speed referred to
MOT_SPD_MAX (P65)
Memory MD53.6 sysMaxEndNegativePercSpeed 1 REAL R Final maximum negative speed referred to
MOT_SPD_MAX (P65)
6 MU00001E00 V_2.3
MU00001E00 V_2.3 7
1.7 GROUP = “DRIVE PARAMETERS”
8 MU00001E00 V_2.3
Name Description UM Scale
MOT_TEMP D26 - Motor temperature °C 16
PRC_DRV_I_THERM D28 - Motor thermal current % soglia All 40.96
PRC_DRV_I_MAX D29 - Current limit % DRV_I_NOM 40.96
PRC_DRV_T_MAX D30 - Maximum torque % MOT_T_NOM 40.96
PRC_DRV_I_T_MAX D31 - Maximum torque by current limit % MOT_T_NOM 40.96
PRC_APP_T_MAX D32 - Maximum torque limit by application % MOT_T_NOM 40.96
PRC_APP_SPD_REF D33 - Speed reference (application generated) % MOT_SPD_MAX 163.84
PRC_MOT_T D35 - Actual torque produced % MOT_T_NOM 40.96
MOT_TURN_POS D36 - Absolute mechanical position (on current revolution) ±16384 1
MOT_N_TURN D37 - Number of revolutions 1
OFFSET_SINCOS_ENC D38 - Compensation Sin/Cos analog/digital term pulses 1
SENSOR_FRQ_IN D39 - Input frequency kHz 16
REG_CARD_TEMP D40 - Regulation card temperature °C 16
MOT_PRB_RES D41 - Thermal probe resistance Ohm 1
AI1 D42 - Analog Input AI1 % 163.84
AI2 D43 - Analog Input AI2 % 163.84
AI3 D44 - Analog Input AI3 % 163.84
SPD_ISR D45 - Speed routine duration us 64
I_ISR D46 - Current routine duration us 64
I_LOOP_BAND D47 - Current loop bandwidth Hz 1
PRC_APP_T_MIN D48 - Minimum torque limit by application % MOT_T_NOM 40.96
WORK_HOURS D49 - Work Hours hours 1
ENC_HALL_SECTOR D50 - Encoder and Hall sens sector read 1
SENS2_SPD D51 - Second sensor rotation speed rpm 1
D52 - Second sensor Absolute mechanical position (on
SENS2_TURN_POS 16384 1
current revolution)
SENS2_N_TURN D53 - Second sensor Number of revolutions 16384 1
SENS2_FRQ_IN D54 - Second sensor Frequency input KHz 16
SENS1_ZERO_TOP D55 - Sensor1 Zero Top pulses 1
SENS2_ZERO_TOP D56 - Sensor2 Zero Top pulses 1
D57 - Delay from SYNC reception to Speed routine
SYNC_DELAY us 1
execution
PWM_SYNC_OFFSET D58 - PWM offset for SYNC delay control pulses 1
SERIAL_NUMBER D59 - Drive Serial Number 1
FLD_CARD D60 - Fieldbus Card 1
APPL_REV D61 - Application Revision 40.96
MU00001E00 V_2.3 9
o MW103.0 sysOsc (word), refreshed in the fast core task
10 MU00001E00 V_2.3
AI2 O38 Analog input A.I.2 100%=16383 163.84
AI3 O39 Analog input A.I.3 100%=16383 163.84
O41 Application speed reference value
SYS_SPD_PERC_REF % MOT_SPD_MAX 163.84
(sysSpeedPercReference)
O42 Application torque reference value
SYS_T_PERC_REF % MOT_T_NOM 40.96
(sysTorqueReference)
O43 Application torque limit reference value
SYS_T_MAX % MOT_T_NOM 40.96
(sysMaxTorque)
O44 Frequency speed reference value from application
SYS_SPD_REF_PULS Pulses per TPWM 1
(sysSpeedRefPulses)
O45 Overlapped space loop reference value from
SYS_POS_REF_PULS Pulses per TPWM 1
application (sysPosRefPulses)
O46 Amplitude to the square of sine and cosine feedback
RES_AMPLITUDE 1=100% 1
signals
RES_SIN O47 Sen_theta 1
RES_COS O48 Cos_theta 1
PRC_MOT_SPD O49 Rotation speed not filtered % MOT_SPD_MAX 163.84
PULSES_RD O50 Delta pulses read in PWM period in frequency input Pulses per PWM 1
MEM_POS_LSW O51 Overlapped space loop memory lsw electrical pulses 1
MEM_POS_MSW O52 Overlapped space loop memory msw electrical pulses 1
INCR_SIN O53 Incremental SIN theta Sin/Cos Encoder 1
INCR_COS O54 Incremental COS theta Sin/Cos Encoder 1
INIT_RESET O55 Initial reset ended 1
PTM_TH_PRB O56 PTM motor thermal probe 40.96
PTR_TH_PRB O57 PTR radiator thermal probe 40.96
SENS_PULSES_RD O58 Pulses read by sensor 1
PRC_SENS2_SPD O59 SENS2 Rotation speed not filtered % MOT_SPD_MAX 163.84
ACT_SENS2_POS O60 SENS2 Actual position 327.67
SENS2_SIN O61 SENS2 Sin_theta 1
SENS2_COS O62 SENS2 Cos_theta 1
SYNC_DELAY O63 Delay on SYNC reception 1
SYS_T_MIN O64 Application minimum torque limit reference value % MOT_T_NOM 40.96
BRAKE_EN O65 Energy dissipated on breaking resistance Joule 1
MU00001E00 V_2.3 11
o MW105.0 sysExtraInt , refreshed in the background core task
12 MU00001E00 V_2.3
o MW106.0 sysCommands
MU00001E00 V_2.3 13
1.9 GROUP = “CAN OPEN VARIABLES”
14 MU00001E00 V_2.3
1.12 GROUP = “SPI VARIABLES”
2. EMBEDDED BLOCKS
The embedded blocks are firmware functions written in C language that can be used inside PLC applications.
WriteCon(index,data) index Connection INT Write result BOOL This block can be used to write
Table index a standard conection [0÷199]
[0÷99] TRUE=ok with key and drive status
FALSE=no control.
data valore INT
WriteInt (index,data) index Application INT Write result BOOL This block is usually used into
internal value SLOW task to refresh an
index [64÷127] TRUE=ok application internal value
FALSE=no [64÷127].
data value INT
WriteOutDig (index,data) index Logic Output INT Write result BOOL This block is used to change
index [0÷3] immediately the state of one
TRUE=ok digital output
data Value to set BOO FALSE=no
L
MU00001E00 V_2.3 15
2.2 I/O MANAGEMENT
There are 2 way to manage digital and analog reference from application poit of view:
1. Read and write directly physical data. This approach is very easy and give to application maximum freedom
degree.
2. Call Embedded block “Standard I/O” from slow or fast PLC task. In this way the application exchange data with
physical layer using some data block.
Control variables
LogicLab application
sysTabDigOutput [32] Motor Control
sysOSC[68]
LogicLab application can read directly analog, digital, fieldbus amd modbus inputs and can write digital and analog
output. In this case the application has the complete control of physical I/O, but this meaning that is disabled
multiplexing of digital inputs, digital outputs and analog outputs.
About digital outputs, the Motor Control core changes the first 32 digital output function of data block “sysTabDigOutput”
and application can use this information to change the physical logic outputs with data block “sysLogicalOutput”.
About analogl outputs, the Motor Control core changes the first 68 monitor value of data block “sysOSC” and application
can use this information to change the physical analog outputs with data block “sysAnalogOutput”.
16 MU00001E00 V_2.3
2.2.2 GROUP = “STANDARD I/O”
I1÷I31
C1 ÷ C8 I1÷I31 I00 I00
multiplex
I00 AND
inizialization
Physical Inputs
I1÷I31 OR Standard_IO()
InitInpDigConnector ()
sysRunCommand
LogicLab application Motor Control
Control variables
WriteTabOutDig () WriteOsc ()
31
32 67
68
Standard_IO()
63 99
MU00001E00 V_2.3 17
Name Description
This embedded block manages in parallel way physical inputs (multiplexed with connection
Standard_IO ()
C1÷C8), serial line inputs and fieldbus inputs and produce the output function logics into data
block “sysTabDigInput”.
Standard_IO deals of logical output multiplexing (with connection C10÷C13) starting from data
block “sysTabDigOutput” and analog output multiplexing (with connection C15÷C16) starting from
data block “sysOSC”.
Standard_IO boolean output is the logic AND of run command logic function I00 from connector,
serial line and fieldbus. Usually this output is give to motor run command in this way:
sysRunCommand := Standard_IO();
InitInpDigConnector data Logical input INT Inizialization BOOL With this function it’s possible
(data) function index result to set a logical input function.
[0÷31] TRUE=ok (“sysTabDigInput”), usually in
FALSE=no BOOT task. This value is kept
if this logical function isn’t
configured in any physical
input. It’s mandatory to use it
in conjuction with Standard_IO
function
18 MU00001E00 V_2.3
Write result With this function it’s
WriteApplData (address, addres Starting DINT INT
0 = ok possible to write up to
n_word, index) s address
1 = EEPROM alarm 30Kapplication word in
2 = index too big permanent memory from
n_word Word to write INT 3 = n_word too big desidered address.
EEPROM 4 = n_word <0 This function has to be call
index INT
memory index 5 = too much from Slow task.
[0÷29999] repetitive write
NB: every 7 word takes
about 5-10ms to be written,
so slow task will be stopped
for this time
ChangeNmax(newmax) newmax New INT Write result BOOL With this block it’s possible
MOT_SPD_MAX TRUE=ok to change on-line motor
FALSE=no maximum speed (P65) with
memory ramps ricalculation
MU00001E00 V_2.3 19
new_object function realizes new entries in the Dictionary Object Can Open. The objects can have the following general
structure (for more information, see CiA Draft Standard 301): VAR, ARRAY and DOMAIN; with the following data types:
INTEGER8, INTEGER16, INTEGER 32, UNSIGNED8, UNSIGNED 16, UNSIGNED32. It is possible to define the object
attributes like the access type (READ, WRITE).
new_object can create up to 100 Dictionary Objects; the indexes are included in the range from 2000 h to A000 h. Pay
attention that the indexes from 2000 h to 2024 h are used for old Open Drive Dictionary (for more information, see
CANOpen OPD Documentation). It is possible to rewrite these objects in the BOOT task.
• New object variable address. The address must be a 32 bit integer value (Use the function ADR(Variable
Name) to pass the variable address);
• Object features. It defines the General Structure, the Data Type and the Access Type.
• Variable length. It defines the dimension of the DOMAIN structure.
• Object index. New object can have indexes from 2000 h to A000 h to create objects in Manufacturer Specific
Profile Area and Standardised Device Profile Area.
Data Types (bit) Data Type Code General Structure Structure Code Data Length
VAR 0 N.U. (*)
INTEGER8 (8) 8
ARRAY(***) 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED8 (8) 8
ARRAY 1 - 255 N.U. (*)
VAR 0 N.U. (*)
INTEGER8 (8) 9
ARRAY DS301(***) 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED8 (8) 9
ARRAY DS301 1 - 255 N.U. (*)
VAR 0 N.U. (*)
INTEGER16 (16) 16
ARRAY 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED16 (16)
16 ARRAY 1 - 255 N.U. (*)
VAR 0 N.U. (*)
INTEGER16 (16) 17
ARRAY DS301 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED16 (16) 17 ARRAY DS301 1 - 255 N.U. (*)
VAR 0 N.U. (*)
INTEGER32 (32) 32
ARRAY 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED32 (32)
32 ARRAY 1 - 255 N.U. (*)
VAR 0 N.U. (*)
INTEGER32 (32) 33
ARRAY DS301 1 - 255 N.U. (*)
VAR 0 N.U. (*)
UNSIGNED32 (32) 33 ARRAY DS301 1 - 255 N.U. (*)
20 MU00001E00 V_2.3
Readable Writeable Readable and writeable
Access Type Code 1 2 3
Object Features parameter is shared in three fields. In these fields are inserted the codes to define: General Structure,
Data Type and Access Type.
new_object have a output parameter, it indicates the object building. In the following table are descripted the return
values.
MU00001E00 V_2.3 21
Object features = 0A43h;
Variable length=0;
Object index=2020h;
Rest := new_object(ADR(Tab_dati_applicazione),16#0A43,0,16#2020);
transmiss Transmission
UINT
ion_type type
22 MU00001E00 V_2.3
inhibit_time, event_time ) cob_id_p COB-ID PDO Table (CiA Draft Parameter. It must be
DINT
do Standard 301) used into BOOT or
SLOW tasks.
Transmis Transmission
UINT
sion_type type
The functions in the table are used for Server SDO Parameter configuration, Receive PDO Communication Parameter
configuration, Receive PDO Mapping Parameter configuration, Transmit PDO Communication Parameter configuration
and Transmit PDO Mapping Parameter configuration from LogicLab. Moreover it is possible to manage NMT protocol to
change the state of the NMT slave (OPD).
In order to change the state of the NMT Slave (OPD EXP) is introduced the NMT_config function.
The state is changed by the NMT command specifier of the NMT protocol (for more information, see CiA Draft Standard
301 protocol).
CS = 1 => START, NMT_config function sets the state of the OPD EXP to
OPERATINAL
CS = 2 => STOP, NMT_config function sets the state of the OPD EXP to STOPPED
CS = 128 => enter PRE-OPERATIONAL, NMT_config function sets the state of the
OPD EXP to PRE-OPERATIONAL
CS = 129 => RESET APPLICATION, NMT_config function sets the state of the OPD
EXP from any state to the “reset application” sub-state
CS = 130 => RESET COMMUNICATION, NMT_config function sets the state of the
OPD EXP from any state to the “reset communication” sub-state
MU00001E00 V_2.3 23
NMT _config function will be defined in the following way:
In order to describe the SDOs used on the OPD EXP is introduced the Sdo_commun_config function.
Server SDO Parameter Configuration:
nd
2 Server SDO parameter (1201 h object index)
COB-ID Client->Server (rx) = 610 h
COB-ID Server->Client (tx) = 590 h
In order to set the TPDOs communication parameter used on the OPD EXP is introduced the Tra_pdo_commun_conf
function.
Transmit PDO Communication Parameter Configuration:
rd
3 Transmit PDO Communication Parameter (1802 h object index)
TPDO COB-ID = 210 h
Transmission type = PDO is transmitted on an event time (code=FE h)
Inhibit time = no inhibit time
Event timer = 100 ms
In order to set the TPDOs mapping parameter used on the OPD EXP is introduced the Tra_pdo_mapping_conf
function.
Transmit PDO Mapping Parameter Configuration:
rd
4 Transmit PDO Mapping Parameter (1A03 h object index)
Mapped objects of the Manufacturer Specific Profile Area (see lower table)
=> Speed reference object (index=201C h)
=> Speed reference object (index=201D h)
th
=> 4 element of the application area array (index=201E h, sub-index=4)
=> Logical output (index=201F h)
=> OPD status (index=2020 h)
24 MU00001E00 V_2.3
In LogicLab, we create two array containing 8 elements (PAY ATTENTION, the array must be declared as global
variables):
DINT index[8];
DINT sub_index[8];
Nr index Nr sub_index
0 201C 0 0
1 201D 1 0
2 201E 2 4
3 201F 3 0
4 2020 4 0
5 0 5 0
6 0 6 0
7 0 7 0
ErrorFieldEmcy function configures the last three byte of the Manufacturer Specific Error Field.
Manufacturer Specific Error Field Configuration: set 2 bytes with the code_alarm value.
Rest := ErrorFieldEmcy(code_alarm, 2)
2.6 GROUP = “FREQUENCY INPUT”
MU00001E00 V_2.3 25
Capture_Digit_In1 addr_time_ Capture timer pointer DINT See UINT This function analysis
(addr_time_base_cap base_capt “sysTimerCapture” Table 1 the edge of a digital
t, addr_elapsed_time, signal with frequency
edge) – input 6 smaller than 2 *
FPWM. It must be
Addr_elaps Elapsed time pointer DINT
Capture_Digit_In2 used into FAST task
ed_time (unit=6.6ns)
(addr_time_base_cap
t, addr_elapsed_time,
edge) – input 7
edge Active edge INT
Capture_Digit_In3
(addr_time_base_cap
t, addr_elapsed_time,
edge) – input 8
Capture_Digit_Inx function captures the edge of a digital signal with frequency smaller than two times PWM frequency.
This function can capture up to 4 events in the PWM period. The pulses with time duration lower than 26 μs are
neglected.
The function is formed from two pointers and a active edge parameter:
- Capture timer pointer. This pointer returns the event timer (in CPU clock cycles).
- Elapsed time pointer. This pointer returns the elapsed time between two happened events (in CPU clock
cycles).
- Active edge. This parameter sets the active edge for the signal analysis (Active Rising Edge or Active Falling
Edge).
Moreover the function has an output parameter for events description (see Table 1).
If the event is a pulse, the “elapsed time” is the time duration, whereas if the event is an edge, the “elapsed time” is the
elapsed time between PWM period start and event time (see Figure 1).
26 MU00001E00 V_2.3
Return Event happened in the Event happened in the
Event previous PWM period current PWM period Description
Value
0 - - - No event
Positive
11 - Positive pulse in the current PWM period
pulse
Falling
13 - Falling edge in the current PWM period.
edge
Positive
Positive pulse and a rising edge in the current PWM
14 pulses + -
period.
Rising edge
Two
15 positive - Two positive pulses in the current PWM period.
pulses
Falling
Falling edge and a positive pulse in the current
edge +
18 PWM period, whereas in the previous PWM the
Positive
function have found a rising edge
pulse
Negative
21 - Negative pulse in the current PWM period
pulse
Falling
22 - Falling edge in the current PWM period.
edge
MU00001E00 V_2.3 27
Negative
pulse + Negative pulse and fall edge in the current PWM
24 -
Falling period.
edge
Two
25 negative - Two negative pulses in the current PWM period.
pulses
Rising edge Rising edge and negative pulse in the current PWM
28 + negative period, whereas in the previous PWM the function
pulse have found a falling edge
The active edge is the first event took in PWM period. It is the rising edge if active edge parameter is equal to ‘0’,
whereas is falling edge if active edge parameter is equal to ‘1’.
Capture_Digit_Inx Example
return_cap=Capture_Digit_In1(ADR(event_time),ADR(elapsed_time), edge )
Capture_Edge_Inx function captures the dominant edge of a digital signal. This function returns the event time and the
elapsed time between event time and PWM period end (see Figure 2). The pulses with time duration lower than
“Minimum pulse time” will be neglected. If the elapsed time between event time and PWM period end is lower to
“Minimum pulse time”, the function waits the next PWM period before to define the event as impulse noise.
The function is formed from two pointers, an active edge parameter and a minimum pulse time:
28 MU00001E00 V_2.3
- Capture timer pointer. This pointer returns the event timer (in CPU clock cycles).
- Elapsed time pointer. This pointer returns the elapsed time between two happened events (in CPU clock
cycles).
- Active edge. This parameter sets the active edge for the signal analysis (Rising Edge Active or Falling Edge
Active).
- Minimum pulse time. It defines the minimum time duration for the impulse (in μs). The permitted maximum
value is 200 μs.
Moreover the function has an out parameter for events description (see Table 2).
Figure 2. Capture_Edge_Inx function working. In this figure “Minimum pulse time” is equal to 26 μs
0 - - No event
Two positive
2 Two positive pulses in the current PWM period.
pulses
Two negative
20 Two negative pulses in the current PWM period.
pulses
MU00001E00 V_2.3 29
Noises found
100 Noise Pulses with time duration lower than “Minimum pulse time”.
100 Noise Pulses with time duration lower than “Minimum pulse time”
(in 14 or 24 event type, see Table 1).
Capture_Edge_Inx Example
In event_time is inserted the timer value when the event is happened, in CPU cycles, for example
In milliseconds:
Pay attention which the CPU timer is a free-running 32 bit register, therefore the maximum value is 2^32-1=
4294967295. In elapsed_time is inserted the elapsed time between event time and PWM period. elapsed_time maximum
value is always lower than 400 µs.
ReceiveDataSPI addr_data_RX Received DINT 0 = data not UINT This function receives
(addr_data_TX) Data received the SPI data. It must
be used into FAST
1 = data received
task
2 = error. Wrong
CRC has been
detected.
3 = error. The SPI
Module has
received too many
data.
30 MU00001E00 V_2.3
2.8 GROUP= “MATHEMATICS”
CAN2_Init function initializes the secondary CAN bus for communication with other drives or devices (like I/O
expansion).
The Baud parameter has the same range and coding of connection C48 (CANOPEN_BAUD_SET):
0 1 Mbit/s
1 reserved (1 Mbit/s)
2 500 kbit/s
3 250 kbit/s
4 125 kbit/s
5 100 kbit/s
6 50 kbit/s
7 20 kbit/s
RxCobId1 and RxCobId2 parameters are for COB-ID of the 2 receiving mailbox available: only CAN standard mode
(11bit IDs) is supported (not the extended 29bit IDs) so allowed range is 000h-7FFh. The IDs can be the same.
CAN2_Init can be re-issued multiple times during run-time if the receiving mailbox IDs had to be changed. During
reconfiguration all pending messages will be dropped.
MU00001E00 V_2.3 31
Name Input Output Description
Name Descr. Type Descr. Type
CobId COB-ID of TRUE=previ
CAN2_Tx1 (CobId, UINT BOOL This function check if the
message to ous msg st
n_byte, addr_data_TX) 1 transmit mailbox is
send sent and
empty and, if so, queue
n_byte n. of byte of data current msg
INT in the new data for
to send queued into
transmission.
tx mailbox
addr_data_T pointer to the FALSE=prev
DINT
X buffer containing ious mgs still
data to send unsent
CobId COB-ID of TRUE=previ
CAN2_Tx2 (CobId, UINT BOOL This function check if the
message to ous msg nd
n_byte, addr_data_TX) 2 transmit mailbox is
send sent and
empty and, if so, queue
n_byte n. of byte of data current msg
INT in the new data for
to send queued into
transmission.
tx mailbox
addr_data_T pointer to the FALSE=prev
DINT
X buffer containing ious mgs still
data to send unsent
st nd
CAN2_Tx1 and CAN2_Tx2 functions are used to send messages into the CAN bus, using 1 and 2 transmit
mailboxes.
These functions don’t wait for trasmission completion (as the transmission time is affected by the CAN bitrate, the
message data size and the COB-ID priority respect to the packet traffic on the bus) but just queue the new message into
the trasmission mailbox (if empty).
Before queueing the new message, the transmission mailbox is checked: if a previous message is still present unsent
the function exits returning FALSE.
If n_byte parameter is negative, the function only check for transmission mailbox emptyness without queueing new
message: this can be used for polling-check the mailbox.
If n_byte is zero, a message with no data will be sent (so, just the COB-ID).
The max number of byte to send is 8.
The addr_data_TX parameter must point to a valid 8 elements buffer (even if n_byte is less than 8).
Only CAN standard mode (11bit IDs) is supported (not the extended 29bit IDs) so allowed range is 000h-7FFh.
All the parameters can be changed at every call.
32 MU00001E00 V_2.3
s.p.a. tecnologie digitali elettroniche
Via dell’Oreficeria, 41
36100 Vicenza - Italy
Tel +39 0444 343555
Fax +39 0444 343509
www.tdemacno.com