edcManual

Welcome

Welcome to edcManual!

This technical manual includes safety instructions, technical specifications and information for the initial operation of the drive controllers and expansion modules from ENGEL.
This manual will help you to operate our products optimal and safe.

Please read this document carefully "before you start operating the device" and keep it always near the device to have it at your disposal if necessary.

The edcManual is structured in the following chapters:
  • Introduction - A summary of the used symbols and abbreviations and the basic convention of the document
  • Installation - Safety instructions for handling our products, basic information about wiring the power and electronic supply and bus systems, and basic information about different feedbacks.
  • edcTools - A summary of our software tool
  • Drive controller - Technical data for the different drive controllers, connectors and technical drawings
  • Expansion modules - Technical data for the different expansion modules like brake choppers, IO-modules or gateways
  • Parameter lists - A dictionary of the control parameters and objects for the drive controllers and IO-modules
  • Application notes - Information and examples for the handling of our products
  • MPU2 - A summary of the custom-designed programming of the "motion process unit" with its functions and examples.
  • Communication interfaces - A summary of the communication interfaces of our products
  • Service - Basic information about service like contact information, warranty, transport, storage and disposal.

Before operating the device you have to read and follow the safety instructions! If you don't follow these instructions and take precautionary measures death, injuries and/or damage of property may occur.

We are of cause available, if you have any further questions. Please contact your appropriate service department. The appropriate service department for you can be found in the section "Service - Info".

ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten


Content - Introduction

Used symbol

Abbreviations

Convention of document


Used symbol

Symbol | Description | Meaning
 | Danger ! | Warns against immediate human health risk. Failure to comply can result in death, grievous body harm and/or considerable damage if the necessary precautions are not been taken.
 | Warning ! | Warns against possible danger. Failure to comply can result in death, grievous body harm and/or considerable damage if the necessary precautions are not been taken.
 | Caution ! | Warns against a possibly dangerous situation. Failure to comply can result in grievous body harm and/or considerable damage if the necessary precautions are not been taken.
 | Important ! | Symbolizes important information about the device or its method of operating.
 | Hardware | Hints related to hardware.
 | Tip | Symbolizes a useful hint.
 | Source code | Marks a section with source code.
 | Example | Symbolizes an example.


Abbreviations

Term | Meaning
MPU | Motion Process Unit. Unit (developed by ENGEL) to programming logical connections and sequences (PLC functionality).
MPU2 | Motion Process Unit. Unit (developed by ENGEL) to programming logical connections and sequences (PLC functionality). Programmable in a Python script.
CAN | Controller Area Network
CANopen | Communication protocol for CAN-Bus systems. CANopen based on CAL (CAN Application Layer).
COB | Communications Object
COB-ID | CAN Communication Object Identifier
Node-ID | CAN Node Identifier
PDO | Process Data Object
RxPDO | Receive-PDO
TxPDO | Transmit-PDO
SDO | Service Data Object
EDS | Electronic Data Sheet
PWM | Pulse Width Modulation
AIN | Analog input
AOUT | Analog output
DIN | Digital input
DOUT | Digital output
Baudrate | Transmission speed of the conveyance of communication
CAN Master | „Command center" of the CAN Bus
Bus | Communication network where all participants can be reached by passive connections and where communication is possible in both directions.
DSP 402 | CANopen device profile for drivers and controllers
Hall sensors | Sensors for determining the position of a rotor
Incremental encoder | Digital encoder. An integrated logic processes the signal of the photo diodes and creates two square-wave signals with a phase shift of 90°.

Trademark notices:

CiA® and CANopen® are registered community trademarks of CAN in Automation e.V..
EtherCAT® is registered trademark and patented technology, licensed by Beckhoff Automation GmbH, Germany.
PROFIBUS® is a registered trademark of PROFIBUS and PROFINET International (PI).
PROFIBUS DP® is a registered trademark of Siemens AG.


Convention of document

Parameters

Device parameter is address through Index (16-Bit value) and Subindex (8-Bit value).

Notation (Index = 0x6040, Subindex = 0):

Prefix „0x“ or suffix „h“ next to number means HEX-Notation.

Example: 0x6040 or 6040h

Index of parameter will be usually written in HEX-Notation.

Hints

Hints will be marked in following way:

"Description of useful tip"

Source code - Listings

Listings of program will be marked in the following way:

SOURCE CODE

from
mc.dsa import *

d = Dsa(1)

d.Enable()
d.ModeVel()
d.Vel()


Content - Installation

Electromagnetic Compatibility (EMC)

Communication interfaces

Safety instructions

Motor

Power supply

Feedback

Brake chopper

Magnetic encoder chip


Content - Electromagnetic Compatibility (EMC)

Why Electromagnetic Compatibility

Safety instructions

Applied standards

Applied standards

EMC suitable wiring and installtion


Why Electromagnetic Compatibility

The drive controllers of the EDC series are devices with clocked power amplifiers. Pulse width modulated signals (PWM) with high frequency content are used to achieve high efficiency and low power loss. These signals can cause increased emissions. Therefore, when planning a machine or system with drive controllers, the principles regarding cabling for EMC must always be taken into account.


Safety instructions

Components and end application

 The devices of the EDC series are not end-user products and are intended for use in an end application (machine or system), consisting of a feeding device/power supply unit, peripherals and a motor. Accordingly, the manufacturer of the end product (machine or system) is responsible for compliance with EMC directives and limit values in the end application.

Conformity of the end application

The drive controllers are tested with regard to their electromagnetic compatibility. However, the conformity of the device does not allow any general statements to be made about the conformity of the end product (machine or system).
The conformity of the end product must be checked by the manufacturer of the end product along with connected parts, such as the power supply unit, the motor, a PLC and other peripherals. Besides the protective and filter elements installed in the actual drive controller, additional actions may also be required to achieve conformity (shielded cables, external protective elements, mains filters).

Electrostatically sensitive devices and components

When installing, commissioning and servicing the devices, protective measures must be observed to reduce the risk of electrostatic discharges (ESD). This applies in particular to anti-static workwear, anti-static tools and an anti-static working environment. As a result, the devices must be handled with extreme care.
To protect against electrostatic discharges during operation, all plug connectors must be connected to the device, even if the respective signals are not used. The plug connectors serve as protection against direct contact.
Work on PCBs without casing may only be undertaken by fully trained staff in an anti-static environment.


Applied standards

Product standard

  • IEC/EN 61800-3 - Adjustable speed electrical power drive systems - Part 3: EMC requirements and specific test methods

  • IEC/EN 61800-5-2 - Adjustable speed electrical power drive systems - Part 5-2: Safety requirements - Functional

    • Generic standards

  • IEC/EN 61000-6-2 - Immunity standard for industrial environments

  • IEC/EN 61000-6-4 - Immunity standard for industrial environments

    • Basic standards

  • IEC/EN 55016 (CISPR16) - Measuring apparatus and methods of measurement of disturbances and immunity

  • EC/EN 61000-4-2 - Electrical fast transient/burst immunity

  • IEC/EN 61000-4-4 - Electrostatic discharge immunity test

  • IEC/EN 61000-4-5 - Surge immunity test

  • IEC/EN 61000-4-6 - Immunity to conducted disturbances, induced by radio-frequency fields

  • IEC/EN 61000-4-6 - Radiated, radio-frequency, electromagnetic field immunity test, amplitude

    • ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten


Applied standards

The product standard for electromagnetic compatibility on which the drive controllers are based is DIN EN 16800-3 "Adjustable speed electrical power drive systems - Part 3: EMC requirements and specific test methods".
An adjustable speed electrical power drive system consists of a feeding section, the drive module, the motor and various auxiliary equipment.
The image shows the structure and the interfaces between the individual parts.

Image: Block diagram of adjustable speed electrical power drive system

Blockschaltbild Drehzahlveränderlicher elektrischer Antrieb
Drive controllers of the EDC series represent the basic drive module (BDM). Interfaces are available for the power supply (transformer, power supply unit), the motor, internal auxiliary equipment (sensors/encoders) and process peripherals (e.g. PLC/IPC via I/O and fieldbus).


EMC suitable wiring and installtion

If not described separately, the following information applies to the devices:

General

  • When installing, commissioning and maintaining the devices, an ESD-compliant working environment and equipment must always be guaranteed

  • The devices must be supplied with DC voltage via an insulated power supply unit

  • The units are not designed to be connected directly to a DC or AC mains supply

  • All the cables must be shielded

  • Unshielded cables can cause the emission limits to be exceeded in the end application

  • Furthermore, unshielded cables may result in sensitive signals (e.g. encoder or Hall) being affected by interference

  • Cables should not measure more than 30m in length

  • If longer cable lengths are required, it must be ensured that filters or protective elements are provided for signal and supply cables

  • The cable shield must be connected at both ends to PE or to chassis ground

  • The FE connection of the controllers must be connected to PE or to chassis ground of the machine or system

  • The shield connection of the device and the FE connection should be connected as short as possible to a common point

  • When connecting shields to PE or FE, high-frequency compatible connectors (e.g. earthing straps or other connectors with a large surface area) must be used; wires with ring-type terminals are unsuitable for this purpose

  • The ground of the DC supply for Up must be connected to PE at the power supply unit

    • Caution, the functional earth or FE connection is not a protective conductor terminal. FE serves as a shield connection for eliminating EMC interference.

  • At devices without FE connection, the shields are connected directly to PE; both ground and PE are connected to the power supply unit

  • The heat sinks of the devices are connected internally to the FE pin

  • When laying the cables, signal cables must always be run separate from power/motor drive cables

  • Differential signals (e.g. encoder A and /A) should be routed in a shielded cable and twisted in pairs

  • When cabling bus signals (e.g. CAN bus), cables with appropriate characteristics (twisted pair wires, shield, suitable impedance, etc.) must be used

    • Cabling example

    Electrostatically sensitive devices and components

    When installing, commissioning and servicing the devices, protective measures must be observed to reduce the risk of electrostatic discharges (ESD). This applies in particular to anti-static workwear, anti-static tools and an anti-static working environment. As a result, the devices must be handled with extreme care.
    To protect against electrostatic discharges during operation, all plug connectors must be connected to the device, even if the respective signals are not used. The plug connectors serve as protection against direct contact.
    Work on PCBs without casing may only be undertaken by fully trained staff in an anti-static environment.


Content - Communication interfaces

CAN bus


CAN bus

The power supply voltage can be extremely dangerous. To avoid injury, or short circuits on the device, do not connect the power supply at this time.

Cable features

The cable to connect the CAN bus devices must be compliant with the norm ISO 11898 . It must have the following main characteristics:
  • twisted in pairs
  • with braided shield
  • impedance of 120 Ohm

Wiring

For the CAN bus cable, you only need three of the four available wires by default. Choose one of the twisted pairs and assign the color green to the CAN low signal and yellow to the CAN high signal (prevents common mode interference). The second twisted pair (brown and/or white) can be used for CAN ground (both wires). Keep the colors for CAN low and CAN high in order to avoid errors.

The CAN high wire is connected to the CAN-Hi pin and the CAN low wire is connected to the CAN-Lo pin of the device. For the wiring of the CAN-GND please refer to the following drawings.

The ground routing depends on the machine type (system) and must always be considered individually.
Galvanically isolated devices:

Non-galvanically isolated devices with the same reference potential:

CAN-GND of the galvanically isolated devices must be connected only once (and nowhere else) to the reference potential of the non-galvanically isolated devices. This can either be done via the ground of the power supply (*1) or via the CAN-GND (*2) of the non-galvanically isolated devices.

Non-galvanically isolated devices with different reference potential:

Topology

The CAN bus must be configured as a line. Star topologies are not permitted.

Baud rate | Maximum bus length
10 kbits/s | 6,7 km
20 kbits/s | 3,3 km
50 kbits/s | 1,3 km
125 kbits/s | 530 m
250 kbits/s | 270 m
500 kbits/s | 130 m
1 Mbits/s | 40 m
Excerpt from CiA DR 303-1:
Bus length [m] | Length-related resistance [mΩ/m] | Cross-section [mm2]
0 to 40 | 70 | 0,25 to 0,34
40 to 300 | <60 | 0,34 to 0,60
300 to 600 | <40 | 0,50 to 0,60
600 to 1000 | <26 | 0,75 to 0,80

Terminators

The entire CAN bus must be terminated at both ends with a terminating resistor of 120 ohms. This is to avoid line reflections. Only 2 terminators per one bus are allowed.

In the standard version of the CAN-Stick a terminating resistor is already included in the device.

Stub cables

The length of stub cables should not be longer than 2cm. Longer stubs can cause line reflections.

Do not connect more than 2 CAN bus cables to one adapter plug because this would branch the bus illegally.

Shielding

It is recommended to mount the shield of the CAN bus cable one sided in the near of the master. It is important to ensure that the shield is connected with a large surface and low impedance to the machine earth e.g. through a cable clamp. Twisting of the shield should be avoided in every case.

Cable example

Manufacturer: U.I. LAPP GmbH
Internet: www.lappkabel.de
Description: UNITRONIC BUS CAN
Article Nr.: 2170 273 T

Troubleshooting

Error Frames

Error frames can indicate errors in CAN bus wiring, assignment of the node addresses (node id) or settings of the baud rate. Due to a high number of error frames the devices can switch to bus off state. The device with the most discovered error frames is not necessarily the cause of the problem. If a node is producing traffic above average (e.g. through event triggered PDOs of a fast changing measurement value), it's messages are disturbed with a high probability, whereby the error counter of the node is the first to reach critical levels.

Node id

For every CAN message only one unique transmitter (device) is allowed. Duplicated node ids are not allowed within the same network.

Test:
Check the setting of the node id of each device. If the CAN communcations works temporarily, the address assignment can be checked by recording the boot-up messages of all devices. If there is a possibility to switch individual devices off and on again, a mistakenly exchange of the node ids can by diagnosed.

Baud rate

All devices in a network must have the same baud rate. If possible, you should check if the bit timing parameters (sample point, sync jump width, oscillator) of special devices fit to the CANopen definitions.

Test:
Check the setting of the baud rate of each device. To do this, connect every single device separately to a PC. With edcTools you can scan for devices. Activate the checkbox "Scan baudrate" and click on "Scan devices". The connected device appears in the list and the baud rate of the device will be displayed in the field "Baudrate" at the top of the screen.

Test of the CAN cabling

The following tests can be done to check the cabling of the CAN bus. To do this, follow the given order strictly, since the tests are partially interdependent. Also note that the network should not be active (no communication).

Network termination and signal lines

Switch off all CAN bus devices for this test. The results may vary if a CAN transceiver is active. First check whether all signal lines are clamped properly (too long wire insulation in spring clips => no contact, high / low signal reversed, etc.).

Test:
Determine the resistance between CAN high and CAN low (if applicable for each device). If the value is greater than 65 ohms, this points to a broken signal cable or a missing termination resistor. If the value is less than 50 ohms, this could indicate a short circuit on the CAN cable, too much termination resistors (Attention: termination resistor already included in the CAN-Stick) or a missing transceiver.

Test:
Check the CAN bus for short circuits between CAN ground and the signal lines. You should also check for a short circuit between the shield of the CAN bus cable and the signal lines.

Test:
Disconnect a possible connection between the shield of the CAN bus cable and CAN ground andcheck for a short circuit between the two.

Topology

CAN bus topology tolerates only short stub cables. Be aware of this when designing and wiring your machine. The maximum length of the bus depends on the used baud rate (see above). It happens frequently that the installed cable length is greatly underestimated.

Test:
Measure the actual cable length and pay attention to the topology rules.

Shielding and Grounding

The power supply of the system and the shield of the communication cable should be grounded once and with low impedance (not twisted but with cable clamps) at the power supply. Any compounds of the CAN cable must connect the signal lines, CAN-GND and the shield.

Test:
Measure the current with an ammeter between the ground of the power supply and the shield at the most distant end of the CAN bus cable. If there is no equalization current, the shield is not continuously connected or the power suppy is not properly grounded! If the power supply is located at the middle of the bus, you should repeat this test for both ends of the CAN bus cable.

Test:
Split the shield at several points and measure the current between the connecting pieces. If a current flow exists, this indicates that the shield is grounded at several points (ground loop).

Potential differences

For this test the shield must be connected continuously and there may not be a current flow on the shield (test before!)

Test:
Determine the voltage between the shield and CAN-GND (electronic ground if no CAN-GND is available) on each CAN node and write it down. Calculate the potential difference between all the nodes of the CAN bus based on your records. The maximum potential difference should not exceed 5V.

Detect and locate errors

To locate errors in a bus, in practice often a part of the network is disconnected until the error disappears. However, it should be noted that through this, the problem can be partially reduced or even veiled, without solving it. Ground loops, potential differences, EMC and signal distortions may represent such sources of error, which are no longer recognizable through reducing the network. Even the reduced bus load causes that external noise can assume rare effects on CAN frames.

Protocol problems

In rare cases it may happen that third-party devices cause protocol problems on the bus. This can be because of e.g. faulty or incomplete CANopen implementation, unfortunate timing in the boot-up, etc..

For more information, visit www.can-cia.org.


Safety instructions

The safe operation of the device in the final application is generally ensured, if the instructions concerning installation and operation in the technical manual are followed and taken into account.

To ensure trouble-free operation, appropriate methods of transport and conditions of storage have to be carried out (see Transport / Storage).
Follow the instructions for installation and adjustment precisely.

Assembly and disassembly are only allowed to carry out if the voltage supply is disconnected.

Make sure that the application is always provided with an emergency shutdown (i.e. E-Stop button) that is always within reach.

Only authorized personal is allowed to open or repair the device.

Never open the device or try to repair the device by yourself. Always contact the according support service. You can find the contact information for the according support in the section "Service - Info".

The inside of the device contains circuits which can lead to death if they are touched.
The device does not include an overvoltage protection. When installing the device make sure that a appropriate overvoltage protection is used.

The device does not include an own mains switch. When installing the device, an appropriate mains switch for the power grid is necessary.

Before switching on the device, make sure that the voltage supply is working in the allowed range for the device.
The characteristics for the device can be found in the technical data section "Drive controller" or "Expansion module", under the according device family and the according device type.

The module must only be installed and adjusted by qualified persons in accordance with the relevant standards

Please follow the regional norms of the operational area of the components. Please also follow the safety instruction of the machine or device which is to be controlled.

Qualified persons are those who:

  • can recognize and avoid potential dangers on the basis of their experience,
  • are familiar with the accident-prevention regulations for the equipment employed,
  • are able to connect circuits and install equipment in accordance with the standards and regulations.

A failure in the feedback or the wrong polarity of the feedback can lead to uncontrolled behavior.

Uncontrolled behavior can be dangerous for man and machine.

Electric enegery recovery can lead to an increase in the intermediate circuit voltage.

Implement a protection against the recovering of electric energy. A possible protection against slow rises in the voltage can be realized with the software ( DEV_UpOff_Stotterbremse)
Fast rises in the voltage have to be protected with a hardware solution. (For example Brakechopper)

The devices which are specified in this technical manual are components that are destined to be implemented in a system.

The final application must comply with the following standards, regarding the approved rules and recommendations for safety and functionality of the specific operation:

  • standards for user contact protection
  • standards for fire protection
  • standards for clearances and creepage distances

Before the installation, make sure that the following technical conditions are met:

  • check the requirements for the power grid and check, if the power grid is suitable
  • check the requirements for the electric cables and provide the corresponding cables
  • check the characteristics of your electrical connection and configure the leads in accordance to the latest electrical standards and safety recommendations.

For the installation choose a spot which has environmental conditions that match the permissions of the device. The exact permissibly conditions can be found in the technical data of the device.
The characteristics for the device can be found in the technical data section "Drive controller" or "Expansion module", under the according device family and the according device type.

Only use replacement parts and accessories that are approved by us.

The use of unapproved replacement parts and accessories compromises the devices function and impairs your safety.

The safe operation of the device is not possible if:

  • the housing got damaged due to mechanical stress
  • water got into the device's interior
  • objects got into the device's interior through the air inlet
  • smoke is coming out of the device
  • the connectors are damaged
  • it does not work properly anymore

If you are in doubt about the safe operation of the device contact your appropriate customer service. You can find the contact information in the section "Service - Info".

Do not swap the polarity of the power supply connectors!

The whole motor control is designed for DC voltage. If you swap the positive and the negative terminals the electronics will be severely damaged.

The power supply has to be dimensioned properly. Information about the power input of the device can be found in the technical data of the device.
The characteristics for the device can be found in the technical data section "Drive controller" or "Expansion module", under the according device family and the according device type.

For the electronics a power supply without voltage fluctuation is required. Due to the CANopen protocol the device switches off if the supply voltage drops below 9V.

Ensure that the power supply cable is not pinched, can not be damaged by objects or sharp edges and is installed to avoid trip hazard.

The device must only be connected to the power supply voltage if the power supply contains a correct protective conductor. Safety and EMC requirements can not be met if the power supply has no or an incorrect protective conductor.

Ensure proper air circulation and heat dissipation, because the device is generating heat.

Avoid constant high air humidity and condensation. Protect the device from humidiy and chemicals.

If one of the above described errors occurs, immediately turn off the device, disconnect the power supply and contact your appropriate customer service. You can find the contact information in the section "Service - Info".

We expressly point out that warranty and liability claims will not be accepted if the device is operated outside the specifications that are described in this documentation and outside the specifications that are labeled on the device and/or if the device is installed without following the references for the installation!


Motor

The power supply voltage can be extremely dangerous. To avoid injury, or short circuits on the device, do not connect the power supply at this time.

Brushless motor (BLDC)

A brush less DC motor has 3 motor phases A, B and C which are connected to the matching pins of motor connector. This means that phase A is connected to pin Ma, phase B to pin Mb and phase C to pin Mc.
Before switching on the device please refer to the manual of your BLDC motor to find the appropriate phases. If the cables are swapped, the motor will not turn or turn in the wrong direction.

Information about the commutation scheme can be found in the application Note AN_CommutationScheme.

Brushed motor (DC)

The two motor cables, plus (+) and minus (-) of a brushed motor are connected to the pins of motor connector. The plus cable is connected to pin Ma and the minus cable to pin Mb.

Do not connect the minus cable to pin GND of motor connector! The motor will not turn.
Usually the cables can be identified on the base of their color. Most motor manufacturer uses red color for the plus cable and a black color for minus cable.

Stepper motor

A stepper motor has 4 motor phases A, B, C and D which are connected to the matching pins of motor connector. This means that phase A is connected to pin Ma, phase B to pin Mb, phase C to pin Mc and phase D to pin Md. Before switching on the device please refer to the manual of your BLDC motor to find the appropriate phases. If the cables are swapped, the motor will not turn or turn in the wrong direction.


Power supply

Please note the safety instructions before connecting a power supply!
Both supply voltages (electronic and power) must be connected to the controller, so that it is running correctly.

Do not confuse the supply cables!

The entire motor circuit is designed for polarized DC. If you confuse the positive and the negative wire of supply cable, it can cause serious damage of the device. The two different sources of controller supply are recommended for e.g. connectors X1 and X2.

Power supply Up

The supply voltage is connected to pins of the power connectors. Here, the positive line is connected to pin +Up and the ground line pin GND.

Electronic supply Ue

The supply voltage is connected to pins of the I/O connectors. Here, the positive line is connected to pin +Ue and the ground line to pin GND.

If Power supply and electronic supply is connected with the same supply unit, electric energy can be recovered which may cause damage to the devices.

Implement a protection against the recovering of electric energy. A possible protection against slow rises in the voltage can be realized with the software ( DEV_UpOff_Stotterbremse)

Fast rises in the voltage have to be protected with a hardware solution. (For example Brakechopper)

Wiring

The powerside and the electronicside of the controller are not galvanically isolated. The ground for electronic and for power are internally connected.

Assignment of the supply connector

The supply connector in controllers of the series EDC should as a general rule not be plugged if the power is on. If this situation can not be avoided in the application, follow some rules in an assignment of the connector (also in a cable harness to the device):
  • the ground pin must always be connected first
  • connectors with leading ground pins are preferable
  • connectors are occupied with two different supply voltages (e.g. Up = 48VDC, Ue = 24VDC), the arrangement on the connector must be chosen so that the two voltages not contact before ground
unfavorable assignment of a connector

If the connector is plugged obliquely (as shown in the picture), both supply voltages are connected (red wires) before the ground (blue wire). In case of connecting with two different supply voltages (e.g. Up = 48VDC, Ue = 24VDC), the charging currents can flow through device built-in electrolytic capacitors from the higher voltage Up to the voltage Ue. In this case the device or device periphery may be damaged.

favorable assignment of a connector

If the connector is plugged obliquely (as shown in the picture), the supply voltage (red wire right) is connected firstly. After that the ground (blue wire) and then the supply voltage (red wire left) are connected. This ensures that the charging current is always flowing to the ground and never between the supply voltages.


Feedback

The power supply voltage can be extremely dangerous. To avoid injury, or short circuits on the device, do not connect the power supply at this time.

Hall sensors

Brushless motors (BLDC) don't have a built in commutator like a brushed motor, they are electronically commutated with Hall sensors. For rotation of a brushless DC motor (BLDC) the motor windings are not commutated with a rotating commutator and brushes but electronically commutated 3-phase synchronous motors. For commutation usually Hall sensors are used.

It is essential that the Hall sensors are connected correctly. Otherwise the motor will not turn or run with reduced torque.

Before you connect the Hall sensors please see the motor manufacturers operating instructions!

The three Hall sensors H1, H2 and H3 are connected to the appropriate pins of the Hall connector: Hall sensor H1 to pin H1, Hall sensor H2 to pin H2 and hall sensor H3 to pin H3. The 5V supply voltage for the Hall sensors is connected to pin +U 5V and the ground to pin GND.
If your motor has inverted Hall sensor signals please connect them to pin /H1, pin /H2 and pin /H3.

Encoder

If your motor is fitted with an incremental encoder the cables are connected to the appropriate pins of encoder connector.
Most incremental encoders work with two channels (channel A and channel B) plus an Index. Channel A is connected to pin A, channel B to pin B and Index to pin Inx. The 5V supply voltage is connected to pin +U 5V and the ground to pin GND. If your encoder is fitted with inverted signals, please connect them to pin /A, pin /B and pin /Inx.


Brake chopper

General

Electrical regenerative braking in servo systems feeds the generated electricity back into the voltage intermediate circuit. If there are no other consumers (e.g. further amplifiers) using energy the voltage of the intermediate circuit can increase to over-voltage which can cause damage to electric circuit.In this case, a properly dimensioned, external over-voltage protection module("braking module") has to be included to avoid damages. In case of an over-voltage, these braking modules (e.g. ENGEL ERL-L40) connect a resistor to the intermediate circuit that converts electrical energy into heat energy. The amplifiers internal voltage monitoring can detect slow voltage increases and disable the motor. The braking modules can detect fast voltage increases and convert it into heat energy. Nevertheless very fast voltage increases can cause damage of the devices. Minor fluctuations of the supply voltage are common so it is important that the amplifier can withstand higher voltages than the maximum voltage the power supply can provide.

Wiring

Common supply +Ue and +Up:

Common supply +Ue and +Up without regenerative feedback:

Separated supply +Ue and +Up:

Separated supply +Ue and +Up with increased braking power (Imax = 2 x 70A):


Magnetic encoder chip

The following points must be considered by installing the controller with magnetic encoder chip:
  1. The brass case is recommended to magnetically decouple the magnet from the motor shaft.
  2. The recommended distance between the sensor chip and the magnet is 0.5 mm.
  3. The magnet must be centred applied on the shaft and be placed directly centred below the sensor chip.
Recommended magnet type: NdFeB-N35H

For the dimensions of the respective circuit board, refer to the actual *. dxf file of the device.

Zoom:

Incorrect installation of the controller / magnet on the motor can cause that the motor will not be properly controlled by the controller.


Content - edcTools

Starting up

Connecting device

DSA Status

DSA Config

DSA PID

DSA Scope

DSA Movement control

MPU2

Communication config

CAN Config

Firmware update


Starting up

Description

The program edcTools is intended for commission of ENGEL DSA devices. This program uses the CAN bus as a communication interface between the devices and the computer. Because of the fact that the edcTools based on ENGEL parameters, commissioning of devices from other manufacturers is not possible. For access to the CAN bus, an interface adapter CAN-Stick is required. The CAN-Stick plugged into a USB port of the computer converts the commands of the program into CAN messages and sends them to the DSA devices. Interface adapters from other manufacturers are not supported by edcTools.

Start of application

The edcTools is always supplied with the program PLC and both are installed together on the PC. After installing the program, the corresponding link is created on the desktop. After starting edcTools the following window is shown.

Tools

The following tools are available in edcTools:

DC Status | shows the current status of the DSA device (e.g. setpoint and actual values​​, limits, I/O's and MPU information and status)
DC Konfiguration | allows the configuration of the basic parameters of the DSA device (e.g. motor type, feedback, encoder resolution, function of the digital inputs and outputs, limitations)
DC PID | allows the configuration of PI and PID controller parameters of the DSA device
DC Oszilloskop | allows the recording and visualizing the data read from the device, such as velocity ​​or motor current
DC Steuerung | allows the control of the DSA device
MPU2 | allows compiling, loading and control of an MPU2 program on a DSA device
Communication Config | allows the configuration of the communication parameters DS301 (e.g. RxPdo, TxPdo and NMT)
CAN Config | allows the configuration of device CAN parameter (node id, CAN baud rate, AutoOperational)
PROFIBUS Config | allows changing the PROFIBUS slave number
Firmware update | allows to update the firmware in the device

Lanuage

The edcTools currently supports two languages​​: English and German. To change the language, select the Configuration option on the menu bar and choose Settings. The language of edcTools will be changed only after restarting the program.


Connecting device

There are two ways to establish communication with the device: manually and by scanning. In both cases, you have to correctly define the baud rate of the CAN bus (Baudrate selection box). The default baud rate for all ENGEL devices is 125 kbit / s. The selection field SDO for communication defines the COB-ID type, which is used for communication with the device. SDO1 means that the program uses a 11-bit CAN-ID (CAN base frame) and SDO2 that a 29-bit CAN-ID (CAN extended frame). If the option SDO1 + SDO2 is selected , the program decides which CAN-ID suits better. To add a specific device to the device list, you have to enter in the field Node ID an correct address of the device and press the button Connect device. If the device is not available, the following information with some clues to the diagnosis is shown.

The devices can also be found by scanning the bus. To start the scan, press the button Scan devices. If the baud rate of the CAN bus is unknown, activate the option Scan baudrate and make the scan again. The found devices are displayed on the device list. Selection of the device takes place by marking the the device on the device list. The firmware version of the device and the device code are displayed on the panel Device informations below device list.

The button More shows detailed information about the device and these information can be copied to the clipboard.

The program also allows a preparation of device configuration without communication with the device. With the button Add virtual device (offline) you can add a virtual device DSA (virtual), however, only the tool DC Konfiguration is available. The rest of the tools remains inactive.


DSA Status

Function

The DC Status tool shows the current status of the DSA device (e.g. setpoint and actual values​​, limits, I/O's and MPU information and status). The values ​​in the window are cyclically (every 100ms) read from the device. The constant values​​, which are located on the panel Device informations, are only read once (when the window opens) from the device.

Tabs

  • Base - shows actual basic information about the device (current limits, MPU information and status, ect.)

  • Control loop - shows actual values of the control loop (target current, command current, etc.)

  • Feedback - shows actual values of the feedback system (index position, index pulses, etc.)

Parameter help

After clicking the right mouse button on the corresponding value of the parameter, a context menu is shown. Select the function Parameter help to open a detailed description of the parameter.


DSA Config

Function

The DC Konfiguration tool allows the configuration of the basic parameters of the DSA device (e.g. motor type, feedback, encoder resolution, function of the digital inputs and outputs, limitations). When opening the window, the current values ​​are read from the DSA device. The transfer of parameter values ​​takes place after pressing the button Set.

Description of buttons:
  • Store in device - writes all available in the tool parameters into the device and then saves
  • Set to default in device - sets all parameters of the range 0x3000 (in the device and in the tool) to default value. The values ​​are not stored in the EEPROM.
  • Set to default - sets all parameters in the tool to default value. The parameters in the device remain unchanged.
  • Set - sends the changed parameter values to the device.

Tabs

The device parameters are grouped on the tabs depending on their function. The following tabs are available:
  • Base - contains the basic parameters of the DSA device, such as motor type, motor polarity, feedbacks and information about the motor and encoder. The panel Mode, enable & setpoints is disabled by default and should only be enabled if the parameters from panel must to be stored in the device. For testing purposes, you can use the tool DSA Movement control.
  • Feedback - contains the parameters that are necessary to configure encoders, such as incremental, SSI, SPI, virtual and quasi absolute encoder. Besides that different tuning function are availabe in this tab.
  • Current - contains the parameters for the current limitation (static and dynamic), current setpoint source and the current ramps.
  • Velocity - contains the parameters for the velocity mode (VEL) and positioning (POS), e.g. velocity setpoint source, velocity limitation, ramps and blockage guarding
  • SVelocity - contains the parameters for the velocity mode without ramps (SVEL), such as svelocity setpoint source and svelocity limitation
  • Positioning - contains the parameters for the positioning (POS), e.g. following error settings, position limits and position reached settings
  • Homing - contains the parameters that are necessary to carry out a homing, such as homing method , velocities and offsets
  • PID controllers - contains the parameters of PI and PID controller of the DSA device. The increase of the single values ​​as well as the percentage increase in the parameter group you can customize in a context menu. The context menu is displayed after clicking the right mouse button on the corresponding button.

  • Brake management - contains the parameters of the brake management
  • Factor group - contains the parameters of the group factor. With the parameters you can adjust the units of the parameters.
  • IO's - contains the parameters that allows the allocation of the digital inputs and outputs to the specific functions as well as the settings of the analogue inputs
  • Others - contains other parameters, such as PWM frequency, PWM mode
  • User - allows to enter specific parameters that are normally not available in the DC Konfiguration

  • Export - allows export of parameters in different formats into a file. In addition to the predefined formats (PC Python script, MPU2 program, MPU2 module or CSV file) there is a possibility to define your own export format. The exported file can not be imported or opened again in edcTools(for this purpose the PAR file is available). When the option Save together with parameters is activated, the parameters are saved automatically with the PAR file on the PC. By an export filter you decide whether all or only the changed parameters will be exported.

Tuning

Depending on the device type, motor type and feedback different tuning functions are available. The tuning helps to adjust the feedback settings for the motor. The following functions are available:

  • Determine tuning current - Determines a tuning current. This current is used for the different tuning functions. It can also be set manually. Will only work if the motor has an encoder.
  • Determine motor pole number - Determines the motor pole number of a BLDC motor. Will only work if the motor has an encoder and if the resolution of the encoder is set correctly.
  • Determine encoder resolution - Determines the encoder resolution. Will only work if the motor pole number is set correctly. To high or to low tuning currents may lead to wrong results.
  • Test velocity deviation - Tests the velocity deviation with the tuning current in positive and negative moving direction.
  • check correct HALL wiring - Checks if the wiring of the HALL sensors matches the wiring of the motor phases and recommends changes if necessary.
  • Determine HALL signal assignment - Determines the software HALL signal assignment and changes the software objects, if necessary. That way a change of the wiring will not be necessary.
  • Commutation adjustment - Determines the commutation reference position. Only available for sin/cos or magnet encoder chip devices.
  • Tune sensor signals - Tunes the sensor signals of sin/cos or magnet encoder chip devices.
  • Test position deviation - Tests the position deviation. Only available for sin/cos or magnet encoder chip devices.
  • Clear Commutation adjustment - Clears the commutation reference position. Only available for sin/cos or magnet encoder chip devices.
  • Clear sensor signal tuning - Clears the sensor signal tuning. Only available for sin/cos or magnet encoder chip devices.

Tunings lead to a jerky movement of the motor shaft!
Make sure that the motor is fixed properly, the shaft is freely rotatable and the application is always provided with a working emergency shutdown (i.e. E-Stop button) that is always within reach.

To high tuning currents can damage the motor. The tuning current must not exceed the permissible rated motor current.

Save / load configuration on / from the PC

The tool allows to store the device configuration as a PAR file on PC, and to load it again. To save the configuration of the parameters as a PAR file, select File -> Save as.

To open the configuration from the PAR file, select File -> Load.

Device actions

On the menu bar of the window, under Device you can find several actions that can be performed. The following actions are available:
  • Read parameters from device - reads all available in the tool parameters from the device
  • Write parameters to device - writes all available in the tool parameters into the device
  • Store parameters in device - writes all available in the tool parameters into the device and then saves them
  • Set parameters to default - sets all parameters of the range 0x3000 (in the device and in the tool) to default value. The values ​​are not stored in the EEPROM.
  • Clear 3000h parameters to default - sets all parameters of the range 0x3000 (in the device and in the tool) to default value. The values ​​are stored in the EEPROM.
  • Clear communication parameters to default - sets all parameters of the range 0x1000 (communication parameters) (in the device and in the tool) to default value. The values ​​are stored in the EEPROM.
  • Clear CANopen-DS402 parameters to default - sets all parameters of the range 0x6000 (CANopen-DS402 parameters) (in the device and in the tool) to default value. The values ​​are stored in the EEPROM.
  • Clear MPU - clears the MPU program from the device
  • Reset the CPU of the device - a reset of the devices CPU of the device will be executed. Not stored parameters will be lost.
  • Reset to factory settings - restores the factory settings of the device, i.e. The parameters of all fields are set to default values​​, MPU program is cleared and Autooperational reset.

Help

After clicking the right mouse button on the corresponding value of the parameter, a context menu is shown. Select the function Parameter help to open a detailed description of the parameter.

The complete list of parameters you can find under Help -> Parameters.


DSA PID

Function

The DC PID tool allows the configuration of PI and PID controller parameters of the DSA device. The parameters of this tool are also available in the DC Konfiguration on the panel PID controllers. When opening the window, the current values are ​​read from the DSA device. The transfer of parameter values ​​takes place after pressing the button Set.

Description of buttons:
  • Set to default - sets all parameters in the tool to default value. The parameters in the device remain unchanged.
  • Set - sends the changed parameter values to the device.

The increase of the single values ​​as well as the percentage increase in the parameter group you can customize in a context menu. The context menu is displayed after clicking the right mouse button on the corresponding button.

Parameter help

After clicking the right mouse button on the corresponding value of the parameter, a context menu is shown. Select the function Parameter help to open a detailed description of the parameter.


DSA Scope

Function

The DC Oszilloskop tool allows the recording and visualizing the data read from the device, such as velocity ​​or motor current. Data recording starts after pressing the button Start.

The recording parameters can be activated by setting the appropriate check box. The following options are available:
  • Smooth - the curves on the graph can be smoothed, if necessary. There are three options available: no - no smoothing, sp - spline smoothing, bz - smoothing with Bezier curves. The smoothing of the curves is sometimes necessary in order to remove noise of signals (for example when recording of the motor current).
  • Plot Nr. - the number of the chart on which the curve is shown. There are 4 charts (0 .. 3) provided.
  • Normalize - normalization of the curves. Normalization refers to the scaling of the value range of a variable to a range from 0 to 1 The normalization can be used to make results comparable with different scaling.
  • FFT - Fast Fourier Transformation. If the signal contains high-frequency noise, you can use the FFT filtering method. The filter removes the entire high-frequency noise and leaves the low-frequency useful signal.

The recording time defines the duration of the entire recording in milliseconds. The sampling time is a time of cyclical query parameter in milliseconds.

The recording of the parameter can be executed either once or cyclical. If the option One shot is set, the recording is taken only once. Otherwise, the recording is performed cyclically. The recording trigger can be switched between manual (recording starts after pressing the Start button) and on write setpoint (recording starts after pressing the Start button and the changing the setpoint). Setting of the target value must be made within the tool. The start of the recording can also be delayed by the time trigger delay.

The calculation of the motor velocity is carried out with the help of the position.


DSA Movement control

Function

The DC Steuerung tool allows the control of the DSA device. In this window, the current status and actual values ​​of the device are also shown.

Description of buttons:
  • Clear error - clears an error. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
  • Halt - executes a Halt. The motor stops using the general deceleration ramp.
  • Quickstop - executes a QuickStop. The motor stops using the QuickStop deceleration ramp.
  • Continue - continues the movement after QuickStop or Halt.
  • Enable - enables power stage of the controller.
  • Disable - disables power stage of the controller.

Tabs

  • Control - allows specification and starting of ten different data sets and selecting the device mode. The data sets can be started automatically in a specified order. For each data set a separate ramp can be adjusted. The panel content changes depending on the mode.

  • Jog - allows the Jog mode. In this mode the motor is driven with a button with specified ramps. The panel changes depending on the mode. With the option "Disable after release the button" you can choose whether the controller stop the motor with halt (active braking) or disable command (coasting).

  • Homing - allows start, abort, stop and restart of homing and displays the current state of the device during the homing.

  • I/O control - shows the status and allows the control of the digital outputs and the simulation of the digital and analog inputs.

  • Others - allows saving the position of a SSI encoder and shows its status.


MPU2

Function

With the MPU2 tool MPU programs can be compiled, loaded to the device and controlled. Also status information, such as the size of the program or MPU error codes are shown.

Description of buttons:
  • Clear Error - clears MPU error.
  • Start - starts the MPU program if it is not start automatically or if it was stopped.
  • Break - stops the MPU program and holds it.
  • Continue - continues the MPU program at the point were it was stopped manually by pressing the Break button.
  • Delete - deletes the MPU program.

Tabs

  • Compile & Load - On this tab a MPU program can be selected, compiled and loaded on the device. Also already compiled programs (*.mx files) can be loaded on the device. The textbox "Messages" shows the output of the compiler (such as compiler version, global variables or errors). If there is already a MPU program on the device, the global variables can be generated for diagnosis, by choosing the according *.mx file and the unchecking of all checkboxes in Options.

  • Global variables - On this tab all global variables of the MPU program can be read. The name, address (Index and Subindex) as well as the value of the variables is shown. It can also write values in the variables. The variables can be polled automatically or read manually.


Communication config

Function

This tool is used to configure the communication parameters and the PDO mapping for the device. The configuration can be saved in a file and loaded, as well as exported in different formats. (e.g. as a script)

Description of buttons:
  • Store in device - writes all in the tool available parameters into the device and saves them.
  • Set to default in device - sets all in the tool available parameters (in the device and in the tool) to default value. The values ​​are not stored in the EEPROM.
  • Set to default - sets all parameters in the tool to default value. The parameters in the device remain unchanged.
  • Set - sends the changed parameter values to the device.

Tabs

Rx PDO

In this tab the configuration for the different Rx PDOs can be set. On the left hand side is a list of all available RxPDOs from which the one that should be edited can be chosen. On the right hand side the COB-ID of the PDO can be configured. The check boxes "not valid", "no RTR" and "extended COB-ID" have a direct impact on the value of the COB-ID. Also the "Inhibit time" and the "Transmission type" for the PDO can be configured. A list of all objects, that should be mapped can be generated in the box "Mapping" . If the Index and Subindex of a parameter is written in the list, the Name of the object gets automatically written in the list as well. Also the Length of the object has to be configured in the list. The check box Signed tells the controller to interpret the data as signed value. This is necessary if not all bytes of the parameter are mapped. For example, if the parameter VEL_DesiredValue (4 bytes) is mapped with a data length of 2 bytes and a desired velocity of -1 is sent (hexadecimal 0xFFFF), the controller can not decide if he has to interpret the data as -1 or as 65535. If the option Signed is not checked, the controller will interpret the -1 as 65535 otherwise as -1. If all bytes of the parameter are mapped, the option Signed is unnecessary.

The length of the mapped objects can be 1, 2 or 4 bytes. The number of the mapped bytes can be lower than the length of the parameter but can not be higher. For example the parameter VEL_DesiredValue (data length int32 -> 4 byte) can have a length of 1, 2 or 4 byte. The parameter DEV_Mode (data length int8 -> 1 byte) can not be mapped with more than 1 byte.

Description of buttons:
  • Use Quick-Command Mapping - Loads the quick-command mapping (AN_ENGEL_QuickCommand) for the chosen RxPDO in the tool.

Tx PDO

In this tab the configuration for the different Tx PDOs can be set. On the left hand side is a list of all available TxPDOs from which the one that should be edited can be chosen. On the right hand side the COB-ID of the PDO can be configured. The check boxes "not valid", "no RTR" and "extended COB-ID" have a direct impact on the value of the COB-ID. Also the "Inhibit time" and the "Transmission type" for the PDO can be configured. A list of all objects, that should be mapped can be generated in the box "Mapping". If the Index and Subindex of a parameter is written in the list, the Name of the object gets automatically written in the list as well. Also the Length of the object has to be configured in the list.

The length of the mapped objects can be 1, 2 or 4 bytes. The number of the mapped bytes can be lower than the length of the parameter but can not be higher. For example the parameter POS_ActualPosition (data length int32 -> 4 byte) can have a length of 1, 2 or 4 byte. The parameter DEV_ErrorReg (data length int16 -> 2 byte) can not be mapped with more than 2 bytes.

Description of buttons:
  • Use Quick-Command Mapping - Loads the quick-command mapping (AN_ENGEL_QuickCommand) for the chosen TxPDO in the tool.

Others

In this tab other communication parameter like "SYNC Signal", "Guarding", "Emergency message", "Time stamp message", the configuration of "Heartbeat" as well as "Behavior on communication error", "Messages on device bootup" and "Auto-Operational" can be configured. These setting are general, this means they are not bound to a specific PDO.

Exact descriptions of the different setting can be found in the chapters COP_RxPDO1_CommunicationParameter_HighestSubindexSupported, COP_RxPDO1_CommunicationParameter_TransmissionType, COP_RxPDO1_CommunicationParameter_InhibitTime, COP_CobId_Guarding, COP_CobId_Sync and COP_ConsumerHeartbeatTime_HighestSubindexSupported

NMT

This tab is used to control the network management (NMT).

Description of buttons:
  • Start Node - Sets the device in operational mode.
  • Enter Pre-Operational - Sets the device in pre-operational mode.
  • Start Node (All) - Sets all devices on the CAN bus in operational mode.
  • Enter Pre-Operational (All) - Sets all devices on the CAN bus in pre-operational mode.

To obtain and send data over PDOs the device has to be in operational mode. The yellow LED on the device indicates the NMT status. If the device is in operational mode the LED is off. Otherwise the LED is on.

Export

In this tab the settings which have been made can be exported in different formats. The standard formats are "PC script", "MPU2 program", "MPU2 modul", "CSV standard" and "CSV decimal". The option "User defined" gives the possibility to generate an own, self defined format.

Description of buttons:
  • Save as - Saves the settings in the chosen format (as shown). If the option "Save together with parameters" is checked, the parameters are automatically exported when the parameters are saved in a MCC File (Menu File -> Save).

To reduce the length of the export file and to increase the clarity the option "only changed parameters" in the Export filter can be chosen.


CAN Config

Function

The CAN Config tool allows to adjust the CAN parameters as node id and baud rate. When opening the window, the current values ​​are read from the DSA device. The transfer of parameter values ​​takes place after pressing the button Set.

The Node ID defines the CAN address of the device and the baudrate the transmission speed of messages on the CAN network.

Description of buttons:
  • Set to default - sets all parameters in the tool to default value. The parameters in the device remain unchanged.
  • Set - sends the changed parameter values to the device.


Firmware update

Function

The Firmware update tool allows you update the firmware in the device.

Firmware update in error case

If the device is no longer reachable, it is possible to download a new firmware to the device in bootloader mode. For this a virtual device must be added. Then the address of the device can be given in the field "Node ID". After that the device must be switched off. Once the power is off, the firmware update needs to be started. The firmware updater is waiting for a device in bootloader mode. If the device is now switched on, the firmware update is performed.

The "Node ID" and the baudrate of the device must be set correctly so that the firmware updater can reach the device in bootloader mode.


Content - Drive controller

Device family EDC-B4x

Device family EDC-B5x

Device family EDC-B6x

Device family EDC-E2x

Device family EDC-E4x

Device family EDC-E5x

Device family EDC-E6x

Device family EDC-S4x

Device family EDC-S6x


Content - Device family EDC-B4x

EDC-B40

EDC-B40-Modul

EDC-B45

EDC-B45-Modul


Content - EDC-B40

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511093
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 25 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 30 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 90% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | open collector, differential, 5V pull up intern 920 Ohm
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | res. | Reserved
 | X2.5 | res. | Reserved
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | res. | Reserved
 | X2.12 | res. | Reserved
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | Ain0 | Analog input 0
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | res. | Reserved
 | X3.9 | res. | Reserved
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/6 1690460000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Display elements

LED | Colour | State | Description
LED0 "Power" | green | on | Normal operation
 |  | off | Power supply is missing
 |  | flashing | Bootloader mode (lack of firmware)
LED1 "State" | yellow | on | CANopen Pre-Operational state (PDOs not active)
 |  | off | CANopen Operational state (PDOs active)
 |  | flashing | Bootloader mode (with incoming message)
LED2 "Error" | red | on | General error
 |  | off | No error (Normal operation)
 |  | flashing | Number of pulses 1: Short circuit
 |  |  | Number of pulses 2: Motor supply under voltage
 |  |  | Number of pulses 3: Over temperature
 |  |  | Number of pulses 4: Communication error

If the HEX switches are set to 00h when switching on, the controller sets the default values of parameters. Moreover it can be observed the following sequence:
- the green LED0 "Power" flashes 10s with the cycle 500ms
- the yellow LED1 "State" flashes 4 times
- Both LEDs flash with the cycle 100ms


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

Brushless motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Dimensions

ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten


Content - EDC-Bxx

Parameters 1000h (DS301)

Parameters 2000h

Parameters 3000h (DSA)

Parameters 5000h (MPU)


Content - EDC-B40-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504910
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 25 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 30 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 90% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | open collector, differential, 5V pull up intern 920 Ohm
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | res. | Reserved
 | X1.14 | res. | Reserved
 | X1.15 | res. | Reserved
 | X1.16 | res. | Reserved
 | X1.17 | res. | Reserved
 | X1.18 | res. | Reserved
 | X1.19 | res. | Reserved
 | X1.20 | res. | Reserved
 | X1.21 | res. | Reserved
 | X1.22 | res. | Reserved
 | X1.23 | res. | Reserved
 | X1.24 | res. | Reserved
 | X1.25 | res. | Reserved
 | X1.26 | res. | Reserved
 | X1.27 | H3 | Hall sensor 3
 | X1.28 | /H3 | Hall sensor 3 inverted
 | X1.29 | H2 | Hall sensor 2
 | X1.30 | /H2 | Hall sensor 2 inverted
 | X1.31 | H1 | Hall sensor 1
 | X1.32 | /H1 | Hall sensor 1 inverted
 | X2.1 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X2.2 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X2.3 | res. | Reserved
 | X2.4 | res. | Reserved
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | res. | Reserved
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

2mm pitch pin headers

The module variants of controllers use mainly 2mm pitch pin headers of SAMTEC. Using alternative connector please notice the current-carrying capacity and design (soldering and height). The connectors are mechanically similar to e.g. connectors of W + P company.

The figure shows the major variations:

Terminal | Name / Art.-Nr. - Backplane (SMT) - Backplane (THT) | Manufacturer | Total height - PCB <-> PCB | Current-carrying capacity
X1 | - TW-16-02-L-D-170-SM - TW-16-03-L-D-170-230 | SAMTEC | 12mm | 3A@Ta=80°C
X2 | - TW-16-02-L-D-170-SM - TW-16-03-L-D-170-230 | SAMTEC | 12mm | 1A

!ATTENTION! Please note the insertion depth (typ. 3,2 mm) and the cross-section (typ. 0,5 x 0,5 mm) of the pins.

For more information, visit www.samtec.com.

V1.02.00.58


Content - EDC-B45

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511095
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 40 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 100% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | open collector, differential, 5V pull up intern 920 Ohm
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | res. | Reserved
 | X2.5 | res. | Reserved
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | res. | Reserved
 | X2.12 | res. | Reserved
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | Ain0 | Analog input 0
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | res. | Reserved
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Content - EDC-B45-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504942
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 40 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 100% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | open collector, differential, 5V pull up intern 920 Ohm
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | res. | Reserved
 | X1.14 | res. | Reserved
 | X1.15 | res. | Reserved
 | X1.16 | res. | Reserved
 | X1.17 | res. | Reserved
 | X1.18 | res. | Reserved
 | X1.19 | res. | Reserved
 | X1.20 | res. | Reserved
 | X1.21 | res. | Reserved
 | X1.22 | res. | Reserved
 | X1.23 | res. | Reserved
 | X1.24 | res. | Reserved
 | X1.25 | res. | Reserved
 | X1.26 | res. | Reserved
 | X1.27 | H3 | Hall sensor 3
 | X1.28 | /H3 | Hall sensor 3 inverted
 | X1.29 | H2 | Hall sensor 2
 | X1.30 | /H2 | Hall sensor 2 inverted
 | X1.31 | H1 | Hall sensor 1
 | X1.32 | /H1 | Hall sensor 1 inverted
 | X2.1 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X2.2 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X2.3 | Dout0 | Digital output 0
 | X2.4 | res. | Reserved
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | res. | Reserved
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Content - Device family EDC-B5x

EDC-B50

EDC-B55


Content - EDC-B50

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511718
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 25 A
- Continuous output current*2 | 7 A
- Output voltage | 90% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended, 5V pull up intern 920
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended, 20 kOhm input impedance

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | Ain0 | Analog input 0
 | X2.2 | res. | Reserved
 | X2.3 | Ain1 | Analog input 1
 | X2.4 | res. | Reserved
 | X2.5 | res. | Reserved
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | res. | Reserved
 | X4.7 | res. | Reserved
 | X4.8 | res. | Reserved
 | X4.9 | res. | Reserved
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | res. | Reserved
 | X5.5 | res. | Reserved
 | X5.6 | res. | Reserved
 | X5.7 | res. | Reserved
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/5 1690450000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10
X6 | BLZF 3.5/180/3 1690430000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

Processing of crimp connectors of JST PA-Serie

 The following figure shows, which cross-sections can be used with the connector of the JST PA-Serie:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X2

- Crimp housing - PAP-05V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

X3

- Crimp housing - PAP-03V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

X4

- Crimp housing - PAP-13V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

X5

- Crimp housing - PAP-10V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.jst.com.

V1.02.00.58


Display elements

LED | Colour | State | Description
LED0 "Power" | green | on | Normal operation
 |  | off | Power supply is missing
 |  | flashing | Bootloader mode (lack of firmware)
LED1 "State" | yellow | on | CANopen Pre-Operational state (PDOs not active)
 |  | off | CANopen Operational state (PDOs active)
 |  | flashing | Bootloader mode (with incoming message)
LED2 "Error" | red | on | General error
 |  | off | No error (Normal operation)
 |  | flashing | Number of pulses 1: Short circuit
 |  |  | Number of pulses 2: Motor supply under voltage
 |  |  | Number of pulses 3: Over temperature
 |  |  | Number of pulses 4: Communication error


Content - EDC-B55

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511719
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 8 A
- Output voltage | 100% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended, 5V pull up intern 920 Ohm
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, differential, 200 kOhm input impedance

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | +Ain0 | Analog input 0, plus
 | X2.2 | -Ain0 | Analog input 0, minus
 | X2.3 | +Ain1 | Analog input 1, plus
 | X2.4 | -Ain1 | Analog input 1, minus
 | X2.5 | res. | Reserved
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | res. | Reserved
 | X4.7 | res. | Reserved
 | X4.8 | res. | Reserved
 | X4.9 | res. | Reserved
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | res. | Reserved
 | X5.5 | res. | Reserved
 | X5.6 | res. | Reserved
 | X5.7 | res. | Reserved
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Content - Device family EDC-B6x

EDC-B60

EDC-B60-Modul

EDC-B65

EDC-B65-Modul


Content - EDC-B60

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511990
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 20 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 3 (Din0..2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | H3 | Hall sensor 3
 | X1.6 | H2 | Hall sensor 2
 | X1.7 | H1 | Hall sensor 1
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2 | Digital input 2
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of crimp connectors of JST PH-Serie

 The following figure shows, which cross-sections can be used with the I/O connector:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X1

- Crimp housing - PHR-15
- Crimp contact - SPH-002T-P0.5S
- Crimp tool - WC-240

AWG 24 ... 30
0,05 ... 0,22

1,5

~1.5 ... 2

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.jst.com.

Processing of crimp connectors of MOLEX Microfit 3.0

The controllers use the connectors with crimp technology for the I/O and power side.

The following figure shows, which cross-sections can be used with the connector:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X2

- Crimp housing - 43645-0500
- Crimp contact - 43030-0001
- Crimp tool - 63819-0000

AWG 20 ... 24
0,2 ... 0,519

1,85

2,54 ... 2,92

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.molex.com.

V1.02.00.58


Content - EDC-B60-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504906
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 20 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | res. | Reserved
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | res. | Reserved
 | X1.8 | res. | Reserved
 | X1.9 | H3 | Hall sensor 3
 | X1.10 | res. | Reserved
 | X1.11 | H2 | Hall sensor 2
 | X1.12 | res. | Reserved
 | X1.13 | H1 | Hall sensor 1
 | X1.14 | res. | Reserved
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | res. | Reserved
 | X1.17 | CAN Hi | CAN High
 | X1.18 | res. | Reserved
 | X1.19 | res. | Reserved
 | X1.20 | res. | Reserved
 | X1.21 | Din2 | Digital input 2
 | X1.22 | res. | Reserved
 | X1.23 | Din1 | Digital input 1
 | X1.24 | res. | Reserved
 | X1.25 | Din0 | Digital input 0
 | X1.26 | res. | Reserved
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | res. | Reserved
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | FE | Functional earth
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

2mm pitch pin headers

The module variants of controllers use mainly 2mm pitch pin headers of SAMTEC. Using alternative connector please notice the current-carrying capacity and design (soldering and height). The connectors are mechanically similar to e.g. connectors of W + P company.

The figure shows the major variations:

Terminal | Name / Art.-Nr. - Backplane (SMT) - Backplane (THT) | Manufacturer | Total height - PCB <-> PCB | Current-carrying capacity
X1 | - TMM-116-01-L-D-SM - TMM-116-01-L-D | SAMTEC | 10.4mm (SMT) *9.12mm (THT)* | 1A
X2 | - TMM-108-01-L-D-SM - TMM-108-01-L-D | SAMTEC | 10.4mm (SMT)* 9.12mm (THT)* | 3A@Ta=80°C

!ATTENTION! Please note the insertion depth (typ. 3,2 mm) and the cross-section (typ. 0,5 x 0,5 mm) of the pins.

For more information, visit www.samtec.com.

V1.02.00.58


Content - EDC-B65

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1512434
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 3 (Din0..2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
- Notice | Din2 parallel with Dout0
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
- Notice | Dout0 parallel with Din2
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | H3 | Hall sensor 3
 | X1.6 | H2 | Hall sensor 2
 | X1.7 | H1 | Hall sensor 1
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2/Dout0 | Digital input 2 / Digital output 0
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C

V1.02.00.58


Content - EDC-B65-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504908
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 12.5, 25*3 kHz
- PWM mode | symmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | no
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 250 us
- Velocity controller (SVEL) | 500 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 25 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | res. | Reserved
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | res. | Reserved
 | X1.8 | res. | Reserved
 | X1.9 | H3 | Hall sensor 3
 | X1.10 | res. | Reserved
 | X1.11 | H2 | Hall sensor 2
 | X1.12 | res. | Reserved
 | X1.13 | H1 | Hall sensor 1
 | X1.14 | res. | Reserved
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | res. | Reserved
 | X1.17 | CAN Hi | CAN High
 | X1.18 | res. | Reserved
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | res. | Reserved
 | X1.21 | Din2 | Digital input 2
 | X1.22 | res. | Reserved
 | X1.23 | Din1 | Digital input 1
 | X1.24 | res. | Reserved
 | X1.25 | Din0 | Digital input 0
 | X1.26 | res. | Reserved
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | res. | Reserved
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | FE | Functional earth
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - Device family EDC-E2x

EDC-E20

EDC-E20XC

EDC-E25

EDC-E25XC

EDC-E27

EDC-E27XC


Content - EDC-E20

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511097
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 55 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 30 A
- Continuous output current @ Up=48V*2 | 21 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 30 mm
- Weight | 350 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*⁶ | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ t < -25°C, setting of the NodeID is only allowed by firmware parameters, because the functioning of the Hex-Switches at these temperatures
is not longer guaranteed

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | A | Inc. encoder, A channel
 | X2.5 | B | Inc. encoder, B channel
 | X2.6 | Inx | Inc. encoder, index channel
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | /A | Inc. encoder, A channel inverted
 | X2.12 | /B | Inc. encoder, B channel inverted
 | X2.13 | /Inx | Inc. encoder, index channel inverted
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | Ain0 | Analog input 0
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | res. | Reserved
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BVZ 7.62 HP

The controllers use the connectors with screw technology for the power side

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BVZ 7.62HP/06 1929970000 | 0,2 ... 6 | 0,5 ... 6 | 0,25 ... 6 | 0,25 ... 6 | 12
For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Control elements

Adjustment possibilities for HEX switches

CAN bus address

The CAN bus address (node id) may be changed by using the HEX switches, that are located on the bottom side of the device. The value of the set address is represented in a hexadecimal form.

Node id |  | Description
0 |  | Not allowed
1..127 | 01h..7Fh | The device is after switching it on in state "Pre-Operational"
128..255 | 80h..FFh | Not allowed
The CAN bus address can be also changed by software (see parameter DS2000_CopConfigParam_UserNodeId and edcTools-CAN Konfiguration)

Each address must be unique in the network! A change of node id via HEX switches or software will take effect after reset of the device.

Please note, that the software node id (see parameter DS2000_CopConfigParam_UserNodeId) has higher priority as the node id set via the HEX switches. The device accepts only the node id set via the HEX switches if the parameter DS2000_CopConfigParam_UserNodeId is set to -1. If you want to set the value of this parameter to the default with the help of HEX switches, follow the tips in section "Reset of the parameter".

Reset of the parameters

If the HEX switches are set to 00h when switching on, the controller sets the default values of parameters. Moreover it can be observed the following sequence:

- the green LED0 "Power" flashes 10s with the cycle 500ms
- the yellow LED1 "State" flashes 4 times
- Both LEDs flash with the cycle 100ms

The sequence is completed, when the green and yellow LED are on. After that you have to adjust the node id and reset the device.

Please note, that a MPU program will not be deleted from the device.

CAN bus baud rate

The standard baud rate of the devices is 125 kbit/s. It can be changed both via software (see parameter DS2000_CopConfigParam_UserBaudrate and edcTools-CAN Konfiguration) and with the HEX switches (see instruction in the table below).

 | Action | Notification
1 | Switch off the device |
2 | Set HEX switches to 00h |
3 | Switch on the device | The green LED flashes with the cycle 500 ms
4 | Within 10 seconds, the HEX switch Hi must be set to value "F". The direction of rotation of the HEX switch is not important. | The green LED flashes with the cycle 200 ms
5 | Within 10 seconds, the HEX switch Lo must be set to the index of the baud rate. Index 0 - baud rate 1 Mbit/s Index 1 - baud rate 800 kbit/s Index 2 - baud rate 500 kbit/s Index 3 - baud rate 250 kbit/s Index 4 - baud rate 125 kbit/s Index 5 - baud rate 100 kbit/s Index 6 - baud rate 50 kbit/s Index 7 - baud rate 20 kbit/s Index 8 - baud rate 10 kbit/s | The Module confirms takeover of the baud rate or displays an error. If a supported index was selected, the yellow LED will flash several times. Then the green and yellow LEDs flash with the cycle 100 ms. If an invalid or unsupported index was selected, it will be indicated by rapid flashing of the red and green LEDs.
6 | Then, while the green and yellow LEDs flash, the node id can be set to a correct address. Alternative you can wait until the sequence is finished, switch off the device and set the appropriate node id. |
To set the default baud rate of the device, follow the tips in section "Reset of the parameter".

Please note, that the software baud rate (see parameter DS2000_CopConfigParam_UserBaudrate) has higher priority as the baud rate set via the HEX switches. The device accepts only the change of baud rate via the HEX switches if the parameter DS2000_CopConfigParam_UserBaudrate is set to -1. If you want to set the value of this parameter to the default with the help of HEX switches, follow the tips in section "Reset of the parameter".


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (differential lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Controller in SVEL mode with PLC

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-Exx

Parameters 1000h (DS301)

Parameters 2000h

Parameters 3000h (DSA)

Parameters 5000h (MPU)

Parameters 6000h (DSP402)


Content - EDC-E20XC

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1512409
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 70 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 160 A
- Continuous output current @ Up=48V*2 with Heatsink (Art.No. 1511832) | 60 A 70 A
- Max. Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 40 mm
- Weight | 414 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*⁶ | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, differential

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ t < -25°C, setting of the NodeID is only allowed by firmware parameters, because the functioning of the Hex-Switches at these temperatures
is not longer guaranteed

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | +Up | Power supply voltage
 | X1.2 | GND | Ground for power supply voltage
 | X1.3 | Ma | Motor phase A
 | X1.4 | Mb | Motor phase B
 | X1.5 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | A | Inc. encoder, A channel
 | X2.5 | B | Inc. encoder, B channel
 | X2.6 | Inx | Inc. encoder, index channel
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | /A | Inc. encoder, A channel inverted
 | X2.12 | /B | Inc. encoder, B channel inverted
 | X2.13 | /Inx | Inc. encoder, index channel inverted
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of screw connectors of Weidmueller LU 10.16

The controllers use the connectors with screw technology for the power side

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | LU 10.16 | 0,5 ... 16 | 0,5 ... 16 | 2,5 ... 10 | 2,5 ... 10 | 12

Torgue of Terminal X1 = 20.5 Lb. in..

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Control elements

Adjustment possibilities for HEX switches

CAN bus address

Hex-Switches should be not used at T < -25°C (setting of node ID only possible by firmware parameters) .

The CAN bus address (node id) may be changed by using the HEX switches, that are located on the bottom side of the device. The value of the set address is represented in a hexadecimal form.

Node id |  | Description
0 |  | Not allowed
1..127 | 01h..7Fh | The device is after switching it on in state "Pre-Operational"
128..255 | 80h..FFh | Not allowed
The CAN bus address can be also changed by software (see parameter DS2000_CopConfigParam_UserNodeId and edcTools-CAN Konfiguration)

Each address must be unique in the network! A change of node id via HEX switches or software will take effect after reset of the device.

Please note, that the software node id (see parameter DS2000_CopConfigParam_UserNodeId) has higher priority as the node id set via the HEX switches. The device accepts only the node id set via the HEX switches if the parameter DS2000_CopConfigParam_UserNodeId is set to -1. If you want to set the value of this parameter to the default with the help of HEX switches, follow the tips in section "Reset of the parameter".

Reset of the parameters

If the HEX switches are set to 00h when switching on, the controller sets the default values of parameters. Moreover it can be observed the following sequence:

- the green LED0 "Power" flashes 10s with the cycle 500ms
- the yellow LED1 "State" flashes 4 times
- Both LEDs flash with the cycle 100ms

The sequence is completed, when the green and yellow LED are on. After that you have to adjust the node id and reset the device.

Please note, that a MPU program will not be deleted from the device.

CAN bus baud rate

The standard baud rate of the devices is 125 kbit/s. It can be changed both via software (see parameter DS2000_CopConfigParam_UserBaudrate and edcTools-CAN Konfiguration) and with the HEX switches (see instruction in the table below).

 | Action | Notification
1 | Switch off the device |
2 | Set HEX switches to 00h |
3 | Switch on the device | The green LED flashes with the cycle 500 ms
4 | Within 10 seconds, the HEX switch Hi must be set to value "F". The direction of rotation of the HEX switch is not important. | The green LED flashes with the cycle 200 ms
5 | Within 10 seconds, the HEX switch Lo must be set to the index of the baud rate. Index 0 - baud rate 1 Mbit/s Index 1 - baud rate 800 kbit/s Index 2 - baud rate 500 kbit/s Index 3 - baud rate 250 kbit/s Index 4 - baud rate 125 kbit/s Index 5 - baud rate 100 kbit/s Index 6 - baud rate 50 kbit/s Index 7 - baud rate 20 kbit/s Index 8 - baud rate 10 kbit/s | The Module confirms takeover of the baud rate or displays an error. If a supported index was selected, the yellow LED will flash several times. Then the green and yellow LEDs flash with the cycle 100 ms. If an invalid or unsupported index was selected, it will be indicated by rapid flashing of the red and green LEDs.
6 | Then, while the green and yellow LEDs flash, the node id can be set to a correct address. Alternative you can wait until the sequence is finished, switch off the device and set the appropriate node id. |
To set the default baud rate of the device, follow the tips in section "Reset of the parameter".

Please note, that the software baud rate (see parameter DS2000_CopConfigParam_UserBaudrate) has higher priority as the baud rate set via the HEX switches. The device accepts only the change of baud rate via the HEX switches if the parameter DS2000_CopConfigParam_UserBaudrate is set to -1. If you want to set the value of this parameter to the default with the help of HEX switches, follow the tips in section "Reset of the parameter".


Content - EDC-E25

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511110
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 70 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 100 A
- Continuous output current @ Up=24V*2 | 35 A
- Continuous output current @ Up=48V*2 | 26 A
- Max. Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 30 mm
- Weight | 380 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*⁶ | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | yes
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ t < -25°C, setting of the NodeID is only allowed by firmware parameters, because the functioning of the Hex-Switches at these temperatures
is not longer guaranteed

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | A | Inc. encoder, A channel
 | X2.5 | B | Inc. encoder, B channel
 | X2.6 | Inx | Inc. encoder, index channel
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | /A | Inc. encoder, A channel inverted
 | X2.12 | /B | Inc. encoder, B channel inverted
 | X2.13 | /Inx | Inc. encoder, index channel inverted
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground
 | X4.1 | Ain1 | Analog input 1
 | X4.2 | Din4 | Digital input 4
 | X4.3 | Din5 | Digital input 5
 | X4.4 | Din6 | Digital input 6
 | X4.5 | Dout1 | Digital output 1
 | X4.6 | Din7 | Digital input 7

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BVZ 7.62 HP

The controllers use the connectors with screw technology for the power side

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BVZ 7.62HP/06 1929970000 | 0,2 ... 6 | 0,5 ... 6 | 0,25 ... 6 | 0,25 ... 6 | 12
For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X4 | B2CF 3.5/6 1277470000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Content - EDC-E25XC

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1512840
Certification | UL, CE
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*² | typ. 70 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 160 A
- Continuous output current (certified UL/CE)*³ @Up=24V @Up=60V | 44 A 40 A
- Continuous output current (not certified)*⁴ @Up=24V @Up=48V with Heatsink (Art.No. 1511832) | 60 A 59 A 70 A
- Max. Output voltage | 100% Up
- PWM frequency | 25, 32⁵, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | no
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 40 mm
- Weight | 414 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*6 | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
- Swing test, sinusoidal test Fc - according to IEC 60068-2-64 Mounting position frequency range Amplitude Acceleration | a. horizontal attachment; b. vertical attachment 10 - 150 Hz 10 - 58 Hz (±0.075 mm) 59 - 150 Hz (10 m/s², 1g)
- Test shock test Ea - according to IEC 60068-2-27 Mounting position Acceleration shock form shock duration | a. horizontal attachment; b. vertical attachment 150 m/s², 15 g semisinusoidal 11 ms
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | yes
Functional safety
- Safety function refer safety manual | Safe Torque Off (STO)
- Safety Integrity Level (SIL) | up to SIL 3
- Performance Level (PL) | up to PL e
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number - digital inputs Notice: Din5 parallel with Dout2*⁷ | 6 (Din0..5)
- Low voltage | 0..5 V
- High voltage | 8..30 V
STO channels (ST0-A..B)
- Low voltage | 0..5 V
- High voltage | 8..30 V
- Limit voltage | 60 V
Digital outputs
- Number Notice: Dout2 parallel with Din5 | 3 (Dout0..2)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ take into consideration the performance data
*² power amplifier switched off, 5V output (sensor supply) is free, STO activ
*³ connector cable with max. possible cable cross-section, PWM frequency 32 kHz (asymmetrical), ambient temperature 55 °C,
I/O´s and 5V output active, RMS current: 44 A → 36 Aeff, 40 A → 33 Aeff
*⁴ connector cable with max. possible cable cross-section, PWM frequency 32 kHz (asymmetrical), ambient temperature 40 °C,
I/O´s and 5V output free, RMS current: 60 A → 49 Aeff, 59 A → 48 Aeff, 70 A → 57 Aeff
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*⁵ default value
*⁶ Hex-Switches should be not used at T < -25°C(setting of node ID only possible by firmware parameters)
*⁷ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | +Up | Power supply voltage
 | X1.2 | GND | Ground for power supply voltage
 | X1.3 | Ma | Motor phase A
 | X1.4 | Mb | Motor phase B
 | X1.5 | Mc | Motor phase C
 | X2.1 | H1 | Hall sensor 1
 | X2.2 | H2 | Hall sensor 2
 | X2.3 | H3 | Hall sensor 3
 | X2.4 | A | Inc. encoder, A channel
 | X2.5 | B | Inc. encoder, B channel
 | X2.6 | Inx | Inc. encoder, index channel
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.8 | /H1 | Hall sensor 1 inverted
 | X2.9 | /H2 | Hall sensor 2 inverted
 | X2.10 | /H3 | Hall sensor 3 inverted
 | X2.11 | /A | Inc. encoder, A channel inverted
 | X2.12 | /B | Inc. encoder, B channel inverted
 | X2.13 | /Inx | Inc. encoder, index channel inverted
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground
 | X4.1 | Ain1 | Analog input 1
 | X4.2 | Din4 | Digital input 4
 | X4.3 | Din5/Dout2 | Digital input 5 / Digital output 2
 | X4.4 | STO-A | STO channel A
 | X4.5 | Dout1 | Digital output 1
 | X4.6 | STO-B | STO channel B
 | S1 | PE | Protective earth connection

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of screw connectors of Weidmueller LU 10.16

The controllers use the connectors with screw technology for the power side

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | LU 10.16 | 0,5 ... 16 | 0,5 ... 16 | 2,5 ... 10 | 2,5 ... 10 | 12

Torgue of Terminal X1 = 20.5 Lb. in..

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X4 | B2CF 3.5/6 1277470000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (differential lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-E27

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511113
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 70 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 100 A
- Continuous output current @ Up=24V*2 | 35 A
- Continuous output current @ Up=48V*2 | 26 A
- Max. Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 30 mm
- Weight | 380 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*⁶ | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | yes
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number | 7 (Din0..6)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ t < -25°C, setting of the NodeID is only allowed by firmware parameters, because the functioning of the Hex-Switches at these temperatures
is not longer guaranteed

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | res. | Reserved
 | X2.2 | res. | Reserved
 | X2.3 | res. | Reserved
 | X2.4 | +Sin | Encoder, plus sine signal
 | X2.5 | +Cos | Encoder, plus cosine signal
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | -Sin | Encoder, minus sine signal
 | X2.12 | -Cos | Encoder, minus cosine signal
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground
 | X4.1 | Ain1 | Analog input 1
 | X4.2 | Din4 | Digital input 4
 | X4.3 | Din5 | Digital input 5
 | X4.4 | Din6 | Digital input 6
 | X4.5 | Dout1 | Digital output 1
 | X4.6 | res. | Reserved

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (differential lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-E27XC

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1512841
Certification | UL, CE
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*² | typ. 70 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 160 A
- Continuous output current (certified UL/CE)*³ @Up=24V @Up=60V | 44 A 40 A
- Continuous output current (not certified)*⁴ @Up=24V @Up=48V with Heatsink (Art.No. 1511832) | 60 A 59 A 70 A
- Max. Output voltage | 100% Up
- PWM frequency | 25, 32⁵, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | no
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 111 x 100 x 40 mm
- Weight | 414 g
- Assembly | Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature*6 | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
- Swing test, sinusoidal test Fc - according to IEC 60068-2-64 Mounting position frequency range Amplitude Acceleration | a. horizontal attachment; b. vertical attachment 10 - 150 Hz 10 - 58 Hz (±0.075 mm) 59 - 150 Hz (10 m/s², 1g)
- Test shock test Ea - according to IEC 60068-2-27 Mounting position Acceleration shock form shock duration | a. horizontal attachment; b. vertical attachment 150 m/s², 15 g semisinusoidal 11 ms
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | yes
Functional safety
- Safety function refer safety manual | Safe Torque Off (STO)
- Safety Integrity Level (SIL) | up to SIL 3
- Performance Level (PL) | up to PL e
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number - digital inputs Notice: Din5 parallel with Dout2*5 | 6 (Din0..5)
- Low voltage | 0..5 V
- High voltage | 8..30 V
STO channels (ST0-A..B)
- Low voltage | 0..5 V
- High voltage | 8..30 V
- Limit voltage | 60 V
Digital outputs
- Number Notice: Dout2 parallel with Din5 | 3 (Dout0..2)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ take into consideration the performance data
*² power amplifier switched off, 5V output (sensor supply) is free, STO activ
*³ connector cable with max. possible cable cross-section, PWM frequency 32 kHz (asymmetrical), ambient temperature 55 °C,
I/O´s and 5V output active, RMS current: 44 A → 36 Aeff, 40 A → 33 Aeff
*⁴ connector cable with max. possible cable cross-section, PWM frequency 32 kHz (asymmetrical), ambient temperature 40 °C,
I/O´s and 5V output free, RMS current: 60 A → 49 Aeff, 59 A → 48 Aeff, 70 A → 57 Aeff
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*⁵ default value
*⁶ Hex-Switches should be not used at T < -25°C(setting of node ID only possible by firmware parameters)
*⁷ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | +Up | Power supply voltage
 | X1.2 | GND | Ground for power supply voltage
 | X1.3 | Ma | Motor phase A
 | X1.4 | Mb | Motor phase B
 | X1.5 | Mc | Motor phase C
 | X2.1 | res. | Reserved
 | X2.2 | res. | Reserved
 | X2.3 | res. | Reserved
 | X2.4 | +Sin | Encoder, plus sine signal
 | X2.5 | +Cos | Encoder, plus cosine signal
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | -Sin | Encoder, minus sine signal
 | X2.12 | -Cos | Encoder, minus cosine signal
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground
 | X4.1 | Ain1 | Analog input 1
 | X4.2 | Din4 | Digital input 4
 | X4.3 | Din5/Dout2 | Digital input 5 / Digital output 2
 | X4.4 | STO-A | STO channel A
 | X4.5 | Dout1 | Digital output 1
 | X4.6 | STO-B | STO channel B
 | S1 | PE | Protective earth connection

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (differential lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - Device family EDC-E4x

EDC-E40

EDC-E40-Modul

EDC-E42

EDC-E45

EDC-E45-Modul

EDC-E47


Content - EDC-E40

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511118
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 50 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 30 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Content - EDC-E40-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1503589
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 50 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 30 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | SpiMISO | mcSPI Master In Slave Out
 | X1.14 | Spi/SS | mcSPI Slave Select
 | X1.15 | SpiMOSI | mcSPI Master Out Slave In
 | X1.16 | SpiSCK | mcSPI Clock
 | X1.17 | Rx0 | UART0 Receive Signal
 | X1.18 | Tx0 | UART0 Transmit Signal
 | X1.19 | Erw1 | mcSPI expansion signal 1
 | X1.20 | Erw2 | mcSPI expansion signal 2
 | X1.21 | Inx | Inc. encoder, index channel
 | X1.22 | /Inx | Inc. encoder, index channel inverted
 | X1.23 | B | Inc. encoder, B channel
 | X1.24 | /B | Inc. encoder, B channel inverted
 | X1.25 | A | Inc. encoder, A channel
 | X1.26 | /A | Inc. encoder, A channel inverted
 | X1.27 | H3 | Hall sensor 3
 | X1.28 | /H3 | Hall sensor 3 inverted
 | X1.29 | H2 | Hall sensor 2
 | X1.30 | /H2 | Hall sensor 2 inverted
 | X1.31 | H1 | Hall sensor 1
 | X1.32 | /H1 | Hall sensor 1 inverted
 | X2.1 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.2 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X2.3 | Dout0 | Digital output 0
 | X2.4 | res. | Reserved
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | res. | Reserved
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Content - EDC-E42

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504954 (HC Version 1504960)
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 50 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 30 A
- Continuous output current @ Up=24V*2 (HC Version) | 10 A (12.5) A
- Continuous output current @ Up=48V*2 (HC Version) | 8.5 A (12.5) A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
- Min. load inductance | 200 uH
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH (HC Version) | 110 x 22.5(40) x 77 mm
- Weight (HC Version) | 110 (310) g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | -30..5 V
- High voltage | 6..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 2.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X2.1 | res. | Reserved
 | X2.2 | res. | Reserved
 | X2.3 | res. | Reserved
 | X2.4 | +Sin | Encoder, plus sine signal
 | X2.5 | +Cos | Encoder, plus cosine signal
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V auxiliary voltage (encoder)
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | -Sin | Encoder, minus sine signal
 | X2.12 | -Cos | Encoder, minus cosine signal
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground for 5V auxiliary voltage (encoder)
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | Ain0 | Analog input 0
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | res. | Reserved
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Content - EDC-E45

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511139
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/6 1690460000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X4 | B2CF 3.5/6 1277470000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Content - EDC-E45-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1503601
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,/H1,H2,/H2,H3,/H3
- Max. freqency (per channel) | 10 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | Din6 | Digital input 6
 | X1.4 | Din7 | Digital input 7
 | X1.5 | Din4 | Digital input 4
 | X1.6 | Din5 | Digital input 5
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | SpiMISO | mcSPI Master In Slave Out
 | X1.14 | Spi/SS | mcSPI Slave Select
 | X1.15 | SpiMOSI | mcSPI Master Out Slave In
 | X1.16 | SpiSCK | mcSPI Clock
 | X1.17 | Rx0 | UART0 Receive Signal
 | X1.18 | Tx0 | UART0 Transmit Signal
 | X1.19 | Erw1 | mcSPI expansion signal 1
 | X1.20 | Erw2 | mcSPI expansion signal 2
 | X1.21 | Inx | Inc. encoder, index channel
 | X1.22 | /Inx | Inc. encoder, index channel inverted
 | X1.23 | B | Inc. encoder, B channel
 | X1.24 | /B | Inc. encoder, B channel inverted
 | X1.25 | A | Inc. encoder, A channel
 | X1.26 | /A | Inc. encoder, A channel inverted
 | X1.27 | H3 | Hall sensor 3
 | X1.28 | /H3 | Hall sensor 3 inverted
 | X1.29 | H2 | Hall sensor 2
 | X1.30 | /H2 | Hall sensor 2 inverted
 | X1.31 | H1 | Hall sensor 1
 | X1.32 | /H1 | Hall sensor 1 inverted
 | X2.1 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X2.2 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X2.3 | Dout0 | Digital output 0
 | X2.4 | Dout1 | Digital output 1
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | res. | Reserved
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Content - EDC-E47

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511153
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current @ Up=24V*2 | 10 A
- Continuous output current @ Up=48V*2 | 8.5 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number | 7 (Din0..6)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Content - Device family EDC-E5x

EDC-E50

EDC-E51-Lp

EDC-E52

EDC-E55

EDC-E55-Modul

EDC-E55-Lp

EDC-E56-Lp

EDC-E57


Content - EDC-E50

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511720
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 25 A
- Continuous output current*2 | 8 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended, 920 Ohm input impedance
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended, 5V pull up intern 920 Ohm
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | 0..10 V, 12 Bit, single ended, 20 kOhm input impedance
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended, 5V pull up intern 1,5 kOhm

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | Ain0 | Analog input 0
 | X2.2 | res. | Reserved
 | X2.3 | Ain1 | Analog input 1
 | X2.4 | res. | Reserved
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | A | Inc. encoder, A channel
 | X5.5 | res. | Reserved
 | X5.6 | B | Inc. encoder, B channel
 | X5.7 | res. | Reserved
 | X5.8 | Inx | Inc. encoder, index channel
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Controller in SVEL mode with PLC

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-E51-Lp

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Magnetic encoder chip

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511723
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 65 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 25 A
- Continuous output current*2 | 8 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 70 x 50 x 18 mm
- Weight | 50 g
- Assembly | Mounted on the motor
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended, 5V pull up intern 920 Ohm
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | 0..10 V, 12 Bit, single ended, 20 kOhm input impedance
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended, 5V pull up intern 1,5 kOhm

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | Ain0 | Analog input 0
 | X2.2 | res. | Reserved
 | X2.3 | Ain1 | Analog input 1
 | X2.4 | res. | Reserved
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | res. | Reserved
 | X5.5 | res. | Reserved
 | X5.6 | res. | Reserved
 | X5.7 | res. | Reserved
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Controller in SVEL mode with PLC

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-E52

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511848
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 25 A
- Continuous output current*2 | 8 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential, 1,085 kOhm input impedance
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | 0..10 V, 12 Bit, single ended, 20 kOhm input impedance
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended, 5V pull up intern 1,5 kOhm

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | Ain0 | Analog input 0
 | X2.2 | res. | Reserved
 | X2.3 | Ain1 | Analog input 1
 | X2.4 | res. | Reserved
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | res. | Reserved
 | X5.2 | res. | Reserved
 | X5.3 | res. | Reserved
 | X5.4 | +Sin | Encoder, plus sine signal
 | X5.5 | -Sin | Encoder, minus sine signal
 | X5.6 | +Cos | Encoder, plus cosine signal
 | X5.7 | -Cos | Encoder, minus cosine signal
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Content - EDC-E55

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511721
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption@ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 10 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | +/- 10 V, 12 Bit, differential
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | +Ain0 | Analog input 0, plus
 | X2.2 | -Ain0 | Analog input 0, minus
 | X2.3 | +Ain1 | Analog input 1, plus
 | X2.4 | -Ain1 | Analog input 1, minus
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | A | Inc. encoder, A channel
 | X5.5 | /A | Inc. encoder, A channel inverted
 | X5.6 | B | Inc. encoder, B channel
 | X5.7 | /B | Inc. encoder, B channel inverted
 | X5.8 | Inx | Inc. encoder, index channel
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Content - EDC-E55-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511968
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption@ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 10 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 70 x 50 x 18 mm
- Weight | 50 g
- Assembly | Backplane
- Connectors | Pin header, crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | +/- 10 V, 12 Bit, differential
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | FE | Functional earth
 | X1.3 | +Up | Power supply voltage
 | X1.4 | +Up | Power supply voltage
 | X1.5 | +Up | Power supply voltage
 | X1.6 | +Up | Power supply voltage
 | X1.7 | GND | Ground for power supply voltage
 | X1.8 | GND | Ground for power supply voltage
 | X1.9 | GND | Ground for power supply voltage
 | X1.10 | GND | Ground for power supply voltage
 | X1.11 | +Ue24V | Electronic supply voltage
 | X1.12 | +Ue24V | Electronic supply voltage
 | X1.13 | GND | Ground for electronic supply voltage
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | GND | Ground for electronic supply voltage
 | X1.16 | GND | Ground for electronic supply voltage
 | X2.1 | +Ain0 | Analog input 0, plus
 | X2.2 | -Ain0 | Analog input 0, minus
 | X2.3 | +Ain1 | Analog input 1, plus
 | X2.4 | -Ain1 | Analog input 1, minus
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | res. | Reserved
 | X5.2 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X5.3 | Erw5 | mcSPI expansion signal 5
 | X5.4 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X5.5 | Erw3 | mcSPI expansion signal 3
 | X5.6 | Inx | Inc. encoder, index channel
 | X5.7 | Erw4 | mcSPI expansion signal 4
 | X5.8 | /B | Inc. encoder, B channel inverted
 | X5.9 | SpiMISO | mcSPI Master In Slave Out
 | X5.10 | B | Inc. encoder, B channel
 | X5.11 | Spi/SS | mcSPI Slave Select
 | X5.12 | /A | Inc. encoder, A channel inverted
 | X5.13 | SpiMOSI | mcSPI Master Out Slave In
 | X5.14 | A | Inc. encoder, A channel
 | X5.15 | SpiCLK | mcSPI Clock
 | X5.16 | H3 | Hall sensor 3
 | X5.17 | Erw1 | mcSPI expansion signal 1
 | X5.18 | H2 | Hall sensor 2
 | X5.19 | Erw2 | mcSPI expansion signal 2
 | X5.20 | H1 | Hall sensor 1
 | X6.1 | Ma | Motor phase A
 | X6.2 | Ma | Motor phase A
 | X6.3 | Ma | Motor phase A
 | X6.4 | Ma | Motor phase A
 | X6.5 | Mb | Motor phase B
 | X6.6 | Mb | Motor phase B
 | X6.7 | Mb | Motor phase B
 | X6.8 | Mb | Motor phase B
 | X6.9 | Mc | Motor phase C
 | X6.10 | Mc | Motor phase C
 | X6.11 | Mc | Motor phase C
 | X6.12 | Mc | Motor phase C
 | X7.1 | Id6 | Node-ID Bit 6
 | X7.2 | Id5 | Node-ID Bit 5
 | X7.3 | Id7 | Node-ID Bit 7
 | X7.4 | Id4 | Node-ID Bit 4
 | X7.5 | GND | Ground
 | X7.6 | GND | Ground
 | X7.7 | Id2 | Node-ID Bit 2
 | X7.8 | Id1 | Node-ID Bit 1
 | X7.9 | Id3 | Node-ID Bit 3
 | X7.10 | Id0 | Node-ID Bit 0

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

2mm pitch pin headers

The module variants of controllers use mainly 2mm pitch pin headers of SAMTEC. Using alternative connector please notice the current-carrying capacity and design (soldering and height). The connectors are mechanically similar to e.g. connectors of W + P company.

The figure shows the major variations:

Terminal | Name / Art.-Nr. - Backplane (SMT) - Backplane (THT) | Manufacturer | Total height - PCB <-> PCB | Current-carrying capacity
X1 | - TMM-108-01-L-D-SM - TMM-108-01-L-D | SAMTEC | 10.4mm (SMT)* 9.12mm (THT)* | 3A@Ta=80°C
X5 | - TMM-110-01-L-D-SM - TMM-110-01-L-D | SAMTEC | 10.4mm (SMT)* 9.12mm (THT)* |
X6 | - TMM-106-01-L-D-SM - TMM-106-01-L-D | SAMTEC | 10.4mm (SMT) *9.12mm (THT)* |

!ATTENTION! Please note the insertion depth (typ. 3,2 mm) and the cross-section (typ. 0,5 x 0,5 mm) of the pins.

For more information, visit www.samtec.com.

Processing of crimp connectors of JST PA-Serie

 The following figure shows, which cross-sections can be used with the connector of the JST PA-Serie:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X2

- Crimp housing - PAP-05V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

X3

- Crimp housing - PAP-03V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

X4

- Crimp housing - PAP-13V-S
- Crimp contact - SPHD-001T-P0.5
- Crimp tool - WC-610

AWG 22 ... 26
0,13 ... 0,33

1,0 ... 1,5

~1.5 ... 2

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.jst.com.

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Node id via hex switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

The input pins for the node id hex switches are low active. To set the node id to 1 via the hex switches the follwing setup is necessary.


Content - EDC-E55-Lp

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511834
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption@ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 10 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 70 x 50 x 18 mm
- Weight | 50 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | +/- 10 V, 12 Bit, differential
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Content - EDC-E56-Lp

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Magnetic encoder chip

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511724
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption@ Ue=24V*1 | typ. 65 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 10 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 70 x 50 x 18 mm
- Weight | 50 g
- Assembly | Mounted on the motor
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | +/- 10 V, 12 Bit, differential
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | +Ain0 | Analog input 0, plus
 | X2.2 | -Ain0 | Analog input 0, minus
 | X2.3 | +Ain1 | Analog input 1, plus
 | X2.4 | -Ain1 | Analog input 1, minus
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | H1 | Hall sensor 1
 | X5.2 | H2 | Hall sensor 2
 | X5.3 | H3 | Hall sensor 3
 | X5.4 | res. | Reserved
 | X5.5 | res. | Reserved
 | X5.6 | res. | Reserved
 | X5.7 | res. | Reserved
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: hall
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushless motor with encoder (differential lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Brushed motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Controller in SVEL mode with PLC

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

EMC-compliant wiring

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-E57

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1512015
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 50 A
- Continuous output current*2 | 10 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 78 x 74 x 28 mm
- Weight | 100 g
- Assembly | Wall
- Connectors | Tension clamp connection, crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential, 1,085 kOhm input impedance
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 4 (Dout0..3)
- Continuous output current | 0.3 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 3 (Ain0..2)
- Signal type - Ain0..1 | +/- 10V, 12 Bit, differential, 20 kOhm input impedance
- Signal type - Ain2 | 0..5 V, 12 Bit, single ended, 5V pull up intern 1,5 kOhm

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | +Ue24V | Electronic supply voltage
 | X1.5 | GND | Ground for electronic supply voltage
 | X2.1 | +Ain0 | Analog input 0, plus
 | X2.2 | -Ain0 | Analog input 0, minus
 | X2.3 | +Ain1 | Analog input 1, plus
 | X2.4 | -Ain1 | Analog input 1, minus
 | X2.5 | Ain2 | Analog Input 2 (5V)
 | X3.1 | CAN Hi | CAN High
 | X3.2 | CAN Lo | CAN Low
 | X3.3 | res. | Reserved
 | X4.1 | res. | Reserved
 | X4.2 | Din0 | Digital input 0
 | X4.3 | Din1 | Digital input 1
 | X4.4 | Din2 | Digital input 2
 | X4.5 | Din3 | Digital input 3
 | X4.6 | Din4 | Digital input 4
 | X4.7 | Din5 | Digital input 5
 | X4.8 | Din6 | Digital input 6
 | X4.9 | Din7 | Digital input 7
 | X4.10 | Dout0 | Digital output 0
 | X4.11 | Dout1 | Digital output 1
 | X4.12 | Dout2 | Digital output 2
 | X4.13 | Dout3 | Digital output 3
 | X5.1 | res. | Reserved
 | X5.2 | res. | Reserved
 | X5.3 | res. | Reserved
 | X5.4 | +Sin | Encoder, plus sine signal
 | X5.5 | -Sin | Encoder, minus sine signal
 | X5.6 | +Cos | Encoder, plus cosine signal
 | X5.7 | -Cos | Encoder, minus cosine signal
 | X5.8 | res. | Reserved
 | X5.9 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X5.10 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X6.1 | Ma | Motor phase A
 | X6.2 | Mb | Motor phase B
 | X6.3 | Mc | Motor phase C

V1.02.00.58


Content - Device family EDC-E6x

EDC-E60

EDC-E60-Modul

EDC-E61-Lp

EDC-E61-Modul

EDC-E62

EDC-E62-Modul

EDC-E65

EDC-E65-Modul

EDC-E66-Lp

EDC-E66-Modul

EDC-E67

EDC-E67-Modul


Content - EDC-E60

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511656
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 25 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals Notice: Inx parallel with H3 | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Hall sensors
- Signals Notice: H3 parallel with Inx | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X1.3 | B | Inc. encoder, B channel
 | X1.4 | A | Inc. encoder, A channel
 | X1.5 | H3/Inx | Hall sensor 3 / Inc. encoder, index channel
 | X1.6 | H2 | Hall sensor 2
 | X1.7 | H1 | Hall sensor 1
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2/Dout0 | Digital input 2 / Digital output 0
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C

V1.02.00.58


Content - EDC-E60-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1503613
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 25 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | Inx | Inc. encoder, index channel
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | B | Inc. encoder, B channel
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | A | Inc. encoder, A channel
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | H3 | Hall sensor 3
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | H2 | Hall sensor 2
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | H1 | Hall sensor 1
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | res. | Reserved
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - EDC-E61-Lp

Technical data

Terminal assignment and picture

Connectors

Display elements

Magnetic encoder chip

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511662
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Mounted on the motor
- Connectors | Crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground of the auxiliary voltage Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage (auxiliary voltage)
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | res. | Reserved
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2/Dout0 | Digital input 2 / Digital output 0
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C

V1.02.00.58


Content - EDC-E61-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Magnetic encoder chip

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1505014
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 25 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane, mounted on the motor
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V output voltage (auxiliary voltage)
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | res. | Reserved
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | res. | Reserved
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | res. | Reserved
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | res. | Reserved
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | res. | Reserved
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground of the auxiliary voltage Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | res. | Reserved
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - EDC-E62

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1505024
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X1.3 | +Cos | Encoder, plus cosine signal
 | X1.4 | +Sin | Encoder, plus sine signal
 | X1.5 | res. | Reserved
 | X1.6 | -Cos | Encoder, minus cosine signal
 | X1.7 | -Sin | Encoder, minus sine signal
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2/Dout0 | Digital input 2 / Digital output 0
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C

V1.02.00.58


Content - EDC-E62-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1505022
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 90% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | +Cos | Encoder, plus cosine signal
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | +Sin | Encoder, plus sine signal
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | res. | Reserved
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | -Cos | Encoder, minus cosine signal
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | -Sin | Encoder, minus sine signal
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | res. | Reserved
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - EDC-E65

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511658
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 40 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals Notice: Inx parallel with H3 | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Hall sensors
- Signals Notice: H3 parallel with Inx | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Content - EDC-E65-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1503571
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 40 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder/Hall)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Hall sensors
- Signals | H1,H2,H3
- Max. freqency (per channel) | 10 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 3 (Din0..2)
- Number (0..30V tolerant) Notice: Din3 parallel with Dout1*4 | 1 (Din3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout1 parallel with Din3 | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | Inx | Inc. encoder, index channel
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: encoder, hall
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | B | Inc. encoder, B channel
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | A | Inc. encoder, A channel
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | H3 | Hall sensor 3
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | H2 | Hall sensor 2
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | H1 | Hall sensor 1
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3/Dout1 | Digital input 3 / Digital output 1
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | FE | Functional earth
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - EDC-E66-Lp

Technical data

Terminal assignment and picture

Connectors

Display elements

Magnetic encoder chip

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511661
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 45 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Mounted on the motor
- Connectors | Crimp technology
Environment
- Protection class | IP00
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Content - EDC-E66-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Magnetic encoder chip

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1505031
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 40 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane, mounted on the motor
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | magnetic sensor
- Signals | A, B, Inx channels internally
- Resolution | 12 bit per motor shaft revolution kHz
- Signal type | Magnetic sensor for magnet on the motor shaft
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Content - EDC-E67

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511663
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 45 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number (+/-30V tolerant) | 2 (Din0..1)
- Number (0..30V tolerant) Notice: Din2 parallel with Dout0*4 | 1 (Din2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number Notice: Dout0 parallel with Din2 | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value
*⁴ Input voltage must not exceed Electronic supply voltage Ue

V1.02.00.58


Content - EDC-E67-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511516
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 45 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 15 A
- Continuous output current @ Up=24V*2 | 5 A
- Continuous output current @ Up=48V*2 | 4.3 A
- Output voltage | 100% Up
- PWM frequency | 25, 32*3, 50 kHz
- PWM mode | symmetrical / asymmetrical
Motor types
- DC motors | yes
- BLDC motors | yes
- Linear motors | yes
- Stepper motors | no
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Encoder
- Type | sin / cos
- Signals | +Sin,-Sin,+Cos,-Cos
- Resolution | 13 bit per sine period
- Input voltage | 1 V peak-peak, differential
- Signal type | sine/cosine, analog, differential
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, PWM frequency 32 kHz, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current
*³ default value

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | +Cos | Encoder, plus cosine signal
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | +Sin | Encoder, plus sine signal
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | res. | Reserved
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | -Cos | Encoder, minus cosine signal
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | -Sin | Encoder, minus sine signal
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3/Dout1 | Digital input 3 / Digital output 1
 | X1.31 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | FE | Functional earth
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | res. | Reserved
 | X2.15 | Mc | Motor phase C
 | X2.16 | res. | Reserved

V1.02.00.58


Content - Device family EDC-S4x

EDC-S40

EDC-S40-Modul

EDC-S45

EDC-S45-Modul


Content - EDC-S40

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511164
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 35 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 20 A
- Continuous output current @ Up=24V*2 | 7 A
- Continuous output current @ Up=48V*2 | 6 A
- Output voltage | 85% Up
- PWM frequency | 32 kHz
- PWM mode | symmetrical
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X1.7 | Md | Motor phase D
 | X2.1 | res. | Reserved
 | X2.2 | res. | Reserved
 | X2.3 | res. | Reserved
 | X2.4 | res. | Reserved
 | X2.5 | res. | Reserved
 | X2.6 | res. | Reserved
 | X2.7 | +U5V | 5V output voltage (auxiliary voltage)
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | res. | Reserved
 | X2.12 | res. | Reserved
 | X2.13 | res. | Reserved
 | X2.14 | GND | Ground of the auxiliary voltage Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | Ain0 | Analog input 0
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | res. | Reserved
 | X3.9 | res. | Reserved
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/7 1690470000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

Stepper motor

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-Sxx

Parameters 1000h (DS301)

Parameters 2000h

Parameters 3000h (DSA)

Parameters 5000h (MPU)

Parameters 6000h (DSP402)


Content - EDC-S40-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504984
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 35 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 20 A
- Output voltage | 85% Up
- PWM frequency | 25, 32, 50*3 kHz
- PWM mode | symmetrical
- Min. load inductance | 200 uH
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -25..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | -30..5 V
- High voltage | 6..30 V
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | SpiMISO | mcSPI Master In Slave Out
 | X1.14 | Spi/SS | mcSPI Slave Select
 | X1.15 | SpiMOSI | mcSPI Master Out Slave In
 | X1.16 | SpiSCK | mcSPI Clock
 | X1.17 | Rx0 | UART0 Receive Signal
 | X1.18 | Tx0 | UART0 Transmit Signal
 | X1.19 | Erw1 | mcSPI expansion signal 1
 | X1.20 | Erw2 | mcSPI expansion signal 2
 | X1.21 | res. | Reserved
 | X1.22 | res. | Reserved
 | X1.23 | res. | Reserved
 | X1.24 | res. | Reserved
 | X1.25 | res. | Reserved
 | X1.26 | res. | Reserved
 | X1.27 | res. | Reserved
 | X1.28 | res. | Reserved
 | X1.29 | res. | Reserved
 | X1.30 | res. | Reserved
 | X1.31 | res. | Reserved
 | X1.32 | res. | Reserved
 | X2.1 | +U5V | 5V auxiliary voltage
 | X2.2 | GND | Ground for 5V auxiliary voltage
 | X2.3 | res. | Reserved
 | X2.4 | res. | Reserved
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | Md | Motor phase D
 | X2.8 | Md | Motor phase D
 | X2.9 | Md | Motor phase D
 | X2.10 | Md | Motor phase D
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Content - EDC-S45

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511175
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 20 A
- Continuous output current @ Up=24V*2 | 7 A
- Continuous output current @ Up=48V*2 | 6 A
- Output voltage | 85% Up
- PWM frequency | 32 kHz
- PWM mode | symmetrical
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH (HC Version) | 110 x 22.5 x 77 mm
- Weight (HC Version) | 112 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 0..5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type - Ain0 | +/- 10 V, 12 Bit, differential
- Signal type - Ain1 | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | Ma | Motor phase A
 | X1.5 | Mb | Motor phase B
 | X1.6 | Mc | Motor phase C
 | X1.7 | Md | Motor phase D
 | X2.1 | res. | Reserved
 | X2.2 | res. | Reserved
 | X2.3 | res. | Reserved
 | X2.4 | A | Inc. encoder, A channel
 | X2.5 | B | Inc. encoder, B channel
 | X2.6 | Inx | Inc. encoder, index channel
 | X2.7 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X2.8 | res. | Reserved
 | X2.9 | res. | Reserved
 | X2.10 | res. | Reserved
 | X2.11 | /A | Inc. encoder, A channel inverted
 | X2.12 | /B | Inc. encoder, B channel inverted
 | X2.13 | /Inx | Inc. encoder, index channel inverted
 | X2.14 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X3.1 | +Ue24V | Electronic supply voltage
 | X3.2 | +Ain0 | Analog input 0, plus
 | X3.3 | Din0 | Digital input 0
 | X3.4 | Din1 | Digital input 1
 | X3.5 | Din2 | Digital input 2
 | X3.6 | Din3 | Digital input 3
 | X3.7 | GND | Ground for electronic supply voltage
 | X3.8 | -Ain0 | Analog input 0, minus
 | X3.9 | Dout0 | Digital output 0
 | X3.10 | CAN Hi | CAN High
 | X3.11 | CAN Lo | CAN Low
 | X3.12 | CAN GND | CAN Ground
 | X4.1 | Ain1 | Analog input 1
 | X4.2 | Din4 | Digital input 4
 | X4.3 | Din5 | Digital input 5
 | X4.4 | Din6 | Digital input 6
 | X4.5 | Dout1 | Digital output 1
 | X4.6 | Din7 | Digital input 7

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/7 1690470000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

Processing of tension clamp connection of Weidmueller B2CF 3.5

The controllers use the connectors with tension clamp for flexible conductors

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X2 | B2CF 3.5/14 1277520000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X3 | B2CF 3.5/12 1277510000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10
X4 | B2CF 3.5/6 1277470000 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1.5 | 0,14 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Examples of circuit configuration

+U5V sensor supply
The +U5V Pin of the drive controller provides 5V voltage for the sensor supply. No external voltage source should be connected to this Pin!

If external Voltage is applied to the +5UV Pin, it can lead to a destruction of the device

Stepper motor without encoder

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Stepper motor with encoder (single-ended lines)

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Switches

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

Potentiometer

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)

PLC - IO control

When installing the device, ensure compliance with the electromagnetic compatibility requirements (please refer to Cabling and installation for EMC)


Content - EDC-S45-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1504999
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 60 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 20 A
- Output voltage | 85% Up
- PWM frequency | 25, 32, 50*3 kHz
- PWM mode | symmetrical
- Min. load inductance | 200 uH
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 97.5 x 71 x 13 mm
- Weight | 55 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -25..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
Incremental encoder
- Type | incremental
- Signals | A,/A,B,/B,Inx,/Inx
- Max. freqency (per channel) | 500 kHz
- Input voltage (24V tolerant) | 5 V
- Signal type | differential, open collector, single ended
Digital inputs
- Number | 8 (Din0..7)
- Low voltage | -30..5 V
- High voltage | 8..30 V
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 2.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | CAN Hi | CAN High
 | X1.2 | CAN Lo | CAN Low
 | X1.3 | Din6 | Digital input 6
 | X1.4 | Din7 | Digital input 7
 | X1.5 | Din4 | Digital input 4
 | X1.6 | Din5 | Digital input 5
 | X1.7 | Din2 | Digital input 2
 | X1.8 | Din3 | Digital input 3
 | X1.9 | Din0 | Digital input 0
 | X1.10 | Din1 | Digital input 1
 | X1.11 | Ain0 | Analog input 0
 | X1.12 | Ain1 | Analog input 1
 | X1.13 | SpiMISO | mcSPI Master In Slave Out
 | X1.14 | Spi/SS | mcSPI Slave Select
 | X1.15 | SpiMOSI | mcSPI Master Out Slave In
 | X1.16 | SpiSCK | mcSPI Clock
 | X1.17 | Rx0 | UART0 Receive Signal
 | X1.18 | Tx0 | UART0 Transmit Signal
 | X1.19 | Erw1 | mcSPI expansion signal 1
 | X1.20 | Erw2 | mcSPI expansion signal 2
 | X1.21 | Inx | Inc. encoder, index channel
 | X1.22 | /Inx | Inc. encoder, index channel inverted
 | X1.23 | B | Inc. encoder, B channel
 | X1.24 | /B | Inc. encoder, B channel inverted
 | X1.25 | A | Inc. encoder, A channel
 | X1.26 | /A | Inc. encoder, A channel inverted
 | X1.27 | res. | Reserved
 | X1.28 | res. | Reserved
 | X1.29 | res. | Reserved
 | X1.30 | res. | Reserved
 | X1.31 | res. | Reserved
 | X1.32 | res. | Reserved
 | X2.1 | +U5V | 5V auxiliary voltage (encoder)
 | X2.2 | GND | Ground for 5V auxiliary voltage (encoder)
 | X2.3 | Dout0 | Digital output 0
 | X2.4 | Dout1 | Digital output 1
 | X2.5 | +Ue24V | Electronic supply voltage
 | X2.6 | +Ue24V | Electronic supply voltage
 | X2.7 | Md | Motor phase D
 | X2.8 | Md | Motor phase D
 | X2.9 | Md | Motor phase D
 | X2.10 | Md | Motor phase D
 | X2.11 | Mc | Motor phase C
 | X2.12 | Mc | Motor phase C
 | X2.13 | Mc | Motor phase C
 | X2.14 | Mc | Motor phase C
 | X2.15 | Mb | Motor phase B
 | X2.16 | Mb | Motor phase B
 | X2.17 | Mb | Motor phase B
 | X2.18 | Mb | Motor phase B
 | X2.19 | Ma | Motor phase A
 | X2.20 | Ma | Motor phase A
 | X2.21 | Ma | Motor phase A
 | X2.22 | Ma | Motor phase A
 | X2.23 | GND | Ground for power and electronic supply voltage
 | X2.24 | GND | Ground for power and electronic supply voltage
 | X2.25 | GND | Ground for power and electronic supply voltage
 | X2.26 | GND | Ground for power and electronic supply voltage
 | X2.27 | +Up | Power supply voltage
 | X2.28 | +Up | Power supply voltage
 | X2.29 | +Up | Power supply voltage
 | X2.30 | +Up | Power supply voltage
 | X2.31 | FE | Functional earth
 | X2.32 | FE | Functional earth

V1.02.00.58


Content - Device family EDC-S6x

EDC-S60

EDC-S60-Modul

EDC-S65

EDC-S65-Modul


Content - EDC-S60

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511664
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 10 A
- Continuous output current @ Up=24V*2 | 3.5 A
- Continuous output current @ Up=48V*2 | 3 A
- Output voltage | 85% Up
- PWM frequency | 32 kHz
- PWM mode | symmetrical
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Auxiliary voltage
- Output voltage | 5 V
- Max. output current | 0.2 A
Digital inputs
- Number | 3 (Din0..2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
Analog inputs
- Number | 1 (Ain0)
- Signal type | 0..10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground of the auxiliary voltage Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage (auxiliary voltage)
 | X1.3 | res. | Reserved
 | X1.4 | res. | Reserved
 | X1.5 | res. | Reserved
 | X1.6 | res. | Reserved
 | X1.7 | res. | Reserved
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2 | Digital input 2
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C
 | X2.6 | Md | Motor phase D

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of crimp connectors of JST PH-Serie

 The following figure shows, which cross-sections can be used with the I/O connector:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X1

- Crimp housing - PHR-15
- Crimp contact - SPH-002T-P0.5S
- Crimp tool - WC-240

AWG 24 ... 30
0,05 ... 0,22

1,5

~1.5 ... 2

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.jst.com.

Processing of crimp connectors of MOLEX Microfit 3.0

The controllers use the connectors with crimp technology for the I/O and power side.

The following figure shows, which cross-sections can be used with the connector:

Terminal Name / Art.-Nr. Wire cross section d
[AWG]
[mm2] 		Max.
cross section of insulation D
[mm] 		Stripping length A
[mm]

X2

- Crimp housing - 43645-0600
- Crimp contact - 43030-0001
- Crimp tool - 63819-0000

AWG 20 ... 24
0,2 ... 0,519

1,85

2,54 ... 2,92

! WARNING! The use of tools not specified by the manufacturer may impair the reliability of the crimp connection even failure.

For more information, visit www.molex.com.

V1.02.00.58


Content - EDC-S60-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1505046
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 30 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 10 A
- Output voltage | 85% Up
- PWM frequency | 25, 32, 50*3 kHz
- PWM mode | symmetrical
- Min. load inductance | 200 uH
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -25..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | -30..5 V
- High voltage | 6..30 V
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | 0..10 V, 12 Bit, single ended
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | res. | Reserved
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V auxiliary voltage (hall and encoder)
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | res. | Reserved
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | res. | Reserved
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | res. | Reserved
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | res. | Reserved
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | res. | Reserved
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | res. | Reserved
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3 | Digital input 3
 | X1.31 | GND | Ground for 5V auxiliary voltage (hall and encoder)
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | res. | Reserved
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | Md | Motor phase D
 | X2.15 | Mc | Motor phase C
 | X2.16 | Md | Motor phase D

V1.02.00.58


Content - EDC-S65

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1511665
Absolute maximum rating (destruction limits)
- Power supply voltage Up no polarity reversal protection | 80 V
- Continuous Electronic supply voltage Ue no polarity reversal protection | 33 V
- Short term peak voltage < 1s Ue no polarity reversal protection | 37 V
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V*1 | typ. 35 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 10 A
- Continuous output current @ Up=24V*2 | 3.5 A
- Continuous output current @ Up=48V*2 | 3 A
- Output voltage | 85% Up
- PWM frequency | 32 kHz
- PWM mode | symmetrical
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 74 x 45.5 x 14 mm
- Weight | 30 g
- Assembly | Wall
- Connectors | Crimp technology
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no
Sensor supply (Encoder)
- Output voltage | 5 V
- Max. output current | 0.2 A
Incremental encoder
- Type | incremental
- Signals | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 0..5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 3 (Din0..2)
- Low voltage | 0..5 V
- High voltage | 8..30 V
- Notice | Din2 parallel with Dout0
Digital outputs
- Number | 1 (Dout0)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
- Notice | Dout0 parallel with Din2
Analog inputs
- Number | 1 (Ain0)
- Signal type | +/- 10 V, 12 Bit, single ended

Modifications and errors excepted.
*¹ power amplifier switched off, 5V output (sensor supply) is free
*² connector cable with max. possible cable cross-section, ambient temperature 40 °C (t > 40 °C derating)
no guarantee, since value is determined empirical, please consider the application notes to determine the continuous current

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | GND | Ground for sensor supply Notice: don't connect with system GND
 | X1.2 | +U5V | 5V output voltage for sensor supply Sensors: encoder
 | X1.3 | B | Inc. encoder, B channel
 | X1.4 | A | Inc. encoder, A channel
 | X1.5 | Inx | Inc. encoder, index channel
 | X1.6 | res. | Reserved
 | X1.7 | res. | Reserved
 | X1.8 | CAN Lo | CAN Low
 | X1.9 | CAN Hi | CAN High
 | X1.10 | Din2/Dout0 | Digital input 2 / Digital output 0
 | X1.11 | Din1 | Digital input 1
 | X1.12 | Din0 | Digital input 0
 | X1.13 | Ain0 | Analog input 0
 | X1.14 | GND | Ground for electronic supply voltage
 | X1.15 | +Ue | Electronic supply voltage
 | X2.1 | +Up | Power supply voltage
 | X2.2 | GND | Ground for power supply voltage
 | X2.3 | Ma | Motor phase A
 | X2.4 | Mb | Motor phase B
 | X2.5 | Mc | Motor phase C
 | X2.6 | Md | Motor phase D

V1.02.00.58


Content - EDC-S65-Modul

Technical data

Terminal assignment and picture

Connectors

Display elements

Examples of circuit configuration

Dimensions

Parameter list (dictionary)


Technical data

Description | Value
Article number | 1506122
Power
- Electronic supply voltage Ue | 9..30 V
- Electronic current consumption @ Ue=24V | typ. 35 mA
- Power supply voltage Up | 9..60 V
- Max. output current | 10 A
- Output voltage | 85% Up
- PWM frequency | 25, 32, 50*3 kHz
- PWM mode | symmetrical
- Min. load inductance | 200 uH
Motor types
- DC motors | no
- BLDC motors | no
- Linear motors | no
- Stepper motors | yes
Mechanical
- Size LxWxH | 52.5 x 41 x 11 mm
- Weight | 18 g
- Assembly | Backplane
- Connectors | Pin header
Environment
- Protection class | IP00
- Operating temperature | -25..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
Controller cycle times
- Current controller (CURR) | 125 us
- Velocity controller (SVEL) | 250 us
- Velocity controller (VEL) | 1000, 2000*3 us
- Position controller (POS) | 1000, 2000*3 us
Incremental encoder
- Type | incremental
- Signals | A,B,Inx
- Max. freqency (per channel) | 100 kHz
- Input voltage | 5 V
- Signal type | open collector, single ended
Digital inputs
- Number | 4 (Din0..3)
- Low voltage | -10..5 V
- High voltage | 6..30 V
- Notice | Din3 parallel with Dout1
Digital outputs
- Number | 2 (Dout0..1)
- Continuous output current | 1.5 A
- Load | resistive, inductive
- Output voltage | Electronic supply voltage Ue
- Signal type | positive switching
- Notice | Dout1 parallel with Din3
Analog inputs
- Number | 2 (Ain0..1)
- Signal type | +/- 10 V, 12 Bit, single ended
CAN bus
- Protocol | DS301
- Device profile | DS402
- Max. baudrate | 1 Mbit/s
- CAN specification | 2.0B
- Galvanically isolated | no

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | Inx | Inc. encoder, index channel
 | X1.2 | Id7 | Node id bit 7
 | X1.3 | +U5V | 5V auxiliary voltage (hall and encoder)
 | X1.4 | Id6 | Node id bit 6
 | X1.5 | B | Inc. encoder, B channel
 | X1.6 | Id5 | Node id bit 5
 | X1.7 | A | Inc. encoder, A channel
 | X1.8 | Id4 | Node id bit 4
 | X1.9 | res. | Reserved
 | X1.10 | Id3 | Node id bit 3
 | X1.11 | res. | Reserved
 | X1.12 | Id2 | Node id bit 2
 | X1.13 | res. | Reserved
 | X1.14 | Id1 | Node id bit 1
 | X1.15 | CAN Lo | CAN Low
 | X1.16 | Id0 | Node id bit 0
 | X1.17 | CAN Hi | CAN High
 | X1.18 | Erw2 | mcSPI expansion signal 2
 | X1.19 | Dout0 | Digital output 0
 | X1.20 | Erw1 | mcSPI expansion signal 1
 | X1.21 | Din2 | Digital input 2
 | X1.22 | SpiSCK | mcSPI Clock
 | X1.23 | Din1 | Digital input 1
 | X1.24 | SpiMOSI | mcSPI Master Out Slave In
 | X1.25 | Din0 | Digital input 0
 | X1.26 | Spi/SS | mcSPI Slave Select
 | X1.27 | Ain0 | Analog input 0
 | X1.28 | SpiMISO | mcSPI Master In Slave Out
 | X1.29 | Ain1 | Analog input 1
 | X1.30 | Din3/Dout1 | Digital input 3 / Digital output 1
 | X1.31 | GND | Ground for 5V auxiliary voltage (hall and encoder)
 | X1.32 | res. | Reserved
 | X2.1 | +Up | Power supply voltage
 | X2.2 | res. | Reserved
 | X2.3 | +Up | Power supply voltage
 | X2.4 | FE | Functional earth
 | X2.5 | GND | Ground for power and electronic supply voltage
 | X2.6 | GND | Ground for power and electronic supply voltage
 | X2.7 | Ma | Motor phase A
 | X2.8 | +Ue | Electronic supply voltage
 | X2.9 | Ma | Motor phase A
 | X2.10 | +Ue | Electronic supply voltage
 | X2.11 | Mb | Motor phase B
 | X2.12 | Mb | Motor phase B
 | X2.13 | Mc | Motor phase C
 | X2.14 | Md | Motor phase D
 | X2.15 | Mc | Motor phase C
 | X2.16 | Md | Motor phase D

V1.02.00.58


Content - Expansion modules

Brake chopper ER-Lx

Gateways CAN


Content - Brake chopper ER-Lx

ER-L40

ER-L41


Content - ER-L40

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Calculation of external braking resistor

Calculation of duty cycle

Performance chart

Installation


Technical data

Description | Value
Article number | 1512223
Absolute maximum rating
- Voltage (destruction limit) Up no polarity reversal protection | 80 V
Power
- Electronic supply voltage Up | 18..60 V
- Electronic current consumption | typ. 10 mA
- Max. braking peak current @ Ubr=60V *1 | 60 A
- Max. braking continuous current @ Ta=40°C *1 | 10 A
Braking resistor
- Adjustable braking voltage Ubr | 18..60 V
- Switch-on threshold | Ubr + 1.7 V (+/- 4%)
- Switch-off threshold | Ubr + 0.7 V (+/- 4%)
- Braking resistor @ Ubr=60V | min. 1 Ohm (external)
- Maximum duty cycle | 100 %
- Integrated electrolytic capacitors | 400 uF
Mechanical
- Size LxWxH | 110 x 22.5 x 77 mm
- Weight | 110 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Error recognition
- Short circuit braking resistor | yes
- Braking resistor is missing / defective | yes
- Overtemperature electronic | yes
- Overtemperature braking resistor | no
Digital output
- Number | 1 (/Error)
- Continuous output current | typ. 10 mA
- Load | resistive
- Output voltage | Up (24V max.)
- Signal type | positive switching

Modifications and errors excepted.
*¹ permitted current depends on the used braking resistor (maximum value refers to the smallest possible resistance - 1 Ohm)

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | /Error | Error output
 | X1.5 | Rd1 | Braking resistor
 | X1.6 | Rd2 | Braking resistor

V1.02.00.58


Connectors

In order to operate at rated current, the cross section of the connection cable shall be designed in accordance to national valid standards.
For nominal values of the device, the maximum possible diameters of the connectors shall be used.
The cable length shall be at least 20cm.

Processing of tension clamp connection of Weidmueller BLZF 3.5

The devices use the connectors with tension clamp for flexible conductors.

The following figure shows, which cross-sections can be used with the connector:

Terminal | Name / Art.-Nr. | Clamping range (cross section d) mm2 |  |  |  | Stripping length mm
 |  | solid H05(07)V-U | flexible H05(07)V-K | flexible w.wire end ferrule | flexible w.plastic collar ferrule
X1 | BLZF 3.5/180/6 1690460000 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1,5 | 0,2 ... 1 | 10

Make sure that the stripping length of wire is correct and the insulation is not clamped.

For more information, visit www.weidmueller.com.

V1.02.00.58


Display elements

LED | Colour | State | Description
LED0 "Power" | green | on | Power supply is applied (Normal operation)
 |  | off | Power supply is missing
LED1 "State" | yellow | on | Energy is dissipated through the resistor
 |  | off | Normal operation
LED2 "Error" | red | on | Error
 |  | off | No error (Normal operation)


Control elements

In this brake chopper it must be set at which voltage the resistor should dissipate energy. Because all power supplies have tolerances (e.g. one expects by 24V power supply a voltage in the range of 18 to 30V (+/- 25% tolerance)), the voltage fluctuation must be allowed. It is therefore necessary to set a voltage, that is equal to or larger then the maximum supply voltage (that is, in the above example, 30V).
The adjustment is made by two rotary switches on the bottom side of the module. Using a screwdriver, you can set a value of 00 to 99, where "Z" is for tens and "E" for units. It only applies to the operating range from technical data (see "Adjustable braking voltage Ubr").

Note, that setting too low braking voltage can damage the brake chopper or the braking resistor.


Calculation of external braking resistor

The resistor value depends on the maximal power that can be fed back into the intermediate circuit, i.e. on the brake (motor) voltage Up and the current limit of the controller. With a 4-Q amplifier the braking and accelerating operation can be considered as equivalent. If the current limit is set to e.g. 10A, the controller can not feed back more as this 10A. Example:

Up = 50V
Im max = 10A

Rb = Up / Im max = 50V / 10A
Rb = 5 ohm

Therefore a current of 10A is passing through a braking resistor of Rbr = 5 ohm as long as the voltage drops below the shutdown threshold value of the brake chopper.

The resistor should be dimensioned 20% smaller as calculated to intercept possibly occurring tolerances. In principle, the resistance can be even further reduced. Note, that it causes that the current peaks as well as the ripple of the power voltage can rise during the braking process. To avoid it, you can install a larger capacity (capacitors) in the supply.

The peak power of the resistor is given by:

Pmax = Up
      * Im max = 50V * 10A
Pmax = 500W

Note also that the braking energy is converted into heat. An adequately sized heat sink is often crucial to the continuous power of the braking resistor.

The installation of the mcER-L4x/L6x is unproblematic. For mcER-L4x the value of brake voltage can be adjust via the rotary switches. For mcER-L6x the brake voltage is fixed and marked on the device: e.g. mcER-L60-30 means that the brake voltage is set to 30V. It is important that the voltage value is set above the maximum supply voltage (including the tolerances of the power supply). I.e. at Up = 24V + / - 20% the value should be set to 30V or more.

An overload of the braking resistor can lead to its destruction. High temperatures at the braking resistor are arising which can lead to a fire of the braking resistor, respectively adjacent components. For this case fire protection measures at the braking resistor, respectively at the surroundings of the braking resistor have to be taken. To protect the braking resistor and the brake chopper against overload a fuse has to be installed at the power supply of the brake chopper. The brake chopper has no internal fuse. Furthermore the manufacturer specifications of the braking resistor about sizing, derating, performance and fuse protection have to be observed.

  • The braking voltage of the brake chopper has to be set above the maximum power supply (starting from the shutdown threshold including the tolerances of the power supply unit and the brake chopper). If the voltage value is set too low there is a risk that the brake chopper is dissipating energy permanently which can cause an overload of the braking resistor.
  • In case of a too high dimensioned braking resistor the energy cannot be dissipated completely and the voltage rises above the set braking voltage. In this case the braking chopper would be permanently active.
  • With a defective braking resistor the voltage in the intermediate circuit rises which can lead to a damage of the electronic.

The brake chopper has no internal fusing. A fuse has to be installed at the power supply of the brake chopper.

It is the responsibility of the user has to take saftey measures against a possible misadjustments.

The above examples are intended only to illustrate the general approach of the calculation of the braking resistor. Practical applications must always be considered individually! Always consult the manufacturer of the braking resistor on the subject sizing, derating and performance.


Calculation of duty cycle

This application note is about the calculation of the duty cycle for the brake copper mcER-L40

General information about the calculation of duty cycles can be found in the chapter Duty cycle calculation.

The following calculation only apply the the device mcER-L40. The brake resistor, which is connected to the brake chopper has to be calculated separately.

Abbreviations

Abbreviation | Meaning | Description
In | Continuous current | The current that can be regulated by the device without breaks.*
Ip | Peak current | Short occurring, high current, that runs through the device.
ton | On Time | Time, in which the current is running through the device.
toff | Off Time | Time, in which no current is running through the device and the device can cool down.
Irms | Effective current | Effective current of a cycle.
- | Performance diagram | Correlation between peak current (Ip) an On time (ton). This diagram shows, how long a device can run with a certain current.
*under specific conditions, see data sheet of the device

Calcualtion of the duty cycle

The maximum on time, as function of the current, can be found in the performance chart of the brake chopper mcER-L40 (chapter performance chart mcER-L40).
The maximum continuous current for the brake chopper mcER-L40 is 10A.

That means, that the effective current must not be higher than 10A and the on time ton must not be higher than shown in the performance chart.

To calculate the effective current the following formula can be used.

Than the minimum off time has to be calculated.

The above example is an approximation. Therefore it may be possible, that the device can run the cycle without overheating. To get more exact results a more exact approximation has to be done or the exact effective current has to be calculated.


Performance chart

ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten


Installation

General

Electrical regenerative braking in servo systems feeds the generated electricity back into the voltage intermediate circuit. If there are no other consumers (e.g. further amplifiers) using energy the voltage of the intermediate circuit can increase to over-voltage which can cause damage to electric circuit. In this case, a properly dimensioned, external over-voltage protection module("braking module") has to be included to avoid damages. In case of an over-voltage, these braking modules (e.g. ENGEL mcER-L40) connect a resistor to the intermediate circuit that converts electrical energy into heat energy. The amplifiers internal voltage monitoring can detect slow voltage increases and disable the motor. The braking modules can detect fast voltage increases and convert it into heat energy. Nevertheless very fast voltage increases can cause damage of the devices. Minor fluctuations of the supply voltage are common so it is important that the amplifier can withstand higher voltages than the maximum voltage the power supply can provide.

Error determination

In these phases in which the brake chopper is dissipating the current over the braking resistor the brake chopper cannot detect if there is a braking resistor or not. When the voltage falls below the shutdown threshold value the brake chopper can detect whether there is a defect at the resistor or not. If there is a defect at the braking resistor the brake chopper changes it's state to error and will stay there until the problem with the resistor is solved. If there is a short circuit in the braking resistor the brake chopper will recognize it no matter in which operating condition the brake chopper is.

An overload of the braking resistor can lead to its destruction. High temperatures at the braking resistor are arising which can lead to a fire of the braking resistor respectively adjacent components. For this case fire protection measures at the braking resistor respectively the surroundings of the braking resistor have to be set. To protect the braking resistor and the brake chopper against overload a fuse has to be installed at the power supply of the brake chopper. The brake chopper has no internal fuse. Furthermore the manufacturer specifications of the braking resistor about sizing, derating, performance and fuse protection have to be observed.

Wiring

The error output has to be evaluated by a superior controller or the controller which has to be protected.

The brake chopper has no internal fusing. A fuse has to be installed at the power supply of the brake chopper.

Because of the appearance of high temperatures at the braking resistor, safety precautions against contact have to be taken in the end use. Please observe the manufacturer specifications for the braking resistor.

Common supply +Ue and +Up:

Common supply +Ue and +Up without regenerative feedback:

Separated supply +Ue and +Up:

Separated supply +Ue and +Up with increased braking power (Imax = 2 x 70A):


Content - ER-L41

Technical data

Terminal assignment and picture

Connectors

Display elements

Control elements

Calculation of performance

Installation


Technical data

Description | Value
Article number | 1512222
Absolute maximum rating
- Voltage (destruction limit) Up no polarity reversal protection | 80 V
Power
- Electronic supply voltage Up | 18..60 V
- Electronic current consumption | typ. 10 mA
- Braking peak current @ Ubr=60V | 24 A
- Continuous braking current @ Ta=40°C | 3 A
Braking resistor
- Adjustable braking voltage Ubr | 18..75 V
- Switch-on threshold | Ubr + 1.7 V (+/- 4%)
- Switch-off threshold | Ubr + 0.7 V (+/- 4%)
- Braking resistor | 2.5 Ohm (integrated)
- Maximum duty cycle | 100 %
- Integrated electrolytic capacitors | 440 uF
Mechanical
- Size LxWxH | 110 x 40 x 77 mm
- Weight | 380 g
- Assembly | Top-hat rail / Wall
- Connectors | Tension clamp connection
Environment
- Protection class | IP20
- Operating temperature | -25..40 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | yes
- Status LEDs | yes
Error recognition
- Short circuit braking resistor | yes
- Braking resistor is missing / defective | yes
- Overtemperature electronic | yes
- Overtemperature braking resistor | yes
Digital output
- Number | 1 (/Error)
- Continuous output current | typ. 10 mA
- Load | resistive
- Output voltage | Up (24V max.)
- Signal type | positive switching

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
 | X1.1 | FE | Functional earth
 | X1.2 | +Up | Power supply voltage
 | X1.3 | GND | Ground for power supply voltage
 | X1.4 | /Error | Error output
 | X1.5 | reserved | Reserved
 | X1.6 | reserved | Reserved

V1.02.00.58


Calculation of performance

The braking module type mcER-L41 has an internal brake resistor with a value of Rb = 2.5 ohms. The power loss in continuous operation is PD = 25W. That implies the continuous current ID :

ID = sqrt( PD / Rb) = sqrt( 25W / 2,5 Ohm) = 3,16A

On average, the mcER-L41 dissipates a current of 3,16A at Ta = 40°C.

Greater braking currents are possible for applications with cyclic braking and pulse load. For this one must use the impulse response of the braking resistor. In mcER-L41, a resistance of the series BRQ from Isabellenhütte (see www.isabellenhuette.de) is used. The pattern is found mostly in the form of a diagram in the data sheets of the braking resistors.

The diagram comes from the data sheet for the series BRQ of Isabellenhütte (issue BRQ-2012-04-16)

From this diagram, the maximum power PPeak as a function of the pulse width tImpuls can be read. Assuming a braking power of UBr = 70V, the pulse power results as follow (point 1 on the diagram):

PPeak = UBr2 / Rb = 70V 2 / 2,5Ohm = 1960W

The allowable pulse duration for this performance can be read from the characteristic curves (point 2 must be in the working area, which is below the black curve). This gives approximately a value of t Impuls = 1.5 s (point 3 on the diagram). The duty cycle D is obtained by using the continuous power PD as follows:

D = PD / PPeak = 25W / 1960W = 0,012 = 1,2%

This results in the following movement cycle:

tBrems = tImpuls = 1,5s

tPause = tImpuls/D = 1,5s / 0,012 = 125s

In high-power pulses, the brake resistor must have sufficient time (over duty cycle) to cool down again.

The overtemperature shutdown of mcER-L41 is not intended to limit the working range of the brake chopper. In case of error, it prevents the thermal destruction of the device. The perpetual operation of the device at the temperature limit is not allowed, bacause it reduces the reliability and lifetime of the device and can lead even to failure.

The above examples are intended only to illustrate the general approach to the calculation of the braking resistor. Practical applications must always be considered individually!


Content - Gateways CAN

CAN-Stick

CAN-Stick-2


Content - CAN-Stick

Technical data

Terminal assignment and picture

Display elements

Text commands


Technical data

Description | Value
Article number | 1212164
Power
- Electronic supply voltage Ue | 5 V (over USB)
- Electronic current consumption | typ. 100 mA
Mechanical
- Size LxWxH | 60 x 20 x 11 mm
- Weight | 30 g
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Hex switches | no
- Status LEDs | yes
CAN bus
- CAN specification | 2.0B
- Max. baudrate | 1 Mbit/s
- Galvanically isolated | yes
- Bus terminator | 120 Ohm integrated
USB
- Interface | USB 2.0
- Supported operating systems | Windows XP, Windows Vista, Windows 7, Windows 8 (32/64-bit)
- Driver | Installation of mPLC needed
- Notice | The drivers support virtual COM port (VCP)
- Virtual COM port protocol | ASCII protocol based on DS309-3

Modifications and errors excepted.

V1.02.00.58


Terminal assignment and picture

Connector | Terminal | Signal | Description
Connector side | X1.1 | res. | Reserved
 | X1.2 | CAN Hi | CAN High (color of USB cable: white)
 | X1.3 | CAN Lo | CAN Low (color of USB cable: green)
 | X1.4 | res. | Reserved
 | X1.5 | CAN GND | CAN Ground (color of USB cable: black)

V1.02.00.58


Display elements

LED | Colour | State | Description
LED0 "Power" | green | on | Normal operation
 |  | off | Power supply is missing
 |  | flashing | Bootloader mode (lack of firmware)
LED1 "State" | yellow | off | Normal operation
 |  | on | Bootloader mode (with incoming message)
LED2 "Error" | red | on | Error
 |  | off | No error (Normal operation)
LED3 "Rx" | green | flashing | flashes with incoming message
 |  | off | no incoming message
LED4 "Tx" | yellow | flashing | flashes with outgoing message
 |  | off | no outgoing message


AN1301 ENGEL text commands

Number | AN1301
Name | AN_ENGEL_TextCommands
Designation | ENGEL text commands
Cross reference | -

Description

The text commands are based on the CiA specification DS309-3 (CiA = CAN in Automation).

Each text command consists of keywords and numbers that are separated by spaces. Each command must be ended with <CR><LF> (CR = carriage return, LF = line feed) and is confirmed by the device. The numbers can be specified either in decimal or hex notation (with 0x - prefix).

Only for devices with USB or RS232 interface:
To clear the USB / RS232 receive buffer, an escape character (=0x1B) can be sent to the device.
If a CAN message has been received, a notification via the serial port is sent unsolicited.

Only for devices with USB or RS232 interface:
If a CAN message has been received, a notification via TCP / IP is sent unsolicited.

Syntax of request

"["sequence"]" [[net] node] command

where:

sequence | - UNSIGNDE32 number of the request (optional).
net | - Network number. Currently, this number is ignored.
node | - Identification number of the device according to CANopen (node id)
command | - Command with parameters

Example:

[1] 1 24 write 0x3300 0 i32 1000    # change the value of the parameter index=0x3300 subindex=0 by the device with node id 24 via SDO (Service Data Object) to 1000.
1 24 write 0x3300 0 i32 1000        # the same as above but without <sequence>
24 write 0x3300 0 i32 1000          # the same as above but without <sequence> and <net>

Syntax of response

"["sequence"]" response

where:

sequence | - UNSIGNDE32 number of the request (only if specified in the request).
response | - Answer: OK Error: <error_code>
The error codes (error_code) are described in the chapter "Error codes".

Syntax of notification

[net] MSG cob_id len_in_bytes value0 [..value7]

where:

net

- Network number. Currently, this number is ignored.

Example:

MSG 0x00000181 3 0x11 0x22 0x33      # CAN message with ID=0x181 and 3 data bytes = 0x11 0x22 0x33
MSG 0x00000182 1 0x56 0x78           # CAN message with ID=0x182 and 2 data bytes = 0x56 0x78

Commands

The device supports a subset of the DS309 commands and additional ENGEL-specific commands.

Command
 Description

info version
 Returns the information about version of the device.

Example:
   info version
       0x0139 0x15010001 1.82.02.40 0 128 1.10 0.0

where:
- vendor_id = 0x0139
- product_code = 0x15010001
- firmware_version = 1.82.02.40
- serial_number = 0
- network_class = 128
- protocol_version = 1.10
- implementation_class = 0.0

[net] init baudrate
 Sets the CAN transmission speed (baudrate) and activates the CAN bus.
baudrate  = 1000,800,500,250,125,100,50,20 [kBit/s]
or
       -1 = CAN disable
        0 = 1000 kBit/s
    1 = 800 kBit/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
Example:
   init 125
[net] set network value
 Sets a default value for "net"

Example:
   1 set network 2

[net] set node value
 Sets a default value for "node"

Example:
   1 set node 0x21

[[net] node] start
 Sets a CANopen device in Operational state. To send a broadcast message to all devices, set "node" to 0.

Example:
   5 start
   0 start

[[net] node] stop
 Sets a CANopen device in Stop state. To send a broadcast message to all devices, set "node" to 0.

Example:
   5 stop
   0 stop

[[net] node] preop[erational]
 Sets a CANopen device in PreOperational state. To send a broadcast message to all devices, set "node" to 0.

Example:
   5 preop
   0 preop

[[net] node] reset node
 Sets a CANopen device in Reset state. To send a broadcast message to all devices, set "node" to 0.

Example:
   5 reset node
   0 reset node

[[net] node] reset comm[unication]
 Sets a CANopen device in ResetCommunication state. To send a broadcast message to all devices, set "node" to 0.

Example:
   5 reset comm
   0 reset comm

[[net] node] r[ead] index subindex datatype
 Reads a parameter via CANopen protocol (SDO read). The supported data types (datatype) are described in the chapter "Data types".

Example:
   5 r 0x3001 0 i32

[[net] node] w[rite] index subindex datatype value
 Change a value of a parameter via CANopen protocol (SDO write). The supported data types (datatype) are described in the chapter "Data types".

Example:
   5 w 0x3300 0 i32 -1000

[net] set sdo_timeout value
 Sets a timeout value in milliseconds for the read and write commands (SDO transfer). Default value is set to 200 ms.

Example:
   set sdo_timeout 1000

[net] w[rite] m[sg] cob_id len_in_bytes value0[..value7]
 Sends a CAN message with ID = COB_ID and data value0 .. value7. The command is independent on the CANopen protocols. It is only a raw CAN message. If the 29-bit is set by the "COB_ID", then it is a 29 bit long id number (extended Id) of the CAN message.

Example:
   w m 0x201 2  0x11 0x22
   w m 0x20000201 2  0x11 0x22

[net] r[ead] m[sg] cob_id [len_in_bytes]
 Sends a Remote frame with ID = COB_ID and data value0 .. value7. The command is independent on the CANopen protocols. It is only a raw CAN message. If the 29-bit is set by the "COB_ID", then it is a 29 bit long id number (extended Id) of the CAN message.

Example:
   r m 0x181
   r m 0x20000181

[net] mc set echo value
 NOTE: This command is only available for devices with RS232 or USB interface (e.g. CAN-Stick, CAN-USB, CAN-RS).

Echo: 1=enable / 0=disable

Example:
   mc set echo 1

[net] mc set rs232_baudrate value
 NOTE: This command is only available for devices with RS232 interface (e.g. CAN-RS).

Sets the baud rate of the serial interface. The setting will take effect after restarting the device. A restart can be triggered for example with command "mc reset cpu".

Supported baud rates:
- 2400
- 4800
- 9600 (standard)
- 14400
- 19200
- 56000
- 57600
- 115200

Example:
   mc set rs232_baudrate 115200

[net] mc store ALL
 NOTE: This command is only available for devices with RS232 interface (e.g. CAN-RS).

Saves set parameters in the internal EEPROM (e.g. rs232_baudrate).

mc reset cpu
 NOTE: This command is only available for devices with RS232 interface (e.g. CAN-RS).

Reboots a device.
Example:
   init 125
Example:
   init 125

Data types

The data type is specified as a string in the command "read" and "write". The device supports the following data types of the DS309-3 specification:

      i8   - Integer 8-Bit
      i16  - Integer 16-Bit
      i32  - Integer 32-Bit
      u8   - Unsigned Integer 8-Bit
      u16  - Unsigned Integer 16-Bit
      u32  - Unsigned Integer 32-Bit

In addition to the data types of the DS309-3 specification, the following data types can be used (ENGEL extension) in the "read" command. Then, the output of the read value is in hex ​​notation:

      xi8  - Integer 8-Bit
      xi16 - Integer 16-Bit
      xi32 - Integer 32-Bit
      xu8  - Unsigned Integer 8-Bit
      xu16 - Unsigned Integer 16-Bit
      xu32 - Unsigned Integer 32-Bit

Error codes

If the command could not be interpreted or was not properly executed, the following answer will be sent (see also: "Syntax of response"):

"["sequence"]" Error error_code

error_code | Description
100 | The command is not supported.
101 | Syntax error - the command could not be interpreted.
-541 | SdoWriteError - SDO object could not be changed.
-542 | SdoReadError - SDO object could not be read.
-571 | BadCommand - value of the command is out of range.
-582 | TxTimeout - timeout at sending (e.g. wrong baud rate, terminating resistor is missing or CAN bus is deactivated).
-583 | ResponseTimeout - timeout at waiting for a response (e.g. device is switched off or does not respond).

Example

Direction of information:
< Request to the device
> Reply or notification from the device

<	info version
>	0x0139 0x15010001 1.92.03.00 0 128 1.10 0.0

<	init 125
>	OK

<	5 start
>	MSG 0x00000185 8 0x50 0x00 0x00 0x00 0x00 0x00 0xF6 0x00

<	5 stop
>	OK

<	5 r 0x3020 0 xi32
>	0x2545

<	0 start
>	MSG 0x00000184 8 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
>	MSG 0x00000181 8 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
>	MSG 0x00000183 8 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
>	MSG 0x00000185 8 0x50 0x00 0x00 0x00 0x00 0x00 0xF6 0x00
>	MSG 0x00000182 8 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Note that each line in the example is terminated with <CR><LF>.


Content - CAN-Stick-2

Technical data

Terminal assignment and picture

Display elements

Control elements

Text commands


Technical data

Description | Value
Article number | 1510168
Power
- Electronic supply voltage Ue | 5 V (over USB)
- Electronic current consumption | typ. 100 mA
Mechanical
- Size LxWxH | 60 x 20 x 11 mm
- Weight | 30 g
Environment
- Protection class | IP00
- Operating temperature | -40..55 °C
- Rel. humidity (non-condensing) | 5..90 %
Control elements
- Bus terminator switch | yes
- Hex switches | no
- Status LEDs | yes
CAN bus
- CAN specification | 2.0B
- Max. baudrate | 1 Mbit/s
- Galvanically isolated | yes
- Bus terminator | 120 Ohm on/off switchable
USB
- Interface | USB 2.0
- Supported operating systems | Windows XP, Windows Vista, Windows 7, Windows 8 (32/64-bit)
- Driver | Installation of mPLC needed
- Notice | The drivers support virtual COM port (VCP)
- Virtual COM port protocol | ASCII protocol based on DS309-3

Modifications and errors excepted.

V1.02.00.58


Control elements

Possibilities of setting the termination resistor via RT-switch

Bus-termination resistor

The termination resistor of 120Ohm can be turned on or off on the bus.
Switch position | Description
Off | resistor not active
On | resistor active


Content - Application notes

AN10xx Parametrization of the controller

AN12xx Installation of the devices

AN13xx Communication

AN14xx Profile DSA (3000h parameter - ENGEL)

AN15xx Profile DS402

AN50xx specific classes

AN80xx Hardware Design


Content - AN10xx Parametrization of the controller

AN1000 | AN_ControllerStructure | Controller structure
AN1001 | AN_BasicConfiguration | Basic configuration
AN1002 | AN_PidTuningDigital | PID Tuning - for DC and BLDC motors with digital feedback (Encoder, Hall)
AN1003 | AN_PidTuningAnalogDC | PID Tuning - for DC motors with EMF feedback (Electromotive force)
AN1004 | AN_PIDControllerTheory | PID-controller theory


AN1000 Controller structure

Number | AN1000
Name | AN_ControllerStructure
Designation | Controller structure
Cross reference | AN_BasicConfiguration, AN_PidTuningDigital, AN_PidTuningAnalogDC

Description

A PID controller (proportional–integral–derivative controller) is a generic control loop feedback mechanism (controller) widely used in industrial control systems. A PID controller calculates an "error" value as the difference between a measured process variable and a desired setpoint. The controller attempts to minimize the error by adjusting the process control inputs.

Each controller of the firm ENGEL possesses integrated cascade of three controllers (Vel/Pos, SVel and Curr controller), however the device mode ( DEV_Mode) defines which controller is active. The controllers support normally four modes of operation:
  • CURR - current control
  • SVEL - velocity control without ramps (subvelocity control)
  • VEL - velocity control with ramps
  • POS - position mode

Current control (CURR)
In current mode only CURR PI controller is activated. The rest is deactivated.

Subvelocity control (SVEL)
In subvelocity mode both CURR PI and SVEL PI controller are activated. Only position controller remains inactive.

Velocity control (VEL)
In velocity mode with EMF feedback of VEL controller, the SVEL PI controller remains inactive. The whole regulation of velocity takes place in VEL PID controller.

In velocity mode with digiatal feedback (Encoder/Hall) the regulation of velocity is realized through endless positioning. To reach the classical velocity regulation, the parameter VEL_Kvff has to be set to 1000 and VEL_Kp, VEL_Ki and VEL_Kd to 0.

Position mode (POS)
In position mode all controllers are active. The CURR PI controller regulates current, SVEL PI regulates the velocity and VEL PID the position of the motor.


AN1001 Basic configuration

Number | AN1001
Name | AN_BasicConfiguration
Designation | Basic configuration
Cross reference | AN_ControllerStructure, AN_PidTuningDigital, AN_PidTuningAnalogDC

Description

1. Read first general safety instructions for the controller.

2. The following steps require the default settings of all device parameters.

3. Carry out the configuration of the controller with reduced current limit if you are not sure if the parameters are correct.

4. An emergency switch must be installed for disconnecting power supply to the controller

Changes of some controller parameters may involve dangerous movement of motor shaft. It is the user's responsibility to take all necessary steps in order to reduce the risk due to uncontrolled motor shaft movement. That's why make the first tests with the motor without any load and with free motor shaft.

The following steps show how to set the basic parameter of the motor with the help of edcTools. It is assumed that the hardware was correctly connected to the controler and all its components works.

1. Open the window "DC Konfiguration".

2. Select the motor type ( MOTOR_Type). There are two types to choose: brushed and brushless DC.

3. Select the feedback of Vel/Pos ( VEL_Feedback) and SVel controller ( SVEL_Feedback). The feedback defines the source of signal that is taken to regulation loop. Remember that not every feedback can be used for every type of motor. The highest accurancy of regulation you will obtain when both feedbacks are set to incremental encoder.

There are 3 rules concerning the use of feedbacks:
  • DC motor without encoder
    • Vel/Pos feedback to EMF
    • SVel is inactive
  • DC and BLDC motor with encoder
    • Vel/Pos feedback to Inc. encoder
    • SVel feedback to Inc. encoder
  • BLDC only with Hall sensors
    • Vel/Pos feedback to HALL sensors
    • SVel feedback to HALL sensors (It is possible that the setting EMF is better if the motor has small number of motor poles)
4. Depending on chosen feedback it is important to set the different parameter for position and velocity regulation.
- The Nominal speed ( MOTOR_Nn) and voltage ( MOTOR_Un) of the motor are important, if you have chosen the EMF (electromotive force) feedback for velocity regulation.
- The number of poles ( MOTOR_PolN) must be defined if you have chosen the hall feedback for position and/or velocity regulation.
- The encoder resolution ( MOTOR_ENC_Resolution) is needed if you have chosen the encoder feedback for position and/or velocity regulation.

5. Set the small velocity (e.g 100 rpm) and enable the power amplifier of the controller. The motor should begin to spin. If the controller realizes the demand velocity, the polarity of motor is right ( MOTOR_Polarity). If the motor spins with the maximal velocity, change the polarity of chosen feedback. The adjustment of this parameter is needed because there are different definitions regarding the rotation direction of the motor shaft depending on the motor voltage.

6. If you want to change the direction of rotation of motor shaft, invert all bits of polarity parameter.

direction | opposite direction


AN1002 PID Tuning - for DC and BLDC motors with digital feedback (Encoder, Hall)

Number | AN1002
Name | AN_PidTuningDigital
Designation | PID Tuning - for DC and BLDC motors with digital feedback (Encoder, Hall)
Cross reference | AN_ControllerStructure, AN_BasicConfiguration

Description

The default values of PID/PI controllers were chosen in a way to fit a wide range of motors to run stable. Therefore, this value can not be optimal for every motor. The tutorial shows the way how to adjust the PID/PI parameters of EDC controllers.

1. You must be very careful changing the PID/PI parameter. If the control is instable (most of time when the PID/PI-parameter are too large) the speed/current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

2. First make the tuning of the controllers with the motor without any load.
The adjustment of PID/PI parameters will be made in position mode (POS). DC Oszilloskop with the following settings will be used to generate the diagrams. You will obtain the best accuracy of regulation, if the unit of velocity is inc/s and position inc.

The "bz-Smooth" for actual velocity has been activated, because the calculation of velocity is based on position read from the controller and takes place in PC.

CURR controller
There are different ways to set up the PI current controller.
  1. Auto tune:
    The determination of the PI values with a tuning algorithm. The algorithm tries to find optimal values using a step response with different controller values. This method only works for brushless motors.

    Tunings lead to a jerky movement of the motor shaft!
    Make sure that the motor is fixed properly, the shaft is freely rotatable and the application is always provided with a working emergency shutdown (i.e. E-Stop button) that is always within reach.

    To high tuning currents can damage the motor. The tuning current must not exceed the permissible rated motor current.

  2. Calculate:
    The determination of the PI values with a calculation. The calculation determines the values mathematically. Input parameters for this calculation are motor resistance, motor inductance, power supply voltage and the pwm frequency.

SVEL controller
Deactivate the PID Pos controller ( VEL_Kp = 0, VEL_Ki = 0, VEL_Kd = 0) and set the value of velocity feedforward ( VEL_Kvff) to 1000. At this moment the regulation of position is turned off (Pos controller is inactive) and the demand value goes directly to the SVel controller. The positioning takes place only with the help of velocity regulation.

The positioning can be inaccurate, thats why do not send the motor on the end position of the machine.

The following error can appear during the positioning on long distance. In this situation adjust the value of parameter POS_FollowingErrorWindow.
Increase of only SVEL_Kp parameter improves the stability of regulation. Increase of only SVEL_Ki parameter causes instability of regulation, but accelerates the reaction of the system.The increase of both parameter makes the regulation faster and more stable. If the values of parameters are too high, the regulation is also instable.

The best way to adjust the parameters is to change their values step-by-step. If there is no reaction of the system on change, increase the step, but not more then 100.

Do not work in current limit. If the controller in acceleration phase goes into the current limit (bit 12 in DEV_Status), decrease the acceleration of the motor.
Examples of regulation:
  • Instable regulation of velocity (the parameter SVEL_Kp is too small, e.g. SVEL_Kp = 1, SVEL_Ki = 60). The regulation can be also instable if the values of the parameters are too high.
Actual velocity | Postion following error

  • Regulation of velocity with underdamped oscillation (both parameter SVEL_Kp and SVEL_Ki are too small, e.g. SVEL_Kp = 60, SVEL_Ki = 60)
Actual velocity | Postion following error

  • Regulation of velocity with small overshoot (both parameter SVEL_Kp and SVEL_Ki are too small, e.g. SVEL_Kp = 120, SVEL_Ki = 120)
Actual velocity | Postion following error

  • Optimal regulation of velocity (e.g. SVEL_Kp = 560, SVEL_Ki = 560)
Actual velocity | Postion following error

POS controller
The reduction of following error can be achieved through the adjustment of parameter VEL_Kp. The higher the value of VEL_Kp, the faster reduction of following error, but the regulation is "harder" and susceptible to instability. The value of parameter should be changed with step 10. The adjustment must be continued until the following error during the movement is acceptable.

Examples of regulation:
  • Regulation of position with small value of VEL_Kp parameter (e.g. VEL_Kp = 10)
Actual velocity | Postion following error

  • Regulation of position with higher value of VEL_Kp parameter (e.g. VEL_Kp = 30)
Actual velocity | Postion following error

If the motor ends the movement with the remaining deviation between actual and target position, increase the VEL_Ki parameter. On the other side the big increase of VEL_Ki causes the instability of the system.
Example of regulation:
  • Regulation of position with additional small value of VEL_Ki parameter (e.g. VEL_Kp = 100, VEL_Ki = 20)
Actual velocity | Postion following error

Make the test with different values of velocity, e.g 100 rpm and 2000 rpm. The system must work stable in whole velocity range.
The change of parameter VEL_Kd is only necessary, if the system is very dynamic. An increase of value improves the dynamic, but it causes that the system works noisier and the mechanics wears faster (e.g gear box).


AN1003 PID Tuning - for DC motors with EMF feedback (Electromotive force)

Number | AN1003
Name | AN_PidTuningAnalogDC
Designation | PID Tuning - for DC motors with EMF feedback (Electromotive force)
Cross reference | AN_ControllerStructure, AN_BasicConfiguration

Description

The default values of PID/PI controllers were chosen in a way to fit a wide range of motors to run stable. Therefore, this value can not be optimal for every motor. The tutorial shows the way how to adjust the PID/PI parameters of EDC controllers.

1. You must be very careful changing the PID/PI parameter. If the control is instable (most of time when the PID/PI-parameter are too large) the speed/current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

2. First make the tuning of the controllers with the motor without any load.
The adjustment of PID/PI parameters will be made in velocity mode (VEL). DC Oszilloskop with the following settings will be used to generate the diagrams.

The parameter 3A04.01h (User1) provides information about the actual velocity in rpm and the parameter 3361.00h (User2) the actual command velocity (the value generated in ramp generator).

CURR controller
There are different ways to set up the PI current controller.
  1. Auto tune:
    The determination of the PI values with a tuning algorithm. The algorithm tries to find optimal values using a step response with different controller values. This method only works for brushless motors.

    Tunings lead to a jerky movement of the motor shaft!
    Make sure that the motor is fixed properly, the shaft is freely rotatable and the application is always provided with a working emergency shutdown (i.e. E-Stop button) that is always within reach.

    To high tuning currents can damage the motor. The tuning current must not exceed the permissible rated motor current.

  2. Calculate:
    The determination of the PI values with a calculation. The calculation determines the values mathematically. Input parameters for this calculation are motor resistance, motor inductance, power supply voltage and the pwm frequency.

SVEL controller
The SVel controller is inactive in this configuration.

VEL controller
Increase of only VEL_Kp parameter improves the stability of regulation. Increase of only VEL_Ki parameter causes instability of regulation, but eliminates the deviation between actual and target velocity. The increase of both parameter makes the regulation faster and more stable. If the values of parameters are too high, the regulation is also instable.

Do not work in current limit. If the controller in acceleration phase goes into the current limit (bit 12 in DEV_Status), decrease the acceleration of the motor.
Examples of regulation:
  • Regulation of velocity with too high value of VEL_Kp parameter (e.g. VEL_Kp = 100)
Actual velocity

  • Regulation of velocity with too small value of VEL_Kp parameter (e.g. VEL_Kp = 10). The motor does not reach the demand velocity.
Actual velocity

  • Regulation of velocity after small increase of value of VEL_Ki parameter (e.g. VEL_Kp = 10, VEL_Ki = 10). The VEL_Ki eliminates the deviation between actual and target velocity.
Actual velocity

  • Regulation of velocity with higher value of VEL_Kp parameter (e.g. VEL_Kp = 20, VEL_Ki = 10). The VEL_Kp improves the stability.
Actual velocity

  • Optimal regulation of velocity (e.g. VEL_Kp = 50, VEL_Ki = 10).
Actual velocity

The change of parameter VEL_Kd is only necessary, if the system is very dynamic. An increase of value improves the dynamic, but it causes that the system works noisier and the mechanics wears faster (e.g gear box).


AN1004 PID-controller theory

Number | AN1004
Name | AN_PIDControllerTheory
Designation | PID-controller theory
Cross reference | AN_ControllerStructure, AN_BasicConfiguration, AN_PidTuningDigital, AN_PidTuningAnalogDC

Description

PID controller optimize the behaviour of the drive. Good controller parameter lead to a small deviation between set point and actual value of the current, velocity and position.

In general the different settings of the PID controller parameters behave as follows:

P factor (proportional factor):
The proportional factor specifies the behaviour of the control loop regarding the deviation of set and actual value. A large P factor leads to a fast reduction of the deviation, but the system tends to oscillation. A small P factor leads to a more stable system, but a bigger deviation between set and actual value is possible. The system will also need longer to reach the set value. The continuous control deviation will only be reduced lightly by the P factor.

I factor (integral factor):
The integral factor sums up the deviation between set and actual value over a certain time. In this time the system will not correct the deviation to create a more smooth behaviour. A to large I factor will lead to a to dynamic system which tends to oscillation. A to small I factor can lead to a slow reaction times of the system. If the value gets to high, the system can also become unstable. The continuous control deviation will be reduce by the I factor.

D factor (derivative factor):
The derivative factor can stabilize or dampen the system. A large D factor leads to a slow but more stable control. Oscillation cause by a large P factor can be reduced. A small D factor leads to a more dynamic behaviour. The continuous control deviation will not be reduced be the D factor.

All parameters are interrelated. A change of one parameter will affect the behaviour of another parameter and therefore the whole system.

Approximation for an empirical setting of the PID controller:
controller parameter | Rise time tr | Overshoot Mp | Setting time ts | Continuous control deviation eu
Kp ↑ | ↓ | ↑ | ≈ constant | ↓
Ki ↑ | ↑ | ↓ | ↓ | → 0
Kd ↑ | ≈ constant | ↓ | ↓ | ≈ constant
↑ - increase
↓ - decrease
→ 0 - tends to 0


Content - AN12xx Installation of the devices

AN1200 | AN_CommutationScheme | Commutation scheme of BLDC motor
AN1201 | AN_CycletimeCalculation | Duty cycle calculation


AN1200 Commutation scheme of BLDC motor

Number | AN1200
Name | AN_CommutationScheme
Designation | Commutation scheme of BLDC motor
Cross reference | -

Description

This application note is about the commutation scheme of brushless DC motors for drive controllers of the firm ENGEL.The commutation is the transition of the current from one motorphase to the next one. The scheme and the sequence depend on the kind of the commutation.

Block commutation

During the block commutation the current transition is controlled by the state of the hall sensors. The schemes below show through which phases the current flows according to the state of the hall sensors.

The according hall sectors for the commutation can be set by the software if necessary.
The commutation scheme depends on the angular position of the hall sensors.

120° hall sensors

60° hall sensors

ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten


AN1201 Duty cycle calculation

Number | AN1201
Name | AN_CycletimeCalculation
Designation | Duty cycle calculation
Cross reference | -

Description

This application note is about the calculation of cycle times for the devices of the firm ENGEL.

Abbreviations

Abbreviation | Meaning | Description
In | Continuous current | The current that can be regulated by the device without breaks.*
Ip | Peak current | Short occurring, high current, that runs through the device.
ton | On Time | Time, in which the current is running through the device.
toff | Off Time | Time, in which no current is running through the device and the device can cool down.
Irms | Effective current | Effective current of a cycle.
- | Performance diagram | Correlation between peak current (Ip) an On time (ton). This diagram shows, how long a device can run with a certain current.
*under specific conditions, see data sheet of the device

The following diagram shows an example cycle:

Calculation

In order to run the device properly, two conditions must be met:

  • The calculated effective current of the cycle must not be higher than the continuous current of the device:
  • The maximum On Time (ton) must not be higher than shown in the performance diagram.

The following formula is used to calculate the effective current:

The following formula is used to calculate the minimum Off Time:

The above mentioned formulas are valid for square wave signals. Real signals have to be approximated or the real effective current has to be calculated.

Example 1: Calculation of the Off time

Problem:

The device should run the following cycle.

Device: EDC-E45

The Off Time between the cycles shall be calculated ( toff):

Solution:

According to the performance diagram of the device (see *link) the continuous current of the device is 10 A. The diagram also shows, that the device can run 15 A peak currents for 190 secondes. The On Time (10 seconds) and peak current (15 A) of the cycle are lower than the values in the performance diagram. Therefore the following calculation can be done:

At first the cycle has to be approximated: (blue rectangle)

Than the Off Time can be calculated with the following formula:

The resulting minimal Off Time is 12,5 [s].

Example 2: Checking the cycle

Problem:

The device runs the following cycle.

Device: EDC-E45

It shall be checked if the device can run the the cycle without overheating.

Solution:

The effective current (Irms) has to be calculated with the following formula:

The result shows, that the effective current (Irms) is larger than the maximum continuous current (In) of the device (see *link)

The device can not run the cycle without overheating, because the effective current is too high.

The above example is an approximation. Therefore it may be possible, that the device can run the cycle without overheating. To get more exact results a more exact approximation has to be done or the exact effective current has to be calculated.


Content - AN13xx Communication

AN1301

AN_ENGEL_TextCommands

 ENGEL text commands


Content - AN14xx Profile DSA (3000h parameter - ENGEL)

AN1400 | AN_ENGEL_QuickCommand | engel quick command
AN1410 | AN_DSA_PosMode_DcMotorWithEncoder | Position mode - DC motor with encoder feedback - relative positioning
AN1411 | AN_DSA_PosMode_BldcMotorWithEncoder | Position mode - BLDC motor with encoder feedback - relative positioning
AN1420 | AN_DSA_VelMode_DcMotorWithEncoder | Velocity mode - DC motor with encoder feedback
AN1421 | AN_DSA_VelMode_DcMotorWithEmf | Velocity mode - DC motor with emf feedback
AN1422 | AN_DSA_VelMode_BldcMotorWithHall | Velocity mode - BLDC motor with hall feedback
AN1423 | AN_DSA_VelMode_BldcMotorWithEncoder | Velocity mode - BLDC motor with encoder feedback
AN1440 | AN_DSA_CurrentMode_DcMotor | Current mode - DC motor
AN1441 | AN_DSA_CurrentMode_BldcMotor | Current mode - BLDC motor
AN1470 | AN_DSA_IpMode_DcMotorWithEncoder_Counts | Position mode (interpolation in counts) - DC motor with encoder feedback
AN1471 | AN_DSA_IpMode_BldcMotorWithEncoder_Counts | Position mode (interpolation in counts) - BLDC motor with encoder feedback
AN1472 | AN_DSA_IpMode_DcMotorWithEncoder_Normalised | Position mode (interpolation normalised) - DC motor with encoder feedback
AN1473 | AN_DSA_IpMode_BldcMotorWithEncoder_Normalised | Position mode (interpolation normalised) - BLDC motor with encoder feedback


AN1400 engel quick command

Number | AN1400
Name | AN_ENGEL_QuickCommand
Designation | engel quick command
Cross reference | -

Description

General

To simplify the control of the device, especially using PDOs and to reduce the bus load, the Quick-Command - device commandos have been implemented. This structure makes it possible to drive the controller fast and efficiently with one set of data and one command.

Controlling via Quick-Command

The parameter with the index 3000h can execute device commands. The subindexes 00h, 01h and 02h choose the type of command which is executed. The parameters with the subindex 10h, 11h, and 12h or 20h, 21h, and 22h contain the according data ( DEV_CmdData0 and so on), i.e. the desired velocity and target position.The exact explanation of these parameters can be found in the chapter DEV_Cmd_ExecOnChange.
The parameter 3000.70h ( DEV_CmdResult) returns a result, if the device command is used to read / set a value of a parameter.

Quick-Command via PDO communication

In order to establish a working PDO communication an according mapping has to be set.

RxPDO (Receive PDO):

Byte number | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7
Contents | DEV_CmdData0_i16 |  | DEV_CmdData2 | DEV_CmdData1 |  |  |  | DEV_Cmd_ExecOnChange
Index | 3000.20h |  | 3000.12h | 3000.11h |  |  |  | 3000.01h

TxPDO (Transmit PDO):

Byte number | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7
Contents | DEV_Status |  | DEV_ErrorReg |  | DEV_CmdResult
Index | 3002.00h |  | 3001.00h |  | 3000.07h

This mapping can be set by using the command 0x2A (CMD_SetQCMapping) of the parameter DEV_Cmd_ExecOnChange (the RxPDO1 and TxPDO1 are used for it) or it can be set manually.

The manual setting of a mapping is described in the chapter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported It also contains further information for the PDO communication like the architecture of a data frame and so on.

In order to execute a relative positioning with the target position of 1000 increments and a velocity of 1500 rpm a PDO has to be send with the COB-ID of RxPDO which contains the following data. All data are transmitted in the little endian format.

Byte number | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7
Command | Velocity: 05DCh = 1500 |  | - | Position: 03E8h = 1000 |  |  |  | Command: MovR
Data | 0xDC | 0x05 | 0x00 | 0xE8 | 0x03 | 0x00 | 0x00 | 0x34

The first two bytes (B0 and B1) of the PDO data frame contain the command data 0 (parameter DEV_CmdDatao_i16). These bytes contain the data 05DCh, which matches 1500 in decimal notation.
The third byte (B2) contains the command data 2 (parameter DEV_CmdData2). The commando MovR does not need any data in command data 2, therefore it contains a 0.
The byte 4 to 7 (B3 - B6) contain the command data 0 (parameter DEV_CmdData1). These bytes contain the data 000003E8h, which matches 1000 in decimal notation.
The eighth byte (B7) contains the command (parameter DEV_Cmd_ExecOnChange). This byte contains the data 34h, which matches the command MovR.

This Quick-Command operation allows the device to execute a broad variate of commands with the use of only one PDO. It makes possible to change the mode of operation, enable and disable the device, execute relative and absolute positioning and even execute sequences of commands.

A complete list of all possible commands can be found in the chapter DEV_Cmd_ExecOnChange.

Quick-Command via SDO communication

The example below shows the use Quick-Commands via SDO communication.

In the first section the value 1000 is written in command data 0 and 1. After that the command sequence CMD_UserCmd7 is executed (which is a relative positioning). In order to do that the value 77h is written in the parameter 3000.01h (DEV_CmdExecOnChange).

The device will now switch to position mode, get enabled and move 1000 increments ( DEV_CmdData1) with a velocity of 1000 rpm ( DEV_CmdData0).

In the following while-loop the scripts waits for the bit "STAT Reached" in the status register ( DEV_Status). When the device reaches its target position and the bit is set, the second sequence will be executed.

In this sequence a value is written in command data 0 and 1 and after that a command is executed. The value 3762h is written in command data 0 ( DEV_CmdData0) and the value 00h is written in command data 1 ( DEV_CmdData1). After that the command "CMP_Gp" is executed by writing 29h in the parameter 3000.01h ( DEV_Cmd_ExecOnChange).
This sequence will read the parameter 3762.00h and the result will be stored in the parameter 3000.70h ( DEV_CmdResult). In the last line the parameter 3000.70h ( DEV_CmdResult) is read and the result is printed.

These examples would only be working if the device was correctly parametrized. The only purpose of this examples is to show the functionality of the Quick-Command function.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3000, 0x10, 1000)    # DEV_CmdData0 - command data 0 = 1000 rpm
d.SdoWr(0x3000, 0x11, 1000)    # DEV_CmdData1 - command data 1 = 1000 inc
d.SdoWr(0x3000, 0x01, 0x77)    # DEV_Cmd_ExecOnChange - CMD_UserCmd7 - move relative

while (d.SdoRd(0x3002, 0x00) & 0x10==0):  # DEV_Status - wait for STAT_Reached
   time.sleep(0.1)                        # check Bit every 100 ms

d.SdoWr(0x3000, 0x10, 0x3762)  # DEV_CmdData0 - command data 0 = 3762h
d.SdoWr(0x3000, 0x11, 0x00)    # DEV_CmdData1 - command data 1 = 00h
d.SdoWr(0x3000, 0x01, 0x29)    # DEV_Cmd_ExecOnChange – CMD_Gp get parameter

# Read actual position
print "actual position =", d.SdoRd(0x3000, 0x70)   # DEV_CmdResult


AN1410 Position mode - DC motor with encoder feedback - relative positioning

Number | AN1410
Name | AN_DSA_PosMode_DcMotorWithEncoder
Designation | Position mode - DC motor with encoder feedback - relative positioning
Cross reference | -

Description

The example shows the relative positioning of the DC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # Mode of operation - position mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x3791, 0x00, 2000)               # Target position [inc], start relative moving


AN1411 Position mode - BLDC motor with encoder feedback - relative positioning

Number | AN1411
Name | AN_DSA_PosMode_BldcMotorWithEncoder
Designation | Position mode - BLDC motor with encoder feedback - relative positioning
Cross reference | -

Description

The example shows the relative positioning of the BLDC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # Mode of operation - position mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x3791, 0x00, 2000)               # Target position [inc], start relative moving


AN1420 Velocity mode - DC motor with encoder feedback

Number | AN1420
Name | AN_DSA_VelMode_DcMotorWithEncoder
Designation | Velocity mode - DC motor with encoder feedback
Cross reference | -

Description

The example shows the velocity control of the DC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 3)                  # Mode of operation - velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]


AN1421 Velocity mode - DC motor with emf feedback

Number | AN1421
Name | AN_DSA_VelMode_DcMotorWithEmf
Designation | Velocity mode - DC motor with emf feedback
Cross reference | -

Description

The example shows the velocity control of the DC motor with emf feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3901, 0x00, 3000)               # Motor rated revolutions [rpm]
d.SdoWr(0x3902, 0x00, 24000)              # Motor rated voltage [mV]

d.SdoWr(0x3310, 0x00, 10)                 # VEL PID-Controller - gain
d.SdoWr(0x3311, 0x00, 10)                 # PID-Controller - integral factor

d.SdoWr(0x3003, 0x00, 3)                  # Mode of operation - velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]


AN1422 Velocity mode - BLDC motor with hall feedback

Number | AN1422
Name | AN_DSA_VelMode_BldcMotorWithHall
Designation | Velocity mode - BLDC motor with hall feedback
Cross reference | -

Description

The example shows the velocity control of the BLDC motor with hall feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 2)                  # Motor polarity

d.SdoWr(0x3003, 0x00, 3)                  # Mode of operation - velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]


AN1423 Velocity mode - BLDC motor with encoder feedback

Number | AN1423
Name | AN_DSA_VelMode_BldcMotorWithEncoder
Designation | Velocity mode - BLDC motor with encoder feedback
Cross reference | -

Description

The example shows the velocity control of the BLDC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 3)                  # Mode of operation - velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3300, 0x00, 1000)               # Velocity [rpm]


AN1440 Current mode - DC motor

Number | AN1440
Name | AN_DSA_CurrentMode_DcMotor
Designation | Current mode - DC motor
Cross reference | -

Description

The example shows the current control of the DC motor via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC

d.SdoWr(0x3003, 0x00, 2)                  # Mode of operation - current mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3200, 0x00, 500)                # Current [rpm]


AN1441 Current mode - BLDC motor

Number | AN1441
Name | AN_DSA_CurrentMode_BldcMotor
Designation | Current mode - BLDC motor
Cross reference | -

Description

The example shows the current control of the BLDC motor via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number

d.SdoWr(0x3003, 0x00, 2)                  # Mode of operation - current mode
d.SdoWr(0x3004, 0x00, 1)                  # Enable

d.SdoWr(0x3200, 0x00, 500)                # Current [mA]


AN1470 Position mode (interpolation in counts) - DC motor with encoder feedback

Number | AN1470
Name | AN_DSA_IpMode_DcMotorWithEncoder_Counts
Designation | Position mode (interpolation in counts) - DC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning in counts of the DC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # Interpolation - data


AN1471 Position mode (interpolation in counts) - BLDC motor with encoder feedback

Number | AN1471
Name | AN_DSA_IpMode_BldcMotorWithEncoder_Counts
Designation | Position mode (interpolation in counts) - BLDC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning in counts of the BLDC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data


AN1472 Position mode (interpolation normalised) - DC motor with encoder feedback

Number | AN1472
Name | AN_DSA_IpMode_DcMotorWithEncoder_Normalised
Designation | Position mode (interpolation normalised) - DC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning (normalised) of the DC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 0)                  # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # Interpolation - time [us]
d.SdoWr(0x37C2, 0x02, 2)                  # Interpolation - reference
d.SdoWr(0x37C5, 0x00, 1)                  # Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0

while 1:
   angle += 0.4

   # if reference 37C2.02h is 1:
   #    1/2 of the revolution -> 0x80000000
   #    1/4 of the revolution -> 0x40000000
   #    1/8 of the revolution -> 0x20000000
   #    etc...
   #
   # if reference 37C2.02h is 2:
   #    1/1 of the revolution -> 0x80000000
   #    1/2 of the revolution -> 0x40000000
   #    1/4 of the revolution -> 0x20000000
   #    etc...

   TargetPos = StartPos + int(sin(angle) * 0x80000000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # Interpolation - data


AN1473 Position mode (interpolation normalised) - BLDC motor with encoder feedback

Number | AN1473
Name | AN_DSA_IpMode_BldcMotorWithEncoder_Normalised
Designation | Position mode (interpolation normalised) - BLDC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning (normalised) of the BLDC motor with encoder feedback via 3000h parameters.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # Disable
d.SdoWr(0x3000, 0x00, 1)                  # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # Interpolation - time [us]
d.SdoWr(0x37C2, 0x02, 2)                  # Interpolation - reference
d.SdoWr(0x37C5, 0x00, 1)                  # Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0

while 1:
   angle += 0.4

   # if reference 37C2.02h is 1:
   #    1/2 of the revolution -> 0x80000000
   #    1/4 of the revolution -> 0x40000000
   #    1/8 of the revolution -> 0x20000000
   #    etc...
   #
   # if reference 37C2.02h is 2:
   #    1/1 of the revolution -> 0x80000000
   #    1/2 of the revolution -> 0x40000000
   #    1/4 of the revolution -> 0x20000000
   #    etc...

   TargetPos = StartPos + int(sin(angle) * 0x80000000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # Interpolation - data


Content - AN15xx Profile DS402

AN1500 | AN_DS402vs3000hParameters | Relation between DS402 and ENGEL 3000h parameters
AN1510 | AN_DS402_PosMode_DcMotorWithEncoder | Position mode - DC motor with encoder feedback - relative positioning
AN1511 | AN_DS402_PosMode_BldcMotorWithEncoder | Position mode - BLDC motor with encoder feedback - relative positioning
AN1520 | AN_DS402_VelMode_DcMotorWithEncoder | Velocity mode - DC motor with encoder feedback
AN1521 | AN_DS402_VelMode_DcMotorWithEmf | Velocity mode - DC motor with emf feedback
AN1522 | AN_DS402_VelMode_BldcMotorWithHall | Velocity mode - BLDC motor with hall feedback
AN1523 | AN_DS402_VelMode_BldcMotorWithEncoder | Velocity mode - BLDC motor with encoder feedback
AN1540 | AN_DS402_TorqueMode_DcMotor | Torque mode - DC motor
AN1541 | AN_DS402_TorqueMode_BldcMotor | Torque mode - BLDC motor
AN1570 | AN_DS402_IpMode_DcMotorWithEncoder | Interpolated position mode - DC motor with encoder feedback
AN1571 | AN_DS402_IpMode_BldcMotorWithEncoder | Interpolated position mode - BLDC motor with encoder feedback


AN1500 Relation between DS402 and ENGEL 3000h parameters

Number | AN1500
Name | AN_DS402vs3000hParameters
Designation | Relation between DS402 and ENGEL 3000h parameters
Cross reference | -

Description

General
DS402 is a CANopen device profile, which parameters are defined in the range 6000h-6FFFh of the controller. The DS402 parameters in ENGEL controller are based on the 3000h parameters. I.e. when a DS402 parameter is changed, the appropriate 3000h parameter is also changed with direct or converted value. Direct changes of 3000h parameters are not transferred to the DS402 parameters.

Type of control
The control in the DS402 profile is based on internal state machine which is influenced by the control word. A status word provides the current status of the state machine, depending on the operating mode. The detailed information about parameters and the DS402 state machine can be found in DS402 specification CiA (CAN in Automation).

The control over the 3000h parameter is "command-oriented". I.e. change of parameters value triggers an action.

The user must first decide either for control over DS402 or 3000h parameters. If DS402 parameters are used, only those 3000h-parameters must be used that have no corresponding DS402 parameters.

If you choose the control over parameters 3000h, then the 6000h parameters may not be used. To eliminate the possible influence of 6000h parameters, the DS402-parameters and state machine are automatically disabled with the change of parameter DEV_Enable (3004.00h). Thus the write access to the 6000h parameter is locked. The control over the 3000h parameters is more universal and is not associated with DS402 profile. You can realize all controller tasks more efficient, simple and independent of the bus system with the help of parameters 3000h. The 3000h Quick Command Interface allows complete configuration and control with only one 8-byte-TxPDO (transmit process data object) and one 8-byte-RxPDO (receive process data object) regardless of the bus (CANopen, EtherCAT, Profibus, Ethernet, RS232, RS485, Modbus, ...)

Compare of DS402- and 3000h-control
Example: Enable and positioning to absolute position 123456 with velocity 1000 rpm.

DS402 |  |  | 3000h-QuickCommand (see parameter DEV_Cmd_ExecOnChange)
Object | Name | Action | Object | Name | Action
6060.00h | DS402_ModesOfOperation | = 1 | 3000.10h | DEV_CmdData0 | = 1000
6061.00h | DS402_ModesOfOperationDisplay | request | 3000.11h | DEV_CmdData1 | = 123456
6040.00h | DS402_ControlWord | = 06h | 3000.01h | DEV_Cmd_ExecOnChange | = 76h (PosMode, Enable, Mova)
6041.00h | DS402_StatusWord | request | 3002.00h | DEV_Status | request: STAT_CmdToggle and STAT_CmdError
6040.00h | DS402_ControlWord | = 07h |  |  |
6041.00h | DS402_StatusWord | request |  |  |
6040.00h | DS402_ControlWord | = 0Fh |  |  |
6041.00h | DS402_StatusWord | request |  |  |
6081.00h | DS402_PP_ProfileVelocity | = 1000 |  |  |
607A.00h | DS402_PP_TargetPosition | = 123456 |  |  |
6040.00h | DS402_ControlWord | = 1Fh (set new point = 1) |  |  |
6041.00h | DS402_StatusWord | request: wait for ACK with timeout |  |  |
6040.00h | DS402_ControlWord | = 0Fh (set new point = 0) |  |  |

Parameterization
Example: Parametrization with DS402 objects for BLDC motor with inc. encoder in position mode in increments.

Index.Subindex | Name | Value | Range | Meaning
2011.06h | DS2000_RestoreDefaultParameters_Manufacturer_0x3000 | 0x64616F6C | 2000h | Restore default parameters (range 0x3000-0x3FFF)
2011.03h | DS2000_RestoreDefaultParameters_Application | 0x64616F6C | 2000h | Restore default parameters (range 0x6000-0x9FFF)
3910.00h | MOTOR_PolN | 4 | 3000h | Motor pole number
3962.00h | MOTOR_ENC_Resolution | 2000 | 3000h | Encoder resolution in counts
3350.00h | VEL_Feedback | 0x96A | 3000h | Velocity feedback
3550.00h | SVEL_Feedback | 0x96A | 3000h | SVel feedback
3210.00h | CURR_Kp | 100 | 3000h | PI-Current controller - proportional factor
3211.00h | CURR_Ki | 100 | 3000h | PI-Current controller - integral factor
3310.00h | VEL_Kp | 100 | 3000h | PID-Controller - proportional factor
3311.00h | VEL_Ki | 100 | 3000h | PID-Controller - integral factor
3314.00h | VEL_Kvff | 1000 | 3000h | PID-Controller - velocity feed forward
3510.00h | SVEL_Kp | 100 | 3000h | SVel PI-Controller - proportional factor
3511.00h | SVEL_Ki | 100 | 3000h | SVel PI-Controller - integral factor
6402.00h | DS402_MotorType | 0x8001 | 6000h (DS402) | Motor type
6060.00h | DS402_ModesOfOperation | 1 | 6000h (DS402) | Device mode
608A.00h | DS402_PP_PositionDimensionIndex | 0xAC | 6000h (DS402) | Position in increments
6065.00h | DS402_PP_FollowingErrorWindow | 1000 | 6000h (DS402) | Following error window
6083.00h | DS402_PP_ProfileAcceleration | 60000 | 6000h (DS402) | Velocity acceleration
6084.00h | DS402_PP_ProfileDeceleration | 60000 | 6000h (DS402) | Velocity deceleration
6085.00h | DS402_PP_QuickstopDeceleration | 600000 | 6000h (DS402) | Velocity quickstop deceleration
6081.00h | DS402_PP_ProfileVelocity | 1000 | 6000h (DS402) | Profile velocity


AN1510 Position mode - DC motor with encoder feedback - relative positioning

Number | AN1510
Name | AN_DS402_PosMode_DcMotorWithEncoder
Designation | Position mode - DC motor with encoder feedback - relative positioning
Cross reference | -

Description

The example shows the relative positioning of the DC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


AN1511 Position mode - BLDC motor with encoder feedback - relative positioning

Number | AN1511
Name | AN_DS402_PosMode_BldcMotorWithEncoder
Designation | Position mode - BLDC motor with encoder feedback - relative positioning
Cross reference | -

Description

The example shows the relative positioning of the BLDC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8001)             # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


AN1520 Velocity mode - DC motor with encoder feedback

Number | AN1520
Name | AN_DS402_VelMode_DcMotorWithEncoder
Designation | Velocity mode - DC motor with encoder feedback
Cross reference | -

Description

The example shows the velocity control of the DC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


AN1521 Velocity mode - DC motor with emf feedback

Number | AN1521
Name | AN_DS402_VelMode_DcMotorWithEmf
Designation | Velocity mode - DC motor with emf feedback
Cross reference | -

Description

The example shows the velocity control of the DC motor with emf feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3901, 0x00, 3000)               # Motor rated revolutions [rpm]
d.SdoWr(0x3902, 0x00, 24000)              # Motor rated voltage [mV]

d.SdoWr(0x3310, 0x00, 10)                 # VEL PID-Controller - gain
d.SdoWr(0x3311, 0x00, 10)                 # PID-Controller - integral factor

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


AN1522 Velocity mode - BLDC motor with hall feedback

Number | AN1522
Name | AN_DS402_VelMode_BldcMotorWithHall
Designation | Velocity mode - BLDC motor with hall feedback
Cross reference | -

Description

The example shows the velocity control of the BLDC motor with hall feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8001)             # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 2)                  # Motor polarity

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


AN1523 Velocity mode - BLDC motor with encoder feedback

Number | AN1523
Name | AN_DS402_VelMode_BldcMotorWithEncoder
Designation | Velocity mode - BLDC motor with encoder feedback
Cross reference | -

Description

The example shows the velocity control of the BLDC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8001)             # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


AN1540 Torque mode - DC motor

Number | AN1540
Name | AN_DS402_TorqueMode_DcMotor
Designation | Torque mode - DC motor
Cross reference | -

Description

The example shows the torque control of the DC motor with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type - DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


AN1541 Torque mode - BLDC motor

Number | AN1541
Name | AN_DS402_TorqueMode_BldcMotor
Designation | Torque mode - BLDC motor
Cross reference | -

Description

The example shows the torque control of the BLDC motor with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8001)             # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


AN1570 Interpolated position mode - DC motor with encoder feedback

Number | AN1570
Name | AN_DS402_IpMode_DcMotorWithEncoder
Designation | Interpolated position mode - DC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning in counts of the DC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type - DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


AN1571 Interpolated position mode - BLDC motor with encoder feedback

Number | AN1571
Name | AN_DS402_IpMode_BldcMotorWithEncoder
Designation | Interpolated position mode - BLDC motor with encoder feedback
Cross reference | -

Description

The example shows the interpolated positioning in counts of the BLDC motor with encoder feedback with the help of DS402.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8001)             # Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x3314, 0x00, 1000)               # PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


Content - AN50xx specific classes

AN5000

AN_mcConvertFirmware

 Class ConvertFirmware() - Converting firmware to user specific format


AN5000 Class ConvertFirmware() - Converting firmware to user specific format

Number | AN5000
Name | AN_mcConvertFirmware
Designation | Class ConvertFirmware() - Converting firmware to user specific format
Cross reference | -

Description

This application note describes the possibility to convert the firmware for ENGEL devices from the *.sx file format to a list of semicode commands. The format for the semicode commands can be specified in any form.
The semicode command list makes it possible to read the firmware with a PLC or another PC-program and send it to a device via CAN bus.

Converting the firmware via python script

To export the firmware in the desired format the function Convert() of the ConverFirmware class has to be called.

# -*- coding: iso-8859-1 -*-
import mc_convert_firmware

NodeId      = 1                              # NodeId of the device (if more devices shall be updated at the same time, use the format "NodeID = [1,2,3,4]")
FileName    = "mcDSA-E45-RevB-4BL10k.sx"     # File name of the firmware
Virtual     = True                           # True, if the device is not connected via CAN bus while converting
DeviceCode  = 0x25450001                     # Only needed if "Virtual = True"
Version     = "1.89.00.E7"                   # Version of the firmware

cf = mc_convert_firmware.ConvertFirmware()

cf.Convert(node_id = NodeId,
           filename = FileName,
           out_filename = "%s_V%s.py" % (FileName[0:FileName.find('.')], Version),
           virtual_device = Virtual,
           device_code = DeviceCode,
           use_extd_cobid = True,
           deactive_bootup_msg = False,
           #sdo_format = "\"SdoWr;%d;%d;%d;%d;%d\" % (nodeid, index, subindex, value, timeout)",                                    # => uncomment this line to define your own "sdo format"
           #sdo_wr_try_format = "\"SdoWrTry;%d;%d;%d;%d;%d\" % (nodeid, index, subindex, value, timeout)",                          # => uncomment this line to define your own "sdo write try format"
           #pdo_format = "\"PdoWr;%d;%d;%s\" % (cob_id, len(dat), str(dat))",                                                       # => uncomment this line to define your own "pdo format"
           #delay_format = "\"Delay;%d\" % (delay)",                                                                                # => uncomment this line to define your own "delay format"
           #check_crc_format = "\"SdoCk;%d;%d;%d;%d\" % (nodeid, index, subindex, value)",                                          # => uncomment this line to define your own "check crc format"
           #comment_format = "\"''' %s '''\" % (comment)",                                                                          # => uncomment this line to define your own "comment format"
           #comment_format = None,                                                                                                  # => uncomment this line to disable comments in the resulting file
           #file_header = "mcFw_V%s;%d\n" % (Version, DeviceCode),                                                                  # => uncomment this line to add a file header
           #app_header_txt = "=== This part works only, if there is a firmware on the device. (not in bootloader mode) ===",        # => uncomment this line to add a header commentary
           #app_footer_txt = "=============================== Beginning of bootloader mode ==============================="         # => uncomment this line to add a footer commentary
           )

Parameters of the function Convert()

The following parameters define the output format of the semicode command list.

Parameter | Description | Default value | Value range
node_id | CANopen node id of the device that is programmed | - | 1...127
bl_node_id | CANopen node id of the bootloader of the device (only necessary if the device has a bootloader with a fixed node id) | - | 1...127
filename | File name / file path to the firmware | - | -
out_filename | File name / file path to the output file (result of the conversion) | - | -
virtual_device | Tells the class if the device is available via CAN bus during the conversion to read the device code. ("virtual_device = False" means, that the device is available during the conversion) | False | True, False
device_code | The device code of the device that will be programmed, if known. (only necessary if virtual_device = True) The device code is necessary to match the firmware to the according processor of the device (memory areas and so on) | - | 0x10000000 - 0xFFFFFFFF
use_extd_cobid | If this parameter is activated, the CAN bus messages will be send with a 29-bit identifier during the firmware download, otherwise with a 11-bit identifier. | True | True, False
deactive_bootup_msg | Deactivates the "BootUp"-message of the device during the firmware download. After a successful download the "BootUp"-message will be automatically activated. | False | True, False
sdo_format | User specific format for SdoWr requests. | - | -
pdo_format | User specific format for PDO CAN messages | - | -
delay_format | User specific format for delays in the program sequence. | - | -
sdo_wr_try_format | User specific format for SdoWr requests, that expect no answers. (e.g. CPU-reset) If the parameter "sdo_wr_try_format" is not defined, the format of "sdo_format" will be used. | - | -
check_crc_format | User specific format for checking of CRC-checksum | - | -
comment_format | User specific format for comments in the result file (if "comment_format" = None, comments will be deactivated) | "#%s" % (comment) | -
file_header | User specific file header | - | -
app_header_txt | User specific comment for the start of the application | === This part works only, if there is a firmware on the device. (not in bootloader mode) === | -
app_footer_txt | User specific comment for the end of the application | =============================== Beginning of bootloader mode =============================== | -

Download of the firmware

The firmware can be downloaded in any state of the device. The device can be in bootloader mode or in normal operational mode.
If the firmware download fails, it can be repeated instantly without the need to restart the device.

In order to download the converted firmware to the device, the exported semicode command list hast to be read by the desired program / PLC .
An interpretation of the data is not necessary. Only the semicode commands have to be interpreted and executed correctly by the desired PLC or program.

Functions that have to be implemented in the PLC / computer program

The output format of the semicode command list can be specified in any form by the Convert() function.
In order to illustrate the functions that have to be executed by the PLC or the desired program, the ENGEL standard format of semicode commands will be explained.

SdoWr(nodeid, index, subindex, value, timeout)

This function is a standard "SDO download" message with the "expedited" transfer type. (internally called "SdoWr" by ENGEL)
It is used to write a specified value to an object in the device. The standard timeout for these messages is 200ms.
The data type of the messages is always int32.

Parameter | Description
nodeid | CANopen node id
index | CANopen object index
subindex | CANopen object subindex
value | Value that will be set
timeout | Waiting time in milliseconds for an answer of the device. If no answer is given in the time frame the firmware download failed and has to be aborted. Exceptions: Writing the object 0x2009.02 with value 0x9999 - no answer is expected because the device restarts. Writing the object 0x2008.02 with value 0x9998 - no answer is expected because the device restarts.

SdoWrTry(nodeid, index, subindex, value, timeout)

This function is identical to SdoWr. The difference is that the firmware download has to be continued in case of an SDO error code.
This is necessary e.g. if the device restarts.
Parameter | Description
nodeid | CANopen node id
index | CANopen object index
subindex | CANopen object subindex
value | Value that will be set
timeout | Waiting time in milliseconds for an answer of the device. If no answer is given in the time frame the firmware download has to be continued.

PdoWr(cob_id, data)

This function is a standart CAN frame with CobId and data. (internally called "PdoWr" by ENGEL)

Parameter | Description
cobid | CAN message cob identifier
data | CAN message data (list with up to 8 bytes)

SdoCheck(nodeid, index, subindex, value)

This function is a standard CANopen "SDO upload" message in with the "expedited" transfer type. (internally called "SdoRd" by ENGEL).
It is used to read the value of an object in the device. The standard timeout for this message is 200ms.
The read value has to be compared the the parameter "value". If the data of the read value and the parameter "value" do not match, the firmware download failed and has to be aborted.

Parameter | Description
nodeid | CANopen node id
index | CANopen object index
subindex | CANopen object subindex
value | Value that has to be compared. If the read value and the parameter "value" do not match, the firmware download failed and has to be aborted.

Delay(delay)

This function is called if the program has to be stopped for a specified time.
This is necessary if the device restarts. If the break of the program is not properly followed, important messages of the firmware download can get lost.

Parameter | Description
delay | Waiting time in milliseconds

Special cases

There are some special cases that have to be considered during the firmware download.

SdoWr that will be acknowledged by an SDO Error Code

It will be assumed, that the device is in normal operational mode before the semicode command list is executed.
If the device is already in bootloader mode (e.g. due to a failed firmware download), the first block of messages will be acknowledged by the SDO error code "Object does not exist" by the device.
In this case, the first block of messages(until the first try/except block) can be ignored.

SdoWr gets no answer

If an SdoWr gets no answer, the firmware download failed and has to be aborted.

The are two exceptions.

Exceptions:

Writing the object 0x2009.02 with value 0x9999 - no answer is expected because the device restarts

Writing the object 0x2008.02 with value 0x9998 - no answer is expected because the device restarts

For these objects the format "sdo_wr_try" can be used. If the parameter "sdo_wr_try_format" is not defined, the format of "sdo_format" will be used.

Testing mechanism

There are different tests that can be done, to guarantee a safe firmware download.

Is the firmware compatible to the device?

To check if the firmware is compatible to the device, the device code of the device should be read and compared before the execution of the semicode commands. If the device code does not match, the firmware download should not be executed.
In the normal operational mode the device code can be read in the object 3020.00h ( DEV_Code) and 3020.01h (DEV_Subcode)
If the device is already in bootloader mode, the complete device code can be read in the object 2008.11h (upper 2 byte equal the DeviceCode, lower 2 byte equal the DeviceSubCode)

In order to recognize if the device is already in bootloader mode, the object 3020.00h ( DEV_Code) can be read .
If the request lead the SDO error code "Object does not exist", the device is already in bootloader mode.


Content - AN80xx Hardware Design

AN8000

AN_HardwareDesign_EagleLibrary

 EAGLE Library


AN8000 EAGLE Library

Number | AN8000
Name | AN_HardwareDesign_EagleLibrary
Designation | EAGLE Library
Cross reference | -

Description

Library Version 1.80 - Eagle-Library for the circuit boards modules from ENGEL.

Library

This application note provides guideline for project development with ENGEL modules using EAGLE library mcModules. All files (examples and library) are available in an8000.zip.

Symbol

Contains connectors schematic symbols of ENGEL modules divided into groups as described in the chapter Terminal assignment of the respective device.

Symbols X1 (upper) and X2 (lower) represent X1 and X2 connectors with all pin outs of the module. If module variant owns only one connector, it is represented as X1 and appears in simple rectangular shape.

Specially designed shapes of the symbols allow an easy visual control of the proper connection as well as all module's connectors placed on the circuit diagram. Also it is possible to split module connections between different sheets of the project due to functionality or other reasons.

Package

Contains outline dimensions of particular family modules (named: FRAME) as well as definitions of used connectors.

Device

Contains symbols connected with packages according to production variants.

Procedure

Drawing a Schematic

  1. Simply place used module's connectors in proper variant (SMD or THT) into the schematic layout, using standard ADD command.

Drawing a Circuit Board Layout

  1. After using a Board command or clicking the Switch-to-Board icon you can add used ENGEL module version FRAME from mcModules library using standard ADD command.
  2. Set board grid to 3 mil.
  3. Place the module frame into the correct place on the board.
  4. Place the connector X1 into the suited place prepared on the frame shape. Middle of the connector should be placed on the congruent middle of the connector outline.
  5. Please check correctness of the pins numbers. If necessary rotate the connector by 180 °.
  6. If it's necessary repeat step 4 and 5 with X2 connector.

Tips

All the outline dimensions of the modules FRAME are made on 51 tDocu Layer.


Content - Parameter lists for devices (dictionary)

EDC-Bxx

EDC-Exx

EDC-Fxx

EDC-Sxx

mcIO


Content - Parameters 1000h (DS301)

1000.00h | COP_DeviceType | Device type
1001.00h | COP_ErrorRegister | Error register
1002.00h | COP_ManufacturerStatusRegister | Manufacturer status register
1003.00h | COP_PredefinedErrorField_NumberOfErrors | Predefined error field - Number of errors
1003.01h | COP_PredefinedErrorField_StandardErrorField1 | Predefined error field - Standard error field 1
1003.02h | COP_PredefinedErrorField_StandardErrorField2 | Predefined error field - Standard error field 2
1003.03h | COP_PredefinedErrorField_StandardErrorField3 | Predefined error field - Standard error field 3
1003.04h | COP_PredefinedErrorField_StandardErrorField4 | Predefined error field - Standard error field 4
1003.05h | COP_PredefinedErrorField_StandardErrorField5 | Predefined error field - Standard error field 5
1003.06h | COP_PredefinedErrorField_StandardErrorField6 | Predefined error field - Standard error field 6
1003.07h | COP_PredefinedErrorField_StandardErrorField7 | Predefined error field - Standard error field 7
1003.08h | COP_PredefinedErrorField_StandardErrorField8 | Predefined error field - Standard error field 8
1005.00h | COP_CobId_Sync | COB-ID SYNC
1006.00h | COP_CommunicationCyclePeriod | Communication cycle period
1008.00h | COP_ManufacturerDeviceName | Manufacturer device name
1009.00h | COP_ManufacturerHardwareVersion | Manufacturer hardware version
100A.00h | COP_ManufacturerSoftwareVersion | Manufacturer software version
100C.00h | COP_GuardTime | Guard time
100D.00h | COP_LifeTimeFactor | Life time factor
100E.00h | COP_CobId_Guarding | COB-ID node and life Guarding
1010.00h | COP_StoreParameters_HighestSubindexSupported | Store parameters - highest sub-index supported
1010.01h | COP_StoreParameters_All | Store parameters - save all parameters
1010.02h | COP_StoreParameters_Communication | Store parameters - save communication parameters
1010.03h | COP_StoreParameters_Application | Store parameters - save application parameters
1010.05h | COP_StoreParameters_Manufacturer_0x2000 | Store parameters - save manufacturer defined parameters (range 0x2000-0x2FFF)
1010.06h | COP_StoreParameters_Manufacturer_0x3000 | Store parameters - save manufacturer defined parameters (range 0x3000-0x3FFF)
1011.00h | COP_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
1011.01h | COP_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
1011.02h | COP_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
1011.03h | COP_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
1011.05h | COP_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
1011.06h | COP_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
1012.00h | COP_CobId_TimeStampMessage | COB-ID time stamp message
1014.00h | COP_CobId_EmergencyMessage | COB-ID emergency message
1016.00h | COP_ConsumerHeartbeatTime_HighestSubindexSupported | Consumer heartbeat time - Highest sub-index supported
1016.01h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1 | Consumer 1 heartbeat time - Consumer heartbeat time
1016.02h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime2 | Consumer 2 heartbeat time - Consumer heartbeat time
1016.03h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime3 | Consumer 3 heartbeat time - Consumer heartbeat time
1016.04h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime4 | Consumer 4 heartbeat time - Consumer heartbeat time
1017.00h | COP_ProducerHeartbeatTime | Producer heartbeat time
1018.00h | COP_IdentityObject_HighestSubindexSupported | Identity object - Highest sub-index supported
1018.01h | COP_IdentityObject_VendorID | Identity object - Vendor-ID
1018.02h | COP_IdentityObject_ProductCode | Identity object - Product code
1018.03h | COP_IdentityObject_RevisionNumber | Identity object - Revision number
1029.00h | COP_ErrorBehavior_HighestSubindexSupported | Error behavior - Highest sub-index supported
1029.01h | COP_ErrorBehavior_CommunicationError | Error behavior - Communication error
1200.00h | COP_SDO_ServerParameter_HighestSubindexSupported | SDO server parameter - Highest sub-index supported
1200.01h | COP_SDO_ServerParameter_CobIdClientServer_Rx | SDO server parameter - COB-ID client -> server (rx)
1200.02h | COP_SDO_ServerParameter_CobIdServerClient_Tx | SDO server parameter - COB-ID server -> client (tx)
1400.00h | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported | RxPDO1 communication parameter - highest sub-index supported
1400.01h | COP_RxPDO1_CommunicationParameter_CobId | RxPDO1 communication parameter - COB-ID used by RxPDO 1
1400.02h | COP_RxPDO1_CommunicationParameter_TransmissionType | RxPDO1 communication parameter - transmission type
1400.03h | COP_RxPDO1_CommunicationParameter_InhibitTime | RxPDO1 communication parameter - inhibit time
1600.00h | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects | RxPDO1 mapping - number of mapped application objects in RxPDO 1
1600.01h | COP_RxPDO1_Mapping_1ApplicationObject | RxPDO1 mapping - 1st application object
1600.02h | COP_RxPDO1_Mapping_2ApplicationObject | RxPDO1 mapping - 2nd application object
1600.03h | COP_RxPDO1_Mapping_3ApplicationObject | RxPDO1 mapping - 3rd application object
1600.04h | COP_RxPDO1_Mapping_4ApplicationObject | RxPDO1 mapping - 4th application object
1600.05h | COP_RxPDO1_Mapping_5ApplicationObject | RxPDO1 mapping - 5th application object
1600.06h | COP_RxPDO1_Mapping_6ApplicationObject | RxPDO1 mapping - 6th application object
1600.07h | COP_RxPDO1_Mapping_7ApplicationObject | RxPDO1 mapping - 7th application object
1600.08h | COP_RxPDO1_Mapping_8ApplicationObject | RxPDO1 mapping - 8th application object
1800.00h | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported | TxPDO1 communication parameter - highest sub-index supported
1800.01h | COP_TxPDO1_CommunicationParameter_CobId | TxPDO1 communication parameter - COB-ID used by TxPDO
1800.02h | COP_TxPDO1_CommunicationParameter_TransmissionType | TxPDO1 communication parameter - transmission type
1800.03h | COP_TxPDO1_CommunicationParameter_InhibitTime | TxPDO1 communication parameter - inhibit time
1A00.00h | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects | TxPDO1 mapping - number of mapped application objects in TxPDO 1
1A00.01h | COP_TxPDO1_Mapping_1ApplicationObject | TxPDO1 mapping - 1st application object
1A00.02h | COP_TxPDO1_Mapping_2ApplicationObject | TxPDO1 mapping - 2nd application object
1A00.03h | COP_TxPDO1_Mapping_3ApplicationObject | TxPDO1 mapping - 3rd application object
1A00.04h | COP_TxPDO1_Mapping_4ApplicationObject | TxPDO1 mapping - 4th application object
1A00.05h | COP_TxPDO1_Mapping_5ApplicationObject | TxPDO1 mapping - 5th application object
1A00.06h | COP_TxPDO1_Mapping_6ApplicationObject | TxPDO1 mapping - 6th application object
1A00.07h | COP_TxPDO1_Mapping_7ApplicationObject | TxPDO1 mapping - 7th application object
1A00.08h | COP_TxPDO1_Mapping_8ApplicationObject | TxPDO1 mapping - 8th application object


1000.00h Device type

Name | COP_DeviceType
Designation | Device type
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DeviceType()
Cross reference | -

Description

This object provides information about the device type. The object describes the type of the logical device and its functionality. It is composed of a 16-bit field (lower 2 bytes) that describes the device profile or the application profile that is used and a second 16-bit field (higher 2 bytes), which gives additional information about optional functionality of the logical device. The additional information parameter is device profile specific and application profile specific. For example:
  • Device profile number 401 (191h):
16th bit - digital input is implemented
17th bit - digital output is implemented
18th bit - analogue input is implemented
19th bit - analogue output is implemented
rest - reserved

Any combination of digital/analogue, inputs and outputs is allowed.
  • Device profile number 402 (192h):
0001h - frequency converter
0002h - servo drive
0004h - stepper motor
0FFFh - multiple device module

Structure of the device type parameter

More information about the additional information you can find in appropriate specification.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                        # NodeId = 1

print "DeviceType = ", hex(d.SdoRd(0x1000,0x00))  # print device type


1001.00h Error register

Name | COP_ErrorRegister
Designation | Error register
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 127]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorReg()
Cross reference | -

Description

This object provides error information. The CANopen device maps internal errors into this object.
It is a part of an emergency object.

Structure of the error register:
Bit | Meaning
0 | Generic error
1 | Current
2 | Voltage
3 | Temperature
4 | Communication error (overrun, error state)
If a specific error occurs the corresponding bit is set to 1. The generic error is signaled at any error situation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "ErrorReg = ", hex(d.SdoRd(0x1001,0x00))  # print error register


1002.00h Manufacturer status register

Name | COP_ManufacturerStatusRegister
Designation | Manufacturer status register
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ManufStatusReg()
Cross reference | -

Description

This object is not used and provides always 0.


1003.00h Predefined error field - Number of errors

Name | COP_PredefinedErrorField_NumberOfErrors
Designation | Predefined error field - Number of errors
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_StandardErrorField1, COP_PredefinedErrorField_StandardErrorField2, COP_PredefinedErrorField_StandardErrorField3, COP_PredefinedErrorField_StandardErrorField4, COP_PredefinedErrorField_StandardErrorField5, COP_PredefinedErrorField_StandardErrorField6, COP_PredefinedErrorField_StandardErrorField7, COP_PredefinedErrorField_StandardErrorField8

Description

This object contains the number of actual errors (recorded in the array starting at subindex 01h) that occurred on the CANopen device and were signaled via the emergency object.
Every new error is stored at subindex 01h; older errors are moved to the next higher subindex. The number of possible subindex is 08h.
Writing 00h to subindex 00h deletes the entire error history (empties the array). Other values than 00h are not allowed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff)


1003.01h Predefined error field - Standard error field 1

Name | COP_PredefinedErrorField_StandardErrorField1
Designation | Predefined error field - Standard error field 1
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.02h Predefined error field - Standard error field 2

Name | COP_PredefinedErrorField_StandardErrorField2
Designation | Predefined error field - Standard error field 2
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.03h Predefined error field - Standard error field 3

Name | COP_PredefinedErrorField_StandardErrorField3
Designation | Predefined error field - Standard error field 3
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.04h Predefined error field - Standard error field 4

Name | COP_PredefinedErrorField_StandardErrorField4
Designation | Predefined error field - Standard error field 4
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.05h Predefined error field - Standard error field 5

Name | COP_PredefinedErrorField_StandardErrorField5
Designation | Predefined error field - Standard error field 5
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.06h Predefined error field - Standard error field 6

Name | COP_PredefinedErrorField_StandardErrorField6
Designation | Predefined error field - Standard error field 6
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.07h Predefined error field - Standard error field 7

Name | COP_PredefinedErrorField_StandardErrorField7
Designation | Predefined error field - Standard error field 7
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1003.08h Predefined error field - Standard error field 8

Name | COP_PredefinedErrorField_StandardErrorField8
Designation | Predefined error field - Standard error field 8
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorField(subindex)
Cross reference | COP_PredefinedErrorField_NumberOfErrors

Description

Every new error is stored at subindex 01h; older errors are moved to the next higher sub-index. The number of possible subindex is 08h.

The error numbers are composed of a 16-bit emergency error code (uint16, see table below) and a 16-bit additional error information field (int16), which returns the same information as parameter DEV_ErrorReg. The emergency error code is contained in the lower 2 bytes (LSB) and the additional information is included in the upper 2 bytes (MSB)
Structure of the pre-defined error field
Emergency error code:
Error code | Description
0x0000 | Error reset or no error
0x1000 | Generic error
0x2000 | Current
0x2100 | Current, Device input side
0x2130 | Current, Short circuit
0x2131 | Current, Short circuit phases L1 - L2
0x2132 | Current, Short circuit phases L2 - L3
0x2133 | Current, Short circuit phases L3 - L1
0x2200 | Current inside the device
0x2211 | Internal current No.1
0x2212 | Internal current No.2
0x2300 | Current, Device output side
0x2310 | Current output to high
0x2320 | Short circuit at output
0x2330 | Load dump at output
0x3000 | Voltage
0x3100 | Mains voltage
0x3110 | Mains over-voltage
0x3120 | Mains under-voltage
0x3200 | DC link voltage
0x3210 | DC link over-voltage
0x3211 | Over-voltage No.1
0x3212 | Over-voltage No.2
0x3220 | DC link under-voltage
0x3221 | Under-voltage No.1
0x3222 | Under-voltage No.2
0x3300 | Output voltage
0x3310 | Output voltage too high
0x3320 | Output voltage too low
0x4000 | Temperature
0x4200 | Temperature device
0x4210 | Excess temperature device
0x4220 | Too low temperature device
0x4300 | Temperature drive
0x4310 | Excess temperature drive
0x4320 | Too low temperature drive
0x5000 | Device hardware
0x5500 | Data storage
0x5510 | Working memory
0x5520 | Program memory
0x5530 | Non-volatile data memory
0x6000 | Device software
0x6010 | Software reset (watchdog)
0x6100 | Internal software
0x6200 | User software
0x6300 | Data record
0x6301 | Data record No.1
0x630F | Data record No.15
0x6310 | Loss of parameters
0x6320 | Parameter error
0x7000 | Additional modules
0x7300 | Sensor
0x7301 | Tacho fault
0x7302 | Tacho wrong polarity
0x7303 | Resolver 1 fault
0x7304 | Resolver 2 fault
0x7305 | Incremental sensor 1 fault
0x7306 | Incremental sensor 2 fault
0x7307 | Incremental sensor 3 fault
0x7310 | Speed
0x7320 | Position
0x8000 | Monitoring
0x8100 | Communication
0x8110 | CAN overrun
0x8120 | CAN in error passive mode
0x8130 | Guard error
0x8140 | Recovered from bus off
0x8150 | Transmit COB-ID collision
0x8200 | Protocol error
0x8210 | PDO length error
0x8220 | PDO length exceeded
0x8600 | Positioning controller
0x8611 | Following error
0x8612 | Reference limit
0x9000 | External error

Example

# -*- coding: iso-8859-1 -*-
import ctypes
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

err_count = d.SdoRd(0x1003,0x00)
print "Error count =", err_count

for subindex in xrange(1,err_count+1):
   err_field = d.SdoRd(0x1003,subindex)

   print "Subindex:", subindex
   print "    Emergency error code    =", hex(err_field&0xffff)
   print "    Error register(3001.00h)=", hex((err_field >>16)&0xffff), ctypes.c_int16((err_field >>16)&0xffff).value


1005.00h COB-ID SYNC

Name | COP_CobId_Sync
Designation | COB-ID SYNC
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000080h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SyncMsgCobId(cob_id)
Cross reference | COP_CommunicationCyclePeriod,

Description

This object indicates the configured the COB-ID of the synchronization object (SYNC). Further, it defines whether the CANopen device generates the SYNC.
The structure of this object is specified in the following figures.

Structure of SYNC COB-ID

Description of SYNC COB-ID:
Bit | Value | Description
x | x | do not care
gen. | 0b | Bit is not changeable. To generate SYNC message use parameter 2021.01h (see description below).
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame
Bit 30 (gen.) is static (not changeable). An attempt to set bit 30 (gen.) to 1b is responded with the SDO abort transfer service (abort code: 0609 0030h).
The first transmission of SYNC object starts within 1 sync cycle after setting the parameter 2021.01h to 1. To stop SYNC transmission, set parameter 2021.01h to 0.
It is not allowed to change bits 0 to 29, while the parameter 2021.01h is equal 1.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

print "SYNC COB-ID:", d.SdoRd(0x1005,0x00)   # actual cob-id
d.SdoWr(0x1005,0x00,0x81)                    # COP_CobId_Sync - set the new cob-id
d.SdoWr(0x1006,0x00,1000000)                 # COP_CommunicationCyclePeriod - SYNC interval - 1s
d.SdoWr(0x2021,0x01,1)                       # DS2000_SyncProducer_Enable - device generates SYNC-MSG


1006.00h Communication cycle period

Name | COP_CommunicationCyclePeriod
Designation | Communication cycle period
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | COP_CobId_Sync,

Description

This object provides the communication cycle period. This period defines the SYNC interval.
The value is given with the resolution 1000 μs, that means that only following values are possible: 1000 μs, 2000 μs, 3000 μs, ....etc
If the value is set to 0 the transmission of SYNC messages is disabled.

Two variants of work are possible:

1. Device works as Producer (parameter 2021.01 is equal 1):
The device sends SYNC signals at regular intervals (given by the value).

2. Device works as Consumer (parameter 2021.01 is equal 0):
The device synchronizes the internal clock with SYNC signal of Producer.

Important !!! The communcation cycle period of Consumer must be the same as the communcation cycle period of Producer.
Incorrect settings of this parameter causes change of internal regulation cycle by +/- 10% of nominal regulation cycle.
That means for example that the velocity of motor will be change by +/- 10%.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

print "SYNC COB-ID:", d.SdoRd(0x1005,0x00)   # actual cob-id
d.SdoWr(0x1005,0x00,0x81)                    # COP_CobId_Sync - set the new cob-id
d.SdoWr(0x1006,0x00,1000000)                 # COP_CommunicationCyclePeriod - SYNC interval - 1s
d.SdoWr(0x2021,0x01,1)                       # DS2000_SyncProducer_Enable - device generates SYNC-MSG


1008.00h Manufacturer device name

Name | COP_ManufacturerDeviceName
Designation | Manufacturer device name
Data type | visible string
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ManufDeviceName()
Cross reference | -

Description

This object provides the name of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

name = d.SdoRd(0x1008,0x00)
name_string = ''

for i in xrange(0,4):
    name_string += chr((name>>i*8)&0xFF)

print "Device name (hex):", hex(name)
print "Device name (str):", name_string


1009.00h Manufacturer hardware version

Name | COP_ManufacturerHardwareVersion
Designation | Manufacturer hardware version
Data type | visible string
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ManufHwVer()
Cross reference | -

Description

This object provides the hardware version description.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

hw_version = d.SdoRd(0x1009,0x00)
hw_version_string = ''

for i in xrange(0,4):
    hw_version_string += chr((hw_version>>i*8)&0xFF)

print "Hardware version(hex):", hex(hw_version)
print "Hardware version(str):", hw_version_string


100A.00h Manufacturer software version

Name | COP_ManufacturerSoftwareVersion
Designation | Manufacturer software version
Data type | visible string
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ManufSwVer()
Cross reference | -

Description

This object provides the software version description.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

sw_version = d.SdoRd(0x100A,0x00)
sw_version_string = ''

for i in xrange(0,4):
    sw_version_string += chr((sw_version>>i*8)&0xFF)

print "Software version(hex):", hex(sw_version)
print "Software version(str):", sw_version_string


100C.00h Guard time

Name | COP_GuardTime
Designation | Guard time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | GuardTime(time_ms)
Cross reference | COP_LifeTimeFactor

Description

The life time factor multiplied with the guard time gives the life time for the life guarding protocol.

The value has to be given in multiple of ms. The value of 0 disables the life guarding.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Guard time      ", d.SdoRd(0x100C,0x00)  # actual value
print "Life time factor", d.SdoRd(0x100D,0x00)  # actual value

d.SdoWr(0x100C,0x00,10)                         # set new value
d.SdoWr(0x100D,0x00,10)                         # set new value


100D.00h Life time factor

Name | COP_LifeTimeFactor
Designation | Life time factor
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LifeTimeFactor(factor)
Cross reference | COP_GuardTime

Description

The life time factor multiplied with the guard time gives the life time for the life guarding protocol.

The value of 0 disables the life guarding.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Guard time      ", d.SdoRd(0x100C,0x00)  # actual value
print "Life time factor", d.SdoRd(0x100D,0x00)  # actual value

d.SdoWr(0x100C,0x00,10)                         # set new value
d.SdoWr(0x100D,0x00,10)                         # set new value


100E.00h COB-ID node and life Guarding

Name | COP_CobId_Guarding
Designation | COB-ID node and life Guarding
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [0000h .. FFFFFFFFh]
Default value | 0700h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | EmcyCobId(cob_id)
Cross reference | -

Description

This object indicates the configured COB-ID of the Guarding. The structure of this object is specified below.

Value definition:

Description of Guarding COB-ID:

Bit(s) | Value | Description
res. | 0b | Reserved
res, | 0b | Reserved
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame
Bits 30 and 31 are static (not changeable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Emcy COB-ID:", hex(d.SdoRd(0x1014,0x00)) # actual value

new_cob_id = 0x82

d.SdoWr(0x1014,0x00,new_cob_id |  0x80000000)   # Emergency message - disable
d.SdoWr(0x1014,0x00,new_cob_id & ~0x80000000)   # new cob id for emergency message


Content - Parameters 1000h (DS301) - Store parameters

1010.00h | COP_StoreParameters_HighestSubindexSupported | Store parameters - highest sub-index supported
1010.01h | COP_StoreParameters_All | Store parameters - save all parameters
1010.02h | COP_StoreParameters_Communication | Store parameters - save communication parameters
1010.03h | COP_StoreParameters_Application | Store parameters - save application parameters
1010.05h | COP_StoreParameters_Manufacturer_0x2000 | Store parameters - save manufacturer defined parameters (range 0x2000-0x2FFF)
1010.06h | COP_StoreParameters_Manufacturer_0x3000 | Store parameters - save manufacturer defined parameters (range 0x3000-0x3FFF)


1010.00h Store parameters - highest sub-index supported

Name | COP_StoreParameters_HighestSubindexSupported
Designation | Store parameters - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 06h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_StoreParameters_All, COP_StoreParameters_Communication, COP_StoreParameters_Application, COP_StoreParameters_Manufacturer_0x2000, COP_StoreParameters_Manufacturer_0x3000

Description

This object controls the saving of parameters in non-volatile memory.

By read access the CANopen device provides information about its saving capabilities.
Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index 01h refers to all parameters that may be stored on the CANopen device.
  • Sub-index 02h refers to communication related parameters (index from 1000h to 1FFFh).
  • Sub-index 03h refers to application related parameters (index from 6000h to 9FFFh).
  • Sub-index 05h refers to manufacturer defined parameters (index from 2000h to 2FFFh)
  • Sub-index 06h refers to manufacturer defined parameters (index from 3000h to 3FFFh)
In order to avoid storage of parameters by mistake, storage is only executed when a specific signature is written to the appropriate sub-index. The signature that shall be written is "save":

Storage write access signature

On reception of the correct signature in the appropriate sub-index the CANopen device stores the parameter and then it confirms the SDO transmission (SDO download initiate response). If the storing failed, the CANopen device responds with the SDO abort transfer service (abort code: 0606 0000h).
If a wrong signature is written, the CANopen device refuses to store and it responds with the SDO abort transfer service (abort code: 0800 002xh).
On read access to the appropriate sub-index the CANopen device provides information about its storage functionality with the following format:

Storage read access structure

Structure of read access:

Bit | Value | Description
auto | 0b 1b | CANopen device does not save parameters autonomously CANopen device saves parameters autonomously
cmd | 0b 1b | CANopen device does not save parameters on command CANopen device saves parameters on command
Autonomous saving means that a CANopen device stores the storable parameters in a nonvolatile manner without user request.


1010.01h Store parameters - save all parameters

Name | COP_StoreParameters_All
Designation | Store parameters - save all parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_All()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_Communication, COP_StoreParameters_Application, COP_StoreParameters_Manufacturer_0x2000, COP_StoreParameters_Manufacturer_0x3000

Description

This object controls the saving of all parameters in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x01,0x65766173,timeout=21000)   # save all parameters


1010.02h Store parameters - save communication parameters

Name | COP_StoreParameters_Communication
Designation | Store parameters - save communication parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_Comm()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Application, COP_StoreParameters_Manufacturer_0x2000, COP_StoreParameters_Manufacturer_0x3000

Description

This object controls the saving of communication related parameters (index from 1000h to 1FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x02,0x65766173,timeout=21000)   # save parameters


1010.03h Store parameters - save application parameters

Name | COP_StoreParameters_Application
Designation | Store parameters - save application parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_App()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Communication, COP_StoreParameters_Manufacturer_0x2000, COP_StoreParameters_Manufacturer_0x3000

Description

This object controls the saving of application related parameters (index from 6000h to 9FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x03,0x65766173,timeout=21000)   # save parameters


1010.05h Store parameters - save manufacturer defined parameters (range 0x2000-0x2FFF)

Name | COP_StoreParameters_Manufacturer_0x2000
Designation | Store parameters - save manufacturer defined parameters (range 0x2000-0x2FFF)
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_2000()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Communication, COP_StoreParameters_Application, COP_StoreParameters_Manufacturer_0x3000

Description

This object controls the saving of manufacturer defined parameters (index from 2000h to 2FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x05,0x65766173,timeout=21000)   # save parameters


1010.06h Store parameters - save manufacturer defined parameters (range 0x3000-0x3FFF)

Name | COP_StoreParameters_Manufacturer_0x3000
Designation | Store parameters - save manufacturer defined parameters (range 0x3000-0x3FFF)
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_3000()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Communication, COP_StoreParameters_Application, COP_StoreParameters_Manufacturer_0x2000

Description

This object controls the saving of manufacturer defined parameters (index from 3000h to 3FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x06,0x65766173,timeout=21000)   # save parameters


Content - Parameters 1000h (DS301) - Restore default parameters

1011.00h | COP_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
1011.01h | COP_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
1011.02h | COP_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
1011.03h | COP_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
1011.05h | COP_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
1011.06h | COP_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)


1011.00h Restore default parameters - highest sub-index supported

Name | COP_RestoreDefaultParameters_HighestSubindexSupported
Designation | Restore default parameters - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 06h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, COP_RestoreDefaultParameters_Manufacturer_0x2000, COP_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of parameters according to the communication profile, device profile, and application profile are restored.

By read access the CANopen device provides information about its capabilities to restore these values.
Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index 01h refers to all parameters that may be restored.
  • Sub-index 02h refers to communication related parameters (Index from 1000h to 1FFFh).
  • Sub-index 03h refers to application related parameters (Index from 6000h to 9FFFh).
  • Sub-index 05h refers to manufacturer defined parameters (index from 2000h to 2FFFh).
  • Sub-index 06h refers to manufacturer defined parameters (index from 3000h to 3FFFh).
In order to avoid the restoring of default parameters by mistake, restoring is only executed when a specific signature is written to the appropriate sub-index.
The signature that shall be written is "load":

Restore default write access signature

On reception of the correct signature in the appropriate sub-index the CANopen device restores the default parameters and then it confirms the SDO transmission (SDO download initiate response). If the restoring failed, the CANopen device responds with the SDO abort transfer service (abort code: 0606 0000h). If a wrong signature is written, the CANopen device refuses to restore the defaults and responds with the SDO abort transfer service (abort code: 0800 002xh).

The default values are set valid after the CANopen device is reset (NMT service reset node for sub-index from 01h, 03h, 05h, 06h, NMT service reset communication for sub-index 02h) or power cycled.

On read access to the appropriate sub-index the CANopen device provides information about its default parameter restoring capability with the following format:

Restore default read access structure

Structure of restore read access:

Bit | Value | Description
cmd | 0b 1b | CANopen device does not restore default parameters CANopen device restores parameters


1011.01h Restore default parameters - restore all default parameters

Name | COP_RestoreDefaultParameters_All
Designation | Restore default parameters - restore all default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_All()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, COP_RestoreDefaultParameters_Manufacturer_0x2000, COP_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of all parameters are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x01,0x64616F6C)                 # load all default parameter


1011.02h Restore default parameters - restore communication default parameters

Name | COP_RestoreDefaultParameters_Communication
Designation | Restore default parameters - restore communication default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_Comm()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Application, COP_RestoreDefaultParameters_Manufacturer_0x2000, COP_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of communication related parameters (Index from 1000h to 1FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x02,0x64616F6C)                 # load default parameter


1011.03h Restore default parameters - restore application default parameters

Name | COP_RestoreDefaultParameters_Application
Designation | Restore default parameters - restore application default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_App()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Manufacturer_0x2000, COP_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of application related parameters (Index from 6000h to 9FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x03,0x64616F6C)                 # load default parameter


1011.05h Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)

Name | COP_RestoreDefaultParameters_Manufacturer_0x2000
Designation | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_2000()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, COP_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of manufacturer defined parameters (Index from 2000h to 2FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x05,0x64616F6C)                 # load default parameter


1011.06h Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)

Name | COP_RestoreDefaultParameters_Manufacturer_0x3000
Designation | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_3000()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, COP_RestoreDefaultParameters_Manufacturer_0x2000

Description

With this object the default values of manufacturer defined parameters (Index from 3000h to 3FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x06,0x64616F6C)                 # load default parameter


1012.00h COB-ID time stamp message

Name | COP_CobId_TimeStampMessage
Designation | COB-ID time stamp message
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 100h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | TimeStampCobId(cob_id)
Cross reference | -

Description

This object indicates the configured COB-ID of the Time-Stamp Object (TIME). Further, it defines whether the CANopen device consumes the TIME or whether the CANopen device generates the TIME. The structure of this object is specified below.

Value definition:

Structure of TIME COB-ID

Description of TIME COB-ID:
Bit(s) | Value | Description
consume | 0b 1b | CANopen device does not consume TIME message CANopen device consumes TIME message
produce | 0b | Bit is not changeable. CANopen device does not produce TIME message
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame
Bit 30 (produce) is static (not changeable). The device is not able to generate TIME messages, an attempt to set bit 30 (produce) to 1b is responded with the SDO abort transfer service (abort code: 0609 0030h). The bits 0 to 29 can not be changed, while the object exists (bit 31 = 1b).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "COB-ID:", hex(d.SdoRd(0x1012,0x00))      # actual value

new_cob_id = 0x101

d.SdoWr(0x1012,0x00,new_cob_id & ~0xC0000000)   # TimeStamp - disable
d.SdoWr(0x1012,0x00,new_cob_id)                 # set new cob id


1014.00h COB-ID emergency message

Name | COP_CobId_EmergencyMessage
Designation | COB-ID emergency message
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000080h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | EmcyCobId(cob_id)
Cross reference | -

Description

This object indicates the configured COB-ID for the EMCY write service.

Value definition:

Structure of the EMCY Identifier

Description of EMCY COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | EMCY exists / is valid EMCY does not exist / is not valid
30 | 0b | reserved (always 0b)
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame
The bits 0 to 29 can not be changed, while the object exists and is valid (bit 31 = 0b).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Emcy COB-ID:", hex(d.SdoRd(0x1014,0x00)) # actual value

new_cob_id = 0x82

d.SdoWr(0x1014,0x00,new_cob_id |  0x80000000)   # Emergency message - disable
d.SdoWr(0x1014,0x00,new_cob_id & ~0x80000000)   # new cob id for emergency message


Content - Parameters 1000h (DS301) - Heartbeat

1016.00h | COP_ConsumerHeartbeatTime_HighestSubindexSupported | Consumer heartbeat time - Highest sub-index supported
1016.01h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1 | Consumer 1 heartbeat time - Consumer heartbeat time
1016.02h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime2 | Consumer 2 heartbeat time - Consumer heartbeat time
1016.03h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime3 | Consumer 3 heartbeat time - Consumer heartbeat time
1016.04h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime4 | Consumer 4 heartbeat time - Consumer heartbeat time
1017.00h | COP_ProducerHeartbeatTime | Producer heartbeat time


1016.00h Consumer heartbeat time - Highest sub-index supported

Name | COP_ConsumerHeartbeatTime_HighestSubindexSupported
Designation | Consumer heartbeat time - Highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [00h .. 7Fh]
Default value | 04h
Unit | -
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | -
Cross reference | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1

Description

The consumer heartbeat time provides the expected heartbeat cycle times. They are higher than the corresponding producer heartbeat times configured on the CANopen device producing this heartbeat. Monitoring starts after the reception of the first heartbeat.

Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index from 01h to 04h refers to particular heartbeat cycle times.

Structure of Consumer heartbeat time

If the heartbeat time is 0 or the node-ID is 0 or greater than 127 the corresponding object entry is not used. The heartbeat time has to be given in multiples of 1ms.

An attempt to configure several heartbeat times unequal 0 for the same node-ID the CANopen device responds with the SDO abort transfer service (abort code: 0604 0043h).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

nr       = 1
node_id  = 127
time_ms  = 1000

# read actual value
value = d.SdoRd(0x1016,nr)
print "Consumer heartbeat - time[ms]:", (value & 0xFFFF)
print "Consumer heartbeat - node id :", (value >> 16) & 0xFF

# set new heartbeat time
d.SdoWr(0x1016,nr, ((node_id & 0xFF) << 16) | (time_ms & 0xFFFF))


1016.01h Consumer 1 heartbeat time - Consumer heartbeat time

Name | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1
Designation | Consumer 1 heartbeat time - Consumer heartbeat time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [ms]
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | ConsumerHeartbeat(1, node_id, time_ms), DisableConsumerHeartbeat(1)
Cross reference | COP_ConsumerHeartbeatTime_HighestSubindexSupported

Description

Structure of Consumer heartbeat time

If the heartbeat time is 0 or the node-ID is 0 or greater than 127 the corresponding object entry is not used. The heartbeat time has to be given in multiples of 1ms.

An attempt to configure several heartbeat time unequal 0 for the same node-ID the CANopen device responds with the SDO abort transfer service (abort code: 0604 0043h).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

nr       = 1
node_id  = 127
time_ms  = 1000

# read actual value
value = d.SdoRd(0x1016,nr)
print "Consumer heartbeat - time[ms]:", (value & 0xFFFF)
print "Consumer heartbeat - node id :", (value >> 16) & 0xFF

# set new heartbeat time
d.SdoWr(0x1016,nr, ((node_id & 0xFF) << 16) | (time_ms & 0xFFFF))


1016.02h Consumer 2 heartbeat time - Consumer heartbeat time

Name | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime2
Designation | Consumer 2 heartbeat time - Consumer heartbeat time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [ms]
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | ConsumerHeartbeat(1, node_id, time_ms), DisableConsumerHeartbeat(1)
Cross reference | COP_ConsumerHeartbeatTime_HighestSubindexSupported

Description

Structure of Consumer heartbeat time

If the heartbeat time is 0 or the node-ID is 0 or greater than 127 the corresponding object entry is not used. The heartbeat time has to be given in multiples of 1ms.

An attempt to configure several heartbeat time unequal 0 for the same node-ID the CANopen device responds with the SDO abort transfer service (abort code: 0604 0043h).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

nr       = 1
node_id  = 127
time_ms  = 1000

# read actual value
value = d.SdoRd(0x1016,nr)
print "Consumer heartbeat - time[ms]:", (value & 0xFFFF)
print "Consumer heartbeat - node id :", (value >> 16) & 0xFF

# set new heartbeat time
d.SdoWr(0x1016,nr, ((node_id & 0xFF) << 16) | (time_ms & 0xFFFF))


1016.03h Consumer 3 heartbeat time - Consumer heartbeat time

Name | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime3
Designation | Consumer 3 heartbeat time - Consumer heartbeat time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [ms]
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | ConsumerHeartbeat(1, node_id, time_ms), DisableConsumerHeartbeat(1)
Cross reference | COP_ConsumerHeartbeatTime_HighestSubindexSupported

Description

Structure of Consumer heartbeat time

If the heartbeat time is 0 or the node-ID is 0 or greater than 127 the corresponding object entry is not used. The heartbeat time has to be given in multiples of 1ms.

An attempt to configure several heartbeat time unequal 0 for the same node-ID the CANopen device responds with the SDO abort transfer service (abort code: 0604 0043h).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

nr       = 1
node_id  = 127
time_ms  = 1000

# read actual value
value = d.SdoRd(0x1016,nr)
print "Consumer heartbeat - time[ms]:", (value & 0xFFFF)
print "Consumer heartbeat - node id :", (value >> 16) & 0xFF

# set new heartbeat time
d.SdoWr(0x1016,nr, ((node_id & 0xFF) << 16) | (time_ms & 0xFFFF))


1016.04h Consumer 4 heartbeat time - Consumer heartbeat time

Name | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime4
Designation | Consumer 4 heartbeat time - Consumer heartbeat time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [ms]
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | ConsumerHeartbeat(1, node_id, time_ms), DisableConsumerHeartbeat(1)
Cross reference | COP_ConsumerHeartbeatTime_HighestSubindexSupported

Description

Structure of Consumer heartbeat time

If the heartbeat time is 0 or the node-ID is 0 or greater than 127 the corresponding object entry is not used. The heartbeat time has to be given in multiples of 1ms.

An attempt to configure several heartbeat time unequal 0 for the same node-ID the CANopen device responds with the SDO abort transfer service (abort code: 0604 0043h).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

nr       = 1
node_id  = 127
time_ms  = 1000

# read actual value
value = d.SdoRd(0x1016,nr)
print "Consumer heartbeat - time[ms]:", (value & 0xFFFF)
print "Consumer heartbeat - node id :", (value >> 16) & 0xFF

# set new heartbeat time
d.SdoWr(0x1016,nr, ((node_id & 0xFF) << 16) | (time_ms & 0xFFFF))


1017.00h Producer heartbeat time

Name | COP_ProducerHeartbeatTime
Designation | Producer heartbeat time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.00.A1
Devices | All
PLC Function | ProducerHeartbeatTime(time_ms), DisableProducerHeartbeat()
Cross reference | -

Description

The producer heartbeat time indicates the configured cycle time of the heartbeat.

The value has to be given in multiples of 1 ms. The value 0 disables the producer heartbeat.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

print "ProducerHeartbeatTime =", d.SdoRd(0x1017,0x00)

d.SdoWr(0x1017,0x00,1000)        # set new value


Content - Parameters 1000h (DS301) - Identity object

1018.00h | COP_IdentityObject_HighestSubindexSupported | Identity object - Highest sub-index supported
1018.01h | COP_IdentityObject_VendorID | Identity object - Vendor-ID
1018.02h | COP_IdentityObject_ProductCode | Identity object - Product code
1018.03h | COP_IdentityObject_RevisionNumber | Identity object - Revision number


1018.00h Identity object - Highest sub-index supported

Name | COP_IdentityObject_HighestSubindexSupported
Designation | Identity object - Highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [1 .. 127]
Default value | 3
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_IdentityObject_VendorID, COP_IdentityObject_ProductCode, COP_IdentityObject_RevisionNumber

Description

This object provides general identification information of the CANopen device.

Value definition:
  • Sub-index 01h contains the unique value (assigned by CAN in Automation (CiA))) that is allocated uniquely to each vendor of a CANopen device.
  • Sub-index 02h contains the unique value that identifies a specific type of CANopen devices.
  • Sub-index 03h contains the major revision number and the minor revision number of the revision of the CANopen device (see Figure).
Structure of revision number

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "VendorId       = 0x%04X" % d.SdoRd(0x1018,0x01)
print "ProductCode    = 0x%04X" % d.SdoRd(0x1018,0x02)
print "RevisionNumber = 0x%04X" % d.SdoRd(0x1018,0x03)


1018.01h Identity object - Vendor-ID

Name | COP_IdentityObject_VendorID
Designation | Identity object - Vendor-ID
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Identity_VendorId()
Cross reference | COP_IdentityObject_HighestSubindexSupported, COP_IdentityObject_ProductCode, COP_IdentityObject_RevisionNumber

Description

Sub-index 01h contains the unique value (assigned by CAN in Automation (CiA))) that is allocated uniquely to each vendor of a CANopen device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "VendorId       = 0x%04X" % d.SdoRd(0x1018,0x01)
print "ProductCode    = 0x%04X" % d.SdoRd(0x1018,0x02)
print "RevisionNumber = 0x%04X" % d.SdoRd(0x1018,0x03)


1018.02h Identity object - Product code

Name | COP_IdentityObject_ProductCode
Designation | Identity object - Product code
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Identity_ProductCode()
Cross reference | COP_IdentityObject_HighestSubindexSupported, COP_IdentityObject_VendorID, COP_IdentityObject_RevisionNumber

Description

Sub-index 02h contains the unique value that identifies a specific type of CANopen devices (Device code).

The product code is composed of a 16-bit device code DEV_Code (higher 2 bytes) and a 16-bit device subcode DEV_SubCode (lower 2 bytes).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "VendorId       = 0x%04X" % d.SdoRd(0x1018,0x01)
print "ProductCode    = 0x%04X" % d.SdoRd(0x1018,0x02)
print "RevisionNumber = 0x%04X" % d.SdoRd(0x1018,0x03)


1018.03h Identity object - Revision number

Name | COP_IdentityObject_RevisionNumber
Designation | Identity object - Revision number
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Identity_RevisionNumber()
Cross reference | COP_IdentityObject_HighestSubindexSupported, COP_IdentityObject_VendorID, COP_IdentityObject_ProductCode

Description

Sub-index 03h contains the major revision number and the minor revision number of the revision of the CANopen device.

The revision number is composed of a 16-bit software version DEV_VersionSw 3023.00h (higher 2 bytes) and a 16-bit software subversion DEV_SubVersionSw 3023.01h (lower 2 bytes) of device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "VendorId       = 0x%04X" % d.SdoRd(0x1018,0x01)
print "ProductCode    = 0x%04X" % d.SdoRd(0x1018,0x02)
print "RevisionNumber = 0x%04X" % d.SdoRd(0x1018,0x03)


1029.00h Error behavior - Highest sub-index supported

Name | COP_ErrorBehavior_HighestSubindexSupported
Designation | Error behavior - Highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. FEh]
Default value | 01h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_ErrorBehavior_CommunicationError

Description

If a serious CANopen device failure is detected in NMT state Operational, the CANopen device enters by default autonomously the NMT state Pre-operational. The CANopen device is configurable to enter alternatively the NMT state Stopped or remain in the current NMT state. CANopen device failures includes the following communication errors:
  • Bus-off conditions of the CAN interface
  • Life guarding event with the state ‘occurred’
  • Heartbeat event with state ‘occurred’
Severe CANopen device errors also may be caused by CANopen device internal failures.

Error class values:
Value | Description
00h | Change to NMT state Pre-operational (only if currently in NMT state Operational)
01h | No change of the NMT state
02h | Change to NMT state Stopped

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Error behaviour", d.SdoRd(0x1029,0x01)   # actual value of error behavior

d.SdoWr(0x1029,0x01,0x01)                       # No change of the NMT state


1029.01h Error behavior - Communication error

Name | COP_ErrorBehavior_CommunicationError
Designation | Error behavior - Communication error
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ErrorBehaviour(1,value), ErrorBehaviour(1)
Cross reference | COP_ErrorBehavior_HighestSubindexSupported

Description

Sub-index 01h defines reaction on a communication error.

See also parameter COP_ErrorBehavior_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Error behaviour", d.SdoRd(0x1029,0x01)   # actual value of error behavior

d.SdoWr(0x1029,0x01,0x01)                       # No change of the NMT state


Content - Parameters 1000h (DS301) - SDO server parameter

1200.00h | COP_SDO_ServerParameter_HighestSubindexSupported | SDO server parameter - Highest sub-index supported
1200.01h | COP_SDO_ServerParameter_CobIdClientServer_Rx | SDO server parameter - COB-ID client -> server (rx)
1200.02h | COP_SDO_ServerParameter_CobIdServerClient_Tx | SDO server parameter - COB-ID server -> client (tx)


1200.00h SDO server parameter - Highest sub-index supported

Name | COP_SDO_ServerParameter_HighestSubindexSupported
Designation | SDO server parameter - Highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 02h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_SDO_ServerParameter_CobIdClientServer_Rx, COP_SDO_ServerParameter_CobIdServerClient_Tx

Description

The number of supported object entries in the SDO object record is specified at sub-index 00h. The values at sub-index 01h and sub-index 02h specify the COB-ID for this SDO.

Structure of SDO server COB-ID

Description of SDO server COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | SDO exists / is valid SDO does not exist / is not valid
dyn | 0b | Value is assigned statically
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

An SDO exists only if at both sub-index 02h and sub-index 03h the bit valid (bit 31) is set to 0b. It is not allowed to change bits 0 to 29 while the object exists and is valid (bit 31 = 0b).

The device supports 4 SDOs:
  • SDO 1 - Index 1200h
  • SDO 2 - Index 1201h
  • SDO 3 - Index 1202h
  • SDO 4 - Index 1203h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "SDO COB-ID (rx):", hex(d.SdoRd(0x1200,0x01))
print "SDO COB-ID (tx):", hex(d.SdoRd(0x1200,0x02))


1200.01h SDO server parameter - COB-ID client -> server (rx)

Name | COP_SDO_ServerParameter_CobIdClientServer_Rx
Designation | SDO server parameter - COB-ID client -> server (rx)
Data type | uint32
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ServerSdoParam_c2s_CobId()
Cross reference | COP_SDO_ServerParameter_HighestSubindexSupported, COP_SDO_ServerParameter_CobIdServerClient_Tx

Description

The value at sub-index 01h specifies the COB-ID Client to Server (rx) for this SDO.

Default values of COB-ID:
  • SDO 1 - 600h + Node-ID
  • SDO 2 - 20000600h + Node-ID
  • SDO 3 - disable
  • SDO 4 - disable

See also parameter COP_SDO_ServerParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "SDO COB-ID (rx):", hex(d.SdoRd(0x1200,0x01))
print "SDO COB-ID (tx):", hex(d.SdoRd(0x1200,0x02))


1200.02h SDO server parameter - COB-ID server -> client (tx)

Name | COP_SDO_ServerParameter_CobIdServerClient_Tx
Designation | SDO server parameter - COB-ID server -> client (tx)
Data type | uint32
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ServerSdoParam_s2c_CobId()
Cross reference | COP_SDO_ServerParameter_HighestSubindexSupported, COP_SDO_ServerParameter_CobIdClientServer_Rx

Description

The value at sub-index 02h specifies the COB-ID Server to Client (tx) for this SDO.

Default values of COB-ID:
  • SDO 1 - 580h + Node-ID
  • SDO 2 - 20000580h + Node-ID
  • SDO 3 - disable
  • SDO 4 - disable

See also parameter COP_SDO_ServerParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "SDO COB-ID (rx):", hex(d.SdoRd(0x1200,0x01))
print "SDO COB-ID (tx):", hex(d.SdoRd(0x1200,0x02))


Content - Parameters 1000h (DS301) - RxPDO-1 communication parameter

1400.00h | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported | RxPDO1 communication parameter - highest sub-index supported
1400.01h | COP_RxPDO1_CommunicationParameter_CobId | RxPDO1 communication parameter - COB-ID used by RxPDO 1
1400.02h | COP_RxPDO1_CommunicationParameter_TransmissionType | RxPDO1 communication parameter - transmission type
1400.03h | COP_RxPDO1_CommunicationParameter_InhibitTime | RxPDO1 communication parameter - inhibit time


1400.00h RxPDO1 communication parameter - highest sub-index supported

Name | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO1 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_CommunicationParameter_CobId, COP_RxPDO1_CommunicationParameter_TransmissionType, COP_RxPDO1_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports only 1 PDO:
  • PDO 1 - Index 1400h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1400.01h RxPDO1 communication parameter - COB-ID used by RxPDO 1

Name | COP_RxPDO1_CommunicationParameter_CobId
Designation | RxPDO1 communication parameter - COB-ID used by RxPDO 1
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 40000200h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported, COP_RxPDO1_CommunicationParameter_TransmissionType, COP_RxPDO1_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1400.02h RxPDO1 communication parameter - transmission type

Name | COP_RxPDO1_CommunicationParameter_TransmissionType
Designation | RxPDO1 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported, COP_RxPDO1_CommunicationParameter_CobId, COP_RxPDO1_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1400.03h RxPDO1 communication parameter - inhibit time

Name | COP_RxPDO1_CommunicationParameter_InhibitTime
Designation | RxPDO1 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported, COP_RxPDO1_CommunicationParameter_CobId, COP_RxPDO1_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-1 mapping

1600.00h | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects | RxPDO1 mapping - number of mapped application objects in RxPDO 1
1600.01h | COP_RxPDO1_Mapping_1ApplicationObject | RxPDO1 mapping - 1st application object
1600.02h | COP_RxPDO1_Mapping_2ApplicationObject | RxPDO1 mapping - 2nd application object
1600.03h | COP_RxPDO1_Mapping_3ApplicationObject | RxPDO1 mapping - 3rd application object
1600.04h | COP_RxPDO1_Mapping_4ApplicationObject | RxPDO1 mapping - 4th application object
1600.05h | COP_RxPDO1_Mapping_5ApplicationObject | RxPDO1 mapping - 5th application object
1600.06h | COP_RxPDO1_Mapping_6ApplicationObject | RxPDO1 mapping - 6th application object
1600.07h | COP_RxPDO1_Mapping_7ApplicationObject | RxPDO1 mapping - 7th application object
1600.08h | COP_RxPDO1_Mapping_8ApplicationObject | RxPDO1 mapping - 8th application object


1600.00h RxPDO1 mapping - number of mapped application objects in RxPDO 1

Name | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO1 mapping - number of mapped application objects in RxPDO 1
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO1_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports only 1 PDO:
  • PDO 1 - Index 1600h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.01h RxPDO1 mapping - 1st application object

Name | COP_RxPDO1_Mapping_1ApplicationObject
Designation | RxPDO1 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.02h RxPDO1 mapping - 2nd application object

Name | COP_RxPDO1_Mapping_2ApplicationObject
Designation | RxPDO1 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.03h RxPDO1 mapping - 3rd application object

Name | COP_RxPDO1_Mapping_3ApplicationObject
Designation | RxPDO1 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.04h RxPDO1 mapping - 4th application object

Name | COP_RxPDO1_Mapping_4ApplicationObject
Designation | RxPDO1 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.05h RxPDO1 mapping - 5th application object

Name | COP_RxPDO1_Mapping_5ApplicationObject
Designation | RxPDO1 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.06h RxPDO1 mapping - 6th application object

Name | COP_RxPDO1_Mapping_6ApplicationObject
Designation | RxPDO1 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.07h RxPDO1 mapping - 7th application object

Name | COP_RxPDO1_Mapping_7ApplicationObject
Designation | RxPDO1 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.08h RxPDO1 mapping - 8th application object

Name | COP_RxPDO1_Mapping_8ApplicationObject
Designation | RxPDO1 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-1 communication parameter

1800.00h | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported | TxPDO1 communication parameter - highest sub-index supported
1800.01h | COP_TxPDO1_CommunicationParameter_CobId | TxPDO1 communication parameter - COB-ID used by TxPDO
1800.02h | COP_TxPDO1_CommunicationParameter_TransmissionType | TxPDO1 communication parameter - transmission type
1800.03h | COP_TxPDO1_CommunicationParameter_InhibitTime | TxPDO1 communication parameter - inhibit time


1800.00h TxPDO1 communication parameter - highest sub-index supported

Name | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO1 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO1_CommunicationParameter_CobId, COP_TxPDO1_CommunicationParameter_TransmissionType, COP_TxPDO1_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:

Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports only 1 PDO:
  • PDO 1 - Index 1800h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1800.01h TxPDO1 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO1_CommunicationParameter_CobId
Designation | TxPDO1 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 180h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported, COP_TxPDO1_CommunicationParameter_TransmissionType, COP_TxPDO1_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1800.02h TxPDO1 communication parameter - transmission type

Name | COP_TxPDO1_CommunicationParameter_TransmissionType
Designation | TxPDO1 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported, COP_TxPDO1_CommunicationParameter_CobId, COP_TxPDO1_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1800.03h TxPDO1 communication parameter - inhibit time

Name | COP_TxPDO1_CommunicationParameter_InhibitTime
Designation | TxPDO1 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported, COP_TxPDO1_CommunicationParameter_CobId, COP_TxPDO1_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-1 mapping

1A00.00h | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects | TxPDO1 mapping - number of mapped application objects in TxPDO 1
1A00.01h | COP_TxPDO1_Mapping_1ApplicationObject | TxPDO1 mapping - 1st application object
1A00.02h | COP_TxPDO1_Mapping_2ApplicationObject | TxPDO1 mapping - 2nd application object
1A00.03h | COP_TxPDO1_Mapping_3ApplicationObject | TxPDO1 mapping - 3rd application object
1A00.04h | COP_TxPDO1_Mapping_4ApplicationObject | TxPDO1 mapping - 4th application object
1A00.05h | COP_TxPDO1_Mapping_5ApplicationObject | TxPDO1 mapping - 5th application object
1A00.06h | COP_TxPDO1_Mapping_6ApplicationObject | TxPDO1 mapping - 6th application object
1A00.07h | COP_TxPDO1_Mapping_7ApplicationObject | TxPDO1 mapping - 7th application object
1A00.08h | COP_TxPDO1_Mapping_8ApplicationObject | TxPDO1 mapping - 8th application object


1A00.00h TxPDO1 mapping - number of mapped application objects in TxPDO 1

Name | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO1 mapping - number of mapped application objects in TxPDO 1
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports only 1 PDO:
  • PDO 1 - Index 1A00h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.01h TxPDO1 mapping - 1st application object

Name | COP_TxPDO1_Mapping_1ApplicationObject
Designation | TxPDO1 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.02h TxPDO1 mapping - 2nd application object

Name | COP_TxPDO1_Mapping_2ApplicationObject
Designation | TxPDO1 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.03h TxPDO1 mapping - 3rd application object

Name | COP_TxPDO1_Mapping_3ApplicationObject
Designation | TxPDO1 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.04h TxPDO1 mapping - 4th application object

Name | COP_TxPDO1_Mapping_4ApplicationObject
Designation | TxPDO1 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.05h TxPDO1 mapping - 5th application object

Name | COP_TxPDO1_Mapping_5ApplicationObject
Designation | TxPDO1 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.06h TxPDO1 mapping - 6th application object

Name | COP_TxPDO1_Mapping_6ApplicationObject
Designation | TxPDO1 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.07h TxPDO1 mapping - 7th application object

Name | COP_TxPDO1_Mapping_7ApplicationObject
Designation | TxPDO1 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.08h TxPDO1 mapping - 8th application object

Name | COP_TxPDO1_Mapping_8ApplicationObject
Designation | TxPDO1 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 2000h

2000.00h | DS2000_CopConfigParam_HighestSubindexSupported | CANopen configuration - highest sub-index supported
2000.01h | DS2000_CopConfigParam_WriteEnable | CANopen configuration - write enable
2000.02h | DS2000_CopConfigParam_UserNodeId | CANopen configuration - user node id
2000.03h | DS2000_CopConfigParam_UserBaudrate | CANopen configuration - user baud rate
2000.04h | DS2000_CopConfigParam_AutoOperational | CANopen configuration - auto operational
2000.05h | DS2000_CopConfigParam_MessageOnBootup | CANopen configuration - message on bootup
2009.00h | DS2000_CpuCommand_HighestSubindexSupported | CPU command - highest sub-index supported
2009.01h | DS2000_CpuCommand_WriteEnable | CPU command - write enable
2009.02h | DS2000_CpuCommand_Command | CPU command - command
2009.03h | DS2000_CpuCommand_DelayTime | CPU command - delay time
2011.00h | DS2000_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
2011.01h | DS2000_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
2011.02h | DS2000_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
2011.03h | DS2000_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
2011.05h | DS2000_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
2011.06h | DS2000_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
2021.00h | DS2000_SyncProducer_HighestSubindexSupported | Sync Producer - highest sub-index supported
2021.01h | DS2000_SyncProducer_Enable | Sync Producer - Enable


Content - Parameters 2000h - CANopen configuration

2000.00h | DS2000_CopConfigParam_HighestSubindexSupported | CANopen configuration - highest sub-index supported
2000.01h | DS2000_CopConfigParam_WriteEnable | CANopen configuration - write enable
2000.02h | DS2000_CopConfigParam_UserNodeId | CANopen configuration - user node id
2000.03h | DS2000_CopConfigParam_UserBaudrate | CANopen configuration - user baud rate
2000.04h | DS2000_CopConfigParam_AutoOperational | CANopen configuration - auto operational
2000.05h | DS2000_CopConfigParam_MessageOnBootup | CANopen configuration - message on bootup


2000.00h CANopen configuration - highest sub-index supported

Name | DS2000_CopConfigParam_HighestSubindexSupported
Designation | CANopen configuration - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | -
Default value | 7
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CopConfigParam_WriteEnable, DS2000_CopConfigParam_UserNodeId, DS2000_CopConfigParam_UserBaudrate, DS2000_CopConfigParam_AutoOperational, DS2000_CopConfigParam_MessageOnBootup,

Description

The object contains the CANopen configuration parameters.

Function of the subindexes:
  • Sub-index 00h - contains the number of supporting subindexes.
  • Sub-index 01h - sets the write enable
  • Sub-index 02h - contains the user node id
  • Sub-index 03h - contains the user baud rate of CAN bus
  • Sub-index 04h - contains the time for Auto-Operational
  • Sub-index 05h - contains the configuration of message on bootup
  • Sub-index 06h - contains the PIN number
  • Sub-index 07h - contains the PROFIBUS slave number


2000.01h CANopen configuration - write enable

Name | DS2000_CopConfigParam_WriteEnable
Designation | CANopen configuration - write enable
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CopConfigParam_HighestSubindexSupported

Description

The parameter sets the write enable for all subindexes of the object with index 2000h.

In order to avoid storage of parameters with index 2000h by mistake, storage is only executed when a specific signature is written to this sub-index. To enable the write access, you must set the parameter to 0x6E657277 (the ASCII characters for "WREN"). All others values disable the write access.

The information whether the write enable is active, is returned when the parameter is read.

Parameter values when reading:
Value | Meaning
0 | only read access
1 | read and write access


2000.02h CANopen configuration - user node id

Name | DS2000_CopConfigParam_UserNodeId
Designation | CANopen configuration - user node id
Data type | int16
Access | read / write
Attributs | Save on write; Password protected; Active first after reset
Value range | [-2 .. 127] excluded {0}
Default value | -1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | UserNodeId(node_id)
Cross reference | DS2000_CopConfigParam_WriteEnable

Description

The parameter defines the node id of the device.

Parameter values:
Value | Meaning
-2 | The node id is defined by the appropriate inputs (only module variants of controller). 8 pins are required.
-1 | Default node id. Device with Hex-Switches - the node id is defined by Hex-Switches. Device without Hex-Switches - the node id is always 127.
1 ... 127 | Software node id. The value of this parameter is taken as the node id.
Important !!!
The value of the parameter will take effect after you reboot the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # current NodeId

new_node_id = 25                                # new NodeId

d.SdoWr(0x2000, 0x01, 0x6E657277)               # write enable
d.SdoWr(0x2000, 0x02, new_node_id, timeout=500) # set new NodeId

print "The new NodeId is applied after restarting the device."


2000.03h CANopen configuration - user baud rate

Name | DS2000_CopConfigParam_UserBaudrate
Designation | CANopen configuration - user baud rate
Data type | int16
Access | read / write
Attributs | Save on write; Password protected; Active first after reset
Value range | [-1 .. 8]
Default value | -1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | UserBaudrate(baudrate_kbaud)
Cross reference | DS2000_CopConfigParam_WriteEnable

Description

The parameter defines the baud rate of the device.

Parameter values:
Value | Meaning
-1 | default baud rate - 125 kbit/s
0 | baud rate 1 Mbit/s
1 | baud rate 800 kbit/s
2 | baud rate 500 kbit/s
3 | baud rate 250 kbit/s
4 | baud rate 125 kbit/s
5 | baud rate 100 kbit/s
6 | baud rate 50 kbit/s
7 | baud rate 20 kbit/s
8 | baud rate 10 kbit/s
Important !!!
The value of the parameter will take effect after you reboot the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x2000, 0x01, 0x6E657277)         # write enable
d.SdoWr(0x2000, 0x03, 3, timeout=500)     # set baud rate 250kbit/s

print "The new baud rate is applied after restarting the device."


2000.04h CANopen configuration - auto operational

Name | DS2000_CopConfigParam_AutoOperational
Designation | CANopen configuration - auto operational
Data type | uint16
Access | read / write
Attributs | Save on write; Password protected; Active first after reset
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AutoOperational(delay_ms)
Cross reference | DS2000_CopConfigParam_WriteEnable

Description

The parameter defines the time after switching on, after which the device is switched to the NMT state Operational. The value of 0 disables the function.

Important !!!
The value of the parameter will take effect after you reboot the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x2000, 0x01, 0x6E657277)         # write enable
d.SdoWr(0x2000, 0x04, 200, timeout=500)   # AutoOperational after 200 ms

print "The value of parameter is applied after restarting the device."


2000.05h CANopen configuration - message on bootup

Name | DS2000_CopConfigParam_MessageOnBootup
Designation | CANopen configuration - message on bootup
Data type | uint8
Access | read / write
Attributs | Save on write; Password protected
Value range | [0 .. 3]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MsgOnBootup(bit_mask)
Cross reference | DS2000_CopConfigParam_WriteEnable

Description

This parameter defines which messages the device sends on bootup.

Bit assignment:
Bit | Meaning
0 | The device sends guarding message (GUARD) on bootup
1 | The device sends emergency message (EMCY) on bootup
Important !!!
The value of the parameter will take effect after you reboot the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x2000, 0x01, 0x6E657277)         # write enable
d.SdoWr(0x2000, 0x05, 1, timeout=500)     # set only Guarding message on Bootup

print "The value of parameter is applied after restarting the device."


Content - Parameters 2000h - CPU command

2009.00h | DS2000_CpuCommand_HighestSubindexSupported | CPU command - highest sub-index supported
2009.01h | DS2000_CpuCommand_WriteEnable | CPU command - write enable
2009.02h | DS2000_CpuCommand_Command | CPU command - command
2009.03h | DS2000_CpuCommand_DelayTime | CPU command - delay time


2009.00h CPU command - highest sub-index supported

Name | DS2000_CpuCommand_HighestSubindexSupported
Designation | CPU command - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | -
Default value | 3
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The object contains the CPU command parameters.

Function of the subindexes:
  • Sub-index 00h - contains the number of supporting subindexes.
  • Sub-index 01h - sets the write enable
  • Sub-index 02h - executes a CPU command
  • Sub-index 03h - contains the delay time of the CPU command


2009.01h CPU command - write enable

Name | DS2000_CpuCommand_WriteEnable
Designation | CPU command - write enable
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CpuCommand_HighestSubindexSupported

Description

The parameter sets the write enable for all subindexes of the object with index 2009h.

In order to avoid storage of parameters with index 2009h by mistake, storage is only executed when a specific signature is written to this sub-index. To enable the write access, you must set the parameter to 0x6E657277 (the ASCII characters for "WREN"). All others values disable the write access.

The information whether the write enable is active, is returned when the parameter is read.

Parameter values when reading:
Value | Meaning
0 | only read access
1 | read and write access


2009.02h CPU command - command

Name | DS2000_CpuCommand_Command
Designation | CPU command - command
Data type | uint16
Access | write only
Attributs | Password protected
Value range | {0x9999}
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | CmdCpuReset(delay_ms)
Cross reference | DS2000_CpuCommand_WriteEnable, DS2000_CpuCommand_DelayTime

Description

The parameter defines the CPU commands of the device.

Parameter values:
Value | Meaning
0x9999 | CPU reset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId

d.SdoWr(0x2009, 0x03, 100)                      # delay time of the command in ms
d.SdoWr(0x2009, 0x01, 0x6E657277)               # write enable
try:
   d.SdoWr(0x2009, 0x02, 0x9999, timeout=50)    # CPU reset
except:
   pass


2009.03h CPU command - delay time

Name | DS2000_CpuCommand_DelayTime
Designation | CPU command - delay time
Data type | uint16
Access | read / write
Attributs | -
Value range | {0, 65535}
Default value | 100
Unit | [ms]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CpuCommand_WriteEnable, DS2000_CpuCommand_Command

Description

The parameter defines the delay time of the CPU command.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId

d.SdoWr(0x2009, 0x03, 100)                      # delay time of the command in ms
d.SdoWr(0x2009, 0x01, 0x6E657277)               # write enable
try:
   d.SdoWr(0x2009, 0x02, 0x9999, timeout=50)    # CPU reset
except:
   pass


Content - Parameters 2000h - Restore default parameters

2011.00h | DS2000_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
2011.01h | DS2000_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
2011.02h | DS2000_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
2011.03h | DS2000_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
2011.05h | DS2000_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
2011.06h | DS2000_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)


2011.00h Restore default parameters - highest sub-index supported

Name | DS2000_RestoreDefaultParameters_HighestSubindexSupported
Designation | Restore default parameters - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 06h
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_All, DS2000_RestoreDefaultParameters_Communication, DS2000_RestoreDefaultParameters_Application, DS2000_RestoreDefaultParameters_Manufacturer_0x2000, DS2000_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of parameters according to the communication profile, device profile, and application profile are restored.

Attention: This modification is only temporary. To permanently restore the parameters, execute a store command after restoring factory settings (see COP_StoreParameters_HighestSubindexSupported).

By read access the CANopen device provides information about its capabilities to restore these values.
Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index 01h refers to all parameters that may be restored.
  • Sub-index 02h refers to communication related parameters (Index from 1000h to 1FFFh).
  • Sub-index 03h refers to application related parameters (Index from 6000h to 9FFFh).
  • Sub-index 05h refers to manufacturer defined parameters (index from 2000h to 2FFFh).
  • Sub-index 06h refers to manufacturer defined parameters (index from 3000h to 3FFFh).
In order to avoid the restoring of default parameters by mistake, restoring is only executed when a specific signature is written to the appropriate sub-index.
The signature that shall be written is "LOAD":

Restore default write access signature

On reception of the correct signature in the appropriate sub-index the CANopen device restores the default parameters and then it confirms the SDO transmission (SDO download initiate response). If the restoring failed, the CANopen device responds with the SDO abort transfer service (abort code: 0606 0000h). If a wrong signature is written, the CANopen device refuses to restore the defaults and responds with the SDO abort transfer service (abort code: 0800 002xh).

The default values are set valid without reset of the device.

On read access to the appropriate sub-index the CANopen device provides information about its default parameter restoring capability with the following format:

Restore default read access structure

Structure of restore read access:

Bit | Value | Description
cmd | 0b 1b | CANopen device does not restore default parameters CANopen device restores parameters


2011.01h Restore default parameters - restore all default parameters

Name | DS2000_RestoreDefaultParameters_All
Designation | Restore default parameters - restore all default parameters
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_HighestSubindexSupported, DS2000_RestoreDefaultParameters_Communication, DS2000_RestoreDefaultParameters_Application, DS2000_RestoreDefaultParameters_Manufacturer_0x2000, DS2000_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of all parameters are restored.

See also parameter DS2000_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x2011,0x01,0x64616F6C)                 # load all default parameter


2011.02h Restore default parameters - restore communication default parameters

Name | DS2000_RestoreDefaultParameters_Communication
Designation | Restore default parameters - restore communication default parameters
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_HighestSubindexSupported, DS2000_RestoreDefaultParameters_All, DS2000_RestoreDefaultParameters_Application, DS2000_RestoreDefaultParameters_Manufacturer_0x2000, DS2000_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of communication related parameters (Index from 1000h to 1FFFh) are restored.

See also parameter DS2000_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x2011,0x02,0x64616F6C)                 # load default parameter


2011.03h Restore default parameters - restore application default parameters

Name | DS2000_RestoreDefaultParameters_Application
Designation | Restore default parameters - restore application default parameters
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_HighestSubindexSupported, DS2000_RestoreDefaultParameters_All, DS2000_RestoreDefaultParameters_Communication, DS2000_RestoreDefaultParameters_Manufacturer_0x2000, DS2000_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of application related parameters (Index from 6000h to 9FFFh) are restored.

See also parameter DS2000_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x2011,0x03,0x64616F6C)                 # load default parameter


2011.05h Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)

Name | DS2000_RestoreDefaultParameters_Manufacturer_0x2000
Designation | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_HighestSubindexSupported, DS2000_RestoreDefaultParameters_All, DS2000_RestoreDefaultParameters_Communication, DS2000_RestoreDefaultParameters_Application, DS2000_RestoreDefaultParameters_Manufacturer_0x3000

Description

With this object the default values of manufacturer defined parameters (Index from 2000h to 2FFFh) are restored.

See also parameter DS2000_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x2011,0x05,0x64616F6C)                 # load default parameter


2011.06h Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)

Name | DS2000_RestoreDefaultParameters_Manufacturer_0x3000
Designation | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_RestoreDefaultParameters_HighestSubindexSupported, DS2000_RestoreDefaultParameters_All, DS2000_RestoreDefaultParameters_Communication, DS2000_RestoreDefaultParameters_Application, DS2000_RestoreDefaultParameters_Manufacturer_0x2000

Description

With this object the default values of manufacturer defined parameters (Index from 3000h to 3FFFh) are restored.

See also parameter DS2000_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x2011,0x06,0x64616F6C)                 # load default parameter


Content - Parameters 2000h - Sync Producer

2021.00h | DS2000_SyncProducer_HighestSubindexSupported | Sync Producer - highest sub-index supported
2021.01h | DS2000_SyncProducer_Enable | Sync Producer - Enable


2021.00h Sync Producer - highest sub-index supported

Name | DS2000_SyncProducer_HighestSubindexSupported
Designation | Sync Producer - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | -
Default value | 1
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_SyncProducer_Enable

Description

The parameter contains the highest sub-index that is supported.


2021.01h Sync Producer - Enable

Name | DS2000_SyncProducer_Enable
Designation | Sync Producer - Enable
Data type | int8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.32
Devices | All
PLC Function | -
Cross reference | DS2000_SyncProducer_HighestSubindexSupported, ,

Description

This parameter activates and deactivates the device as SYNC Producer.

Parameter value:
Value | Description
0 | Device works as Consumer and synchronizes the internal clock with SYNC signal of Producer.
1 | Device works as Producer and sends SYNC signals at regular intervals.


Content - Parameters 3000h (DSA)

3000.00h | DEV_Cmd | Device command
3000.01h | DEV_Cmd_ExecOnChange | Device command - execute on change
3000.02h | DEV_Cmd2 | Device command 2
3000.08h | DEV_Cmd_SetError | Device command - set error
3000.10h | DEV_CmdData0 | Device command - data 0
3000.11h | DEV_CmdData1 | Device command - data 1
3000.12h | DEV_CmdData2 | Device command - data 2
3000.20h | DEV_CmdData0_i16 | Device command - data 0 (int16)
3000.21h | DEV_CmdData1_i16 | Device command - data 1 (int16)
3000.22h | DEV_CmdData2_i16 | Device command - data 2 (int16)
3000.70h | DEV_CmdResult | Device command - result
3000.81h | DEV_CmdError | Device command - Error
3000.83h | DEV_CmdCounter | Device command - counter
3001.00h | DEV_ErrorReg | Error register
3002.00h | DEV_Status | Status register
3003.00h | DEV_Mode | Device mode
3004.00h | DEV_Enable | Power enable
3008.00h | DEV_ConfigErrors | Error configuration
3010.11h | DEV_Event_Cmd1OnError | Event command 1 on errors
3010.12h | DEV_Event_Cmd2OnError | Event command 2 on errors
3010.13h | DEV_Event_Cmd3OnError | Event command 3 on errors
3010.14h | DEV_Event_Cmd4OnError | Event command 4 on errors
3010.31h | DEV_Event_Cmd1OnCommError | Event command 1 on communication errors
3010.32h | DEV_Event_Cmd2OnCommError | Event command 2 on communication errors
3010.33h | DEV_Event_Cmd3OnCommError | Event command 3 on communication errors
3010.34h | DEV_Event_Cmd4OnCommError | Event command 4 on communication errors
3012.10h | DEV_Event_CmdOnSpecificError1 | Event commands on specific error 1
3012.11h | DEV_Event_Cmd1OnSpecificError1 | Event command 1 on specific error 1
3012.12h | DEV_Event_Cmd2OnSpecificError1 | Event command 2 on specific error 1
3012.13h | DEV_Event_Cmd3OnSpecificError1 | Event command 3 on specific error 1
3012.14h | DEV_Event_Cmd4OnSpecificError1 | Event command 4 on specific error 1
3012.20h | DEV_Event_CmdOnSpecificError2 | Event commands on specific error 2
3012.21h | DEV_Event_Cmd1OnSpecificError2 | Event command 1 on specific error 2
3012.22h | DEV_Event_Cmd2OnSpecificError2 | Event command 2 on specific error 2
3012.23h | DEV_Event_Cmd3OnSpecificError2 | Event command 3 on specific error 2
3012.24h | DEV_Event_Cmd4OnSpecificError2 | Event command 4 on specific error 2
3012.30h | DEV_Event_CmdOnSpecificError3 | Event commands on specific error 3
3012.31h | DEV_Event_Cmd1OnSpecificError3 | Event command 1 on specific error 3
3012.32h | DEV_Event_Cmd2OnSpecificError3 | Event command 2 on specific error 3
3012.33h | DEV_Event_Cmd3OnSpecificError3 | Event command 3 on specific error 3
3012.34h | DEV_Event_Cmd4OnSpecificError3 | Event command 4 on specific error 3
3012.40h | DEV_Event_CmdOnSpecificError4 | Event commands on specific error 4
3012.41h | DEV_Event_Cmd1OnSpecificError4 | Event command 1 on specific error 4
3012.42h | DEV_Event_Cmd2OnSpecificError4 | Event command 2 on specific error 4
3012.43h | DEV_Event_Cmd3OnSpecificError4 | Event command 3 on specific error 4
3012.44h | DEV_Event_Cmd4OnSpecificError4 | Event command 4 on specific error 4
3014.11h | DEV_Event1_OnUserCmd1 | Command 1 on usercommand 1
3014.12h | DEV_Event2_OnUserCmd1 | Command 2 on usercommand 1
3014.13h | DEV_Event3_OnUserCmd1 | Command 3 on usercommand 1
3014.14h | DEV_Event4_OnUserCmd1 | Command 4 on usercommand 1
3014.21h | DEV_Event1_OnUserCmd2 | Command 1 on usercommand 2
3014.22h | DEV_Event2_OnUserCmd2 | Command 2 on usercommand 2
3014.23h | DEV_Event3_OnUserCmd2 | Command 3 on usercommand 2
3014.24h | DEV_Event4_OnUserCmd2 | Command 4 on usercommand 2
3014.31h | DEV_Event1_OnUserCmd3 | Command 1 on usercommand 3
3014.32h | DEV_Event2_OnUserCmd3 | Command 2 on usercommand 3
3014.33h | DEV_Event3_OnUserCmd3 | Command 3 on usercommand 3
3014.34h | DEV_Event4_OnUserCmd3 | Command 4 on usercommand 3
3014.41h | DEV_Event1_OnUserCmd4 | Command 1 on usercommand 4
3014.42h | DEV_Event2_OnUserCmd4 | Command 2 on usercommand 4
3014.43h | DEV_Event3_OnUserCmd4 | Command 3 on usercommand 4
3014.44h | DEV_Event4_OnUserCmd4 | Command 4 on usercommand 4
3014.51h | DEV_Event1_OnUserCmd5 | Command 1 on usercommand 5
3014.52h | DEV_Event2_OnUserCmd5 | Command 2 on usercommand 5
3014.53h | DEV_Event3_OnUserCmd5 | Command 3 on usercommand 5
3014.54h | DEV_Event4_OnUserCmd5 | Command 4 on usercommand 5
3014.61h | DEV_Event1_OnUserCmd6 | Command 1 on usercommand 6
3014.62h | DEV_Event2_OnUserCmd6 | Command 2 on usercommand 6
3014.63h | DEV_Event3_OnUserCmd6 | Command 3 on usercommand 6
3014.64h | DEV_Event4_OnUserCmd6 | Command 4 on usercommand 6
3014.71h | DEV_Event1_OnUserCmd7 | Command 1 on usercommand 7
3014.72h | DEV_Event2_OnUserCmd7 | Command 2 on usercommand 7
3014.73h | DEV_Event3_OnUserCmd7 | Command 3 on usercommand 7
3014.74h | DEV_Event4_OnUserCmd7 | Command 4 on usercommand 7
3014.81h | DEV_Event1_OnUserCmd8 | Command 1 on usercommand 8
3014.82h | DEV_Event2_OnUserCmd8 | Command 2 on usercommand 8
3014.83h | DEV_Event3_OnUserCmd8 | Command 3 on usercommand 8
3014.84h | DEV_Event4_OnUserCmd8 | Command 4 on usercommand 8
3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number
302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9
302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3
3031.00h | DEV_MaxUp | Max. power voltage
3032.00h | DEV_MaxIm | Max. motor current
3050.00h | DEV_DinEnable | Input assignment - enable
3051.00h | DEV_DinClearError | Input assignment - error quitting
3052.00h | DEV_DinStartStop | Input assignment - start/stop
3053.00h | DEV_DinDir | Input assignment - Change of rotation direction
3055.00h | DEV_DinLimitPos | Input assignment - positive limit switch
3056.00h | DEV_DinLimitNeg | Input assignment - negative limit switch
3057.00h | DEV_DinReference | Input assignment - reference switch
3060.00h | DEV_DoutError | Output assignment - error
3080.00h | DEV_ContinueMode | Continue - mode
3090.00h | DEV_MinUp_Error | Minimum Up - error
3090.04h | DEV_UpOff_Stotterbremse | Up - disable cadence braking
3090.05h | DEV_UpOn_Stotterbremse | Up - enable cadence
3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
310A.00h | IO_AIN0_DeadBand | Analog input 0 - dead band
310A.01h | IO_AIN1_DeadBand | Analog input 1 - dead band
3110.00h | IO_AIN_Voltage_Ue | Electronic voltage - Ue
3111.00h | IO_AIN_Voltage_Up | Power voltage - Up
3112.00h | IO_AIN_Voltage_Um | Motor voltage - Um
3113.00h | IO_AIN_Current_Im | Motor current - Im
3114.00h | IO_AIN_Temperature_Power | Temperature of power amplifier
3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3128.00h | IO_DIN_Hall | Digital inputs - hall sensors
3128.01h | IO_DIN_Enc | Digital inputs - encoder
3150.00h | IO_DOUT_P0 | Digital outputs - Port0
3154.00h | IO_DOUT_Enable | Enable digital outputs
3158.00h | IO_DOUT_LedsEnable | LED - enable user control
3158.01h | IO_DOUT_LedsState | LED - state
3200.00h | CURR_DesiredValue | Current - desired value
3204.00h | CURR_DesiredValue_Source | Source of current desired value
3205.00h | CURR_DesiredValue_Reference | Current reference of analog input
3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator
3221.00h | CURR_LimitMaxPos | Current limit - max. positiv
3223.00h | CURR_LimitMaxNeg | Current limit - max. negativ
3224.00h | CURR_DynLimitMode | Dynamic current limit - mode
3224.01h | CURR_DynLimitPeak | Dynamic current limit - peak current
3224.02h | CURR_DynLimitCont | Dynamic current limit - continues current
3224.03h | CURR_DynLimitTime | Dynamic current limit - time
3224.12h | CURR_ActDynLimitCurrent | Dynamic current limit I*t - actual limit
3240.00h | CURR_Acc_dI | Current acceleration - delta I
3241.00h | CURR_Acc_dT | Current acceleration - delta T
3242.00h | CURR_Dec_dI | Current deceleration - delta I
3243.00h | CURR_Dec_dT | Current deceleration - delta T
3244.00h | CURR_Dec_QuickStop_dI | Current quick-stop deleleration - delta I
3245.00h | CURR_Dec_QuickStop_dT | Current quick-stop deleleration - delta T
324C.00h | CURR_RampType | Current ramp type
324D.00h | CURR_RampState | Current ramp generator - state
3250.00h | CURR_Feedback | Current controller - feedback
3250.03h | CURR_Feedback_Reference | Current controller - feedback reference
3260.00h | CURR_ActualTargetCurrent | Current - target value
3261.00h | CURR_ActualCommandCurrent | Current - command value
3262.00h | CURR_ActualCurrent | Current - actual value
3262.01h | CURR_ActualAvgCurrent | Current - actual filtred value
3262.04h | CURR_ActualPosMaxCurr | Maximal positive motor current
3262.05h | CURR_ActualNegMaxCurr | Minimal negative motor current
3263.00h | CURR_ActualFollowingError | Current - following error
32A0.00h | CURR_SampleTime | Current controller - sample time
32A0.08h | CURR_SamplePoint | Current controller - sample point correction
32A0.09h | CURR_SampleRlCorr | Current controller - R/L correction
32A0.10h | CURR_ActAvgCurrFilterLevel | Filter level for actual filtred current
3300.00h | VEL_DesiredValue | Velocity - desired value
3302.00h | VEL_ScaleNum | Velocity scale factor - numerator
3303.00h | VEL_ScaleDen | Velocity scale factor - denominator
3304.00h | VEL_DesiredValue_Source | Velocity source
3305.00h | VEL_DesiredValue_Reference | Velocity reference value
330A.00h | VEL_DimensionNum | Velocity dimension factor - numerator
330B.00h | VEL_DimensionDen | Velocity dimension factor - denominator
3310.00h | VEL_Kp | PID-Controller - gain
3311.00h | VEL_Ki | PID-Controller - integral factor
3312.00h | VEL_Kd | PID-Controller - differential factor
3313.00h | VEL_ILimit | PID-Controller - integral limit
3314.00h | VEL_Kvff | PID-Controller - velocity feed forward
3315.00h | VEL_Kaff | PID-Controller - acceleration feed forward
3317.00h | VEL_KIxR | IxR factor
3318.00h | VEL_KdSampleTime | PID-Controller - differential sample time
3321.00h | VEL_LimitMaxPos | Velocity max. limit - positiv direction
3323.00h | VEL_LimitMaxNeg | Velocity max. limit - negativ direction
3340.00h | VEL_Acc_dV | Velocity acceleration - delta V
3341.00h | VEL_Acc_dT | Velocity acceleration - delta T
3342.00h | VEL_Dec_dV | Velocity deceleration - delta V
3343.00h | VEL_Dec_dT | Velocity deceleration - delta T
3344.00h | VEL_Dec_QuickStop_dV | Velocity quick stop deceleration - delta V
3345.00h | VEL_Dec_QuickStop_dT | Velocity quick stop deceleration - delta T
334C.00h | VEL_RampType | Ramp generator - ramp type
334D.00h | VEL_RampState | Ramp generator - state
3350.00h | VEL_Feedback | Velocity feedback
3350.03h | VEL_Feedback_Reference | Velocity feedback - reference
3360.00h | VEL_ActualTargetVel | Velocity - target value
3361.00h | VEL_ActualCommandVel | Velocity - command value
3362.00h | VEL_ActualVel | Unfiltered velocity - actual value
3380.00h | VEL_Acc | Velocity acceleration in [rev/min²]
3381.00h | VEL_Dec | Velocity deceleration in [rev/min²]
3382.00h | VEL_Dec_QuickStop | Velocity quick-stop deceleration in [rev/min²]
33A0.00h | VEL_SampleTime | Velocity/position controller - sample time
33C0.00h | VEL_BlockageGuarding_ConfigFlags | Blockage guarding - config flags
33C0.01h | VEL_BlockageGuarding_VelLow | Blockage guarding - low velocity
33C0.02h | VEL_BlockageGuarding_VelHigh | Blockage guarding - high velocity
33C0.03h | VEL_BlockageGuarding_Time | Blockage guarding - time
33C0.04h | VEL_BlockageGuarding_Status | Blockage guarding - status
3500.00h | SVEL_DesiredValue | SVel desired value
3502.00h | SVEL_ScaleNum | SVel scale factor - numerator
3503.00h | SVEL_ScaleDen | SVel scale factor - denominator
3504.00h | SVEL_DesiredValue_Source | SVel source of desired value
3505.00h | SVEL_DesiredValue_Reference | SVel reference value
3510.00h | SVEL_Kp | SVel PI-Controller - gain
3511.00h | SVEL_Ki | SVel PI-Controller - integral factor
3517.00h | SVEL_KIxR | SVel IxR factor
3521.00h | SVEL_LimitMaxPos | SVelocity max. limit - positive direction
3523.00h | SVEL_LimitMaxNeg | SVelocity max. limit - negative direction
3550.00h | SVEL_Feedback | SVel feedback
3560.00h | SVEL_ActualTargetVel | SVel - velocity target value
3561.00h | SVEL_ActualCommandVel | SVel - velocity command value
35A1.00h | SVEL_MaxVelRange | SVel max. velocity range
3708.00h | POS_Mode | Position mode
3709.00h | POS_ConfigFlags | Pos config
3720.00h | POS_PositionLimitMin | Position limit - minimum
3720.01h | POS_PositionLimitMax | Position limit - maximum
3732.00h | POS_FollowingErrorWindow | Position following error - window
3732.01h | POS_FollowingErrorWindowDyn | Position following error - window, dynamic
3733.00h | POS_FollowingErrorTime | Position following error - time
3733.01h | POS_FollowingErrorTimeDyn | Position following error - time, dynamic
3734.00h | POS_FollowingErrorLimit | Position following error limit
373A.00h | POS_PositionWindow | Position window
373B.00h | POS_PositionWindowTime | Position window - time
373B.01h | POS_PositionWindowTimeout | Position window - timeout
373C.00h | POS_ReachedConfigFlags | Position reached - config bits
373D.00h | POS_DeadWindowOff | Position window - disable amplifier
373D.01h | POS_DeadWindowOn | Position window - enable amplifier
373E.00h | POS_DeadTimeOff | Position window time - disable amplifier
373E.01h | POS_DeadTimeOn | Position window time - enable amplifier
373F.00h | POS_DeadVel | Position window - velocity
374C.00h | POS_RampType | Pos. ramp generator - ramp type
374D.00h | POS_RampState | Position ramp generator - state
3760.00h | POS_ActualTargetPosition | Actual target position
3761.00h | POS_ActualCommandPosition | Actual command position
3761.01h | POS_ActualCommandPositionReg | Actual internal command position
3762.00h | POS_ActualPosition | Actual position
3762.01h | POS_ActualPositionReg | Actual internal position
3763.00h | POS_ActualFollowingError | Actual position following error
3763.01h | POS_ActualFollowingErrorReg | Actual internal position following error
3764.00h | POS_ActualIndexPosition | Actual position of index
3765.00h | POS_ActualOrigin | Position origin
3770.00h | POS_ActualTargetPosition_cnt | Actual target position in increments
3771.00h | POS_ActualCommandPosition_cnt | Actual command positin in increments
3772.00h | POS_ActualPosition_cnt | Actual positin in increments
3773.00h | POS_ActualFollowingError_cnt | Actual following error in increments
3774.00h | POS_ActualIndexPosition_cnt | Actual index positin in increments
3775.00h | POS_ActualOrigin_cnt | Position origin in inc
3790.00h | POS_Mova | Absolute moving
3791.00h | POS_Movr | Relative moving
37A4.01h | POS_GearBacklashComp_Path | Gear backlash compensation - path
37A4.02h | POS_GearBacklashComp_Vel | Gear backlash compensation - velocity
37B0.00h | POS_HomingCmd | Homing - command
37B1.00h | POS_HomingStatus | Homing - status
37B1.01h | POS_HomingError | Homing - error
37B1.02h | POS_HomingState | Homing - state
37B1.03h | POS_HomingRefToIndex | Homing - path of reference switch to index
37B1.04h | POS_HomingRefToIndex_cnt | Homing - path of reference switch to index in counts
37B2.00h | POS_HomingMethod | Homing - method
37B3.00h | POS_HomingOffset | Homing - offset
37B4.00h | POS_HomingVelSwitch | Homing - velocity for search of switch
37B4.01h | POS_HomingVelZero | Homing - Velocity for search of zero point
37B5.00h | POS_HomingAcc | Homing - acceleration
37B5.01h | POS_HomingDec | Homing - deceleration
37B6.00h | POS_HomingMaxIndexPath | Homing - max. path for search of index
37B6.01h | POS_HomingIndexOffset | Homing - index offset
37B7.00h | POS_HomingBlock_ConfigFlags | Homing blockage - config
37B7.01h | POS_HomingBlock_VelLow | Homing blockage - low velocity
37B7.02h | POS_HomingBlock_VelHigh | Homing blockage - high velocity
37B7.03h | POS_HomingBlock_Time | Homing blockage - time
37B7.04h | POS_HomingBlock_FollowingErrorWindow | Homing blockage - position following error window
37C1.00h | POS_InterpStatus | Interpolation - status
3830.00h | PWM_Frequency | PWM frequency
3830.01h | PWM_Mode | PWM mode
3830.62h | PWM_ActualPwm_oo | Actual PWM of the device
3850.00h | SYS_Clock | System clock
3850.02h | SYS_Timer_2ms | System timer 2ms
3900.00h | MOTOR_Type | Motor type
3901.00h | MOTOR_Nn | Motor rated revolutions
3902.00h | MOTOR_Un | Motor rated voltage
3910.00h | MOTOR_PolN | Motor pole number
3911.00h | MOTOR_Polarity | Motor polarity
3913.00h | MOTOR_CommutationType | Motor commutation type
3913.07h | MOTOR_Commutation_Polarity | Motor commutation polarity
3913.20h | PreCommutationConfig | Precommutation
3913.21h | PreCommutationVel | Precommutation reference velocity
3913.23h | PreCommutationAngle | Precommutation angle
3940.00h | MOTOR_HALL_Type | Hall sensor type
3949.00h | MOTOR_HALL_DoutPulses_Mode | Hall pulses - config flags
3949.01h | MOTOR_HALL_DoutPulses_PosDirMask | Hall pulses - bit mask for positive direction
3949.02h | MOTOR_HALL_DoutPulses_NegDirMask | Hall pulses - bit mask for negative direction
3949.03h | MOTOR_HALL_DoutPulses_ModuloValue | Hall pulses - modulo value
394A.00h | MOTOR_HALL_ActualPosition | Actual hall position
39A2.00h | MOTOR_QuasiAbsEncoder_ConfigFlags | Quasi Absolute Encoder - config flags
39A2.01h | MOTOR_QuasiAbsEncoder_Status | Quasi Absolute Encoder - status
39A2.02h | MOTOR_QuasiAbsEncoder_Error | Quasi Absolute Encoder - error
39A2.07h | MOTOR_QuasiAbsEncoder_Tolerance_cnt | Quasi Absolute Encoder - tolerance
39A2.08h | MOTOR_QuasiAbsEncoder_Action | Quasi Absolute Encoder - command
39A2.10h | MOTOR_QuasiAbsEncoder_DeltaPos | Quasi Absolute Encoder - corrected position
39A2.20h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe | Quasi Absolute Encoder - minimum voltage to position save
39A2.21h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe | Quasi Absolute Encoder - maximum voltage to position save
39A2.31h | MOTOR_QuasiAbsEncoder_SavedPosition | Quasi Absolute Encoder - saved position
39A2.32h | MOTOR_QuasiAbsEncoder_SavedIndexPosition | Quasi Absolute Encoder - saved index position
39A2.33h | MOTOR_QuasiAbsEncoder_SavesCounter | Quasi Absolute Encoder - saves counter
3A02.00h | MEASUREMENT_VelTime_ms | Velocity measurement - gate time
3A04.00h | MEASUREMENT_Vel_cnt | Measured velocity in increments
3A04.01h | MEASUREMENT_Vel_rpm | Measured velocity in [rpm]
3B00.00h | FCT_Control | Factor group - control
3B00.01h | FCT_Precision | Factor group - precision
3B10.00h | FCT_Polarity | Factor group - polarity
3B11.00h | FCT_PosNotationIndex | Factor group - position notation index
3B12.00h | FCT_PosDimIndex | Factor group - position dimension index
3B13.00h | FCT_VelNotationIndex | Factor group - velocity notation index
3B14.00h | FCT_VelDimIndex | Factor group - velocity dimension index
3B15.00h | FCT_AccNotationIndex | Factor group - acceleration notation index
3B16.00h | FCT_AccDimIndex | Factor group - acceleration dimension index
3B16.01h | FCT_AccFactorNum | Factor group - acceleration scale - numinator
3B16.02h | FCT_AccFactorDen | Factor group - acceleration scale - denuminator
3B17.00h | FCT_PosScaleNum | Factor group - position scale - numerator
3B17.01h | FCT_PosScaleDen | Factor group - position scale - denominator
3B18.00h | FCT_VelScaleNum | Factor group - velocity scale - numerator
3B18.01h | FCT_VelScaleDen | Factor group - velocity scale - denominator
3B19.00h | FCT_GearRatio_MotorRev | Factor group - gear ratio - motor shaft revolutions
3B19.01h | FCT_GearRatio_ShaftRev | Factor group - gear ratio - driving shaft revolutions
3B1A.00h | FCT_FeedConstant_Feed | Factor group - feed constant - feed
3B1A.01h | FCT_FeedConstant_ShaftRev | Factor group - feed constant - driving shaft revolutions
3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


Content - Parameters 3000h (DSA) - Device commands

3000.00h | DEV_Cmd | Device command
3000.01h | DEV_Cmd_ExecOnChange | Device command - execute on change
3000.02h | DEV_Cmd2 | Device command 2
3000.08h | DEV_Cmd_SetError | Device command - set error
3000.10h | DEV_CmdData0 | Device command - data 0
3000.11h | DEV_CmdData1 | Device command - data 1
3000.12h | DEV_CmdData2 | Device command - data 2
3000.20h | DEV_CmdData0_i16 | Device command - data 0 (int16)
3000.21h | DEV_CmdData1_i16 | Device command - data 1 (int16)
3000.22h | DEV_CmdData2_i16 | Device command - data 2 (int16)
3000.70h | DEV_CmdResult | Device command - result
3000.81h | DEV_CmdError | Device command - Error
3000.83h | DEV_CmdCounter | Device command - counter


3000.00h Device command

Name | DEV_Cmd
Designation | Device command
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h, 4h, 5h, 80h, 81h, 82h, 83h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.01.20
Devices | All
PLC Function | Cmd(value)
Cross reference | -

Description

Writing to this parameter executes a device command.

Parameter values:
Hex | Dec | Name | PLC function | Description
00h 0 CMD_Nop - No operation
01h 1 CMD_ClearError ClearError() Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist) .
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
04h 4 CMD_Continue Continue() Continues the movement after QuickStop or Halt.

Attention:
You must run this command after QuickStop or Halt, if you want to continue the movement. Otherwise, the MCU will not accept new set values -> The motor remains in the Stop-Mode.
05h 5 CMD_Update Update() Updates set values. This command is needed e.g. in the following case:

Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands:

 Vel(1000)  # new velocity
 Update()   # update target position
           # and set new parameters for the movement (Vel, Acc, Dec)
80h | 128 | CMD_StoreParam | StoreParam() | Stores actual parameters of the 3000 range in the internal EEPROM (non-volatile memory).
81h | 129 | CMD_RestoreParam | RestoreParam() | Restores and activates the parameters from the EEPROM. Also, this is done automatically during the initialisation of the device. The restoring is verified by a checksum (CRC32). If the checksum is not correct, default values are used and the device shows an error.
82h | 130 | CMD_DefaultParam | DefaultParam() | All parameters are set to default values. (They are not stored in the EEPROM).
83h | 131 | CMD_ClearParam | ClearParam() | Runs the commands CMD_DefaultParam and CMD_StoreParam successively.
Attention
The execution time of CMD_StoreParam, CMD_RestoreParam, CMD_DefaultParam and CMD_ClearParam can be a couple of seconds.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3000, 0x00, 0x01)   # clear error
d.SdoWr(0x3000, 0x00, 0x82)   # set default parameter


3000.01h Device command - execute on change

Name | DEV_Cmd_ExecOnChange
Designation | Device command - execute on change
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h, 4h, 5h, 8h, 10h, 12h, 13h, 15h, 17h, 1Ah, 20h, 21h, 28h, 29h, 2Ah, 2Eh, 2Fh, 30h, 31h, 32h, 33h, 34h, 36h, 3Ah, 3Bh, 40h, 41h, 42h, 48h, 50h, 51h, 52h, 53h, 54h, 58h, 71h, 72h, 73h, 74h, 75h, 76h, 77h, 78h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | CmdExecOnChange(cmd)
Cross reference | DEV_CmdResult, DEV_CmdData0, DEV_CmdData1, DEV_CmdData2, DEV_Status, DEV_CmdCounter, DEV_Event1_OnUserCmd1

Description

Writing to this parameter executes a device command.

The command is recognized, if its value was changed. For example.: If you want to position relative twice (one after another), you have to send two the same commands (CMD_Movr), but the most significant bit (Bit 7) in the second command should be toggled. That means that you should send first 34h (relative positioning) and as a second command B4h (also relative positioning).
Change of parameters Command device - data 0 and 1 (DEV_CmdData0 and / or DEV_CmdData1) causes that the actual Command device is marked as changed , that means that if you set new Command device, it will be executed with the new value.

With the aid of Status register (DEV_Status, 3002,00h) it is possible to control if a command has been recognized (DEV_Status, Bit 9 - STAT_CmdToggle) and accepted (DEV_Status, Bit 10 - STAT_CmdError).

Device command:
Hex | Dec | Name | Description
00h | 0 | CMD_Nop | No operation
01h | 1 | CMD_ClearError | Potential errors in the error register (DEV_ErrorReg) are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
04h | 4 | CMD_Continue | Continues the movement after QuickStop or Halt. Attention: You must run this command after QuickStop or Halt, if you want to continue the movement. Otherwise, the MCU will not accept new set values -> The motor remains in the Stop-Mode.
05h | 5 | CMD_Update | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) with command 31h - take over new parameters for the movement (Vel, Acc, Dec) with command 05h
08h | 8 | CMD_SetError | Sets an Error in the error register. The error code that is set is in Command data 0 (DEV_CmdData0).

Operation mode of the device controller:
Hex | Dec | Name | Description
10h | 16 | CMD_ModeOff | Power stage and controller are switched off.
12h | 18 | CMD_ModeCurr | Current control mode
13h | 19 | CMD_ModeVel | Velocity mode
15h | 21 | CMD_ModeSVel | Sub Velocity mode; Ramps and the postiton regulator are disabled.
17h | 23 | CMD_ModePos | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)
1Ah | 26 | CMD_Interp | Position mode: Interpolated position mode

Power enable:
Hex | Dec | Name | Description
20h | 32 | CMD_Disable | Disables power stage and controller
21h | 33 | CMD_Enable | Enables power stage and controller

SDO communication and QuickCommand-Mapping:
Hex Dec Name Description
28h 40 CMD_Sp Sets the value of any parameter in the device. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be set
- Command data 1 (DEV_CmdData1) - Contains the value of the parameter which will be set
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be set
- Command result (DEV_CmdResult) - Contains the error code in case of an error

This command is available starting with the firmware version 1.89.00.44.
29h 41 CMD_Gp Reads the actual value of any parameter from the device. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be read
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be read
- Command result (DEV_CmdResult) - Contains the value of the read parameter or in case of an error the error code

This command is available starting with the firmware version 1.89.00.44.
2Ah 42 CMD_SetQcMapping Sets the "Quick Command" Mapping. At the same time the RxPDO1 and TxPDO1 are reconfigured.

Mapping for "Quick Command":
RxPDO1 (8 Byte):
- 1600.1h = 30002010h -> Object: 3000.20h (DEV_CmdData0_i16) 16 bits
- 1600.2h = 30001208h -> Object: 3000.12h (DEV_CmdData2) 8 bits
- 1600.3h = 30001120h -> Object: 3000.11h (DEV_CmdData1) 32 bits
- 1600.4h = 30000108h -> Object: 3000.01h (DEV_Cmd_ExecOnChange) 8 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits        8Bits                 32Bits                 8Bits MSB

TxPDO1 (8 Byte):
- 1A00.1h = 30020010h -> Object: 3002.00h (DEV_Status) 16 bits
- 1A00.2h = 30010010h -> Object: 3001.00h (DEV_ErrorReg) 16 bits
- 1A00.3h = 30007020h -> Object: 3000.70h (DEV_CmdResult) 32 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits            16Bits                     32Bits              MSB

This command is available starting with the firmware version 1.89.00.44.
2Eh 46 CMD_Sp2 Sets the value of any parameter in the device. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index and the subindex of the parameter which will be set (0x I I I I S S)
- Command data 1 (DEV_CmdData1) - Contains the value of the parameter which will be set
- Command result (DEV_CmdResult) - Contains the error code in case of an error

This command is available starting with the firmware version 1.93.00.29.
2Fh 47 CMD_Gp2 Reads the actual value of any parameter from the device. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index and the subindex of the parameter which will be read (0x I I I I S S)
- Command result (DEV_CmdResult) - Contains the value of the read parameter or in case of an error the error code

This command is available starting with the firmware version 1.93.00.29.

Desired value (Device command - data 0 and data 1):
First desired values have to be written in parameters Device command - data 0 and 1 (DEV_CmdData0, 3000.10h/ DEV_CmdData1, 3000.11h)
Use one of the following commands causes that data (0 and / or 1) are taken over to the appropriate parameter.
Hex | Dec | Name | Description
30h | 48 | CMD_Curr | Sets the desired current (CURR_DesiredValue) for the current control mode. Command data: - Command data 0 (DEV_CmdData0) - desired current (CURR_DesiredValue)
31h | 49 | CMD_Vel | Sets the desired velocity value (VEL_DesiredValue) for the velocity control mode and position mode. Command data: - Command data 0 (DEV_CmdData0) - velocity desired value (VEL_DesiredValue)
32h | 50 | CMD_SVel | Sets the desired velocity value (VEL_DesiredValue) in sub-velocity mode. Command data: - Command data 0 (DEV_CmdData0) - velocity desired value (SVEL_DesiredValue)
33h | 51 | CMD_Mova | Starts the movement to an absolute position (POS_Mova). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Mova) Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate the homing method (unequal to zero), a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control status bit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Starts the movement to an relative position (POS_Movr, relative to actual command position). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Movr, relative to actual command position) Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) Attention: The difference to Command 05h (CMD_Update) is, that Command 36h (CMD_MovUpdate) overwrites the desired velocity value with the value from Command data 0.
3Ah | 58 | CMD_InterpCmd | Sends an interpoaltion commando Command data: - Command data 0 (DEV_CmdData0) - 0 = Nop, 1= Arming, 2 = Unarming
3Bh | 59 | CMD_InterpData | Interpolatated position mode data is transfered. Command data: - Command data 1 (DEV_CmdData1) - Position

Ramp commands:
Hex | Dec | Name | Description
40h | 64 | CMD_Acc | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) - Command data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) - Command data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) - Command data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Homing commands:
To execute a homing, the controller has to be in positioning mode.
Hex | Dec | Name | Description
50h | 80 | CMD_HOME_None | No operation
51h | 81 | CMD_HOME_Start | Starts the homing. The bit STAT_HomingDone (DEV_Status) is reseted. The method for the homing is defined in parameter POS_HomingMethod.
52h | 82 | CMD_HOME_Break | Cancels an active homing.
53h | 83 | CMD_HOME_Halt | Interrupts an active homing.
54h | 84 | CMD_HOME_Restart | Restarts a homing after break.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.

Composite comands:
Using these commands it is possible to initiate the sequence of commands with the aid of one command.
The sequence of commands can be parametrized in parameter 3014.xxh (EventOnUserCmd).
Hex | Dec | Name | Description
71h | 113 | CMD_UserCmd1 | Parameter 3014.11h - 3014.14h; Default value: CMD_Quickstop, CMD_Disable, 0, 0
72h | 114 | CMD_UserCmd2 | Parameter 3014.21h - 3014.24h; Default value: CMD_Halt, CMD_Disable, 0, 0
73h | 115 | CMD_UserCmd3 | Parameter 3014.31h - 3014.34h; Default value: CMD_ModeCurr, CMD_Enable, CMD_Curr, 0
74h | 116 | CMD_UserCmd4 | Parameter 3014.41h - 3014.44h; Default value: CMD_ModeVel, CMD_Enable, CMD_Vel, 0
75h | 117 | CMD_UserCmd5 | Parameter 3014.51h - 3014.54h; Default value: CMD_ModeSVel, CMD_Enable, CMD_SVel, 0
76h | 118 | CMD_UserCmd6 | Parameter 3014.61h - 3014.64h; Default value: CMD_ModePos, CMD_Enable, CMD_Mova, 0
77h | 119 | CMD_UserCmd7 | Parameter 3014.71h - 3014.74h; Default value: CMD_ModePos, CMD_Enable, CMD_Movr, 0
78h | 120 | CMD_UserCmd8 | Parameter 3014.81h - 3014.84h; Default value: CMD_ModePos, CMD_Enable, CMD_HOME_Start, 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                               # NodeId = 1

#----------------------------------------------------------------------------------------------------
# init
d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
d.SdoWr(0x3000, 0x01, 1)                                 # DEV_Cmd_ExecOnChange - clear error

#----------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                 # IO_DOUT_P0 - open brake (just in case)
d.SdoWr(0x3000, 0x11, 0)                                 # DEV_CmdData1 - command data 1 = 0
d.SdoWr(0x3000, 0x01, 0x58)                              # DEV_Cmd_ExecOnChange - set position

for i in range(5):                                       # 5 times
   d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0 - command data 0 = 1000 r/min
   d.SdoWr(0x3000, 0x11, 1000)                           # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x01, 0x77)                           # DEV_Cmd_ExecOnChange - relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

   #d.SdoWr(0x3000, 0x10, 1000)                          # DEV_CmdData0 - command data 0 = 1000 r/min
   #d.SdoWr(0x3000, 0x11, 1000)                          # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x01, 0xF7)                           # DEV_Cmd_ExecOnChange - new relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

d.SdoWr(0x3150, 0x00, 0)                                 # IO_DOUT_P0 - close brake (just in case)

d.SdoWr(0x3000, 0x01, 0x20)                              # DEV_Cmd_ExecOnChange - disable


3000.02h Device command 2

Name | DEV_Cmd2
Designation | Device command 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h, 4h, 5h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 28h, 29h, 2Ah, 30h, 31h, 32h, 33h, 34h, 36h, 40h, 41h, 42h, 50h, 51h, 52h, 53h, 54h, 58h, 71h, 72h, 73h, 74h, 75h, 76h, 77h, 78h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.BD
Devices | All
PLC Function | -
Cross reference | DEV_CmdResult, DEV_CmdData0, DEV_CmdData1, DEV_CmdData2, DEV_Status, DEV_CmdCounter, DEV_Event1_OnUserCmd1

Description

A device command is always executed if a value is written in this parameter.

This parameter behaves like DEV_Cmd_ExecOnChange, with the difference that no Change is needed to exxecute the command. Therefore use this parameter with caution. Unwanted behavior could be possible if i.e. PDOs execute a command more than once in a short periode of time.

Device command:
Hex | Dec | Name | Description
00h | 0 | CMD_Nop | No operation
01h | 1 | CMD_ClearError | Potential errors in the error register (DEV_ErrorReg) are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
04h | 4 | CMD_Continue | Continues the movement after QuickStop or Halt. Attention: You must run this command after QuickStop or Halt, if you want to continue the movement. Otherwise, the MCU will not accept new set values -> The motor remains in the Stop-Mode.
05h | 5 | CMD_Update | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) with command 31h - take over new parameters for the movement (Vel, Acc, Dec) with command 05h

Operation mode of the device controller:
Hex | Dec | Name | Description
10h | 16 | CMD_ModeOff | Power stage and controller are switched off.
12h | 18 | CMD_ModeCurr | Current control mode
13h | 19 | CMD_ModeVel | Velocity mode
15h | 21 | CMD_ModeSVel | Sub Velocity mode; Ramps and the postiton regulator are disabled.
17h | 23 | CMD_ModePos | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)

Power enable:
Hex | Dec | Name | Description
20h | 32 | CMD_Disable | Disables power stage and controller
21h | 33 | CMD_Enable | Enables power stage and controller

SDO communication and QuickCommand-Mapping:
Hex Dec Name Description
28h 40 CMD_Sp Sets the value of any parameter in the device. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be set
- Command data 1 (DEV_CmdData1) - Contains the value of the parameter which will be set
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be set
- Command result (DEV_CmdResult) - Contains the error code in case of an error

This command is available starting with the firmware version 1.89.00.44.
29h 41 CMD_Gp Reads the actual value of any parameter from the device. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be read
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be read
- Command result (DEV_CmdResult) - Contains the value of the read parameter or in case of an error the error code

This command is available starting with the firmware version 1.89.00.44.
2Ah 42 CMD_SetQcMapping Sets the "Quick Command" Mapping. At the same time the RxPDO1 and TxPDO1 are reconfigured.

Mapping for "Quick Command":
RxPDO1 (8 Byte):
- 1600.1h = 30002010h -> Object: 3000.20h (DEV_CmdData0_i16) 16 bits
- 1600.2h = 30001208h -> Object: 3000.12h (DEV_CmdData2) 8 bits
- 1600.3h = 30001120h -> Object: 3000.11h (DEV_CmdData1) 32 bits
- 1600.4h = 30000108h -> Object: 3000.01h (DEV_Cmd_ExecOnChange) 8 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits        8Bits                 32Bits                 8Bits MSB

TxPDO1 (8 Byte):
- 1A00.1h = 30020010h -> Object: 3002.00h (DEV_Status) 16 bits
- 1A00.2h = 30010010h -> Object: 3001.00h (DEV_ErrorReg) 16 bits
- 1A00.3h = 30007020h -> Object: 3000.70h (DEV_CmdResult) 32 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits            16Bits                     32Bits              MSB

This command is available starting with the firmware version 1.89.00.44.

Desired value (Device command - data 0 and data 1):
First desired values have to be written in parameters Device command - data 0 and 1 (DEV_CmdData0, 3000.10h/ DEV_CmdData1, 3000.11h)
Use one of the following commands causes that data (0 and / or 1) are taken over to the appropriate parameter.
Hex | Dec | Name | Description
30h | 48 | CMD_Curr | Sets the desired current (CURR_DesiredValue) for the current control mode. Command data: - Command data 0 (DEV_CmdData0) - desired current (CURR_DesiredValue)
31h | 49 | CMD_Vel | Sets the desired velocity value (VEL_DesiredValue) for the velocity control mode and position mode. Command data: - Command data 0 (DEV_CmdData0) - velocity desired value (VEL_DesiredValue)
32h | 50 | CMD_SVel | Sets the desired velocity value (VEL_DesiredValue) in sub-velocity mode. Command data: - Command data 0 (DEV_CmdData0) - velocity desired value (SVEL_DesiredValue)
33h | 51 | CMD_Mova | Starts the movement to an absolute position (POS_Mova). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Mova) Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate the homing method (unequal to zero), a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control status bit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Starts the movement to an relative position (POS_Movr, relative to actual command position). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Movr, relative to actual command position) Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) Attention: The difference to Command 05h (CMD_Update) is, that Command 36h (CMD_MovUpdate) overwrites the desired velocity value with the value from Command data 0.

Ramp commands:
Hex | Dec | Name | Description
40h | 64 | CMD_Acc | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) - Command data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) - Command data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) - Command data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Homing commands:
To execute a homing, the controller has to be in positioning mode.
Hex | Dec | Name | Description
50h | 80 | CMD_HOME_None | No operation
51h | 81 | CMD_HOME_Start | Starts the homing. The bit STAT_HomingDone (DEV_Status) is reseted. The method for the homing is defined in parameter POS_HomingMethod.
52h | 82 | CMD_HOME_Break | Cancels an active homing.
53h | 83 | CMD_HOME_Halt | Interrupts an active homing.
54h | 84 | CMD_HOME_Restart | Restarts a homing after break.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.

Composite comands:
Using these commands it is possible to initiate the sequence of commands with the aid of one command.
The sequence of commands can be parametrized in parameter 3014.xxh (EventOnUserCmd).
Hex | Dec | Name | Description
71h | 113 | CMD_UserCmd1 | Parameter 3014.11h - 3014.14h; Default value: CMD_Quickstop, CMD_Disable, 0, 0
72h | 114 | CMD_UserCmd2 | Parameter 3014.21h - 3014.24h; Default value: CMD_Halt, CMD_Disable, 0, 0
73h | 115 | CMD_UserCmd3 | Parameter 3014.31h - 3014.34h; Default value: CMD_ModeCurr, CMD_Enable, CMD_Curr, 0
74h | 116 | CMD_UserCmd4 | Parameter 3014.41h - 3014.44h; Default value: CMD_ModeVel, CMD_Enable, CMD_Vel, 0
75h | 117 | CMD_UserCmd5 | Parameter 3014.51h - 3014.54h; Default value: CMD_ModeSVel, CMD_Enable, CMD_SVel, 0
76h | 118 | CMD_UserCmd6 | Parameter 3014.61h - 3014.64h; Default value: CMD_ModePos, CMD_Enable, CMD_Mova, 0
77h | 119 | CMD_UserCmd7 | Parameter 3014.71h - 3014.74h; Default value: CMD_ModePos, CMD_Enable, CMD_Movr, 0
78h | 120 | CMD_UserCmd8 | Parameter 3014.81h - 3014.84h; Default value: CMD_ModePos, CMD_Enable, CMD_HOME_Start, 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                               # NodeId = 1

#----------------------------------------------------------------------------------------------------
# init
d.SdoWr(0x3000, 0x02, 1)                                 # DEV_Cmd2 - clear error

#----------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                 # IO_DOUT_P0 - open brake (just in case)
d.SdoWr(0x3000, 0x11, 0)                                 # DEV_CmdData1 - command data 1 = 0
d.SdoWr(0x3000, 0x02, 0x58)                              # DEV_Cmd2 - set position

for i in range(5):                                       # 5 times
   d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0 - command data 0 = 1000 r/min
   d.SdoWr(0x3000, 0x11, 1000)                           # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x02, 0x77)                           # DEV_Cmd2 - relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

d.SdoWr(0x3150, 0x00, 0)                                 # IO_DOUT_P0 - close brake (just in case)

d.SdoWr(0x3000, 0x02, 0x20)                              # DEV_Cmd22 - disable


3000.08h Device command - set error

Name | DEV_Cmd_SetError
Designation | Device command - set error
Data type | int16
Access | write only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.01.11
Devices | All
PLC Function | SetError(value)
Cross reference | DEV_Cmd

Description

Via this parameter the user can set individual errors e.g. to simulate an error.
Setting this parameter runs a general internal error procedure with the assigned value. Thereby, the parameter DEV_ErrorReg will be set to this value.

Attention !
The device controller will switch to an error status, when this parameter is set to value unequal 0. The control and the power stage will be disabled.

Error values <= -30000 can't be cleared by a "ClearError" command, because they are fatal errors. To clear these errors, restart the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                            # NodeId = 1

d.SdoWr(0x3000, 0x08, -20001)         # set own error


3000.10h Device command - data 0

Name | DEV_CmdData0
Designation | Device command - data 0
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | CmdData0(value)
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0_i16, DEV_CmdData1, DEV_CmdData1_i16, DEV_CmdData2, DEV_CmdData2_i16

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 0:
Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
30h | 48 | CMD_Curr | Command device - data 0 is taken over as desired value in current control mode; CURR_DesiredValue
31h | 49 | CMD_Vel | Command device - data 0 is taken over as velocity desired value in velocity mode and position mode; VEL_DesiredValue
32h | 50 | CMD_SVel | Command device - data 0 is taken over as velocity desired value in sub-velocity mode; SVEL_DesiredValue
33h | 51 | CMD_Mova | Command device - data 1 is taken over as absolute target position. It starts the movement to an absolute position.; POS_Mova Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate thehoming method (unequal to zero) a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control statusbit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Command device - data 1 is taken over as relative target position. It starts the movement to an relative position (relative to actual command position).; POS_Movr You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) in parameter Command device - data 0 - take over new parameters for the movement (Vel, Acc, Dec) with command 36h
40h | 64 | CMD_Acc | In current mode command device - data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode command device - data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode command device - data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) This command is available starting with the firmware version 1.85.03.32.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                              # NodeId = 1

#-------------------------------------------------------------------------------------------------------
# Initialising
d.SdoWr(0x3000, 0x01, 0)                                # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
d.SdoWr(0x3000, 0x01, 1)                                # DEV_Cmd_ExecOnChange - clear error

#-------------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                # IO_DOUT_P0 - open brake (just in case)

for i in range(3):                                      # 3 times
   d.SdoWr(0x3000, 0x10, 1000)                          # DEV_CmdData0 - command data 0 = 1000 U/min
   d.SdoWr(0x3000, 0x01, 0x74)                          # DEV_Cmd_ExecOnChange - velocity mode
   time.sleep(3)                                        # wait 3s
   print i,"actual velocity =", d.SdoRd(0x3A04, 0x01)   # MEASUREMENT_Vel_rpm - read actual velocity

   d.SdoWr(0x3000, 0x10, -1000)                         # DEV_CmdData0 - command data 0 = -1000 U/min
   d.SdoWr(0x3000, 0x01, 0x74)                          # DEV_Cmd_ExecOnChange - velocity mode
   time.sleep(3)                                        # wait 3s
   print i,"actual velocity =", d.SdoRd(0x3A04, 0x01)   # MEASUREMENT_Vel_rpm - read actual velocity

d.SdoWr(0x3000, 0x01, 0x02)                             # DEV_Cmd_ExecOnChange - quick stop

while (d.SdoRd(0x3002, 0x00) & 0x08!=0):                # DEV_Status - wait for STAT_Moving=0
   time.sleep(0.1)                                      # every 100 ms

time.sleep(0.1)                                         # 100 ms for measuring the velocity
print "actual velocity =", d.SdoRd(0x3A04, 0x01)        # MEASUREMENT_Vel_rpm - read actual velocity
d.SdoWr(0x3150, 0x00, 0)                                # IO_DOUT_P0 - close brake (just in case)
d.SdoWr(0x3000, 0x01, 0x20)                             # DEV_Cmd_ExecOnChange - disable


3000.11h Device command - data 1

Name | DEV_CmdData1
Designation | Device command - data 1
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | CmdData1(value)
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData0_i16, DEV_CmdData1_i16, DEV_CmdData2, DEV_CmdData2_i16

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 1:

Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
33h | 51 | CMD_Mova | Command device - data 1 is taken over as absolute target position. It starts the movement to an absolute position.; POS_Mova Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate thehoming method (unequal to zero) a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control statusbit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Command device - data 1 is taken over as relative target position. It starts the movement to an relative position (relative to actual command position).; POS_Movr You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.
40h | 64 | CMD_Acc | In current mode command device - data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode command device - data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode command device - data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

d.SdoWr(0x3000, 0x01, 0)                              # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position

d.SdoWr(0x3000, 0x11, 1000)                           # DEV_CmdData1 - command data 1 = 1000
d.SdoWr(0x3000, 0x01, 0x58)                           # DEV_Cmd_ExecOnChange - Sset actual position
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position

d.SdoWr(0x3000, 0x11, -1000)                          # DEV_CmdData1 - command data 1 = -1000
d.SdoWr(0x3000, 0x01, 0xD8)                           # DEV_Cmd_ExecOnChange - set actual position
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position


3000.12h Device command - data 2

Name | DEV_CmdData2
Designation | Device command - data 2
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.44
Devices | All
PLC Function | -
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData0_i16, DEV_CmdData1, DEV_CmdData1_i16, DEV_CmdData2_i16

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 2:

Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                  # Node ID = 1

d.SdoWr(0x3000, 0x10, 0x3020)                               # DEV_CmdData0 - 3020h
d.SdoWr(0x3000, 0x12, 0x00)                                 # DEV_CmdData2 - 00h
d.SdoWr(0x3000, 0x01, 0)                                    # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x29)                                 # DEV_Cmd_ExecOnChange - CMD_Gp

print "3020.00h(DeviceCode):", hex(d.SdoRd(0x3000, 0x70))   # DEV_CmdResult


3000.20h Device command - data 0 (int16)

Name | DEV_CmdData0_i16
Designation | Device command - data 0 (int16)
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.19
Devices | All
PLC Function | -
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData1, DEV_CmdData1_i16, DEV_CmdData2, DEV_CmdData2_i16

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 0:
Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
30h | 48 | CMD_Curr | Command device - data 0 is taken over as desired value in current control mode; CURR_DesiredValue
31h | 49 | CMD_Vel | Command device - data 0 is taken over as velocity desired value in velocity mode and position mode; VEL_DesiredValue
32h | 50 | CMD_SVel | Command device - data 0 is taken over as velocity desired value in sub-velocity mode; SVEL_DesiredValue
33h | 51 | CMD_Mova | Command device - data 1 is taken over as absolute target position. It starts the movement to an absolute position.; POS_Mova Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate thehoming method (unequal to zero) a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control statusbit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Command device - data 1 is taken over as relative target position. It starts the movement to an relative position (relative to actual command position).; POS_Movr You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) in parameter Command device - data 0 - take over new parameters for the movement (Vel, Acc, Dec) with command 36h
40h | 64 | CMD_Acc | In current mode command device - data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode command device - data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode command device - data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) In velocity and position mode command device - data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) This command is available starting with the firmware version 1.85.03.32.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                              # NodeId = 1

#-------------------------------------------------------------------------------------------------------
# Initialising
d.SdoWr(0x3000, 0x01, 0)                                # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
d.SdoWr(0x3000, 0x01, 1)                                # DEV_Cmd_ExecOnChange - clear error

#-------------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                # IO_DOUT_P0 - open brake (just in case)

for i in range(3):                                      # 3 times
   d.SdoWr(0x3000, 0x20, 1000)                          # DEV_CmdData0_i16 - command data 0 = 1000 U/min
   d.SdoWr(0x3000, 0x01, 0x74)                          # DEV_Cmd_ExecOnChange - velocity mode
   time.sleep(3)                                        # wait 3s
   print i,"actual velocity =", d.SdoRd(0x3A04, 0x01)   # MEASUREMENT_Vel_rpm - read actual velocity

   d.SdoWr(0x3000, 0x20, -1000)                         # DEV_CmdData0_i16 - command data 0 = -1000 U/min
   d.SdoWr(0x3000, 0x01, 0x74)                          # DEV_Cmd_ExecOnChange - velocity mode
   time.sleep(3)                                        # wait 3s
   print i,"actual velocity =", d.SdoRd(0x3A04, 0x01)   # MEASUREMENT_Vel_rpm - read actual velocity

d.SdoWr(0x3000, 0x01, 0x02)                             # DEV_Cmd_ExecOnChange - quick stop

while (d.SdoRd(0x3002, 0x00) & 0x08!=0):                # DEV_Status - wait for STAT_Moving=0
   time.sleep(0.1)                                      # every 100 ms

time.sleep(0.1)                                         # 100 ms for measuring the velocity
print "actual velocity =", d.SdoRd(0x3A04, 0x01)        # MEASUREMENT_Vel_rpm - read actual velocity
d.SdoWr(0x3150, 0x00, 0)                                # IO_DOUT_P0 - close brake (just in case)
d.SdoWr(0x3000, 0x01, 0x20)                             # DEV_Cmd_ExecOnChange - disable


3000.21h Device command - data 1 (int16)

Name | DEV_CmdData1_i16
Designation | Device command - data 1 (int16)
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.19
Devices | All
PLC Function | -
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData0_i16, DEV_CmdData1, DEV_CmdData2, DEV_CmdData2_i16

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 1:

Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
33h | 51 | CMD_Mova | Command device - data 1 is taken over as absolute target position. It starts the movement to an absolute position.; POS_Mova Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate thehoming method (unequal to zero) a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control statusbit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Command device - data 1 is taken over as relative target position. It starts the movement to an relative position (relative to actual command position).; POS_Movr You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.
40h | 64 | CMD_Acc | In current mode command device - data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode command device - data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode command device - data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode command device - data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

d.SdoWr(0x3000, 0x01, 0)                              # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position

d.SdoWr(0x3000, 0x21, 1000)                           # DEV_CmdData1_i16 - command data 1 = 1000
d.SdoWr(0x3000, 0x01, 0x58)                           # DEV_Cmd_ExecOnChange - Sset actual position
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position

d.SdoWr(0x3000, 0x21, -1000)                          # DEV_CmdData1_i16 - command data 1 = -1000
d.SdoWr(0x3000, 0x01, 0xD8)                           # DEV_Cmd_ExecOnChange - set actual position
print "actual position =", d.SdoRd(0x3762, 0x00)      # POS_ActualPosition - read actual position


3000.22h Device command - data 2 (int16)

Name | DEV_CmdData2_i16
Designation | Device command - data 2 (int16)
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.44
Devices | All
PLC Function | -
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData0_i16, DEV_CmdData1, DEV_CmdData1_i16, DEV_CmdData2

Description

This value is used by Command device 3Xh (DEV_Cmd_ExecOnChange).
If the value was changed, the device command (DEV_Cmd_ExecOnChange) must be again executed.

Command device (DEV_Cmd_ExecOnChange) that uses Command device - data 2:

Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                  # Node ID = 1

d.SdoWr(0x3000, 0x20, 0x3020)                               # DEV_CmdData0_i16 - 3020h
d.SdoWr(0x3000, 0x22, 0x00)                                 # DEV_CmdData2_i16 - 00h
d.SdoWr(0x3000, 0x01, 0)                                    # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x29)                                 # DEV_Cmd_ExecOnChange - CMD_Gp

print "3020.00h(DeviceCode):", hex(d.SdoRd(0x3000, 0x70))   # DEV_CmdResult


3000.70h Device command - result

Name | DEV_CmdResult
Designation | Device command - result
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.44
Devices | All
PLC Function | -
Cross reference | DEV_Cmd_ExecOnChange, DEV_CmdData0, DEV_CmdData1, DEV_CmdData2, DEV_Status, DEV_Event1_OnUserCmd1

Description

This parameter is used in the 28h and 29h device commands (DEV_Cmd_ExecOnChange).
The value is changed after the execution of device command (DEV_Cmd_ExecOnChange).

Command device (DEV_Cmd_ExecOnChange) that uses Command device - result:
Hex | Dec | Name | Description
28h | 40 | CMD_Sp | Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.
29h | 41 | CMD_Gp | Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code. This command is available starting with the firmware version 1.89.00.44.

Error codes:

Error code [dec] | Error code [hex] | Name | Description
-300 | 0xFFFFFED4 | ERR_Par_GenericError | generic error
-301 | 0xFFFFFED3 | ERR_Par_StoreFailed | storing failed
-302 | 0xFFFFFED2 | ERR_Par_RestoreFailed | restoring failed
-306 | 0xFFFFFECE | ERR_Par_HasNotWritePermission | parameter cannot be written
-307 | 0xFFFFFECD | ERR_Par_HasNotReadPermission | parameter cannot be read
-308 | 0xFFFFFECC | ERR_Par_ValueOutOfRange | parameter value is out of the range
-319 | 0xFFFFFEC1 | ERR_Par_NotImplementedInThisVersion | parameter is not implemented in this version of the firmware
-322 | 0xFFFFFEBE | ERR_Par_CannotSet_AxIsMoving | parameter cannot be written because the motor is moving
-325 | 0xFFFFFEBB | ERR_Par_CannotSet_PosModeIsNotEnabled | parameter cannot be written because the position mode is not active
-326 | 0xFFFFFEBA | ERR_Par_CannotSet_DeviceIsNotEnabled | parameter cannot be written because the device is disabled
-327 | 0xFFFFFEB9 | ERR_Par_CannotSet_DeviceIsEnabled | parameter cannot be written because the device is enabled
-329 | 0xFFFFFEB7 | ERR_Par_CannotSet_DeviceBadState | parameter cannot be written because of wrong state of the device
-340 | 0xFFFFFEAC | ERR_Par_CannotSet_HwLimitIsActive | parameter cannot be written because the limit switch is active
-343 | 0xFFFFFEA9 | ERR_Par_CannotSet_StopOrHaltIsActive | parameter cannot be written because Stop or Halt command is executed
-344 | 0xFFFFFEA8 | ERR_Par_CannotSet_DeviceIsInHomingMode | parameter cannot be written since axis is in homing mode
-345 | 0xFFFFFEA7 | ERR_Par_CannotSet_HomingRequired | parameter cannot be written since homing mode is required
-350 | 0xFFFFFEA2 | ERR_Par_IndexDoesNotExist | parameter with the desired index doesn’t exist
-351 | 0xFFFFFEA1 | ERR_Par_SubIndexDoesNotExist | parameter with the desired sub index doesn’t exist

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                  # Node ID = 1

d.SdoWr(0x3000, 0x10, 0x3020)                               # DEV_CmdData0 - 3020h
d.SdoWr(0x3000, 0x12, 0x00)                                 # DEV_CmdData2 - 00h
d.SdoWr(0x3000, 0x01, 0)                                    # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x29)                                 # DEV_Cmd_ExecOnChange - CMD_Gp

print "3020.00h(DeviceCode):", hex(d.SdoRd(0x3000, 0x70))   # DEV_CmdResult


3000.81h Device command - Error

Name | DEV_CmdError
Designation | Device command - Error
Data type | uint16
Access | read only
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.93
Devices | All
PLC Function | -
Cross reference | DEV_Cmd, DEV_Status

Description

If a device command (DEV_Cmd) cannot be read or executed, this parameter provides an error code. In the status register (DEV_Status) the bit of the command error (STAT_CmdError) will be set. In this case the bit of the error (STAT_Error) will not be set.

Error Code:

Value | Description
=0 | No error
<0 | Error (see table of error codes)

Error codes:
Error code [dec] | Error code [hex] | Name | Description | CANopen- error code | Possible cause
Comand Errors
-250 | 0xFF06 | ERR_Cmd_UnknownCmd | unknown command | - | -
-251 | 0xFF05 | ERR_Cmd_UnexpectedCmd | unexpected command | - | -
-252 | 0xFF04 | ERR_Cmd_SyntaxError | commando syntax error | - | -
-253 | 0xFF03 | ERR_Cmd_BadArgument | Wrong command argument | - | -
-260 | 0xFEFC | ERR_Cmd_BadArgumentsCount | Wrong number of arguments | - | -
-261 | 0xFEFB | ERR_Cmd_IndexOutOfRange | index is greater than FFFFh | - | -
-262 | 0xFEFA | ERR_Cmd_SubindexOutOfRange | sub index is greater than FFh | - | -
Parameter Errors
-300 | 0xFED4 | ERR_Par_GenericError | generic error | - | -
-301 | 0xFED3 | ERR_Par_StoreFailed | storing failed | - | -
-302 | 0xFED2 | ERR_Par_RestoreFailed | restoring failed | - | -
-306 | 0xFECE | ERR_Par_HasNotWritePermission | parameter cannot be written | - | -
-307 | 0xFECD | ERR_Par_HasNotReadPermission | parameter cannot be read | - | -
-308 | 0xFECC | ERR_Par_ValueOutOfRange | parameter value is out of the range | - | -
-315 | 0xFEC5 | ERR_Par_PermanentData_SSI_BadCRC | permanent data of the SSI has wrong check sum | - | -
-316 | 0xFEC4 | ERR_Par_BadVersion | version of the stored parameter set is different to the firmware version | 0x6320 | -
-318 | 0xFEC2 | ERR_Par_BadCRC | Stored parameter set has wrong check sum | 0x6320 | -
-322 | 0xFEBE | ERR_Par_CannotSet_AxIsMoving | parameter cannot be written because the motor is moving | - | -
-325 | 0xFEBB | ERR_Par_CannotSet_PosModeIsNotEnabled | parameter cannot be written because the position mode is not active | - | -
-326 | 0xFEBA | ERR_Par_CannotSet_DeviceIsNotEnabled | parameter cannot be written because the device is disabled | - | -
-327 | 0xFEB9 | ERR_Par_CannotSet_DeviceIsEnabled | parameter cannot be written because the device is enabled | - | -
-340 | 0xFEAC | ERR_Par_CannotSet_HwLimitIsActive | parameter cannot be written because the limit switch is active | - | -
-343 | 0xFEA9 | ERR_Par_CannotSet_StopOrHaltIsActive | parameter cannot be written because Stop or Halt command is executed | - | -
-344 | 0xFEA8 | ERR_Par_CannotSet_AxIsInHomingMode | parameter cannot be written because axis is in homing mode | - | -
-345 | 0xFEA7 | ERR_Par_CannotSet_HomingRequired | parameter cannot be written because homing mode is required | - | -
-350 | 0xFEA2 | ERR_Par_IndexDoesNotExist | parameter with the desired index doesn’t exist | - | -
-351 | 0xFEA1 | ERR_Par_SubIndexDoesNotExist | parameter with the desired sub index doesn’t exist | - | -

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Error =", d.SdoRd(0x3000, 0x81)    # Print the error code


3000.83h Device command - counter

Name | DEV_CmdCounter
Designation | Device command - counter
Data type | uint16
Access | read / write
Attributs | -
Value range | [1 .. 65535]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.89.00.D2
Devices | All
PLC Function | -
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange, DEV_Cmd2

Description

This parameter counts the executed commands. All 3 types of commands: DEV_Cmd, DEV_Cmd_ExecOnChange and DEV_Cmd2 are taken into account. The parameter is set back to its start value if the controller is restarted.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

d.SdoWr(0x3000, 0x02, 1)                           # DEV_Cmd2 - clear error

d.SdoWr(0x3000, 0x10, 500)                         # DEV_CmdData0 - command data 0 = 500 rpm
d.SdoWr(0x3000, 0x11, 4000)                        # DEV_CmdData1 - command data 1 = 4000 counts

d.SdoWr(0x3000, 0x02, 0x34)                        # DEV_Cmd2 - MovR

print "Command counter =" , d.SdoRd(0x3000, 0x83)  # DEV_CmdCounter


3001.00h Error register

Name | DEV_ErrorReg
Designation | Error register
Data type | int16
Access | read only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | GetError()
Cross reference | DEV_Cmd

Description

Provides an error code.
A potential error can be cleared by setting DEV_Cmd to 1 (CMD_ClearError).

Error Code:
Value | Description
=0 | No error
<0 | Error (see table of error codes)

Error codes:
Error code [dec] | Error code [hex] | Name | Description | CANopen- error code | Possible cause
Comand Errors
-250 | 0xFF06 | ERR_Cmd_UnknownCmd | unknown command | - | -
-251 | 0xFF05 | ERR_Cmd_UnexpectedCmd | unexpected command | - | -
-252 | 0xFF04 | ERR_Cmd_SyntaxError | commando syntax error | - | -
-253 | 0xFF03 | ERR_Cmd_BadArgument | Wrong command argument | - | -
-260 | 0xFEFC | ERR_Cmd_BadArgumentsCount | Wrong number of arguments | - | -
-261 | 0xFEFB | ERR_Cmd_IndexOutOfRange | index is greater than FFFFh | - | -
-262 | 0xFEFA | ERR_Cmd_SubindexOutOfRange | sub index is greater than FFh | - | -
Parameter Errors
-300 | 0xFED4 | ERR_Par_GenericError | generic error | - | -
-301 | 0xFED3 | ERR_Par_StoreFailed | storing failed | - | -
-302 | 0xFED2 | ERR_Par_RestoreFailed | restoring failed | - | -
-306 | 0xFECE | ERR_Par_HasNotWritePermission | parameter cannot be written | - | -
-307 | 0xFECD | ERR_Par_HasNotReadPermission | parameter cannot be read | - | -
-308 | 0xFECC | ERR_Par_ValueOutOfRange | parameter value is out of the range | - | -
-315 | 0xFEC5 | ERR_Par_PermanentData_SSI_BadCRC | permanent data of the SSI has wrong check sum | - | -
-316 | 0xFEC4 | ERR_Par_BadVersion | version of the stored parameter set is different to the firmware version | 0x6320 | -
-318 | 0xFEC2 | ERR_Par_BadCRC | Stored parameter set has wrong check sum | 0x6320 | -
-322 | 0xFEBE | ERR_Par_CannotSet_AxIsMoving | parameter cannot be written because the motor is moving | - | -
-325 | 0xFEBB | ERR_Par_CannotSet_PosModeIsNotEnabled | parameter cannot be written because the position mode is not active | - | -
-326 | 0xFEBA | ERR_Par_CannotSet_DeviceIsNotEnabled | parameter cannot be written because the device is disabled | - | -
-327 | 0xFEB9 | ERR_Par_CannotSet_DeviceIsEnabled | parameter cannot be written because the device is enabled | - | -
-340 | 0xFEAC | ERR_Par_CannotSet_HwLimitIsActive | parameter cannot be written because the limit switch is active | - | -
-343 | 0xFEA9 | ERR_Par_CannotSet_StopOrHaltIsActive | parameter cannot be written because Stop or Halt command is executed | - | -
-344 | 0xFEA8 | ERR_Par_CannotSet_AxIsInHomingMode | parameter cannot be written because axis is in homing mode | - | -
-345 | 0xFEA7 | ERR_Par_CannotSet_HomingRequired | parameter cannot be written because homing mode is required | - | -
-350 | 0xFEA2 | ERR_Par_IndexDoesNotExist | parameter with the desired index doesn’t exist | - | -
-351 | 0xFEA1 | ERR_Par_SubIndexDoesNotExist | parameter with the desired sub index doesn’t exist | - | -
Communication Devices Errors
-501 | 0xFE0B | ERR_Com_CommunicationError | communication error | 0x8100 | -
-511 | 0xFE01 | ERR_Com_MasterGuardTimeExceeded | master guarding error | 0x8130 | -
-512 | 0xFE00 | ERR_Com_MasterHeartBeatTimeExceeded | master heartbeat error | 0x8130 | -
-516 | 0xFDFC | ERR_Com_SlaveLeavedOperationalState | The device has left the Oprational state. In this state, the process data are not processed. This error occurs when for example the state of EtherCAT device is changed from Operational to Safeoperational. | - | -
-521 | 0xFDF7 | ERR_Com_SlaveLeavedDataExchange | The device has left the Data-Exchange state. In this state, the process data are not processed. This error occurs when for example the PROFIBUS master fails. | - | -
-601 | 0xFDA7 | ERR_Com_CanBusOff | CAN bus is off | - | -
-609 | 0xFD9F | ERR_Com_CanOtherError | other CAN com. error | - | -
QAENC (Quasi Absolut Encoder) Errors
-710 | 0xFD3A | ERR_QuasiAbsEncoder_InvalidPosition | difference on index positions bigger than the tolerance | - | -
-711 | 0xFD39 | ERR_QuasiAbsEncoder_StoredPositionIsInvalid | no valid position after a reset of the electronic voltage | - | -
-715 | 0xFD35 | ERR_QuasiAbsEncoder_BadCRC | read/write error due to CRC | - | -
-716 | 0xFD34 | ERR_QuasiAbsEncoder_SavingError | error during saving the position | - | -
Encoder commutation
-730 | 0xFD26 | ERR_CommutationNotReferenced | Encoder referencing was not performed (MOTOR_Commutation_Referencing). The adjustment must be performed on the device that use the encoder signals for commutation. | - | -
Device Errors
-1000 | 0xFC18 | ERR_FieldUnderVoltage | power voltage is too low | 0x3220 | -
-1001 | 0xFC17 | ERR_FieldOverVoltage | power voltage is too high | 0x3210 | -
-1002 | 0xFC16 | ERR_MainsUnderVoltage | electronic voltage is too low | 0x3120 | -
-1003 | 0xFC15 | ERR_MainsOverVoltage | electronic voltage is too high | 0x3110 | -
-1020 | 0xFC04 | ERR_DeviceOverTemperature | over temperature device | 0x4210 | -
-1021 | 0xFC03 | ERR_HeatSinkOverTemperature | over temperature heat sink | 0x4310 | -
-1060 | 0xFBDC | ERR_MotShortCircuit | Short circuit at the motor cable (Motor-Motor, Motor-GND, Motor-power) | 0x2130 | -
-1062 | 0xFBDA | ERR_EmergencyUpOverVoltage | protection of the electronic against power over voltage by hardware | - | -
-1078 | 0xFBCA | ERR_Enc_Failed | encoder checking failed | - | -
Regv Errors
-3010 | 0xF43E | ERR_Blockage | blockage error | - | -
Regp Errors
-4000 | 0xF060 | ERR_Regp_FollowingError | static following error | 0x8611 | -
-4001 | 0xF05F | ERR_Regp_FollowingErrorDyn | dynamic following error | - | -
-4005 | 0xF05B | ERR_Regp_ReachedTimeout | following error time out | - | -
Homing Errors
-4200 | 0xEF98 | ERR_Home_UnknownMethod | unknown homing method | - | -
-4201 | 0xEF97 | ERR_Home_IndexNotFound | index not found during homing | - | -
-4202 | 0xEF96 | ERR_Home_HwLimitPosReached | positive limit switch reached during homing | - | -
-4203 | 0xEF95 | ERR_Home_HwLimitNegReached | negative limit switch reached during homing | - | -
I/O Errors
-5100 | 0xEC14 | ERR_Io_EndSwitchActive | end switch is active | - | -
MPU Errors
-6000 | 0xE890 | ERR_MPU_BadCode | bad MPU code | - | -
-6001 | 0xE88F | ERR_MPU_ProgramCounterOutOfRange | program counter out of range | - | -
-6002 | 0xE88E | ERR_MPU_JmpOutOfRange | jump out of range | - | -
-6003 | 0xE88D | ERR_MPU_Div0 | division by 0 | - | -
-6020 | 0xE87C | ERR_MPU_RdErrArg0 | first argument could not be read | - | -
-6021 | 0xE87B | ERR_MPU_RdErrArg1 | second argument could not be read | - | -
-6030 | 0xE872 | ERR_MPU_WrErrArg0 | first argument could not be written | - | -
-6031 | 0xE871 | ERR_MPU_WrErrArg1 | second argument could not be written | - | -
-6040 | 0xE868 | ERR_MPU_CallStackOverflow | stack overflow at call routine | - | -
-6041 | 0xE867 | ERR_MPU_CallStackUnderflow | stack underflow at call routine | - | -
-6050 | 0xE85E | ERR_MPU_PrgBadMpuVersion | bad MPU version | - | -
-6051 | 0xE85D | ERR_MPU_PrgBadMpuCode | bad MPU code | - | -
-6052 | 0xE85C | ERR_MPU_PrgStoreFailed | storing of MPU failed | - | -
-6053 | 0xE85B | ERR_MPU_PrgRestoreFailed | restoring of MPU failed | - | -
-6054 | 0xE85A | ERR_MPU_PrgBadCrc | bad check sum of the MPU | - | -
Fatal Errors (This errors can not be reset – device is defective)
-30000 | 0x8AD0 | ERR_Fatal | general fatal error | 0xFF00 | -
-30001 | 0x8ACF | ERR_BadCodeCRC | bad checksum of the code | - | -
-30002 | 0x8ACE | ERR_StackOverflow | stack overflow | - | -
-30003 | 0x8ACD | ERR_StackUnderflow | stack underflow | - | -
-30010 | 0x8AC6 | ERR_SelftestFailed | selftest failed | 0xFF00 | -
-30030 | 0x8AB2 | ERR_ImCalibrationFailed | current calibration failed | 0xFF00 | -
-30031 | 0x8AB1 | ERR_UmCalibrationFailed | voltage calibration failed | 0xFF00 | -

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

print "Error =", d.SdoRd(0x3001, 0x00)    # Print the error code


3002.00h Status register

Name | DEV_Status
Designation | Status register
Data type | uint32
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | GetStatus()
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

Provides the value of the status register. Every bit of this register has got its own meaning (see table).

Assignment of the bits:
Bit | Name | Description for bit = 1
0 | STAT_Enabled | Controller and power stage are enabled.
1 | STAT_Error | An error has occurred. You can find the error code in DEV_ErrorReg.
2 | STAT_Warning | Not used at the moment
3 | STAT_Moving | Moving is active
4 STAT_Reached Target value was reached.

MODE_Curr    Target current was reached.
MODE_Vel     Target velocity was reached.
MODE_Pos     Target position was reached. (see POS_ReachedConfigFlags)
5 STAT_Limit Target value was limited.

MODE_Curr    Current was limited.
MODE_Vel     Velocity was limited.
MODE_Pos     Target position was limited.
6 | STAT_FollowingError | Following error was exceeded.
7 | STAT_HomingDone | Homing was successful.
8 | STAT_Toggle | The bit is toggled, when command (POS_Mova or POS_Movr) was accepted. Combined with bit STAT_Reached it is possible to recognize if the new position was reached (also when positioning to current location has happend). (Available starting with the firmware version 1.77.00.44).
9 | STAT_CmdToggle | The bit is toggled, when device command (DEV_Cmd_ExecOnChange) was recognized. With the aid of STAT_CmdError (Bit 10) it is possible to recognize if the new command was accepted. (Available starting with the firmware version 1.85.00.82).
10 | STAT_CmdError | Device command (DEV_Cmd_ExecOnChange) was not accepted, see also STAT_CmdToggle (Bit 9). (Available starting with the firmware version 1.85.00.82).
11 | STAT_StopOrHalt | Stop or Halt was executed (see DEV_Cmd).
12 | STAT_LimitCurrent | Current was limited (see: CURR_LimitMaxPos, CURR_LimitMaxNeg).
13 | STAT_LimitVel | Velocity was limited (see: VEL_LimitMaxPos, VEL_LimitMaxNeg).
14 | STAT_LimitPos | Position was limited (see: POS_PositionLimitMin, POS_PositionLimitMax).
15 | STAT_LimitSVel | SVelocity was limited.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d      = Dsa(1)                     # NodeId = 1

status = d.SdoRd(0x3002, 0x00)      # status read

if status & 0x0002:                 # check the bit 1
   print "An error has occured"
else:
   print "No error"


3003.00h Device mode

Name | DEV_Mode
Designation | Device mode
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 2, 3, 5, 7}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Mode(value)
Cross reference | -

Description

This parameter defines the operation mode of the device controller. The operation mode should only be changed while the controller is disabled to avoid unpredictable behaviors.

Parameter values:
Value | Name | PLC Function | Description
0 | MODE_OFF | ModeOff() | Power stage and controller are switched off.
2 | MODE_Current | ModeCurr() | Current control mode
3 | MODE_Vel | ModeVel() | Velocity mode with ramps
5 | MODE_SVel | ModeSVel() | Velocity mode without ramps (Sub Velocity mode)
7 | MODE_Pos | ModePos() | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3003, 0x00, 7)      # Device mode = position controller
print d.SdoRd(0x3003, 0x00)   # Show the actual device mode


3004.00h Power enable

Name | DEV_Enable
Designation | Power enable
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Disable(), Enable()
Cross reference | DEV_DinEnable,

Description

Use this parameter to disable or enable the device controller.
This parameter is designed to set the controller operation mode by software.

The mode of the controller depends also on the hardware enabling (see parameter DEV_DinEnable).
The enabling of the device is an AND connection between the parameter DEV_Enable and the digital input defined by the parameter DEV_DinEnable.
I.e., the enabling is only done, if both conditions are true.

Parameter values:
Value | Name | PLC Function | Description
0 | DISABLE | Disable() | Disables power stage and controller
1 | ENABLE | Enable() | Enables power stage and controller

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)   # Disable
d.SdoWr(0x3004, 0x00, 1)   # Enable


3008.00h Error configuration

Name | DEV_ConfigErrors
Designation | Error configuration
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.89.00.E5
Devices | All
PLC Function | -
Cross reference | DEV_ErrorReg

Description

This parameter is used to configure the error handling of the device.

Bit assignment:
Bit Name Description
0 Up Bit = 0 - Errors, caused by the power voltage (overvoltage, undervoltage, etc.) are considered as errors.
Bit = 1 - Errors, caused by the power voltage (overvoltage, undervoltage, etc.) are not considered as errors.
1 Ue Bit = 0 - Errors, caused by the electronic voltage (overvoltage, undervoltage, etc.) are considered as errors.
Bit = 1 - Errors, caused by the electronic voltage (overvoltage, undervoltage, etc.) are not considered as errors.
2 Temp Bit = 0 - Errors, caused by the temperature (overtemperature etc.) are considered as errors.
Bit = 1 - Errors, caused by the temperature (overtemperature etc.) are not considered as errors.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3008, 0x00, 0x01)               # DEV_ConfigErrors
config_err = hex(d.SdoRd(0x3008, 0x00))   # DEV_ConfigErrors
print "Config Errors:",config_err
print "Error:", d.SdoRd(0x3001, 0x00)     # DEV_ErrorReg


Content - Parameters 3000h (DSA) - Event commands

3010.11h | DEV_Event_Cmd1OnError | Event command 1 on errors
3010.12h | DEV_Event_Cmd2OnError | Event command 2 on errors
3010.13h | DEV_Event_Cmd3OnError | Event command 3 on errors
3010.14h | DEV_Event_Cmd4OnError | Event command 4 on errors
3010.31h | DEV_Event_Cmd1OnCommError | Event command 1 on communication errors
3010.32h | DEV_Event_Cmd2OnCommError | Event command 2 on communication errors
3010.33h | DEV_Event_Cmd3OnCommError | Event command 3 on communication errors
3010.34h | DEV_Event_Cmd4OnCommError | Event command 4 on communication errors
3012.10h | DEV_Event_CmdOnSpecificError1 | Event commands on specific error 1
3012.11h | DEV_Event_Cmd1OnSpecificError1 | Event command 1 on specific error 1
3012.12h | DEV_Event_Cmd2OnSpecificError1 | Event command 2 on specific error 1
3012.13h | DEV_Event_Cmd3OnSpecificError1 | Event command 3 on specific error 1
3012.14h | DEV_Event_Cmd4OnSpecificError1 | Event command 4 on specific error 1
3012.20h | DEV_Event_CmdOnSpecificError2 | Event commands on specific error 2
3012.21h | DEV_Event_Cmd1OnSpecificError2 | Event command 1 on specific error 2
3012.22h | DEV_Event_Cmd2OnSpecificError2 | Event command 2 on specific error 2
3012.23h | DEV_Event_Cmd3OnSpecificError2 | Event command 3 on specific error 2
3012.24h | DEV_Event_Cmd4OnSpecificError2 | Event command 4 on specific error 2
3012.30h | DEV_Event_CmdOnSpecificError3 | Event commands on specific error 3
3012.31h | DEV_Event_Cmd1OnSpecificError3 | Event command 1 on specific error 3
3012.32h | DEV_Event_Cmd2OnSpecificError3 | Event command 2 on specific error 3
3012.33h | DEV_Event_Cmd3OnSpecificError3 | Event command 3 on specific error 3
3012.34h | DEV_Event_Cmd4OnSpecificError3 | Event command 4 on specific error 3
3012.40h | DEV_Event_CmdOnSpecificError4 | Event commands on specific error 4
3012.41h | DEV_Event_Cmd1OnSpecificError4 | Event command 1 on specific error 4
3012.42h | DEV_Event_Cmd2OnSpecificError4 | Event command 2 on specific error 4
3012.43h | DEV_Event_Cmd3OnSpecificError4 | Event command 3 on specific error 4
3012.44h | DEV_Event_Cmd4OnSpecificError4 | Event command 4 on specific error 4


3010.11h Event command 1 on errors

Name | DEV_Event_Cmd1OnError
Designation | Event command 1 on errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an error occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnError, following event-functions on error are available:
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after erros
d.SdoWr(0x3010, 0x11, 2)      # DEV_Event_Cmd1OnError - QuickStop
d.SdoWr(0x3010, 0x12, 0x20)   # DEV_Event_Cmd2OnError - Disable powerstage
d.SdoWr(0x3010, 0x13, 1)      # DEV_Event_Cmd3OnError - Clear error
d.SdoWr(0x3010, 0x14, 0x21)   # DEV_Event_Cmd4OnError - Enable poewerstage


3010.12h Event command 2 on errors

Name | DEV_Event_Cmd2OnError
Designation | Event command 2 on errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an error occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnError, following event-functions on error are available:
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after erros
d.SdoWr(0x3010, 0x11, 2)      # DEV_Event_Cmd1OnError - QuickStop
d.SdoWr(0x3010, 0x12, 0x20)   # DEV_Event_Cmd2OnError - Disable powerstage
d.SdoWr(0x3010, 0x13, 1)      # DEV_Event_Cmd3OnError - Clear error
d.SdoWr(0x3010, 0x14, 0x21)   # DEV_Event_Cmd4OnError - Enable poewerstage


3010.13h Event command 3 on errors

Name | DEV_Event_Cmd3OnError
Designation | Event command 3 on errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an error occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnError, following event-functions on error are available:
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after erros
d.SdoWr(0x3010, 0x11, 2)      # DEV_Event_Cmd1OnError - QuickStop
d.SdoWr(0x3010, 0x12, 0x20)   # DEV_Event_Cmd2OnError - Disable powerstage
d.SdoWr(0x3010, 0x13, 1)      # DEV_Event_Cmd3OnError - Clear error
d.SdoWr(0x3010, 0x14, 0x21)   # DEV_Event_Cmd4OnError - Enable poewerstage


3010.14h Event command 4 on errors

Name | DEV_Event_Cmd4OnError
Designation | Event command 4 on errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an error occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnError, following event-functions on error are available:
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after erros
d.SdoWr(0x3010, 0x11, 2)      # DEV_Event_Cmd1OnError - QuickStop
d.SdoWr(0x3010, 0x12, 0x20)   # DEV_Event_Cmd2OnError - Disable powerstage
d.SdoWr(0x3010, 0x13, 1)      # DEV_Event_Cmd3OnError - Clear error
d.SdoWr(0x3010, 0x14, 0x21)   # DEV_Event_Cmd4OnError - Enable poewerstage


3010.31h Event command 1 on communication errors

Name | DEV_Event_Cmd1OnCommError
Designation | Event command 1 on communication errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnCommError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError

Description

With the aid of this parameter you can define the behavior of the drive controller when an communication error (s. DEV_ErrorReg, -501, -511, -512, -601) occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller

This function is disabled by default (subindex 31h = CMD_Nop), i.e. in case of an error the power stage is disabled.
If you set nonzero value, the function is enabled (i.e. the power stage is no more automatically disabled).
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnCommError, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after communication erros
d.SdoWr(0x3010, 0x31, 2)      # DEV_Event_Cmd1OnCommError - QuickStop
d.SdoWr(0x3010, 0x32, 0x20)   # DEV_Event_Cmd2OnCommError - Disable powerstage
d.SdoWr(0x3010, 0x33, 1)      # DEV_Event_Cmd3OnCommError - Clear error
d.SdoWr(0x3010, 0x34, 0x21)   # DEV_Event_Cmd4OnCommError - Enable powerstage


3010.32h Event command 2 on communication errors

Name | DEV_Event_Cmd2OnCommError
Designation | Event command 2 on communication errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnCommError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError

Description

With the aid of this parameter you can define the behavior of the drive controller when an communication error (s. DEV_ErrorReg, -501, -511, -512, -601) occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller

This function is disabled by default (subindex 31h = CMD_Nop), i.e. in case of an error the power stage is disabled.
If you set nonzero value, the function is enabled (i.e. the power stage is no more automatically disabled).
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnCommError, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after communication erros
d.SdoWr(0x3010, 0x31, 2)      # DEV_Event_Cmd1OnCommError - QuickStop
d.SdoWr(0x3010, 0x32, 0x20)   # DEV_Event_Cmd2OnCommError - Disable powerstage
d.SdoWr(0x3010, 0x33, 1)      # DEV_Event_Cmd3OnCommError - Clear error
d.SdoWr(0x3010, 0x34, 0x21)   # DEV_Event_Cmd4OnCommError - Enable powerstage


3010.33h Event command 3 on communication errors

Name | DEV_Event_Cmd3OnCommError
Designation | Event command 3 on communication errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnCommError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError

Description

With the aid of this parameter you can define the behavior of the drive controller when an communication error (s. DEV_ErrorReg, -501, -511, -512, -601) occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller

This function is disabled by default (subindex 31h = CMD_Nop), i.e. in case of an error the power stage is disabled.
If you set nonzero value, the function is enabled (i.e. the power stage is no more automatically disabled).
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnCommError, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after communication erros
d.SdoWr(0x3010, 0x31, 2)      # DEV_Event_Cmd1OnCommError - QuickStop
d.SdoWr(0x3010, 0x32, 0x20)   # DEV_Event_Cmd2OnCommError - Disable powerstage
d.SdoWr(0x3010, 0x33, 1)      # DEV_Event_Cmd3OnCommError - Clear error
d.SdoWr(0x3010, 0x34, 0x21)   # DEV_Event_Cmd4OnCommError - Enable powerstage


3010.34h Event command 4 on communication errors

Name | DEV_Event_Cmd4OnCommError
Designation | Event command 4 on communication errors
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnCommError([cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError

Description

With the aid of this parameter you can define the behavior of the drive controller when an communication error (s. DEV_ErrorReg, -501, -511, -512, -601) occurs.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller

This function is disabled by default (subindex 31h = CMD_Nop), i.e. in case of an error the power stage is disabled.
If you set nonzero value, the function is enabled (i.e. the power stage is no more automatically disabled).
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_Cmd1OnCommError, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# Commands after communication erros
d.SdoWr(0x3010, 0x31, 2)      # DEV_Event_Cmd1OnCommError - QuickStop
d.SdoWr(0x3010, 0x32, 0x20)   # DEV_Event_Cmd2OnCommError - Disable powerstage
d.SdoWr(0x3010, 0x33, 1)      # DEV_Event_Cmd3OnCommError - Clear error
d.SdoWr(0x3010, 0x34, 0x21)   # DEV_Event_Cmd4OnCommError - Enable powerstage


3012.10h Event commands on specific error 1

Name | DEV_Event_CmdOnSpecificError1
Designation | Event commands on specific error 1
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError1.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError1, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x10, -1000)     # DEV_Event_CmdOnSpecificError1 - Undervoltage
d.SdoWr(0x3012, 0x11, 2)         # DEV_Event_Cmd1OnSpecificError1 - QuickStop
d.SdoWr(0x3012, 0x12, 0x20)      # DEV_Event_Cmd2OnSpecificError1 - disable
d.SdoWr(0x3012, 0x13, 1)         # DEV_Event_Cmd3OnSpecificError1 - Clear Error
d.SdoWr(0x3012, 0x14, 0x21)      # DEV_Event_Cmd4OnSpecificError1 - enable


3012.11h Event command 1 on specific error 1

Name | DEV_Event_Cmd1OnSpecificError1
Designation | Event command 1 on specific error 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError1.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError1, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x10, -1000)     # DEV_Event_CmdOnSpecificError1 - Undervoltage
d.SdoWr(0x3012, 0x11, 2)         # DEV_Event_Cmd1OnSpecificError1 - QuickStop
d.SdoWr(0x3012, 0x12, 0x20)      # DEV_Event_Cmd2OnSpecificError1 - disable
d.SdoWr(0x3012, 0x13, 1)         # DEV_Event_Cmd3OnSpecificError1 - Clear Error
d.SdoWr(0x3012, 0x14, 0x21)      # DEV_Event_Cmd4OnSpecificError1 - enable


3012.12h Event command 2 on specific error 1

Name | DEV_Event_Cmd2OnSpecificError1
Designation | Event command 2 on specific error 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError1.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError1, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x10, -1000)     # DEV_Event_CmdOnSpecificError1 - Undervoltage
d.SdoWr(0x3012, 0x11, 2)         # DEV_Event_Cmd1OnSpecificError1 - QuickStop
d.SdoWr(0x3012, 0x12, 0x20)      # DEV_Event_Cmd2OnSpecificError1 - disable
d.SdoWr(0x3012, 0x13, 1)         # DEV_Event_Cmd3OnSpecificError1 - Clear Error
d.SdoWr(0x3012, 0x14, 0x21)      # DEV_Event_Cmd4OnSpecificError1 - enable


3012.13h Event command 3 on specific error 1

Name | DEV_Event_Cmd3OnSpecificError1
Designation | Event command 3 on specific error 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError1.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError1, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x10, -1000)     # DEV_Event_CmdOnSpecificError1 - Undervoltage
d.SdoWr(0x3012, 0x11, 2)         # DEV_Event_Cmd1OnSpecificError1 - QuickStop
d.SdoWr(0x3012, 0x12, 0x20)      # DEV_Event_Cmd2OnSpecificError1 - disable
d.SdoWr(0x3012, 0x13, 1)         # DEV_Event_Cmd3OnSpecificError1 - Clear Error
d.SdoWr(0x3012, 0x14, 0x21)      # DEV_Event_Cmd4OnSpecificError1 - enable


3012.14h Event command 4 on specific error 1

Name | DEV_Event_Cmd4OnSpecificError1
Designation | Event command 4 on specific error 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError1.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError1, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x10, -1000)     # DEV_Event_CmdOnSpecificError1 - Undervoltage
d.SdoWr(0x3012, 0x11, 2)         # DEV_Event_Cmd1OnSpecificError1 - QuickStop
d.SdoWr(0x3012, 0x12, 0x20)      # DEV_Event_Cmd2OnSpecificError1 - disable
d.SdoWr(0x3012, 0x13, 1)         # DEV_Event_Cmd3OnSpecificError1 - Clear Error
d.SdoWr(0x3012, 0x14, 0x21)      # DEV_Event_Cmd4OnSpecificError1 - enable


3012.20h Event commands on specific error 2

Name | DEV_Event_CmdOnSpecificError2
Designation | Event commands on specific error 2
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError2.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError2, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x20, -1000)     # DEV_Event_CmdOnSpecificError2 - Undervoltage
d.SdoWr(0x3012, 0x21, 2)         # DEV_Event_Cmd1OnSpecificError2 - QuickStop
d.SdoWr(0x3012, 0x22, 0x20)      # DEV_Event_Cmd2OnSpecificError2 - disable
d.SdoWr(0x3012, 0x23, 1)         # DEV_Event_Cmd3OnSpecificError2 - Clear Error
d.SdoWr(0x3012, 0x24, 0x21)      # DEV_Event_Cmd4OnSpecificError2 - enable


3012.21h Event command 1 on specific error 2

Name | DEV_Event_Cmd1OnSpecificError2
Designation | Event command 1 on specific error 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError2.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError2, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x20, -1000)     # DEV_Event_CmdOnSpecificError2 - Undervoltage
d.SdoWr(0x3012, 0x21, 2)         # DEV_Event_Cmd1OnSpecificError2 - QuickStop
d.SdoWr(0x3012, 0x22, 0x20)      # DEV_Event_Cmd2OnSpecificError2 - disable
d.SdoWr(0x3012, 0x23, 1)         # DEV_Event_Cmd3OnSpecificError2 - Clear Error
d.SdoWr(0x3012, 0x24, 0x21)      # DEV_Event_Cmd4OnSpecificError2 - enable


3012.22h Event command 2 on specific error 2

Name | DEV_Event_Cmd2OnSpecificError2
Designation | Event command 2 on specific error 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError2.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError2, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x20, -1000)     # DEV_Event_CmdOnSpecificError2 - Undervoltage
d.SdoWr(0x3012, 0x21, 2)         # DEV_Event_Cmd1OnSpecificError2 - QuickStop
d.SdoWr(0x3012, 0x22, 0x20)      # DEV_Event_Cmd2OnSpecificError2 - disable
d.SdoWr(0x3012, 0x23, 1)         # DEV_Event_Cmd3OnSpecificError2 - Clear Error
d.SdoWr(0x3012, 0x24, 0x21)      # DEV_Event_Cmd4OnSpecificError2 - enable


3012.23h Event command 3 on specific error 2

Name | DEV_Event_Cmd3OnSpecificError2
Designation | Event command 3 on specific error 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError2.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError2, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x20, -1000)     # DEV_Event_CmdOnSpecificError2 - Undervoltage
d.SdoWr(0x3012, 0x21, 2)         # DEV_Event_Cmd1OnSpecificError2 - QuickStop
d.SdoWr(0x3012, 0x22, 0x20)      # DEV_Event_Cmd2OnSpecificError2 - disable
d.SdoWr(0x3012, 0x23, 1)         # DEV_Event_Cmd3OnSpecificError2 - Clear Error
d.SdoWr(0x3012, 0x24, 0x21)      # DEV_Event_Cmd4OnSpecificError2 - enable


3012.24h Event command 4 on specific error 2

Name | DEV_Event_Cmd4OnSpecificError2
Designation | Event command 4 on specific error 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError2.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError2, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError3
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x20, -1000)     # DEV_Event_CmdOnSpecificError2 - Undervoltage
d.SdoWr(0x3012, 0x21, 2)         # DEV_Event_Cmd1OnSpecificError2 - QuickStop
d.SdoWr(0x3012, 0x22, 0x20)      # DEV_Event_Cmd2OnSpecificError2 - disable
d.SdoWr(0x3012, 0x23, 1)         # DEV_Event_Cmd3OnSpecificError2 - Clear Error
d.SdoWr(0x3012, 0x24, 0x21)      # DEV_Event_Cmd4OnSpecificError2 - enable


3012.30h Event commands on specific error 3

Name | DEV_Event_CmdOnSpecificError3
Designation | Event commands on specific error 3
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError3.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError3, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x30, -1000)     # DEV_Event_CmdOnSpecificError3 - Undervoltage
d.SdoWr(0x3012, 0x31, 2)         # DEV_Event_Cmd1OnSpecificError3 - QuickStop
d.SdoWr(0x3012, 0x32, 0x20)      # DEV_Event_Cmd2OnSpecificError3 - disable
d.SdoWr(0x3012, 0x33, 1)         # DEV_Event_Cmd3OnSpecificError3 - Clear Error
d.SdoWr(0x3012, 0x34, 0x21)      # DEV_Event_Cmd4OnSpecificError3 - enable


3012.31h Event command 1 on specific error 3

Name | DEV_Event_Cmd1OnSpecificError3
Designation | Event command 1 on specific error 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError3.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError3, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x30, -1000)     # DEV_Event_CmdOnSpecificError3 - Undervoltage
d.SdoWr(0x3012, 0x31, 2)         # DEV_Event_Cmd1OnSpecificError3 - QuickStop
d.SdoWr(0x3012, 0x32, 0x20)      # DEV_Event_Cmd2OnSpecificError3 - disable
d.SdoWr(0x3012, 0x33, 1)         # DEV_Event_Cmd3OnSpecificError3 - Clear Error
d.SdoWr(0x3012, 0x34, 0x21)      # DEV_Event_Cmd4OnSpecificError3 - enable


3012.32h Event command 2 on specific error 3

Name | DEV_Event_Cmd2OnSpecificError3
Designation | Event command 2 on specific error 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError3.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError3, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x30, -1000)     # DEV_Event_CmdOnSpecificError3 - Undervoltage
d.SdoWr(0x3012, 0x31, 2)         # DEV_Event_Cmd1OnSpecificError3 - QuickStop
d.SdoWr(0x3012, 0x32, 0x20)      # DEV_Event_Cmd2OnSpecificError3 - disable
d.SdoWr(0x3012, 0x33, 1)         # DEV_Event_Cmd3OnSpecificError3 - Clear Error
d.SdoWr(0x3012, 0x34, 0x21)      # DEV_Event_Cmd4OnSpecificError3 - enable


3012.33h Event command 3 on specific error 3

Name | DEV_Event_Cmd3OnSpecificError3
Designation | Event command 3 on specific error 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError3.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError3, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x30, -1000)     # DEV_Event_CmdOnSpecificError3 - Undervoltage
d.SdoWr(0x3012, 0x31, 2)         # DEV_Event_Cmd1OnSpecificError3 - QuickStop
d.SdoWr(0x3012, 0x32, 0x20)      # DEV_Event_Cmd2OnSpecificError3 - disable
d.SdoWr(0x3012, 0x33, 1)         # DEV_Event_Cmd3OnSpecificError3 - Clear Error
d.SdoWr(0x3012, 0x34, 0x21)      # DEV_Event_Cmd4OnSpecificError3 - enable


3012.34h Event command 4 on specific error 3

Name | DEV_Event_Cmd4OnSpecificError3
Designation | Event command 4 on specific error 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError3.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError3, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError4

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x30, -1000)     # DEV_Event_CmdOnSpecificError3 - Undervoltage
d.SdoWr(0x3012, 0x31, 2)         # DEV_Event_Cmd1OnSpecificError3 - QuickStop
d.SdoWr(0x3012, 0x32, 0x20)      # DEV_Event_Cmd2OnSpecificError3 - disable
d.SdoWr(0x3012, 0x33, 1)         # DEV_Event_Cmd3OnSpecificError3 - Clear Error
d.SdoWr(0x3012, 0x34, 0x21)      # DEV_Event_Cmd4OnSpecificError3 - enable


3012.40h Event commands on specific error 4

Name | DEV_Event_CmdOnSpecificError4
Designation | Event commands on specific error 4
Data type | int16
Access | read / write
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError4.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError4, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x40, -1000)     # DEV_Event_CmdOnSpecificError4 - Undervoltage
d.SdoWr(0x3012, 0x41, 2)         # DEV_Event_Cmd1OnSpecificError4 - QuickStop
d.SdoWr(0x3012, 0x42, 0x20)      # DEV_Event_Cmd2OnSpecificError4 - disable
d.SdoWr(0x3012, 0x43, 1)         # DEV_Event_Cmd3OnSpecificError4 - Clear Error
d.SdoWr(0x3012, 0x44, 0x21)      # DEV_Event_Cmd4OnSpecificError4 - enable


3012.41h Event command 1 on specific error 4

Name | DEV_Event_Cmd1OnSpecificError4
Designation | Event command 1 on specific error 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError4.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError4, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x40, -1000)     # DEV_Event_CmdOnSpecificError4 - Undervoltage
d.SdoWr(0x3012, 0x41, 2)         # DEV_Event_Cmd1OnSpecificError4 - QuickStop
d.SdoWr(0x3012, 0x42, 0x20)      # DEV_Event_Cmd2OnSpecificError4 - disable
d.SdoWr(0x3012, 0x43, 1)         # DEV_Event_Cmd3OnSpecificError4 - Clear Error
d.SdoWr(0x3012, 0x44, 0x21)      # DEV_Event_Cmd4OnSpecificError4 - enable


3012.42h Event command 2 on specific error 4

Name | DEV_Event_Cmd2OnSpecificError4
Designation | Event command 2 on specific error 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError4.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError4, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x40, -1000)     # DEV_Event_CmdOnSpecificError4 - Undervoltage
d.SdoWr(0x3012, 0x41, 2)         # DEV_Event_Cmd1OnSpecificError4 - QuickStop
d.SdoWr(0x3012, 0x42, 0x20)      # DEV_Event_Cmd2OnSpecificError4 - disable
d.SdoWr(0x3012, 0x43, 1)         # DEV_Event_Cmd3OnSpecificError4 - Clear Error
d.SdoWr(0x3012, 0x44, 0x21)      # DEV_Event_Cmd4OnSpecificError4 - enable


3012.43h Event command 3 on specific error 4

Name | DEV_Event_Cmd3OnSpecificError4
Designation | Event command 3 on specific error 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError4.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError4, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x40, -1000)     # DEV_Event_CmdOnSpecificError4 - Undervoltage
d.SdoWr(0x3012, 0x41, 2)         # DEV_Event_Cmd1OnSpecificError4 - QuickStop
d.SdoWr(0x3012, 0x42, 0x20)      # DEV_Event_Cmd2OnSpecificError4 - disable
d.SdoWr(0x3012, 0x43, 1)         # DEV_Event_Cmd3OnSpecificError4 - Clear Error
d.SdoWr(0x3012, 0x44, 0x21)      # DEV_Event_Cmd4OnSpecificError4 - enable


3012.44h Event command 4 on specific error 4

Name | DEV_Event_Cmd4OnSpecificError4
Designation | Event command 4 on specific error 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 20h, 21h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | Event_CmdOnSpecError(nr, error, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Event_Cmd1OnError, DEV_Event_Cmd1OnCommError

Description

With the aid of this parameter you can define the behavior of the drive controller when an specific error occurs. The specific error are defined in the register DEV_Event_CmdOnSpecificError4.

In case of an error, up to four commands (one after another) can be processed. In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command.
The following commands are available:

Commands:
Hex | Dec | Name | PLC Function | Description
00h | 0 | CMD_Nop | - | No operation; Mark the end of the sequence.
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | QuickStop() | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Halt() | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
20h | 32 | CMD_Disable | Disable() | Disables power stage and controller
21h | 33 | CMD_Enable | Enable() | Enables power stage and controller
For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Except DEV_Event_CmdOnSpecificError4, following event-functions on error are available:
  • DEV_Event_Cmd1OnError
  • DEV_Event_Cmd1OnCommError
  • DEV_Event_CmdOnSpecificError1
  • DEV_Event_CmdOnSpecificError2
  • DEV_Event_CmdOnSpecificError3

The event can be processed only by one event-function. The highest priority have functions DEV_Event_CmdOnSpecificError1..4, the lowest priority has DEV_Event_Cmd1OnError. That means, if e.g. DEV_Event_Cmd1OnError and DEV_Event_Cmd1OnCommError were defined and an communication-error occurs, then only device commands from DEV_Event_Cmd1OnCommError are executed. In any other error device commands from DEV_Event_Cmd1OnError are executed.

WARNING !!

If the event-function on error is defined, the power stage of the drive controller is not automatically disabled in case of an error.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# Commands on undervoltage
d.SdoWr(0x3012, 0x40, -1000)     # DEV_Event_CmdOnSpecificError4 - Undervoltage
d.SdoWr(0x3012, 0x41, 2)         # DEV_Event_Cmd1OnSpecificError4 - QuickStop
d.SdoWr(0x3012, 0x42, 0x20)      # DEV_Event_Cmd2OnSpecificError4 - disable
d.SdoWr(0x3012, 0x43, 1)         # DEV_Event_Cmd3OnSpecificError4 - Clear Error
d.SdoWr(0x3012, 0x44, 0x21)      # DEV_Event_Cmd4OnSpecificError4 - enable


Content - Parameters 3000h (DSA) - User commands

3014.11h | DEV_Event1_OnUserCmd1 | Command 1 on usercommand 1
3014.12h | DEV_Event2_OnUserCmd1 | Command 2 on usercommand 1
3014.13h | DEV_Event3_OnUserCmd1 | Command 3 on usercommand 1
3014.14h | DEV_Event4_OnUserCmd1 | Command 4 on usercommand 1
3014.21h | DEV_Event1_OnUserCmd2 | Command 1 on usercommand 2
3014.22h | DEV_Event2_OnUserCmd2 | Command 2 on usercommand 2
3014.23h | DEV_Event3_OnUserCmd2 | Command 3 on usercommand 2
3014.24h | DEV_Event4_OnUserCmd2 | Command 4 on usercommand 2
3014.31h | DEV_Event1_OnUserCmd3 | Command 1 on usercommand 3
3014.32h | DEV_Event2_OnUserCmd3 | Command 2 on usercommand 3
3014.33h | DEV_Event3_OnUserCmd3 | Command 3 on usercommand 3
3014.34h | DEV_Event4_OnUserCmd3 | Command 4 on usercommand 3
3014.41h | DEV_Event1_OnUserCmd4 | Command 1 on usercommand 4
3014.42h | DEV_Event2_OnUserCmd4 | Command 2 on usercommand 4
3014.43h | DEV_Event3_OnUserCmd4 | Command 3 on usercommand 4
3014.44h | DEV_Event4_OnUserCmd4 | Command 4 on usercommand 4
3014.51h | DEV_Event1_OnUserCmd5 | Command 1 on usercommand 5
3014.52h | DEV_Event2_OnUserCmd5 | Command 2 on usercommand 5
3014.53h | DEV_Event3_OnUserCmd5 | Command 3 on usercommand 5
3014.54h | DEV_Event4_OnUserCmd5 | Command 4 on usercommand 5
3014.61h | DEV_Event1_OnUserCmd6 | Command 1 on usercommand 6
3014.62h | DEV_Event2_OnUserCmd6 | Command 2 on usercommand 6
3014.63h | DEV_Event3_OnUserCmd6 | Command 3 on usercommand 6
3014.64h | DEV_Event4_OnUserCmd6 | Command 4 on usercommand 6
3014.71h | DEV_Event1_OnUserCmd7 | Command 1 on usercommand 7
3014.72h | DEV_Event2_OnUserCmd7 | Command 2 on usercommand 7
3014.73h | DEV_Event3_OnUserCmd7 | Command 3 on usercommand 7
3014.74h | DEV_Event4_OnUserCmd7 | Command 4 on usercommand 7
3014.81h | DEV_Event1_OnUserCmd8 | Command 1 on usercommand 8
3014.82h | DEV_Event2_OnUserCmd8 | Command 2 on usercommand 8
3014.83h | DEV_Event3_OnUserCmd8 | Command 3 on usercommand 8
3014.84h | DEV_Event4_OnUserCmd8 | Command 4 on usercommand 8


3014.11h Command 1 on usercommand 1

Name | DEV_Event1_OnUserCmd1
Designation | Command 1 on usercommand 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 02h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(1, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 71h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 71h (CMD_UserCmd1) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x11, 0x17)   # position mode
d.SdoWr(0x3014, 0x12, 0x21)   # enable
d.SdoWr(0x3014, 0x13, 0x51)   # start homing
d.SdoWr(0x3014, 0x14, 0x00)   # no operation


3014.12h Command 2 on usercommand 1

Name | DEV_Event2_OnUserCmd1
Designation | Command 2 on usercommand 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 20h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(1, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 71h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 71h (CMD_UserCmd1) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x11, 0x17)   # position mode
d.SdoWr(0x3014, 0x12, 0x21)   # enable
d.SdoWr(0x3014, 0x13, 0x51)   # start homing
d.SdoWr(0x3014, 0x14, 0x00)   # no operation


3014.13h Command 3 on usercommand 1

Name | DEV_Event3_OnUserCmd1
Designation | Command 3 on usercommand 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(1, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 71h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 71h (CMD_UserCmd1) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x11, 0x17)   # position mode
d.SdoWr(0x3014, 0x12, 0x21)   # enable
d.SdoWr(0x3014, 0x13, 0x51)   # start homing
d.SdoWr(0x3014, 0x14, 0x00)   # no operation


3014.14h Command 4 on usercommand 1

Name | DEV_Event4_OnUserCmd1
Designation | Command 4 on usercommand 1
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(1, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 71h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x11, 0x12, 0x13, 0x14) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 71h (CMD_UserCmd1) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x11, 0x17)   # position mode
d.SdoWr(0x3014, 0x12, 0x21)   # enable
d.SdoWr(0x3014, 0x13, 0x51)   # start homing
d.SdoWr(0x3014, 0x14, 0x00)   # no operation


3014.21h Command 1 on usercommand 2

Name | DEV_Event1_OnUserCmd2
Designation | Command 1 on usercommand 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(2, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 72h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x21, 0x22, 0x23, 0x24) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd2) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x21, 0x17)   # position mode
d.SdoWr(0x3014, 0x22, 0x21)   # enable
d.SdoWr(0x3014, 0x23, 0x51)   # start homing
d.SdoWr(0x3014, 0x24, 0x00)   # no operation


3014.22h Command 2 on usercommand 2

Name | DEV_Event2_OnUserCmd2
Designation | Command 2 on usercommand 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 20h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(2, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 72h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x21, 0x22, 0x23, 0x24) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd2) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x21, 0x17)   # position mode
d.SdoWr(0x3014, 0x22, 0x21)   # enable
d.SdoWr(0x3014, 0x23, 0x51)   # start homing
d.SdoWr(0x3014, 0x24, 0x00)   # no operation


3014.23h Command 3 on usercommand 2

Name | DEV_Event3_OnUserCmd2
Designation | Command 3 on usercommand 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(2, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 72h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x21, 0x22, 0x23, 0x24) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd2) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x21, 0x17)   # position mode
d.SdoWr(0x3014, 0x22, 0x21)   # enable
d.SdoWr(0x3014, 0x23, 0x51)   # start homing
d.SdoWr(0x3014, 0x24, 0x00)   # no operation


3014.24h Command 4 on usercommand 2

Name | DEV_Event4_OnUserCmd2
Designation | Command 4 on usercommand 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(2, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 72h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x21, 0x22, 0x23, 0x24) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd2) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x21, 0x17)   # position mode
d.SdoWr(0x3014, 0x22, 0x21)   # enable
d.SdoWr(0x3014, 0x23, 0x51)   # start homing
d.SdoWr(0x3014, 0x24, 0x00)   # no operation


3014.31h Command 1 on usercommand 3

Name | DEV_Event1_OnUserCmd3
Designation | Command 1 on usercommand 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 12h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(3, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 73h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x31, 0x32, 0x33, 0x34) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 73h (CMD_UserCmd3) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x31, 0x17)   # position mode
d.SdoWr(0x3014, 0x32, 0x21)   # enable
d.SdoWr(0x3014, 0x33, 0x51)   # start homing
d.SdoWr(0x3014, 0x34, 0x00)   # no operation


3014.32h Command 2 on usercommand 3

Name | DEV_Event2_OnUserCmd3
Designation | Command 2 on usercommand 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(3, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 73h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x31, 0x32, 0x33, 0x34) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 73h (CMD_UserCmd3) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x31, 0x17)   # position mode
d.SdoWr(0x3014, 0x32, 0x21)   # enable
d.SdoWr(0x3014, 0x33, 0x51)   # start homing
d.SdoWr(0x3014, 0x34, 0x00)   # no operation


3014.33h Command 3 on usercommand 3

Name | DEV_Event3_OnUserCmd3
Designation | Command 3 on usercommand 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 30h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(3, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 73h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x31, 0x32, 0x33, 0x34) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 73h (CMD_UserCmd3) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x31, 0x17)   # position mode
d.SdoWr(0x3014, 0x32, 0x21)   # enable
d.SdoWr(0x3014, 0x33, 0x51)   # start homing
d.SdoWr(0x3014, 0x34, 0x00)   # no operation


3014.34h Command 4 on usercommand 3

Name | DEV_Event4_OnUserCmd3
Designation | Command 4 on usercommand 3
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(3, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 73h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x31, 0x32, 0x33, 0x34) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 73h (CMD_UserCmd3) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x31, 0x17)   # position mode
d.SdoWr(0x3014, 0x32, 0x21)   # enable
d.SdoWr(0x3014, 0x33, 0x51)   # start homing
d.SdoWr(0x3014, 0x34, 0x00)   # no operation


3014.41h Command 1 on usercommand 4

Name | DEV_Event1_OnUserCmd4
Designation | Command 1 on usercommand 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 13h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(4, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 74h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x41, 0x42, 0x43, 0x44) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 74h (CMD_UserCmd4) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x41, 0x17)   # position mode
d.SdoWr(0x3014, 0x42, 0x21)   # enable
d.SdoWr(0x3014, 0x43, 0x51)   # start homing
d.SdoWr(0x3014, 0x44, 0x00)   # no operation


3014.42h Command 2 on usercommand 4

Name | DEV_Event2_OnUserCmd4
Designation | Command 2 on usercommand 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(4, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 74h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x41, 0x42, 0x43, 0x44) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 74h (CMD_UserCmd4) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x41, 0x17)   # position mode
d.SdoWr(0x3014, 0x42, 0x21)   # enable
d.SdoWr(0x3014, 0x43, 0x51)   # start homing
d.SdoWr(0x3014, 0x44, 0x00)   # no operation


3014.43h Command 3 on usercommand 4

Name | DEV_Event3_OnUserCmd4
Designation | Command 3 on usercommand 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 31h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(4, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 74h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x41, 0x42, 0x43, 0x44) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 74h (CMD_UserCmd4) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x41, 0x17)   # position mode
d.SdoWr(0x3014, 0x42, 0x21)   # enable
d.SdoWr(0x3014, 0x43, 0x51)   # start homing
d.SdoWr(0x3014, 0x44, 0x00)   # no operation


3014.44h Command 4 on usercommand 4

Name | DEV_Event4_OnUserCmd4
Designation | Command 4 on usercommand 4
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(4, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 74h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x41, 0x42, 0x43, 0x44) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 74h (CMD_UserCmd4) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x41, 0x17)   # position mode
d.SdoWr(0x3014, 0x42, 0x21)   # enable
d.SdoWr(0x3014, 0x43, 0x51)   # start homing
d.SdoWr(0x3014, 0x44, 0x00)   # no operation


3014.51h Command 1 on usercommand 5

Name | DEV_Event1_OnUserCmd5
Designation | Command 1 on usercommand 5
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 15h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(5, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 75h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x51, 0x52, 0x53, 0x54) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 75h (CMD_UserCmd5) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x51, 0x17)   # position mode
d.SdoWr(0x3014, 0x52, 0x21)   # enable
d.SdoWr(0x3014, 0x53, 0x51)   # start homing
d.SdoWr(0x3014, 0x54, 0x00)   # no operation


3014.52h Command 2 on usercommand 5

Name | DEV_Event2_OnUserCmd5
Designation | Command 2 on usercommand 5
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(5, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 75h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x51, 0x52, 0x53, 0x54) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 75h (CMD_UserCmd5) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x51, 0x17)   # position mode
d.SdoWr(0x3014, 0x52, 0x21)   # enable
d.SdoWr(0x3014, 0x53, 0x51)   # start homing
d.SdoWr(0x3014, 0x54, 0x00)   # no operation


3014.53h Command 3 on usercommand 5

Name | DEV_Event3_OnUserCmd5
Designation | Command 3 on usercommand 5
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 32h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(5, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 75h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x51, 0x52, 0x53, 0x54) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 75h (CMD_UserCmd5) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x51, 0x17)   # position mode
d.SdoWr(0x3014, 0x52, 0x21)   # enable
d.SdoWr(0x3014, 0x53, 0x51)   # start homing
d.SdoWr(0x3014, 0x54, 0x00)   # no operation


3014.54h Command 4 on usercommand 5

Name | DEV_Event4_OnUserCmd5
Designation | Command 4 on usercommand 5
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(5, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 75h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x51, 0x52, 0x53, 0x54) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 75h (CMD_UserCmd5) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x51, 0x17)   # position mode
d.SdoWr(0x3014, 0x52, 0x21)   # enable
d.SdoWr(0x3014, 0x53, 0x51)   # start homing
d.SdoWr(0x3014, 0x54, 0x00)   # no operation


3014.61h Command 1 on usercommand 6

Name | DEV_Event1_OnUserCmd6
Designation | Command 1 on usercommand 6
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 17h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(6, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 76h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x61, 0x62, 0x63, 0x64) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 76h (CMD_UserCmd6) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x61, 0x17)   # position mode
d.SdoWr(0x3014, 0x62, 0x21)   # enable
d.SdoWr(0x3014, 0x63, 0x51)   # start homing
d.SdoWr(0x3014, 0x64, 0x00)   # no operation


3014.62h Command 2 on usercommand 6

Name | DEV_Event2_OnUserCmd6
Designation | Command 2 on usercommand 6
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(6, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 76h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x61, 0x62, 0x63, 0x64) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 76h (CMD_UserCmd6) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x61, 0x17)   # position mode
d.SdoWr(0x3014, 0x62, 0x21)   # enable
d.SdoWr(0x3014, 0x63, 0x51)   # start homing
d.SdoWr(0x3014, 0x64, 0x00)   # no operation


3014.63h Command 3 on usercommand 6

Name | DEV_Event3_OnUserCmd6
Designation | Command 3 on usercommand 6
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 33h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(6, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 76h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x61, 0x62, 0x63, 0x64) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 76h (CMD_UserCmd6) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x61, 0x17)   # position mode
d.SdoWr(0x3014, 0x62, 0x21)   # enable
d.SdoWr(0x3014, 0x63, 0x51)   # start homing
d.SdoWr(0x3014, 0x64, 0x00)   # no operation


3014.64h Command 4 on usercommand 6

Name | DEV_Event4_OnUserCmd6
Designation | Command 4 on usercommand 6
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(6, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 76h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x61, 0x62, 0x63, 0x64) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 76h (CMD_UserCmd6) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x61, 0x17)   # position mode
d.SdoWr(0x3014, 0x62, 0x21)   # enable
d.SdoWr(0x3014, 0x63, 0x51)   # start homing
d.SdoWr(0x3014, 0x64, 0x00)   # no operation


3014.71h Command 1 on usercommand 7

Name | DEV_Event1_OnUserCmd7
Designation | Command 1 on usercommand 7
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 17h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(7, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 77h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x71, 0x72, 0x73, 0x74) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 77h (CMD_UserCmd7) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x71, 0x17)   # position mode
d.SdoWr(0x3014, 0x72, 0x21)   # enable
d.SdoWr(0x3014, 0x73, 0x51)   # start homing
d.SdoWr(0x3014, 0x74, 0x00)   # no operation


3014.72h Command 2 on usercommand 7

Name | DEV_Event2_OnUserCmd7
Designation | Command 2 on usercommand 7
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(7, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 77h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x71, 0x72, 0x73, 0x74) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 77h (CMD_UserCmd7) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x71, 0x17)   # position mode
d.SdoWr(0x3014, 0x72, 0x21)   # enable
d.SdoWr(0x3014, 0x73, 0x51)   # start homing
d.SdoWr(0x3014, 0x74, 0x00)   # no operation


3014.73h Command 3 on usercommand 7

Name | DEV_Event3_OnUserCmd7
Designation | Command 3 on usercommand 7
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 34h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(7, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 77h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x71, 0x72, 0x73, 0x74) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 77h (CMD_UserCmd7) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x71, 0x17)   # position mode
d.SdoWr(0x3014, 0x72, 0x21)   # enable
d.SdoWr(0x3014, 0x73, 0x51)   # start homing
d.SdoWr(0x3014, 0x74, 0x00)   # no operation


3014.74h Command 4 on usercommand 7

Name | DEV_Event4_OnUserCmd7
Designation | Command 4 on usercommand 7
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(7, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 77h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x71, 0x72, 0x73, 0x74) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 77h (CMD_UserCmd7) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x71, 0x17)   # position mode
d.SdoWr(0x3014, 0x72, 0x21)   # enable
d.SdoWr(0x3014, 0x73, 0x51)   # start homing
d.SdoWr(0x3014, 0x74, 0x00)   # no operation


3014.81h Command 1 on usercommand 8

Name | DEV_Event1_OnUserCmd8
Designation | Command 1 on usercommand 8
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 17h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(8, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 78h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x81, 0x82, 0x83, 0x84) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd8) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x81, 0x17)   # position mode
d.SdoWr(0x3014, 0x82, 0x21)   # enable
d.SdoWr(0x3014, 0x83, 0x51)   # start homing
d.SdoWr(0x3014, 0x84, 0x00)   # no operation


3014.82h Command 2 on usercommand 8

Name | DEV_Event2_OnUserCmd8
Designation | Command 2 on usercommand 8
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 21h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(8, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 78h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x81, 0x82, 0x83, 0x84) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd8) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x81, 0x17)   # position mode
d.SdoWr(0x3014, 0x82, 0x21)   # enable
d.SdoWr(0x3014, 0x83, 0x51)   # start homing
d.SdoWr(0x3014, 0x84, 0x00)   # no operation


3014.83h Command 3 on usercommand 8

Name | DEV_Event3_OnUserCmd8
Designation | Command 3 on usercommand 8
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 51h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(8, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 78h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x81, 0x82, 0x83, 0x84) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd8) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x81, 0x17)   # position mode
d.SdoWr(0x3014, 0x82, 0x21)   # enable
d.SdoWr(0x3014, 0x83, 0x51)   # start homing
d.SdoWr(0x3014, 0x84, 0x00)   # no operation


3014.84h Command 4 on usercommand 8

Name | DEV_Event4_OnUserCmd8
Designation | Command 4 on usercommand 8
Data type | uint8
Access | read / write
Attributs | -
Value range | {00h, 01h, 02h, 03h, 04h, 05h, 10h, 12h, 13h, 15h, 17h, 20h, 21h, 30h, 31h, 32h, 33h, 34h, 51h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.85.00.82
Devices | All
PLC Function | Event_CmdOnUserCmd(8, [cmd0, cmd1, cmd2, cmd3])
Cross reference | DEV_Cmd, DEV_Cmd_ExecOnChange

Description

With the aid of this parameter you can define the behavior of the drive controller when device command 78h (DEV_Cmd_ExecOnChange) is executed.

Each command can process up to four commands (one after another). In addition in each subindex (0x81, 0x82, 0x83, 0x84) you can store device command (see table below).
Device commands 0h to 34h and 51h (DEV_Cmd_ExecOnChange) are available.

For example, if the command CMD_QuickStop or CMD_Halt is used, the next command will take place, when the ramp generator will reach the velocity equals 0.

Default value of the parameters:
Command | Name | Parameter | Default value
71h | CMD_UserCmd1 | 3014.11h - 3014.14h | CMD_Quickstop (02h), CMD_Disable (20h), 0, 0
72h | CMD_UserCmd2 | 3014.21h - 3014.24h | CMD_Halt (03h), CMD_Disable (20h), 0, 0
73h | CMD_UserCmd3 | 3014.31h - 3014.34h | CMD_ModeCurr (12h), CMD_Enable (21h), CMD_Curr (30h), 0
74h | CMD_UserCmd4 | 3014.41h - 3014.44h | CMD_ModeVel (13h), CMD_Enable (21h), CMD_Vel (31h), 0
75h | CMD_UserCmd5 | 3014.51h - 3014.54h | CMD_ModeSVel (15h), CMD_Enable (21h), CMD_SVel (32h), 0
76h | CMD_UserCmd6 | 3014.61h - 3014.64h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Mova (33h), 0
77h | CMD_UserCmd7 | 3014.71h - 3014.74h | CMD_ModePos (17h), CMD_Enable (21h), CMD_Movr (34h), 0
78h | CMD_UserCmd8 | 3014.81h - 3014.84h | CMD_ModePos (17h), CMD_Enable (21h), CMD_HOME_Start (51h), 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# commands after command 78h (CMD_UserCmd8) in object 3000.01h (DEV_Cmd_ExecOnChange)
d.SdoWr(0x3014, 0x81, 0x17)   # position mode
d.SdoWr(0x3014, 0x82, 0x21)   # enable
d.SdoWr(0x3014, 0x83, 0x51)   # start homing
d.SdoWr(0x3014, 0x84, 0x00)   # no operation


Content - Parameters 3000h (DSA) - Device informations

3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number


3020.00h Device code

Name | DEV_Code
Designation | Device code
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.53.00.00
Devices | All
PLC Function | DevCode()
Cross reference | DEV_SubCode, DEV_Revision

Description

Provides an identification code of the device.
You can use this code for detection of this device e.g at a host computer. The code has no information regarding the range of voltage/current or regarding the configuration of the controller. It should just be used for identification of the device.

Code:
Value (Hex) | Name of the device
2520h | EDC-E20
2522h | EDC-E22
2527h | EDC-E27
2540h | EDC-E40
2542h | EDC-E42
2545h | EDC-E45
2547h | EDC-E47
2550h | EDC-E50
2551h | EDC-E51
2552h | EDC-E52
2555h | EDC-E55
2556h | EDC-E56
2557h | EDC-E57
2560h | EDC-E60
2561h | EDC-E61
2562h | EDC-E62
2565h | EDC-E65
2566h | EDC-E66
2567h | EDC-E67
2640h | EDC-S40
2645h | EDC-S45
2660h | EDC-S60
2665h | EDC-S65
2740h | EDC-B40
2745h | EDC-B45
2750h | EDC-B50
2755h | EDC-B55
2760h | EDC-B60
2765h | EDC-B65

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Device code    =", hex(d.SdoRd(0x03020, 0x00)) # DEV_Code - print device code
print "Device subcode =", hex(d.SdoRd(0x03020, 0x01)) # DEV_SubCode - print device subcode


3020.01h Device subcode

Name | DEV_SubCode
Designation | Device subcode
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.53.00.00
Devices | All
PLC Function | DevSubCode()
Cross reference | DEV_Code, DEV_Revision

Description

Provides an additional (to DEV_Code) identifier of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Device code    =", hex(d.SdoRd(0x03020, 0x00)) # DEV_Code - print device code
print "Device subcode =", hex(d.SdoRd(0x03020, 0x01)) # DEV_SubCode - print device subcode


3020.02h Revision code

Name | DEV_Revision
Designation | Revision code
Data type | uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.C6
Devices | All
PLC Function | -
Cross reference | DEV_Code, DEV_SubCode

Description

This parameter provides the revision code of the device.

0x0000 = Rev. A
0x0001 = Rev. B
0x0002 = Rev. C
...

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

print "Revision code : 0x%04x" % d.SdoRd(0x3020, 0x02)


3020.06h CPU identity code

Name | DEV_McCpuId
Designation | CPU identity code
Data type | uint32
Access | read only
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter returns the CPU identificationcode of ENGEL.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "CPU identity code: 0x%08x" % d.SdoRd(0x3020, 0x06)


3023.00h Software version

Name | DEV_VersionSw
Designation | Software version
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.53.00.00
Devices | All
PLC Function | MainVersionSw(), MainVersionSwString(), VersionSw(), VersionSwString()
Cross reference | DEV_SubVersionSw, DEV_RelVersionSw

Description

Provides the version of the device's firmware.
Use parameters DEV_VersionSw and DEV_SubVersionSw to get the complete version .

The version is encoded as follows:

    DEV_VersionSw    = XXYYh        (hex notation)
    DEV_SubVersionSw = UUZZh        (hex-notation)

The outcome of this is the following version:

    XX.YY.UU.ZZ

Example:

    DEV_VersionSw    = 0177h
    DEV_SubVersionSw = 0203h

    => version = 1.77.02.03

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

main_version = d.SdoRd(0x3023, 0x00)                      # DEV_VersionSw
sub_version  = d.SdoRd(0x3023, 0x01)                      # DEV_SubVersionSw
version      = (main_version<<16) | sub_version

print "Main firmware version:"
# Main software version as hex-value
print "Value  =", hex(d.MainVersionSw())                  # Main software version as hex-value via PLC function
print "Value  =", hex(main_version)

# Main software version as string
print "String =", d.MainVersionSwString()                 # Main software version as string via PLC function
print "String = %X.%02X" % ((main_version>>8)&0xFF,
                             main_version    &0xFF)       # Main software version as string

print
print "Firmware version:"
# software version as hex-value
print "Value  =", hex(d.VersionSw())                      # Software version as hex-value via PLC function
print "Value  =", hex(version)

# Software version as string
print "String =", d.VersionSwString()                     # Software version as string via PLC function
print "String = %X.%02X.%02X.%02X" % ((version>>24)&0xFF,
                                      (version>>16)&0xFF,
                                      (version>>8) &0xFF,
                                       version     &0xFF)


3023.01h Software subversion

Name | DEV_SubVersionSw
Designation | Software subversion
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.53.00.00
Devices | All
PLC Function | SubVersionSw(), SubVersionSwString(), VersionSw(), VersionSwString()
Cross reference | DEV_VersionSw, DEV_RelVersionSw

Description

Provides the sub version of the device's firmware.
Use parameters DEV_VersionSw and DEV_SubVersionSw to get the complete version .

The version is encoded as follows:

    DEV_VersionSw    = XXYYh        (hex notation)
    DEV_SubVersionSw = UUZZh        (hex-notation)

The outcome of this is the following version:

    XX.YY.UU.ZZ

Example:

    DEV_VersionSw    = 0177h
    DEV_SubVersionSw = 0203h

    => version = 1.77.02.03

Example

# -*- # -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

main_version = d.SdoRd(0x3023, 0x00)                      # DEV_VersionSw
sub_version  = d.SdoRd(0x3023, 0x01)                      # DEV_SubVersionSw
version      = (main_version<<16) | sub_version

print "Main firmware version:"
# Software subversion as hex-value
print "Value  =", hex(d.SubVersionSw())                  # Software subversion as hex-value via PLC function
print "Value  =", hex(sub_version)

# Software subversion as string
print "String =", d.SubVersionSwString()                 # Software subversion as string via PLC function
print "String = %X.%02X" % ((sub_version>>8)&0xFF,
                             sub_version    &0xFF)       # Software subversion as string

print
print "Firmware version:"
# software version as hex-value
print "Value  =", hex(d.VersionSw())                      # Software version as hex-value via PLC function
print "Value  =", hex(version)

# Software version as string
print "String =", d.VersionSwString()                     # Software version as string via PLC function
print "String = %X.%02X.%02X.%02X" % ((version>>24)&0xFF,
                                      (version>>16)&0xFF,
                                      (version>>8) &0xFF,
                                       version     &0xFF)


3023.02h Softwarerelease

Name | DEV_RelVersionSw
Designation | Softwarerelease
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.43
Devices | All
PLC Function | -
Cross reference | DEV_VersionSw, DEV_SubVersionSw

Description

Provides the release version of the device's firmware.
Use parameters DEV_RelVersionSw, DEV_VersionSw and DEV_SubVersionSw to get the complete version .

The version is encoded as follows:

    DEV_VersionSw    = XXYYh        (hex notation)
    DEV_SubVersionSw = UUZZh        (hex-notation)
    DEV_RelVersionSw = WWWWh        (hex-notation)

The outcome of this is the following version:

    XX.YY.UU.ZZ_WWWW

Example:

    DEV_VersionSw    = 0177h
    DEV_SubVersionSw = 0203h
    DEV_RelVersionSw = 0002h

    => version = 1.77.02.03_0002

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

main_version    = d.SdoRd(0x3023, 0x00)                   # DEV_VersionSw
sub_version     = d.SdoRd(0x3023, 0x01)                   # DEV_SubVersionSw
release_version = d.SdoRd(0x3023, 0x02)                   # DEV_RelVersionSw
version      = (main_version<<16) | sub_version

# Software version as string
print "FW-version = %X.%02X.%02X.%02X_%04X" % ((version>>24)    & 0xFF,
                                               (version>>16)    & 0xFF,
                                               (version>>8)     & 0xFF,
                                                version         & 0xFF,
                                                release_version & 0xFFFF)


3024.00h Hardware version

Name | DEV_VersionHw
Designation | Hardware version
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | d.VersionHw(), VersionHwString()
Cross reference | -

Description

Provides the device's hardware version.

The hardware version is encoded as follows.

    DEV_VersionHw = XXYYh        (in hex-notation)

This results in the following version:

    XX.YY

Example:

    DEV_VersionHw = 0102h

    => version = 1.02

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

version = d.SdoRd(0x3024, 0x00)                           # DEV_VersionHw

print "Hardware version:"

# Hardware version as hex-value
print "Value  =", hex(d.VersionHw())                      # Hardware version as hex-value via PLC function
print "Value  =", hex(version)

# Hardware version as string
print "String =", d.VersionHwString()                     # Hardware version as string via PLC function
print "String = %X.%02X.%02X.%02X" % ((version>>24)&0xFF,
                                      (version>>16)&0xFF,
                                      (version>>8) &0xFF,
                                       version     &0xFF)


3025.00h Customer code

Name | DEV_CustomerCode
Designation | Customer code
Data type | uint32
Access | read only
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000001h
Unit | -
Operating mode | All
Available since | 1.60.00.00
Devices | All
PLC Function | -
Cross reference | DEV_CustomerSwOption, DEV_CustomerHwOption

Description

Provides a customer code of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

print "CustomerCode      : 0x%08X" % (d.SdoRd(0x3025, 0x00))  # DEV_CustomerCode
print "CustomerSwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x01))  # DEV_CustomerSwOption
print "CustomerHwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x02))  # DEV_CustomerHwOption
print


3025.01h Customer software code

Name | DEV_CustomerSwOption
Designation | Customer software code
Data type | uint32
Access | read only
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000001h
Unit | -
Operating mode | All
Available since | 1.60.00.00
Devices | All
PLC Function | -
Cross reference | DEV_CustomerCode, DEV_CustomerHwOption

Description

Provides a software customer code of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

print "CustomerCode      : 0x%08X" % (d.SdoRd(0x3025, 0x00))  # DEV_CustomerCode
print "CustomerSwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x01))  # DEV_CustomerSwOption
print "CustomerHwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x02))  # DEV_CustomerHwOption
print


3025.02h Customer hardware code

Name | DEV_CustomerHwOption
Designation | Customer hardware code
Data type | uint32
Access | read only
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000001h
Unit | -
Operating mode | All
Available since | 1.60.00.00
Devices | All
PLC Function | -
Cross reference | DEV_CustomerCode, DEV_CustomerSwOption

Description

Provides a hardware customer code of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

print "CustomerCode      : 0x%08X" % (d.SdoRd(0x3025, 0x00))  # DEV_CustomerCode
print "CustomerSwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x01))  # DEV_CustomerSwOption
print "CustomerHwOption  : 0x%08X" % (d.SdoRd(0x3025, 0x02))  # DEV_CustomerHwOption
print


302C.00h Free data

Name | DEV_FreeData
Designation | Free data
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.71.00.33
Devices | All
PLC Function | -
Cross reference | -

Description

You can use this parameter for anything you like. It will be stored in the same way as the other 3000h parameters (see DEV_Cmd).

Here are a couple of examples which you could store in those values:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine
  • ...

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

print "FreeData =", d.SdoRd(0x302C, 0x00) # DEV_FreeData - read free data

d.SdoWr(0x302C, 0x00, 123456)             # DEV_FreeData - write value in free data


302D.01h Device article number

Name | DEV_Article_Nr
Designation | Device article number
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_Serial_Nr

Description

This parameter provides the article number of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Article number: %d" % d.SdoRd(0x302D, 0x01)


302D.02h Device serial number

Name | DEV_Serial_Nr
Designation | Device serial number
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_Article_Nr

Description

This parameter provides the serial number of the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Serial number: %d" % d.SdoRd(0x302D, 0x02)


Content - Parameters 3000h (DSA) - OEM data

302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9


302E.00h OEM data - command

Name | DEV_OemData_Cmd
Designation | OEM data - command
Data type | uint32
Access | read / write
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected.
You can change these values only if you have entered the correct password.

Using this command DEV_OemData_Cmd you can:
  • Enter a password
  • Set a new password
  • Store values and a new password permanently
The password consists of four parts (four 16 bit numbers), which have to be entered in correct order.
The default password is: 0000h 0000h 0000h 0000h

You must enter all commands as uint32 numbers.

Commands:
Commands (Hex) | Description
0000 0000h | Reset - afterwards you can enter the four parts of the password
0001 pppph | Enter password with "pppp" = uint16 part of the password (4 values are expected)
0020 pppph | 1st part of the password
0021 pppph | 2nd part of the password
0022 pppph | 3rd part of the password
0023 pppph | 4th part of the password
0080 0000h | Store values and password

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.01h OEM data - D0

Name | DEV_OemData_D0
Designation | OEM data - D0
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.02h OEM data - D1

Name | DEV_OemData_D1
Designation | OEM data - D1
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.03h OEM data - D2

Name | DEV_OemData_D2
Designation | OEM data - D2
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.04h OEM data - D3

Name | DEV_OemData_D3
Designation | OEM data - D3
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.05h OEM data - D4

Name | DEV_OemData_D4
Designation | OEM data - D4
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.06h OEM data - D5

Name | DEV_OemData_D5
Designation | OEM data - D5
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.07h OEM data - D6

Name | DEV_OemData_D6
Designation | OEM data - D6
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D7, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.08h OEM data - D7

Name | DEV_OemData_D7
Designation | OEM data - D7
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D8, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.09h OEM data - D8

Name | DEV_OemData_D8
Designation | OEM data - D8
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D9

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


302E.0Ah OEM data - D9

Name | DEV_OemData_D9
Designation | OEM data - D9
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_OemData_Cmd, DEV_OemData_D0, DEV_OemData_D1, DEV_OemData_D2, DEV_OemData_D3, DEV_OemData_D4, DEV_OemData_D5, DEV_OemData_D6, DEV_OemData_D7, DEV_OemData_D8

Description

With subindices 1...A you can store user information in the device. All values are password protected (see DEV_OemData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                      # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302E, 0, 0x00000000)  # DEV_OemData_Cmd - reset - enter old password
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word0
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word1
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word2
d.SdoWr(0x302E, 0, 0x00010000)  # DEV_OemData_Cmd - enter password - word3
#                        ----
#                        16bit password
# Change password
d.SdoWr(0x302E, 0, 0x00200000)  # DEV_OemData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302E, 0, 0x00210000)  # DEV_OemData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302E, 0, 0x00220000)  # DEV_OemData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302E, 0, 0x00230000)  # DEV_OemData_Cmd - new password - word3 = 0000h
#                        ----
#                        16bit password
# Change data
d.SdoWr(0x302E, 1, 0x11111111)  # DEV_OemData_D0 - enter data D0
d.SdoWr(0x302E, 2, 0x22222222)  # DEV_OemData_D1 - enter data D1
d.SdoWr(0x302E, 3, 0x33333333)  # DEV_OemData_D2 - enter data D2
d.SdoWr(0x302E, 4, 0x44444444)  # DEV_OemData_D3 - enter data D3
d.SdoWr(0x302E, 5, 0x55555555)  # DEV_OemData_D4 - enter data D4
d.SdoWr(0x302E, 6, 0x66666666)  # DEV_OemData_D5 - enter data D5
d.SdoWr(0x302E, 7, 0x77777777)  # DEV_OemData_D6 - enter data D6
d.SdoWr(0x302E, 8, 0x88888888)  # DEV_OemData_D7 - enter data D7
d.SdoWr(0x302E, 9, 0x99899999)  # DEV_OemData_D8 - enter data D8
d.SdoWr(0x302E, 10, 0xAAAAAAAA) # DEV_OemData_D9 - enter data D9

# Save password and data
d.SdoWr(0x302E, 0, 0x00800000)  # DEV_OemData_Cmd - save data and password


Content - Parameters 3000h (DSA) - User data

302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3


302F.00h User data - command

Name | DEV_UserData_Cmd
Designation | User data - command
Data type | uint32
Access | read / write
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_UserData_D0, DEV_UserData_D1, DEV_UserData_D2, DEV_UserData_D3

Description

There are four parameters (uint32, sub index 1...4) available. All values are password protected.
You can change these values only if you have entered the correct password.

Using this command DEV_UserData_Cmd you can:
  • Enter a password
  • Set a new password
  • Store values and a new password permanently
The password consists of four parts (four 16 bit numbers), which have to be entered in correct order.
The default password is: 0000h 0000h 0000h 0000h

You must enter all commands as uint32 numbers.

Commands:
Commands (Hex) | Description
0000 0000h | Reset - afterwards you can enter the four parts of the password
0001 pppph | Enter password with "pppp" = uint16 part of the password (4 values are expected)
0020 pppph | 1st part of the password
0021 pppph | 2nd part of the password
0022 pppph | 3rd part of the password
0023 pppph | 4th part of the password
0080 0000h | Store values and password

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302F, 0x00, 0x00000000)         # DEV_UserData_Cmd - reset - enter old password
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word0
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word1
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word2
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word3
                   #     ----
                   #     16bit password
# Change password
d.SdoWr(0x302F, 0x00, 0x00200000)         # DEV_UserData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302F, 0x00, 0x00210000)         # DEV_UserData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302F, 0x00, 0x00220000)         # DEV_UserData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302F, 0x00, 0x00230000)         # DEV_UserData_Cmd - new password - word3 = 0000h
                   #     ----
                   #     16bit password
# Change data
d.SdoWr(0x302F, 0x01, 0x11111111)         # DEV_UserData_D0 - enter data D0
d.SdoWr(0x302F, 0x02, 0x22222222)         # DEV_UserData_D1 - enter data D1
d.SdoWr(0x302F, 0x03, 0x33333333)         # DEV_UserData_D2 - enter data D2
d.SdoWr(0x302F, 0x04, 0x44444444)         # DEV_UserData_D3 - enter data D3

# Save password and data
d.SdoWr(0x302F, 0x00, 0x00800000)         # DEV_UserData_Cmd - save data and password


302F.01h User data - D0

Name | DEV_UserData_D0
Designation | User data - D0
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_UserData_Cmd, DEV_UserData_D1, DEV_UserData_D2, DEV_UserData_D3

Description

There are four parameters (uint32, sub index 1...4) available. All values are password protected (see DEV_UserData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302F, 0x00, 0x00000000)         # DEV_UserData_Cmd - reset - enter old password
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word0
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word1
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word2
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word3
                   #     ----
                   #     16bit password
# Change password
d.SdoWr(0x302F, 0x00, 0x00200000)         # DEV_UserData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302F, 0x00, 0x00210000)         # DEV_UserData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302F, 0x00, 0x00220000)         # DEV_UserData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302F, 0x00, 0x00230000)         # DEV_UserData_Cmd - new password - word3 = 0000h
                   #     ----
                   #     16bit password
# Change data
d.SdoWr(0x302F, 0x01, 0x11111111)         # DEV_UserData_D0 - enter data D0
d.SdoWr(0x302F, 0x02, 0x22222222)         # DEV_UserData_D1 - enter data D1
d.SdoWr(0x302F, 0x03, 0x33333333)         # DEV_UserData_D2 - enter data D2
d.SdoWr(0x302F, 0x04, 0x44444444)         # DEV_UserData_D3 - enter data D3

# Save password and data
d.SdoWr(0x302F, 0x00, 0x00800000)         # DEV_UserData_Cmd - save data and password


302F.02h User data - D1

Name | DEV_UserData_D1
Designation | User data - D1
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_UserData_Cmd, DEV_UserData_D0, DEV_UserData_D2, DEV_UserData_D3

Description

There are four parameters (uint32, sub index 1...4) available. All values are password protected (see DEV_UserData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302F, 0x00, 0x00000000)         # DEV_UserData_Cmd - reset - enter old password
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word0
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word1
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word2
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word3
                   #     ----
                   #     16bit password
# Change password
d.SdoWr(0x302F, 0x00, 0x00200000)         # DEV_UserData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302F, 0x00, 0x00210000)         # DEV_UserData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302F, 0x00, 0x00220000)         # DEV_UserData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302F, 0x00, 0x00230000)         # DEV_UserData_Cmd - new password - word3 = 0000h
                   #     ----
                   #     16bit password
# Change data
d.SdoWr(0x302F, 0x01, 0x11111111)         # DEV_UserData_D0 - enter data D0
d.SdoWr(0x302F, 0x02, 0x22222222)         # DEV_UserData_D1 - enter data D1
d.SdoWr(0x302F, 0x03, 0x33333333)         # DEV_UserData_D2 - enter data D2
d.SdoWr(0x302F, 0x04, 0x44444444)         # DEV_UserData_D3 - enter data D3

# Save password and data
d.SdoWr(0x302F, 0x00, 0x00800000)         # DEV_UserData_Cmd - save data and password


302F.03h User data - D2

Name | DEV_UserData_D2
Designation | User data - D2
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_UserData_Cmd, DEV_UserData_D0, DEV_UserData_D1, DEV_UserData_D3

Description

There are four parameters (uint32, sub index 1...4) available. All values are password protected (see DEV_UserData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302F, 0x00, 0x00000000)         # DEV_UserData_Cmd - reset - enter old password
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word0
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word1
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word2
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word3
                   #     ----
                   #     16bit password
# Change password
d.SdoWr(0x302F, 0x00, 0x00200000)         # DEV_UserData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302F, 0x00, 0x00210000)         # DEV_UserData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302F, 0x00, 0x00220000)         # DEV_UserData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302F, 0x00, 0x00230000)         # DEV_UserData_Cmd - new password - word3 = 0000h
                   #     ----
                   #     16bit password
# Change data
d.SdoWr(0x302F, 0x01, 0x11111111)         # DEV_UserData_D0 - enter data D0
d.SdoWr(0x302F, 0x02, 0x22222222)         # DEV_UserData_D1 - enter data D1
d.SdoWr(0x302F, 0x03, 0x33333333)         # DEV_UserData_D2 - enter data D2
d.SdoWr(0x302F, 0x04, 0x44444444)         # DEV_UserData_D3 - enter data D3

# Save password and data
d.SdoWr(0x302F, 0x00, 0x00800000)         # DEV_UserData_Cmd - save data and password


302F.04h User data - D3

Name | DEV_UserData_D3
Designation | User data - D3
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [00000000h .. FFFFFFFFh]
Default value | 00000000h
Unit | -
Operating mode | All
Available since | 1.64.00.75
Devices | All
PLC Function | -
Cross reference | DEV_UserData_Cmd, DEV_UserData_D0, DEV_UserData_D1, DEV_UserData_D2

Description

There are four parameters (uint32, sub index 1...4) available. All values are password protected (see DEV_UserData_Cmd).
These values and the password remain also after a firmware update.

This data can, for example, be used for the following information:
  • serial number of the machine
  • date of the last service
  • number of the parameter set
  • version of the machine

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# Access enable (enter old password)
d.SdoWr(0x302F, 0x00, 0x00000000)         # DEV_UserData_Cmd - reset - enter old password
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word0
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word1
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word2
d.SdoWr(0x302F, 0x00, 0x00010000)         # DEV_UserData_Cmd - enter password - word3
                   #     ----
                   #     16bit password
# Change password
d.SdoWr(0x302F, 0x00, 0x00200000)         # DEV_UserData_Cmd - new password - word0 = 0000h
d.SdoWr(0x302F, 0x00, 0x00210000)         # DEV_UserData_Cmd - new password - word1 = 0000h
d.SdoWr(0x302F, 0x00, 0x00220000)         # DEV_UserData_Cmd - new password - word2 = 0000h
d.SdoWr(0x302F, 0x00, 0x00230000)         # DEV_UserData_Cmd - new password - word3 = 0000h
                   #     ----
                   #     16bit password
# Change data
d.SdoWr(0x302F, 0x01, 0x11111111)         # DEV_UserData_D0 - enter data D0
d.SdoWr(0x302F, 0x02, 0x22222222)         # DEV_UserData_D1 - enter data D1
d.SdoWr(0x302F, 0x03, 0x33333333)         # DEV_UserData_D2 - enter data D2
d.SdoWr(0x302F, 0x04, 0x44444444)         # DEV_UserData_D3 - enter data D3

# Save password and data
d.SdoWr(0x302F, 0x00, 0x00800000)         # DEV_UserData_Cmd - save data and password


3031.00h Max. power voltage

Name | DEV_MaxUp
Designation | Max. power voltage
Data type | const uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevMaxUp()
Cross reference | -

Description

Provides the maximum permissible voltage of the power stage.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

# DEV_MaxUp - print max.power voltage
print "Up_max =", d.SdoRd(0x3031, 0x00), "[mV]"


3032.00h Max. motor current

Name | DEV_MaxIm
Designation | Max. motor current
Data type | const uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevMaxIm()
Cross reference | -

Description

Provides the maximum permissible current of the power stage.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

# DEV_MaxIm - max. motor current
print "Im_max =", d.SdoRd(0x3032, 0x00), "[mA]"


Content - Parameters 3000h (DSA) - IO assignment

3050.00h | DEV_DinEnable | Input assignment - enable
3051.00h | DEV_DinClearError | Input assignment - error quitting
3052.00h | DEV_DinStartStop | Input assignment - start/stop
3053.00h | DEV_DinDir | Input assignment - Change of rotation direction
3055.00h | DEV_DinLimitPos | Input assignment - positive limit switch
3056.00h | DEV_DinLimitNeg | Input assignment - negative limit switch
3057.00h | DEV_DinReference | Input assignment - reference switch
3060.00h | DEV_DoutError | Output assignment - error


3050.00h Input assignment - enable

Name | DEV_DinEnable
Designation | Input assignment - enable
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DEV_Enable

Description

This values defines the source of the hardware enabling of the power stage.
Setting it to 0 (default) let you control the enabling just by software (see parameter DEV_Enable).
Positive values select a digital input high-active (negative values for low-active inputs).

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as enabling, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as enabling, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as enabling, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as enabling, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as enabling, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as enabling, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as enabling, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as enabling, Low-Active
0 | No hardware enabling
0130h | Digital input 0 used as enabling, Hi-Active
0131h | Digital input 1 used as enabling, Hi-Active
0132h | Digital input 2 used as enabling, Hi-Active
0133h | Digital input 3 used as enabling, Hi-Active
0134h | Digital input 4 used as enabling, Hi-Active
0135h | Digital input 5 used as enabling, Hi-Active
0136h | Digital input 6 used as enabling, Hi-Active
0137h | Digital input 7 used as enabling, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# Get the value of the parameter
print "DevDinEnable =", hex(d.SdoRd(0x3050, 0x00))

# enabledig. input 1, high-active
d.SdoWr(0x3050, 0x00, 0x0131)

# alternative ways:
# d.DevDinEnable(1, active_level=1)
# d.DevDinEnable(0x0131)


3051.00h Input assignment - error quitting

Name | DEV_DinClearError
Designation | Input assignment - error quitting
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevDinClearError(value), DevDinClearError(value, active_level)
Cross reference | -

Description

This values defines the source of the hardware clearing of an error.
Setting it to 0 (default) let you control the enabling just by software (see parameter DEV_Enable).
Positive values select a digital input high-active (negative values for low-active inputs).

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as clearing of an error, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as clearing of an error, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as clearing of an error, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as clearing of an error, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as clearing of an error, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as clearing of an error, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as clearing of an error, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as clearing of an error, Low-Active
0 | No hardware clearing of an error
0130h | Digital input 0 used as clearing of an error, Hi-Active
0131h | Digital input 1 used as clearing of an error, Hi-Active
0132h | Digital input 2 used as clearing of an error, Hi-Active
0133h | Digital input 3 used as clearing of an error, Hi-Active
0134h | Digital input 4 used as clearing of an error, Hi-Active
0135h | Digital input 5 used as clearing of an error, Hi-Active
0136h | Digital input 6 used as clearing of an error, Hi-Active
0137h | Digital input 7 used as clearing of an error, Hi-Active

HINT
You can use one digital input for two purposes. Have look at the following idea:

One digital input (e.g. number 3) should work as "enabling" and as "clearing an error":

Input = High - Enabling the controller
Input = Low  - Clearing an error

Parameter settings:

DevDinEnable(0x133)        # enabling high-active
DevDinClearError(-0x133)   # clearing errors low-active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the value of the parameter
print "DevDinClearError =", hex(d.SdoRd(0x3051, 0x00))

# dig. input 2 as "ClearError", low-active
d.SdoWr(0x3051, 0x00, -0x0132)

# alternative ways:
# d.DevDinClearError(2, active_level=-1)
# d.DevDinClearError(-0x0132)


3052.00h Input assignment - start/stop

Name | DEV_DinStartStop
Designation | Input assignment - start/stop
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.30.00.00
Devices | All
PLC Function | DevDinStartStop(value), DevDinStartStop(value, active_level)
Cross reference | -

Description

This values defines the source of the Start/Stop-input.
Setting it to 0 (default) let you control the function just by software.
Positive values select a digital input high-active (negative values for low-active inputs).

Using this input you can start and stop a movement.

Having a Hi-Active input means:

High-Level at the input  = set value gets the desired value - motion is started.
Low-Level at the input   = Set value becomes zero           - motion is stopped.

Attention

Only available in velocity and current mode.

This function is also avaiable in position mode since firmware version 1.89.00.D9
A movement in position mode can only be started if the Start-input is set and a new positioning command is send.

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as Start/Stop, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as Start/Stop, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as Start/Stop, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as Start/Stop, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as Start/Stop, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as Start/Stop, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as Start/Stop, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as Start/Stop, Low-Active
0 | No hardware Start/Stop
0130h | Digital input 0 used as Start/Stop, Hi-Active
0131h | Digital input 1 used as Start/Stop, Hi-Active
0132h | Digital input 2 used as Start/Stop, Hi-Active
0133h | Digital input 3 used as Start/Stop, Hi-Active
0134h | Digital input 4 used as Start/Stop, Hi-Active
0135h | Digital input 5 used as Start/Stop, Hi-Active
0136h | Digital input 6 used as Start/Stop, Hi-Active
0137h | Digital input 7 used as Start/Stop, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the value of the parameter
print "DevDinStartStop =", hex(d.SdoRd(0x3052, 0x00))

# dig. input 2 as "Start/Stop", high-active
d.SdoWr(0x3052, 0x00, 0x0132)

# alternative ways:
# d.DevDinStartStop(2, active_level= 1)
# d.DevDinStartStop(0x0132)


3053.00h Input assignment - Change of rotation direction

Name | DEV_DinDir
Designation | Input assignment - Change of rotation direction
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.A3
Devices | All
PLC Function | -
Cross reference | -

Description

This values defines the source of the change of rotation direction-input.
Setting it to 0 (default) let you control the function just by software.
Positive values select a digital input high-active (negative values for low-active inputs).

Using this input you can change the rotation direction of a movement.

Having a Hi-Active input means:

High-Level at the input  = The rotation driection is inverted.
Low-Level at the input   = The rotation driection is not inverted.

Attention

Only available in svelocity, velocity and current mode.

This function is also avaiable since firmware version 1.93.00.A3
The change of rotation direction is working when the desired value is given by software or by the analog input.

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as change of rotation direction-input, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as change of rotation direction-input, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as change of rotation direction-input, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as change of rotation direction-input, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as change of rotation direction-input, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as change of rotation direction-input, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as change of rotation direction-input, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as change of rotation direction-input, Low-Active
0 | No hardware change of rotation direction-input
0130h | Digital input 0 used as change of rotation direction-input, Hi-Active
0131h | Digital input 1 used as change of rotation direction-input, Hi-Active
0132h | Digital input 2 used as change of rotation direction-input, Hi-Active
0133h | Digital input 3 used as change of rotation direction-input, Hi-Active
0134h | Digital input 4 used as change of rotation direction-input, Hi-Active
0135h | Digital input 5 used as change of rotation direction-input, Hi-Active
0136h | Digital input 6 used as change of rotation direction-input, Hi-Active
0137h | Digital input 7 used as change of rotation direction-input, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the value of the parameter
print "DevDinDirection =", hex(d.SdoRd(0x3053, 0x00))

# dig. input 2 as "Direction", high-active
d.SdoWr(0x3053, 0x00, 0x0132)


3055.00h Input assignment - positive limit switch

Name | DEV_DinLimitPos
Designation | Input assignment - positive limit switch
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevDinLimitPos(value), DevDinLimitPos(value, active_level)
Cross reference | DEV_DinLimitNeg, VEL_Dec_dV, VEL_Dec_dT, VEL_Dec_QuickStop_dV, VEL_Dec_QuickStop_dT

Description

The parameter DEV_DinLimitPos defines the input for limitation. This one is valid for positive directions.

Setting it to 0 (default) let you control the limitation just by software.
Positive values select a digital input high-active (negative values for low-active inputs).

Using this input you can limit a movement in one direction. Depending on the mode you will get the following reactions:

Mode | Reaction after an active input
MODE_Current | Motor current will be set to zero (If the current ramp is active (see CURR_RampType) the CurrLimitStop-deceleration is used)
MODE_Vel | The motor speed will decelerate to zero using the VelLimitStop-deceleration.
MODE_SVel | The motor speed is set to zero (without any ramp)
MODE_Pos | The motor speed will decelerate to zero using the VelLimitStop-deceleration.
The VelLimitStop-deceleration, which is used to stop the motor, is the "fastest" deceleration found in VEL_Dec (see VEL_Dec_dV and VEL_Dec_dT) and VEL_Dec_QuickStop (see: VEL_Dec_QuickStop_dV and VEL_Dec_QuickStop_dT).

VelLimitStop-deceleration = max(VEL_Dec, VEL_Dec_QuickStop)
respectively
CurrLimitStop-deceleration= max(CURR_Dec, CURR_Dec_QuickStop)

The effect of an triggered limit input is the same as an internal QuickStop (see DEV_Cmd = CMD_QuickStop). That means if you wish to continue your movement in another direction you have to use the continue command (DEV_Cmd = CMD_Continue) and of course a new set value.

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as limit input, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as limit input, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as limit input, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as limit input, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as limit input, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as limit input, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as limit input, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as limit input, Low-Active
0 | No hardware limit input
0130h | Digital input 0 used as limit input, Hi-Active
0131h | Digital input 1 used as limit input, Hi-Active
0132h | Digital input 2 used as limit input, Hi-Active
0133h | Digital input 3 used as limit input, Hi-Active
0134h | Digital input 4 used as limit input, Hi-Active
0135h | Digital input 5 used as limit input, Hi-Active
0136h | Digital input 6 used as limit input, Hi-Active
0137h | Digital input 7 used as limit input, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the value of the parameter
print "DevDinLimitPos =", hex(d.SdoRd(0x3055, 0x00))

# dig. input 2 as limit input for positive direction, high-active
d.SdoWr(0x3055, 0x00, 0x0132)

# alternative ways:
# d.DevDinLimitPos(2, active_level= 1)
# d.DevDinLimitPos(0x0132)


3056.00h Input assignment - negative limit switch

Name | DEV_DinLimitNeg
Designation | Input assignment - negative limit switch
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevDinLimitNeg(value), DevDinLimitNeg(value, active_level)
Cross reference | DEV_DinLimitPos, VEL_Dec_dV, VEL_Dec_dT, VEL_Dec_QuickStop_dV, VEL_Dec_QuickStop_dT

Description

The parameter DEV_DinLimitPos defines the input for limitation. This one is valid for negative directions.

Setting it to 0 (default) let you control the limitation just by software.
Positive values select a digital input high-active (negative values for low-active inputs).

Using this input you can limit a movement in one direction. Depending on the mode you will get the following reactions:

Mode | Reaction after an active input
MODE_Current | Motor current will be set to zero (If the current ramp is active (see CURR_RampType) the CurrLimitStop-deceleration is used)
MODE_Vel | The motor speed will decelerate to zero using the VelLimitStop-deceleration.
MODE_SVel | The motor speed is set to zero (without any ramp)
MODE_Pos | The motor speed will decelerate to zero using the VelLimitStop-deceleration.
The VelLimitStop-deceleration, which is used to stop the motor, is the "fastest" deceleration found in VEL_Dec (see VEL_Dec_dV and VEL_Dec_dT) and VEL_Dec_QuickStop (see: VEL_Dec_QuickStop_dV and VEL_Dec_QuickStop_dT).

VelLimitStop-deceleration = max(VEL_Dec, VEL_Dec_QuickStop)
respectively
CurrLimitStop-deceleration= max(CURR_Dec, CURR_Dec_QuickStop)

The effect of an triggered limit input is the same as an internal QuickStop (see DEV_Cmd = CMD_QuickStop). That means if you wish to continue your movement in another direction you have to use the continue command (DEV_Cmd = CMD_Continue) and of course a new set value.

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as limit input, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as limit input, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as limit input, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as limit input, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as limit input, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as limit input, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as limit input, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as limit input, Low-Active
0 | No hardware limit input
0130h | Digital input 0 used as limit input, Hi-Active
0131h | Digital input 1 used as limit input, Hi-Active
0132h | Digital input 2 used as limit input, Hi-Active
0133h | Digital input 3 used as limit input, Hi-Active
0134h | Digital input 4 used as limit input, Hi-Active
0135h | Digital input 5 used as limit input, Hi-Active
0136h | Digital input 6 used as limit input, Hi-Active
0137h | Digital input 7 used as limit input, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the value of the parameter
print "DevDinLimitNeg =", hex(d.SdoRd(0x3056, 0x00))

# dig. input 2 as limit input for negative direction, high-active
d.SdoWr(0x3056, 0x00, 0x0132)

# alternative ways:
# d.DevDinLimitNeg(2, active_level= 1)
# d.DevDinLimitNeg(0x0132)


3057.00h Input assignment - reference switch

Name | DEV_DinReference
Designation | Input assignment - reference switch
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevDinReference(value), DevDinReference(value, active_level)
Cross reference | -

Description

The parameter DEV_DinReference defines the input for a reference switch.

Setting it to 0 (default) let you control the function just by software.
Positive values select a digital input high-active (negative values for low-active inputs).

This switch can be used to set the homing position of the machine (see POS_HomingMethod).

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0137h (FFFFFEC9h) | Digital input 7 used as reference input, Low-Active
-0136h (FFFFFECAh) | Digital input 6 used as reference input, Low-Active
-0135h (FFFFFECBh) | Digital input 5 used as reference input, Low-Active
-0134h (FFFFFECCh) | Digital input 4 used as reference input, Low-Active
-0133h (FFFFFECDh) | Digital input 3 used as reference input, Low-Active
-0132h (FFFFFECEh) | Digital input 2 used as reference input, Low-Active
-0131h (FFFFFECFh) | Digital input 1 used as reference input, Low-Active
-0130h (FFFFFED0h) | Digital input 0 used as reference input, Low-Active
0 | No hardware reference input
0130h | Digital input 0 used as reference input, Hi-Active
0131h | Digital input 1 used as reference input, Hi-Active
0132h | Digital input 2 used as reference input, Hi-Active
0133h | Digital input 3 used as reference input, Hi-Active
0134h | Digital input 4 used as reference input, Hi-Active
0135h | Digital input 5 used as reference input, Hi-Active
0136h | Digital input 6 used as reference input, Hi-Active
0137h | Digital input 7 used as reference input, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the values of the parameter
print "DevDinReference =", hex(d.SdoRd(0x3057, 0x00))

# dig. input 2 as reference input, high-active
d.SdoWr(0x3057, 0x00, 0x0132)

# alternative ways:
# d.DevDinReference(2, active_level= 1)
# d.DevDinReference(0x0132)


3060.00h Output assignment - error

Name | DEV_DoutError
Designation | Output assignment - error
Data type | int16
Access | read / write
Attributs | Save
Value range | {-163h, -162h, -161h, -160h, 0h, 160h, 161h, 162h, 163h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevDoutError(value), DevDoutError(value, active_level)
Cross reference | -

Description

This parameter defines an output for errors.

Setting it to 0 (default) there is no error output.
Positive values select a digital output high-active (negative values for low-active inputs).

The numbers of digital inputs can vary according to the device (see technical data sheet).

Parameter values:
Value (Hex) | Description
-0163h (FFFFFE9Dh) | Digital output 3 used as error output, Low-Active
-0162h (FFFFFE9Eh) | Digital output 2 used as error output, Low-Active
-0161h (FFFFFE9Fh) | Digital output 1 used as error output, Low-Active
-0160h (FFFFFEA0h) | Digital output 0 used as error output, Low-Active
0 | No error output
0160h | Digital output 0 used as error output, Hi-Active
0161h | Digital output 1 used as error output, Hi-Active
0162h | Digital output 2 used as error output, Hi-Active
0163h | Digital output 3 used as error output, Hi-Active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get the values of the parameter
print "DevDoutError =", hex(d.SdoRd(0x3060, 0x00))

# dig. output 0 ass error output, low-active
d.SdoWr(0x3060, 0x00, -0x0160)

# alternative ways:
# d.DevDoutError(0, active_level=-1)
# d.DevDoutError(-0x0160)


3080.00h Continue - mode

Name | DEV_ContinueMode
Designation | Continue - mode
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1, 2, 3, 4, 5}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.72
Devices | All
PLC Function | DevContinueMode(value)
Cross reference | -

Description

This parameter sets the continue mode.

Parameter values:
Value | Reaction
0 | Manual "Continue" needed (DEV_Cmd = CMD_Continue).
1 | Automatic "Continue" after HwLimit (DEV_DinLimitPosand DEV_DinLimitNeg) is no longer active.
2 | Automatic "Continue" after HwLimit (DEV_DinLimitPos and DEV_DinLimitNeg) is no longer active. Using a set value through the analogue input, you can leave the HwLimit switch by taking a new set value.
3 | Automatic "Continue" after a QuickStop or Halt, if you apply a new set value.
4 | Automatic "Continue" after a QuickStop, if you apply a new set value.
5 | Automatic "Continue" after a Halt, if you apply a new set value.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                            # Node-Id 1

d.SdoWr(0x3080, 0x00, 3)              # DEV_ContinueMode - auto continue nach neuem Sollwert

d.SdoWr(0x3004, 0x00, 0)              # DEV_Enable - Sperren
d.SdoWr(0x3003, 0x00, 3)              # DEV_Mode - Vel Mode
d.SdoWr(0x3762, 0x00, 0)              # POS_ActualPosition - position 0
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - Freigeben

timestamp = d.SdoRd(0x3850, 0x00)     # SYS_Clock

d.SdoWr(0x3000, 0x10, 900)            # DEV_CmdData0 - 900 rpm
d.SdoWr(0x3000, 0x01, 0x31)           # DEV_Cmd_ExecOnChange - Cmd Vel

while 1:
   if (timestamp+5000) >= d.SdoRd(0x3850, 0x00):   # bis zur 5. Sekunde:
      pass                                           # tue nichts
   elif (timestamp+10000) < d.SdoRd(0x3850, 0x00): # nach 10 sekunden:
      d.SdoWr(0x3300, 0x00, 900)                     # VEL_DesiredValue - 900 rpm
      timestamp = d.SdoRd(0x3850, 0x00)              # Zeit zurücksetzen
   elif (timestamp+5000) < d.SdoRd(0x3850, 0x00):  # nach 5 Sekunden:
      d.SdoWr(0x3000, 0x01, 0)                        # DEV_Cmd_ExecOnChange - Toggle
      d.SdoWr(0x3000, 0x01, 0x02)                     # DEV_Cmd_ExecOnChange - Quickstop


3090.00h Minimum Up - error

Name | DEV_MinUp_Error
Designation | Minimum Up - error
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 655350]
Default value | 8000
Unit | [mV]
Operating mode | All
Available since | 1.71.01.11
Devices | All
PLC Function | DevMinUpError(value)
Cross reference | -

Description

This parameter sets the minimum voltage (UP) of the power stage. If the power supply falls below this value, the controller will set an error code (-1000 ERR_FieldUnderVoltage).
You can set the value in steps of 10 [mV].

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # Node-Id 1

d.SdoWr(0x3090, 0x00, 10000)  # DEV_MinUp_Error 10000 mV
MinUp = d.SdoRd(0x3090, 0x00) # DEV_MinUp_Error

print "error at Up =", MinUp ,"mV"


3090.04h Up - disable cadence braking

Name | DEV_UpOff_Stotterbremse
Designation | Up - disable cadence braking
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 655350]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DEV_UpOn_Stotterbremse

Description

Due to active braking, electric energy can be fed back into the intermediate circuit. The parameter DEV_UpOff_Stotterbremse defines an upper threshold of the power voltage (UP). If the power voltage exceeds this threshold the active braking of the motor will be interrupted. The parameter DEV_UpOn_Stotterbremse defines a lower threshold of the power voltage (UP). If the power voltage drops below this threshold the active braking will continue.

To deactivate the function, set the parameter value to 0.

Very fast voltage increases, caused by fast braking of high loads, can lead to voltage peaks which may not be recognized fast enough by the software of the controller. Therefore these voltage peaks may cause damage to the electric circuits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

d.SdoWr(0x3090, 0x04, 26000)                                # DEV_UpOff_Stotterbremse
d.SdoWr(0x3090, 0x05, 24000)                                # DEV_UpOn_Stotterbremse

print "Upoff cadence braking: %d mV" % d.SdoRd(0x3090, 0x04)  # DEV_UpOff_Stotterbremse
print "Upon  cadence braking: %d mV" % d.SdoRd(0x3090, 0x05)  # DEV_UpOn_Stotterbremse


3090.05h Up - enable cadence

Name | DEV_UpOn_Stotterbremse
Designation | Up - enable cadence
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 655350]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DEV_UpOff_Stotterbremse

Description

Due to active braking, electric energy can be fed back into the intermediate circuit. The parameter DEV_UpOff_Stotterbremse defines an upper threshold of the power voltage (UP). If the power voltage exceeds this threshold the active braking of the motor will be interrupted. The parameter DEV_UpOn_Stotterbremse defines a lower threshold of the power voltage (UP). If the power voltage drops below this threshold the active braking will continue.

To deactivate the function, set the parameter value to 0.

Very fast voltage increases, caused by fast braking of high loads, can lead to voltage peaks which may not be recognized fast enough by the software of the controller. Therefore these voltage peaks may cause damage to the electric circuits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

d.SdoWr(0x3090, 0x04, 26000)                                # DEV_UpOff_Stotterbremse
d.SdoWr(0x3090, 0x05, 24000)                                # DEV_UpOn_Stotterbremse

print "Upoff cadence braking: %d mV" % d.SdoRd(0x3090, 0x04)  # DEV_UpOff_Stotterbremse
print "Upon  cadence braking: %d mV" % d.SdoRd(0x3090, 0x05)  # DEV_UpOn_Stotterbremse


Content - Parameters 3000h (DSA) - Analog inputs

3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
310A.00h | IO_AIN0_DeadBand | Analog input 0 - dead band
310A.01h | IO_AIN1_DeadBand | Analog input 1 - dead band


3100.00h Analog input 0

Name | IO_AIN0
Designation | Analog input 0
Data type | int16
Access | read only
Attributs | -
Value range | [-10000 .. 10000]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Ain(nr)
Cross reference | IO_AIN0_Offset, IO_AIN0_DeadBand

Description

Provides the voltage in [mV] of the analogue input 0.

The value of parameter is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

for i in range(0,10):
   print d.SdoRd(0x3100, 0x00), "mV" # print voltage at analog input 0
   time.sleep(1)                     # wait for 1s


3101.00h Analog input 1

Name | IO_AIN1
Designation | Analog input 1
Data type | int16
Access | read only
Attributs | -
Value range | [-10000 .. 10000]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Ain(nr)
Cross reference | -

Description

Provides the voltage in [mV] of the analogue input 1.

For more information see IO_AIN0.

The analogue input 1 is optional.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

for i in range(0,10):
   print d.SdoRd(0x3101, 0x00), "mV" # print voltage at analog input 1
   time.sleep(1)                     # wait for 1s


3108.00h Analog input 0 - offset

Name | IO_AIN0_Offset
Designation | Analog input 0 - offset
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.76
Devices | All
PLC Function | AinOffset(nr, value)
Cross reference | IO_AIN0, IO_AIN0_DeadBand

Description

Using this parameter you can set the offset of analogue input 0.

The value of the parameter IO_AIN0 is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x00, -3000)         # IO_AIN0_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x00, i*1000)     # IO_AIN0_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3100, 0x00), "mV" # IO_AIN0 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


3108.01h Analog input 1 - offset

Name | IO_AIN1_Offset
Designation | Analog input 1 - offset
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.76
Devices | All
PLC Function | AinOffset(nr, value)
Cross reference | IO_AIN1, IO_AIN1_DeadBand

Description

Using this parameter you can set the offset of analogue input 1.

The value of the parameter IO_AIN1 is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN1
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN1_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x01, 3000)          # IO_AIN1_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x01, i*1000)     # IO_AIN1_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3101, 0x00), "mV" # IO_AIN1 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


310A.00h Analog input 0 - dead band

Name | IO_AIN0_DeadBand
Designation | Analog input 0 - dead band
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.87
Devices | All
PLC Function | AinDeadband(nr, value)
Cross reference | IO_AIN0, IO_AIN0_Offset

Description

Using this parameter you can set the dead band of analogue input 0.

The dead band unequal zero is particularly important for setpoint input by a potentiometer. In this case it would be difficult to set a demand value on zero, if the dead band was not defined.

The value of the parameter IO_AIN0 is calculated (depend on the sign of this parameter) as follows:

IO_AIN0_DeadBand > 0

Uain = Uad - Uoffset

if abs(Uain) < Udb:
   Uain = 0
elif Uain > 0:
   Uain = Uain - Udb
elif Uain < 0:
   Uain = Uain + Udb

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset
    Udb      - value of parameter IO_AIN0_Deadband
    abs(x)   - returns the absolute value of x

IO_AIN0_DeadBand < 0

Uain = Uad - Uoffset

if abs(Uain) < abs(Udb):
    Uain = 0

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset
    Udb      - value of parameter IO_AIN0_Deadband
    abs(x)   - returns the absolute value of x

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x00, -3000)         # IO_AIN0_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x00, i*1000)     # IO_AIN0_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3100, 0x00), "mV" # IO_AIN0 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


310A.01h Analog input 1 - dead band

Name | IO_AIN1_DeadBand
Designation | Analog input 1 - dead band
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.87
Devices | All
PLC Function | AinDeadband(nr, value)
Cross reference | IO_AIN1, IO_AIN1_Offset

Description

Using this parameter you can set the dead band of analogue input 1.

The dead band unequal zero is particularly important for setpoint input by a potentiometer. In this case it would be difficult to set a demand value on zero, if the dead band was not defined.

The value of the parameter IO_AIN1 is calculated (depend on the sign of this parameter) as follows:

IO_AIN1_DeadBand > 0

Uain = Uad - Uoffset

if abs(Uain) < Udb:
   Uain = 0
elif Uain > 0:
   Uain = Uain - Udb
elif Uain < 0:
   Uain = Uain + Udb

where:
    Uain     - value of parameter IO_AIN1
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN1_Offset
    Udb      - value of parameter IO_AIN1_Deadband
    abs(x)   - returns the absolute value of x

IO_AIN1_DeadBand < 0

Uain = Uad - Uoffset

if abs(Uain) < abs(Udb):
    Uain = 0

where:
    Uain     - value of parameter IO_AIN1
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN1_Offset
    Udb      - value of parameter IO_AIN1_Deadband
    abs(x)   - returns the absolute value of x

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x01, 3000)          # IO_AIN1_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x01, i*1000)     # IO_AIN1_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3101, 0x00), "mV" # IO_AIN1 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


3110.00h Electronic voltage - Ue

Name | IO_AIN_Voltage_Ue
Designation | Electronic voltage - Ue
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinUe()
Cross reference | -

Description

Provides the actual voltage of the power supply (electronics) in [mV].
The exact range can be found in the data sheet of the respective device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                   # NodeId = 1

for i in range(0,10):
   print "Ue =", d.SdoRd(0x3110, 0x00), "mV" # print electronic voltage
   time.sleep(1)                             # wait for 1s


3111.00h Power voltage - Up

Name | IO_AIN_Voltage_Up
Designation | Power voltage - Up
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinUp()
Cross reference | DEV_MinUp_Error

Description

Provides the actual voltage of the power supply (power stage) in milivolts (mV)
The exact range can be found in the data sheet of the respective controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                   # NodeId = 1

for i in range(0,10):
   print "Up =", d.SdoRd(0x3111, 0x00), "mV" # print power voltage
   time.sleep(1)                             # wait for 1s


3112.00h Motor voltage - Um

Name | IO_AIN_Voltage_Um
Designation | Motor voltage - Um
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinUm()
Cross reference | -

Description

Provides the actual voltage of the power supply (power stage) in [mV] in case of a brush-type motor.
The exact range can be found in the data sheet of the respective controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                   # NodeId = 1

for i in range(0,10):
   print "Um =", d.SdoRd(0x3112, 0x00), "mV" # motor voltage
   time.sleep(1)                             # wait for 1s


3113.00h Motor current - Im

Name | IO_AIN_Current_Im
Designation | Motor current - Im
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinIm()
Cross reference | -

Description

Provides the actual current of the motor in [mA].

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                   # NodeId = 1

for i in range(0,10):
   print "Im =", d.SdoRd(0x3113, 0x00), "mA" # print motor current
   time.sleep(1)                             # wait for 1s


3114.00h Temperature of power amplifier

Name | IO_AIN_Temperature_Power
Designation | Temperature of power amplifier
Data type | int16
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | [0.1°C]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinTemp()
Cross reference | -

Description

Provides the actual temperature of the power stage.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                 # NodeId = 1

# print actual temperature
for i in range(0,10):
   print "T =", d.SdoRd(0x3114, 0x00)/10.0, "°C"
   time.sleep(1)           # wait 1 seconds


Content - Parameters 3000h (DSA) - Digital inputs

3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3128.00h | IO_DIN_Hall | Digital inputs - hall sensors
3128.01h | IO_DIN_Enc | Digital inputs - encoder


3120.00h Digital inputs - Port0

Name | IO_DIN_P0
Designation | Digital inputs - Port0
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DinP0(), Din(nr)
Cross reference | DEV_DinEnable, DEV_DinClearError, DEV_DinStartStop, DEV_DinLimitPos, DEV_DinLimitNeg, DEV_DinReference

Description

Provides the actual status of the digital inputs of the device.

The numbers of digital inputs can vary according to the device (see technical data).

Bit assignment:
Bit-no. | Meaning
0 | Digital input 0
1 | Digital input 1
2 | Digital input 2
3 | Digital input 3
4 | Digital input 4
5 | Digital input 5
6 | Digital input 6
7 | Digital input 7

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                             # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3120, 0x00))    # Print the state of dig. inputs
   time.sleep(1)                       # wait 1 seconds


3120.01h Digital inputs - Port1

Name | IO_DIN_P1
Designation | Digital inputs - Port1
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Din(nr)
Cross reference | DEV_DinEnable, DEV_DinClearError, DEV_DinStartStop, DEV_DinLimitPos, DEV_DinLimitNeg, DEV_DinReference

Description

Provides the actual status of the digital inputs of the device.

The numbers of digital inputs can vary according to the device (see technical data).

Bit assignment:
Bit-no. | Meaning
0 | Digital input 8
1 | Digital input 9
2 | Digital input 10
3 | Digital input 11
4 | Digital input 12
5 | Digital input 13
6 | Digital input 14
7 | Digital input 15

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                             # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3120, 0x01))    # Print the state of dig. inputs
   time.sleep(1)                       # wait 1 seconds


3128.00h Digital inputs - hall sensors

Name | IO_DIN_Hall
Designation | Digital inputs - hall sensors
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 7]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DinHall()
Cross reference | -

Description

Provides the actual status of the digital inputs of the hall sensors.
If you have a brush-type motor you can use the inputs of the hall sensors as general inputs. In this case they are digital inputs at 5V.

ATTENTION Do not apply more than 5V to the hall sensors !!

Bit allocation:

Bit-no. | Meaning
0 | Hall sensor 1
1 | Hall sensor 2
2 | Hall sensor 3

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3128, 0x00))  # Print the state of hall sensors
   time.sleep(1)                     # wait 1 seconds


3128.01h Digital inputs - encoder

Name | IO_DIN_Enc
Designation | Digital inputs - encoder
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 7]
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.00.10
Devices | All
PLC Function | DinEnc()
Cross reference | IO_DIN_Hall

Description

Provides the actual status of the digital inputs of the encoders.
If your motor doesn't have an encoder you can use the inputs of the encoders as general inputs. In this case they are digital inputs at 5V.

ATTENTION Do not apply more than 5V to the encoders !!

Bit allocation:

Bit-no. | Meaning
0 | Encoder A
1 | Encoder B
2 | Encoder Inde

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                          # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3128, 0x01)) # Print the state of encoder inputs
                                    # as hex-value
   time.sleep(1)                    # wait 1 seconds


3150.00h Digital outputs - Port0

Name | IO_DOUT_P0
Designation | Digital outputs - Port0
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 15]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DoutP0(value), Dout(p1, p2)
Cross reference | IO_DOUT_Enable, DEV_DoutError

Description

Using this parameter you can set and reset the digital outputs of the controller.

The numbers of digital outputs can vary according to the device (see technical data sheet).

Bit assignment:
Bit-no. | Meaning
0 | Digital output 0
1 | Digital output 1
2 | Digital output 2
3 | Digital output 3
4 | Digital output 4
5 | Digital output 5
6 | Digital output 6
7 | Digital output 7

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# set digital output of Port0 with bitmask
set_dout = 0x02             # set only bit 1 (dout1)
d_out = (d.SdoRd(0x3150, 0x00) | set_dout)
d.SdoWr(0x3150, 0x00, d_out)

# reset digital output of Port0 with bitmask
reset_dout = 0x01          # reset only bit 0 (dout0)
d_out = (d.SdoRd(0x3150, 0x00) & ~reset_dout)
d.SdoWr(0x3150, 0x00, d_out)

# print the digital output of Port0
print "Dout =", hex(d.SdoRd(0x3150, 0x00))


3154.00h Enable digital outputs

Name | IO_DOUT_Enable
Designation | Enable digital outputs
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.85.00.08
Devices | All
PLC Function | -
Cross reference | DEV_DoutError, IO_DOUT_P0, MOTOR_HALL_DoutPulses_Mode,

Description

With the help of this parameter digital outputs can be locked or unlocked.

This is only valid for the parameter 3150.00h (IO_DOUT_P0), the firmware itself can set the outputs
furthermore.

The lock prevents that the state of the digital output is changed accidentally or unjustified, when the output is already used by internal functions of the firmware (e.g. brake management, error output, etc.).

The amount of digital outputs, which are available, depends on the device (see technical data of the device).

Bit assignment:
Bit-Nr. | Meaning
0 | digital output 0 (=1 enable, =0 disable)
1 | digital output 1 (=1 enable, =0 disable)
2 | digital output 2 (=1 enable, =0 disable)
3 | digital output 3 (=1 enable, =0 disable)
4 | digital output 4 (=1 enable, =0 disable)
5 | digital output 5 (=1 enable, =0 disable)
6 | digital output 6 (=1 enable, =0 disable)
7 | digital output 7 (=1 enable, =0 disable)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# enable digital output of Port0 with bitmask
set_dout = 0x02             # set only bit 1 (dout1)
d_out = (d.SdoRd(0x3154, 0x00) | set_dout)
d.SdoWr(0x3154, 0x00, d_out)

# disable digital output of Port0 with bitmask
reset_dout = 0x01          # reset only bit 0 (dout0)
d_out = (d.SdoRd(0x3154, 0x00) & ~reset_dout)
d.SdoWr(0x3154, 0x00, d_out)

# print the digital output of Port0
print "enable_Dout =", hex(d.SdoRd(0x3154, 0x00))


3158.00h LED - enable user control

Name | IO_DOUT_LedsEnable
Designation | LED - enable user control
Data type | uint8
Access | read / write
Attributs | -
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.11
Devices | All
PLC Function | LedsEnable(value)
Cross reference | IO_DOUT_LedsState

Description

This parameter activates the user control of the LEDs (LED = light emitting diode).
Setting the parameter to zero, uses the default functions (power-, status- and error-indicator).
If the parameter is not equal to zero, parameter IO_DOUT_LedsState defines the function of the LEDs. The default setting are disabled in this case.

The parameters IO_DOUT_LedsEnable and IO_DOUT_LedsState are only effective, when you have a device with LEDs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3158, 0x00, 1)            # IO_DOUT_LedsEnable - LED - enable user control
d.SdoWr(0x3158, 0x01, 0)            # IO_DOUT_LedsState - LED - state


3158.01h LED - state

Name | IO_DOUT_LedsState
Designation | LED - state
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 7]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.11
Devices | All
PLC Function | LedsState(value)
Cross reference | IO_DOUT_LedsEnable

Description

This parameter defines the meaning of each LED (LED = light emitting diode). The control of the LEDs is only possible, when parameter IO_DOUT_LedsEnable is set to one.

The parameters IO_DOUT_LedsEnable and IO_DOUT_LedsState are only effective, when you have a device with LEDs.

Bit assignment:
Bit-No. | LED | Meaning
0 | Power (green) | 0=off, 1=on
1 | Status (yellow) | 0=off, 1=on
2 | Error (red) | 0=off, 1=on

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3158, 0x00, 1)            # IO_DOUT_LedsEnable - LED - enable user control
d.SdoWr(0x3158, 0x01, 0)            # IO_DOUT_LedsState - LED - state


3200.00h Current - desired value

Name | CURR_DesiredValue
Designation | Current - desired value
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | 0
Unit | [mA]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | Curr(value)
Cross reference | -

Description

This parameter sets the digital desired value of the current.

The value is only active, if parameter CURR_DesiredValue_Source was set to 200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]


3204.00h Source of current desired value

Name | CURR_DesiredValue_Source
Designation | Source of current desired value
Data type | uint16
Access | read / write
Attributs | Save
Value range | {100h, 101h, 200h}
Default value | 200h
Unit | -
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrSource(value), CurrSourcePar(), CurrSourceAin(ain_nr)
Cross reference | CURR_DesiredValue, IO_AIN0, CURR_DesiredValue_Reference

Description

This parameter defines the source of the desired value (set value) of the current.
The desired value can be provided with an analogue input or with parameter CURR_DesiredValue.

If you use the analogue input, you have to define the relation between the voltage at the input and the current. This can be done in parameter CURR_DesiredValue_Reference.

Parameter values:
Value | Meaning
0100h | Source = analogue input 0 (see Parameter IO_AIN0)
0101h | Source = analogue input 1 (see parameter IO_AIN1)
0200h | Source = parameter CURR_DesiredValue

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print parameter value
print "CurrSource =", hex(d.SdoRd(0x3204, 0x00))

d.SdoWr(0x3204, 0x00, 0x200)   # source of desired current value = CURR_DesiredValue

# alternative ways:
#
# d.CurrSource(0x200)          # source of desired current value = CURR_DesiredValue
# d.CurrSourcePar()            # source of desired current value = CURR_DesiredValue
# d.CurrSourceAin(0)           # source of desired current value = analog Input 0


3205.00h Current reference of analog input

Name | CURR_DesiredValue_Reference
Designation | Current reference of analog input
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | 1000
Unit | [mA]
Operating mode | Current
Available since | 1.56.00.00
Devices | All
PLC Function | CurrReference(value)
Cross reference | CURR_DesiredValue_Source

Description

If the desired value of the current is fed by an analogue input (see parameter CURR_DesiredValue_Source), you need this parameter. It defines the relation between the voltage at the analogue input and the set value.

In other words: 10V at the analogue input corresponds to this current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# print value of the parameter
print "CurrReference =", d.SdoRd(0x3205, 0x00)

d.SdoWr(0x3205, 0x00, 1234) # 10V = 1234 [mA] current of desired value


Content - Parameters 3000h (DSA) - PI CURR controller

3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator


3210.00h PI-Current controller - proportional factor

Name | CURR_Kp
Designation | PI-Current controller - proportional factor
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | -
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrKp(value)
Cross reference | CURR_Ki

Description

This parameter contains the proportional factor of the PI-current-controller.

The default value was chosen in a way to fit a wide range of motors to run stable. Therefore, this value can not be optimal for every motor. If you need to change it, you can find out empirically best value by analysing the step response.
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

print "CurrKp =", d.SdoRd(0x3210, 0x00) # CURR_Kp - print factor Kp of the current controller
print "CurrKi =", d.SdoRd(0x3211, 0x00) # CURR_Ki - print factor Ki of the current controller

d.SdoWr(0x3210, 0x00, 100)              # CURR_Kp - set factor Kp of the current controller
d.SdoWr(0x3211, 0x00, 100)              # CURR_Ki - set factor Ki of the current controller


3211.00h PI-Current controller - integral factor

Name | CURR_Ki
Designation | PI-Current controller - integral factor
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | -
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrKi(value)
Cross reference | CURR_Kp

Description

This parameter contains the integral factor of the PI-current-controller.

The default value was chosen in a way to fit a wide range of motors to run stable. Therefore, this value can not be optimal for every motor. If you need to change it, you can find out empirically best value by analysing the step response.
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

print "CurrKp =", d.SdoRd(0x3210, 0x00) # CURR_Kp - print factor Kp of the current controller
print "CurrKi =", d.SdoRd(0x3211, 0x00) # CURR_Ki - print factor Ki of the current controller

d.SdoWr(0x3210, 0x00, 100)              # CURR_Kp - set factor Kp of the current controller
d.SdoWr(0x3211, 0x00, 100)              # CURR_Ki - set factor Ki of the current controller


3219.00h PI-Current controller - factor numerator

Name | CURR_Pid_FactorNum
Designation | PI-Current controller - factor numerator
Data type | uint16
Access | read / write
Attributs | -
Value range | {1}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | CURR_Pid_FactorDen

Description

This parameter can implement a factor for the current controller. The factor can be 1/1 or 1/256. If a very slow current regulator is necessary, it may be useful to set this parameter to 1/256.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print
print "Curr PID factor - numinator   : %d" % d.SdoRd(0x3219, 0x00)  # CURR_Pid_FactorNum
print "Curr PID factor - denuminator : %d" % d.SdoRd(0x3219, 0x01)  # CURR_Pid_FactorDen

d.SdoWr(0x3219, 0x01, 256)                                          # CURR_Pid_FactorDen

print
print "Curr PID factor - numinator   : %d" % d.SdoRd(0x3219, 0x00)  # CURR_Pid_FactorNum
print "Curr PID factor - denuminator : %d" % d.SdoRd(0x3219, 0x01)  # CURR_Pid_FactorDen


3219.01h PI-Current controller - factor denominator

Name | CURR_Pid_FactorDen
Designation | PI-Current controller - factor denominator
Data type | uint16
Access | read / write
Attributs | -
Value range | {1, 256}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | CURR_Pid_FactorNum

Description

This parameter can implement a factor for the current controller. The factor can be 1/1 or 1/256. If a very slow current regulator is necessary, it may be useful to set this parameter to 1/256.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print
print "Curr PID factor - numinator   : %d" % d.SdoRd(0x3219, 0x00)  # CURR_Pid_FactorNum
print "Curr PID factor - denuminator : %d" % d.SdoRd(0x3219, 0x01)  # CURR_Pid_FactorDen

d.SdoWr(0x3219, 0x01, 256)                                          # CURR_Pid_FactorDen

print
print "Curr PID factor - numinator   : %d" % d.SdoRd(0x3219, 0x00)  # CURR_Pid_FactorNum
print "Curr PID factor - denuminator : %d" % d.SdoRd(0x3219, 0x01)  # CURR_Pid_FactorDen


Content - Parameters 3000h (DSA) - Current limit

3221.00h | CURR_LimitMaxPos | Current limit - max. positiv
3223.00h | CURR_LimitMaxNeg | Current limit - max. negativ
3224.00h | CURR_DynLimitMode | Dynamic current limit - mode
3224.01h | CURR_DynLimitPeak | Dynamic current limit - peak current
3224.02h | CURR_DynLimitCont | Dynamic current limit - continues current
3224.03h | CURR_DynLimitTime | Dynamic current limit - time
3224.12h | CURR_ActDynLimitCurrent | Dynamic current limit I*t - actual limit


3221.00h Current limit - max. positiv

Name | CURR_LimitMaxPos
Designation | Current limit - max. positiv
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | CurrLimitMaxPos(value), CurrLimitMax(value)
Cross reference | CURR_LimitMaxNeg

Description

This limit applies to the desired value of current. This parameter defines maximum current for the positive range.

With the parameters CURR_LimitMaxPos and CURR_LimitMaxNeg you can limit the current, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

Diagram - Limitation of current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# Print the actual limit values
print "Curr_MaxPos =", d.SdoRd(0x3221, 0x00)  # CURR_LimitMaxPos
print "Curr_MaxNeg =", d.SdoRd(0x3223, 0x00)  # CURR_LimitMaxNeg

# Set a wew limit values
d.SdoWr(0x3221, 0x00, 500)     # CURR_LimitMaxPos - max. positive current limit = 500 [mA]
d.SdoWr(0x3223, 0x00, 500)     # CURR_LimitMaxNeg - max. negative current limit = 500 [mA]


3223.00h Current limit - max. negativ

Name | CURR_LimitMaxNeg
Designation | Current limit - max. negativ
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | CurrLimitMaxNeg(value), CurrLimitMax(value)
Cross reference | CURR_LimitMaxPos

Description

This limit applies to the desired value of current. This parameter defines maximum current for the negative range.

With the parameters CURR_LimitMaxPos and CURR_LimitMaxNeg you can limit the current, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

Diagram - Limitation of current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# Print the actual limit values
print "Curr_MaxPos =", d.SdoRd(0x3221, 0x00)  # CURR_LimitMaxPos
print "Curr_MaxNeg =", d.SdoRd(0x3223, 0x00)  # CURR_LimitMaxNeg

# Set a wew limit values
d.SdoWr(0x3221, 0x00, 500)     # CURR_LimitMaxPos - max. positive current limit = 500 [mA]
d.SdoWr(0x3223, 0x00, 500)     # CURR_LimitMaxNeg - max. negative current limit = 500 [mA]


3224.00h Dynamic current limit - mode

Name | CURR_DynLimitMode
Designation | Dynamic current limit - mode
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitMode(value), CurrDynLimitOn(), CurrDynLimitOff()
Cross reference | CURR_DynLimitPeak, CURR_DynLimitCont, CURR_DynLimitTime

Description

This parameter activates and deactivates the dynamic limitation of the current I*t.

Parameter value:
Value | Description
0 | Dynamic limitation of the current deactivated
1 | Dynamic limitation of the current I*t activated
You can find a detailed description of this function at the parameter CURR_DynLimitPeak, CURR_DynLimitCont and CURR_DynLimitTime.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.01h Dynamic current limit - peak current

Name | CURR_DynLimitPeak
Designation | Dynamic current limit - peak current
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitPeak(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitCont, CURR_DynLimitTime

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter sets the peak current for both the positive and the negative rotating direction.

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the area of current and time (Ixt). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.02h Dynamic current limit - continues current

Name | CURR_DynLimitCont
Designation | Dynamic current limit - continues current
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitCont(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitPeak, CURR_DynLimitTime

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter set the continuous current for both the positive and the negative rotating direction

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the are of current and time (Ixt ). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.03h Dynamic current limit - time

Name | CURR_DynLimitTime
Designation | Dynamic current limit - time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 10000]
Default value | 1000
Unit | [ms]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitTime(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitPeak, CURR_DynLimitCont

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter sets the time for the peak current limit.

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the area of current and time ( Ixt ). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.12h Dynamic current limit I*t - actual limit

Name | CURR_ActDynLimitCurrent
Designation | Dynamic current limit I*t - actual limit
Data type | int32
Access | read only
Attributs | -
Value range | [0 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.85.00.79
Devices | All
PLC Function | -
Cross reference | CURR_DynLimitMode, CURR_DynLimitPeak, CURR_DynLimitCont, CURR_DynLimitTime

Description

Provides the actual limit of the dynamic current limit I*t.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3240.00h Current acceleration - delta I

Name | CURR_Acc_dI
Designation | Current acceleration - delta I
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 100000]
Default value | 1000
Unit | [mA]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrAcc_dI(di_mA), CurrAcc([di_mA, dt_ms])
Cross reference | CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT, CURR_RampType

Description

The acceleration for the current defines the positive slop of the ramp.
It will be calculated by the quotations of the parameters CURR_Acc_dI (delta current) and CURR_Acc_dT (delta time).

acc = CURR_Acc_dI / CURR_Acc_dT [mA / ms]

The parameter CURR_Acc_dI is the numerator of this quotations.

It is only active in current mode and if CURR_RampType is unequal 0.

Diagram - Profil of the current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

# print the parameters
print "Current profile:"
print "   Type   =", d.SdoRd(0x324C, 0x00)          # CURR_RampType
print "   Acc_dI =", d.SdoRd(0x3240, 0x00), "[mA]"  # CURR_Acc_dI
print "   Acc_dT =", d.SdoRd(0x3241, 0x00), "[ms]"  # CURR_Acc_dT
print "   Dec_dI =", d.SdoRd(0x3242, 0x00), "[mA]"  # CURR_Dec_dI
print "   Dec_dT =", d.SdoRd(0x3243, 0x00), "[ms]"  # CURR_Dec_dT

# activate ramp
d.SdoWr(0x324C, 0x00, 1)      # CURR_RampType

# acceleration = 1000[mA] / 2000[ms]
d.SdoWr(0x3240, 0x00, 1000)   # CURR_Acc_dI - dI = 1000 mA
d.SdoWr(0x3241, 0x00, 2000)   # CURR_Acc_dT - dT = 2000 ms

# deceleration = 1000[mA] / 500[ms]
d.SdoWr(0x3242, 0x00, 1000)   # CURR_Dec_dI - dI = 1000 mA
d.SdoWr(0x3243, 0x00, 500)    # CURR_Dec_dT - dT =  500 ms


3241.00h Current acceleration - delta T

Name | CURR_Acc_dT
Designation | Current acceleration - delta T
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1000
Unit | [ms]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrAcc_dT(dt_ms), CurrAcc([di_mA, dt_ms])
Cross reference | CURR_Acc_dI, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT, CURR_RampType

Description

The acceleration for the current defines the positive slop of the ramp.
It will be calculated by the quotations of the parameters CURR_Acc_dI (delta current) and CURR_Acc_dT (delta time).

acc = CURR_Acc_dI / CURR_Acc_dT [mA / ms]

The parameter CURR_Acc_dT is the denominator of this quotations.

It is only active in current mode and if CURR_RampType is unequal 0.

Diagram - Profil of the current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

# print the parameters
print "Current profile:"
print "   Type   =", d.SdoRd(0x324C, 0x00)          # CURR_RampType
print "   Acc_dI =", d.SdoRd(0x3240, 0x00), "[mA]"  # CURR_Acc_dI
print "   Acc_dT =", d.SdoRd(0x3241, 0x00), "[ms]"  # CURR_Acc_dT
print "   Dec_dI =", d.SdoRd(0x3242, 0x00), "[mA]"  # CURR_Dec_dI
print "   Dec_dT =", d.SdoRd(0x3243, 0x00), "[ms]"  # CURR_Dec_dT

# activate ramp
d.SdoWr(0x324C, 0x00, 1)      # CURR_RampType

# acceleration = 1000[mA] / 2000[ms]
d.SdoWr(0x3240, 0x00, 1000)   # CURR_Acc_dI - dI = 1000 mA
d.SdoWr(0x3241, 0x00, 2000)   # CURR_Acc_dT - dT = 2000 ms

# deceleration = 1000[mA] / 500[ms]
d.SdoWr(0x3242, 0x00, 1000)   # CURR_Dec_dI - dI = 1000 mA
d.SdoWr(0x3243, 0x00, 500)    # CURR_Dec_dT - dT =  500 ms


3242.00h Current deceleration - delta I

Name | CURR_Dec_dI
Designation | Current deceleration - delta I
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 100000]
Default value | 1000
Unit | [mA]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrDec_dI(di_mA), CurrDec([di_mA, dt_ms])
Cross reference | CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT, CURR_RampType

Description

The deceleration for the current defines the negative slop of the ramp.
It will be calculated by the quotation of the parameters CURR_Acc_dI (delta current) and CURR_Acc_dT (delta time).

acc = CURR_Acc_dI / CURR_Acc_dT [mA / ms]

The parameter CURR_Dec_dl is the numerator of this quotation.

It is only active in current mode and if CURR_RampType is unequal 0.

Diagram - Profil of the current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

# print the parameters
print "Current profile:"
print "   Type   =", d.SdoRd(0x324C, 0x00)          # CURR_RampType
print "   Acc_dI =", d.SdoRd(0x3240, 0x00), "[mA]"  # CURR_Acc_dI
print "   Acc_dT =", d.SdoRd(0x3241, 0x00), "[ms]"  # CURR_Acc_dT
print "   Dec_dI =", d.SdoRd(0x3242, 0x00), "[mA]"  # CURR_Dec_dI
print "   Dec_dT =", d.SdoRd(0x3243, 0x00), "[ms]"  # CURR_Dec_dT

# activate ramp
d.SdoWr(0x324C, 0x00, 1)      # CURR_RampType

# acceleration = 1000[mA] / 2000[ms]
d.SdoWr(0x3240, 0x00, 1000)   # CURR_Acc_dI - dI = 1000 mA
d.SdoWr(0x3241, 0x00, 2000)   # CURR_Acc_dT - dT = 2000 ms

# deceleration = 1000[mA] / 500[ms]
d.SdoWr(0x3242, 0x00, 1000)   # CURR_Dec_dI - dI = 1000 mA
d.SdoWr(0x3243, 0x00, 500)    # CURR_Dec_dT - dT =  500 ms


3243.00h Current deceleration - delta T

Name | CURR_Dec_dT
Designation | Current deceleration - delta T
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1000
Unit | [ms]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrDec_dT(dt_ms), CurrDec([di_mA, dt_ms])
Cross reference | CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT, CURR_RampType

Description

The deceleration for the current defines the negative slop of the ramp.
It will be calculated by the quotation of the parameters CURR_Acc_dI (delta current) and CURR_Acc_dT (delta time).

acc = CURR_Acc_dI / CURR_Acc_dT [mA / ms]

The parameter CURR_Dec_dT is the denominator of this quotation.

It is only active in current mode and if CURR_RampType is unequal 0.

Diagram - Profil of the current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

# print the parameters
print "Current profile:"
print "   Type   =", d.SdoRd(0x324C, 0x00)          # CURR_RampType
print "   Acc_dI =", d.SdoRd(0x3240, 0x00), "[mA]"  # CURR_Acc_dI
print "   Acc_dT =", d.SdoRd(0x3241, 0x00), "[ms]"  # CURR_Acc_dT
print "   Dec_dI =", d.SdoRd(0x3242, 0x00), "[mA]"  # CURR_Dec_dI
print "   Dec_dT =", d.SdoRd(0x3243, 0x00), "[ms]"  # CURR_Dec_dT

# activate ramp
d.SdoWr(0x324C, 0x00, 1)      # CURR_RampType

# acceleration = 1000[mA] / 2000[ms]
d.SdoWr(0x3240, 0x00, 1000)   # CURR_Acc_dI - dI = 1000 mA
d.SdoWr(0x3241, 0x00, 2000)   # CURR_Acc_dT - dT = 2000 ms

# deceleration = 1000[mA] / 500[ms]
d.SdoWr(0x3242, 0x00, 1000)   # CURR_Dec_dI - dI = 1000 mA
d.SdoWr(0x3243, 0x00, 500)    # CURR_Dec_dT - dT =  500 ms


3244.00h Current quick-stop deleleration - delta I

Name | CURR_Dec_QuickStop_dI
Designation | Current quick-stop deleleration - delta I
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 100000]
Default value | 1000
Unit | [mA]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrDecQuickStop_dI(di_mA), CurrDecQuickStop([di_mA, dt_ms])
Cross reference | CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dT, CURR_RampType

Description

This deceleration for the current defines the negative slop of the ramp for quick stop
It will be calculated by the quotation of the parameters CURR_Dec_QuickStop_dI (delta current) and CURR_Dec_QuickStop_dT (delta time).

acc = CURR_Dec_QuickStop_dI / CURR_Dec_QuickStop_dT [mA / ms]

The parameter CURR_Dec_QuickStop_dI is the numerator of this quotation.

It is only active in current mode and if CURR_RampType is unequal 0.

The following events leads into QuickStop:
  • Command Dev_Cmd = CMD_QuickStop
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).
Diagram - Current QuickStop

If the "general" deceleration (CURR_Acc_dI / CURR_Acc_dT) is quicker than the quick stop deceleration, the general one is taken. This case you can find in the following diagram:

Diagram - Current QuickStop 2

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# print parameters
print "Stromschnellhalt:"
print "   dI =", d.SdoRd(0x3244, 0x00), "[mA]" # CURR_Dec_QuickStop_dI
print "   dT =", d.SdoRd(0x3245, 0x00), "[ms]" # CURR_Dec_QuickStop_dT

# deceleration = 1000[mA] / 200[ms]
d.SdoWr(0x3244, 0x00, 1000)   # CURR_Dec_QuickStop_dI - dI = 1000 mA
d.SdoWr(0x3245, 0x00, 200)    # CURR_Dec_QuickStop_dT - dT =  200 ms


3245.00h Current quick-stop deleleration - delta T

Name | CURR_Dec_QuickStop_dT
Designation | Current quick-stop deleleration - delta T
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 100
Unit | [ms]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrDecQuickStop_dT(dt_ms), CurrDecQuickStop([di_mA, dt_ms])
Cross reference | CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_RampType

Description

This deceleration for the current defines the negative slop of the ramp for quick stop.
It will be calculated by the quotation of the parameters CURR_Dec_QuickStop_dI (delta current) and CURR_Dec_QuickStop_dT (delta time).

acc = CURR_Dec_QuickStop_dI / CURR_Dec_QuickStop_dT [mA / ms]

The parameter CURR_Dec_QuickStop_dT is the denominator of this quotation.

It is only active in current mode and if CURR_RampType is unequal 0.

The following events leads into QuickStop:
  • Command Dev_Cmd = CMD_QuickStop
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).
Diagram - Current QuickStop

If the "general" deceleration (CURR_Acc_dI / CURR_Acc_dT) is quicker than the quick stop deceleration, the general one is taken. This case you can find in the following diagram:

Diagram - Current QuickStop 2

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

# print parameters
print "Stromschnellhalt:"
print "   dI =", d.SdoRd(0x3244, 0x00), "[mA]" # CURR_Dec_QuickStop_dI
print "   dT =", d.SdoRd(0x3245, 0x00), "[ms]" # CURR_Dec_QuickStop_dT

# deceleration = 1000[mA] / 200[ms]
d.SdoWr(0x3244, 0x00, 1000)   # CURR_Dec_QuickStop_dI - dI = 1000 mA
d.SdoWr(0x3245, 0x00, 200)    # CURR_Dec_QuickStop_dT - dT =  200 ms


324C.00h Current ramp type

Name | CURR_RampType
Designation | Current ramp type
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | CurrRampType(value), CurrRampEnable(), CurrRampDisable()
Cross reference | CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT, CURR_RampType

Description

Running a current profile this parameter defines the type of the ramp.

Parameter values:
Value | Description
0 | No ramp - takes the quickest ramp possible by the device
1 | Trapezium - the slop of the ramp is defined by the parameters CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI and CURR_Dec_dT
Detailed descriptions regarding the current ramps you can find at parameters: CURR_Acc_dI, CURR_Acc_dT, CURR_Dec_dI, CURR_Dec_dT, CURR_Dec_QuickStop_dI, CURR_Dec_QuickStop_dT.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                   # NodeId = 1

# print the parameters
print "Current profile:"
print "   Type   =", d.SdoRd(0x324C, 0x00)          # CURR_RampType
print "   Acc_dI =", d.SdoRd(0x3240, 0x00), "[mA]"  # CURR_Acc_dI
print "   Acc_dT =", d.SdoRd(0x3241, 0x00), "[ms]"  # CURR_Acc_dT
print "   Dec_dI =", d.SdoRd(0x3242, 0x00), "[mA]"  # CURR_Dec_dI
print "   Dec_dT =", d.SdoRd(0x3243, 0x00), "[ms]"  # CURR_Dec_dT

# activate ramp
d.SdoWr(0x324C, 0x00, 1)      # CURR_RampType

# acceleration = 1000[mA] / 2000[ms]
d.SdoWr(0x3240, 0x00, 1000)   # CURR_Acc_dI - dI = 1000 mA
d.SdoWr(0x3241, 0x00, 2000)   # CURR_Acc_dT - dT = 2000 ms

# deceleration = 1000[mA] / 500[ms]
d.SdoWr(0x3242, 0x00, 1000)   # CURR_Dec_dI - dI = 1000 mA
d.SdoWr(0x3243, 0x00, 500)    # CURR_Dec_dT - dT =  500 ms


324D.00h Current ramp generator - state

Name | CURR_RampState
Designation | Current ramp generator - state
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | CurrRampState()
Cross reference | CURR_RampType

Description

This parameter provides the actual status of the generator of the current ramp.

Parameter values:

Values | Description
Bit [0] = 1 | ACC - acceleration
Bit [1] = 2 | CONST_VEL - the output from the generator equals the set value and it is unequal zero
Bit [2] = 4 | DEC - deceleration
Bit [3..6] | Reserved (undefined value)
Bit 7 | DIR_NEG -negative rotation
Status of the ramp

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                       # NodeId = 1

# enable and use current mode
d.SdoWr(0x3004, 0x00, 0)                         # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 2)                         # DEV_Mode - current mode

# acceleration = 500[mA] / 5000[ms]
d.SdoWr(0x3240, 0x00, 500)                       # CURR_Acc_dI - dI =  500 mA
d.SdoWr(0x3241, 0x00, 5000)                      # CURR_Acc_dT - dT = 5000 ms

# deceleration    = 500[mA] / 5000[ms]
d.SdoWr(0x3242, 0x00, 500)                       # CURR_Dec_dI - dI =  500 mA
d.SdoWr(0x3243, 0x00, 5000)                      # CURR_Dec_dT - dT = 5000 ms

# enable ramp generator
d.SdoWr(0x324C, 0x00, 1)                         # CURR_RampType

d.SdoWr(0x3200, 0x00, 0)                         # CURR_DesiredValue - desired current = 0
d.SdoWr(0x3004, 0x00, 1)                         # DEV_Enable - enable

# last state
LastState = -1

# get systemtime
Timestamp = (time.clock() * 1000)

while 1:
   act_state = d.SdoRd(0x324D, 0x00)             # CURR_RampState read ramp state

   # after 10 sec
   if ((time.clock()*1000.0)-Timestamp) > 10000 :
      d.SdoWr(0x3200, 0x00, -500)                # CURR_DesiredValue - desired current = 500

   # after 20 sec
   if ((time.clock()*1000.0)-Timestamp) > 20000 :
      d.SdoWr(0x3200, 0x00, 0)                   # CURR_DesiredValue - desired current = 0
      Timestamp = (time.clock() * 1000.0)        # get new systemtime

   # only if state change
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0x00: print "no movement"
      elif act_state == 0x01: print "acceleration    , positiv"
      elif act_state == 0x02: print "constant current, positiv"
      elif act_state == 0x04: print "deceleration    , positiv"
      elif act_state == 0x81: print "acceleration    , negativ"
      elif act_state == 0x82: print "constant current, negativ"
      elif act_state == 0x84: print "deceleration    , negativ"

   time.sleep(0.1)                               # wait 100 ms


3250.00h Current controller - feedback

Name | CURR_Feedback
Designation | Current controller - feedback
Data type | uint16
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 113h}
Default value | 0h
Unit | -
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | IO_AIN0, IO_AIN_Current_Im

Description

This parameter defines the source of the feedback of the current controller.

Choosing the analogue input could be good for an external load control. Then you could use the current controller as a load controller.

Notice:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.

current feedback example

Parameter values:
Value | Description
0 | Automatic - feedback from IO_AIN_CURRENT_Im (actual current of the motor) or from IO_AIN0 (analogue input 0)
100h | Feedback from IO_AIN0 (analogue input0)
113h | Feedback from IO_AIN_CURRENT_Im (actual current of the motor)
ATTENTION

This parameter was created for special applications only. You must not use it in combination with an motor!
When the feedback is changed, the current of the motor can rise uncontrolled.
This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Current feedback =", hex(d.SdoRd(0x3250, 0x00))

d.SdoRd(0x3250, 0x00, 0)   # Motor current


3250.03h Current controller - feedback reference

Name | CURR_Feedback_Reference
Designation | Current controller - feedback reference
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | 1000
Unit | [mA]
Operating mode | Current
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | CURR_Feedback

Description

If the set value of the current is fed by an analogue input (see parameter CURR_Feedback), you need this parameter. It defines the relation between the voltage at the analogue input and the set value.

In other words: 10V at the analogue input corresponds to this current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "Current feedback =", hex(d.SdoRd(0x3250, 0x00))   # CURR_Feedback
print "Reference value  =", d.SdoRd(0x3250, 0x03)        # CURR_Feedback_Reference

d.SdoRd(0x3250, 0x00, 0)                                 # CURR_Feedback - motor current
d.SdoRd(0x3250, 0x03, 1000)                              # CURR_Feedback_Reference - 10 V = 1000 mA


3260.00h Current - target value

Name | CURR_ActualTargetCurrent
Designation | Current - target value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.71.00.04
Devices | All
PLC Function | ActTrgCurr(), TrgCurr()
Cross reference | CURR_DesiredValue, CURR_ActualCommandCurrent, CURR_ActualCurrent, CURR_ActualFollowingError

Description

This parameter provides the actual set value of the current. This values is the input of the profile generator, also.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "motor target current =", d.SdoRd(0x3260, 0x00)


3261.00h Current - command value

Name | CURR_ActualCommandCurrent
Designation | Current - command value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.71.00.04
Devices | All
PLC Function | ActCmdCurr(), CmdCurr()
Cross reference | CURR_DesiredValue, CURR_ActualTargetCurrent, CURR_ActualCurrent, CURR_ActualFollowingError

Description

This parameter provides the actual command current. This value is the output of the profile generator as well as the input of the current controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "command current =", d.SdoRd(0x3261, 0x00)


3262.00h Current - actual value

Name | CURR_ActualCurrent
Designation | Current - actual value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActCurr()
Cross reference | CURR_DesiredValue, CURR_ActualTargetCurrent, CURR_ActualCommandCurrent, CURR_ActualFollowingError

Description

Using this parameter let you poll the actual current of the motor.

This value is the exact actual value to be used for the current control. Since there is no filtering, the value may look unstable (noisy), even if there is a stable current of the motor.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

print "actual motor current =", d.SdoRd(0x3262, 0x00)


3262.01h Current - actual filtred value

Name | CURR_ActualAvgCurrent
Designation | Current - actual filtred value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.85.00.73
Devices | All
PLC Function | ActAvgCurr()
Cross reference | CURR_ActualCurrent, CURR_ActAvgCurrFilterLevel

Description

Using this parameter let you poll the actual filtered current of the motor.

The level of the filter can be set with the parameter CURR_ActAvgCurrFilterLevel.
The vaule is updated every 2ms.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

im = d.SdoRd(0x3262, 0x01)                # actual motor current
print "actual motor avg. current =", im


3262.04h Maximal positive motor current

Name | CURR_ActualPosMaxCurr
Designation | Maximal positive motor current
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.89.00.D1
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter contains the maximal measured current in positive direction. The value is stored in volatile memory and is lost if the controller is restarted.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print
print "Befor movement:"
print "Max positive current: %d mA" % d.SdoRd(0x3262, 0x04) # CURR_ActualPosMaxCurr
print "Max negative current: %d mA" % d.SdoRd(0x3262, 0x05) # CURR_ActualNegMaxCurr
mc.Delay(1000)

d.SdoWr(0x3000, 0x10, 3000)                                 # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 32000)                                # DEV_CmdData1
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable
d.SdoWr(0x3000, 0x02, 0x34)                                 # DEV_Cmd2

mc.Delay(2500)
print
print "After movement:"
print "Max positive current: %d mA" % d.SdoRd(0x3262, 0x04) # CURR_ActualPosMaxCurr
print "Max negative current: %d mA" % d.SdoRd(0x3262, 0x05) # CURR_ActualNegMaxCurr


3262.05h Minimal negative motor current

Name | CURR_ActualNegMaxCurr
Designation | Minimal negative motor current
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.89.00.D1
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter contains the maximal measured current in negative direction. The value is stored in volatile memory and is lost if the controller is restarted.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print
print "Befor movement:"
print "Max positive current: %d mA" % d.SdoRd(0x3262, 0x04) # CURR_ActualPosMaxCurr
print "Max negative current: %d mA" % d.SdoRd(0x3262, 0x05) # CURR_ActualNegMaxCurr
mc.Delay(1000)

d.SdoWr(0x3000, 0x10, 3000)                                 # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 32000)                                # DEV_CmdData1
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable
d.SdoWr(0x3000, 0x02, 0x34)                                 # DEV_Cmd2

mc.Delay(2500)
print
print "After movement:"
print "Max positive current: %d mA" % d.SdoRd(0x3262, 0x04) # CURR_ActualPosMaxCurr
print "Max negative current: %d mA" % d.SdoRd(0x3262, 0x05) # CURR_ActualNegMaxCurr


3263.00h Current - following error

Name | CURR_ActualFollowingError
Designation | Current - following error
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [mA]
Operating mode | All
Available since | 1.71.00.04
Devices | All
PLC Function | ActCurrFollowingError(), CurrFollowingError()
Cross reference | CURR_DesiredValue, CURR_ActualTargetCurrent, CURR_ActualCommandCurrent, CURR_ActualCurrent

Description

This parameter provides the actual deviation of the current (following error). It is the difference between the command current and the actual current.

CURR_ActualFollowingError = CURR_ActualCommandCurrent - CURR_ActualCurrent

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "current following error =", d.SdoRd(0x3263, 0x00)


32A0.00h Current controller - sample time

Name | CURR_SampleTime
Designation | Current controller - sample time
Data type | uint16
Access | read only
Attributs | -
Value range | -
Default value | 0
Unit | [us]
Operating mode | All
Available since | 1.64.00.41
Devices | All
PLC Function | CurrSampleTime()
Cross reference | -

Description

Using this parameter you can get the sample rate of the current controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "curr. sample time =", d.SdoRd(0x32A0, 0x00)


32A0.08h Current controller - sample point correction

Name | CURR_SamplePoint
Designation | Current controller - sample point correction
Data type | int8
Access | read / write
Attributs | -
Value range | [-128 .. 127]
Default value | 0
Unit | [100ns]
Operating mode | All
Available since | 1.85.00.73
Devices | All
PLC Function | -
Cross reference | CURR_SampleTime, CURR_SampleRlCorr

Description

With this parameter you can set a correction in the sample point of the current measurement. This can lead to a better regulation of the motor current.

The value for this parameter has to be determined empirically.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "curr. sample point =", d.SdoRd(0x32A0, 0x08)


32A0.09h Current controller - R/L correction

Name | CURR_SampleRlCorr
Designation | Current controller - R/L correction
Data type | int16
Access | read / write
Attributs | -
Value range | [0 .. 2000]
Default value | 0
Unit | [mA]
Operating mode | All
Available since | 1.85.00.73
Devices | All
PLC Function | -
Cross reference | CURR_SampleTime, CURR_SamplePoint

Description

With this parameter you can set a R/L-correction in the current measurement. This can lead to a better regulation of the motor current.

The value for this parameter has to be determined empirically.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "curr. sample correction =", d.SdoRd(0x32A0, 0x09)


32A0.10h Filter level for actual filtred current

Name | CURR_ActAvgCurrFilterLevel
Designation | Filter level for actual filtred current
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 8]
Default value | 5
Unit | -
Operating mode | All
Available since | 1.85.00.73
Devices | All
PLC Function | AvgCurrFilterLevel(value)
Cross reference | CURR_ActualAvgCurrent

Description

This parameter determinates how strongly the parameter CURR_ActualAvgCurrent (actual filtered current) is filtered.
The larger the value, the stronger is filtered the parameter CURR_ActualAvgCurrent.

Time constants of the filter can be taken from the table below.

Parameter value:
Value | T = time constant (time in which the step response of the filter reaches 63.2% of max.value) | T95 = 3 * T (time in which the step response of the filter reaches 95% of max.value)
0 | not filtered | not filtered
1 | 4 ms | 12 ms
2 | 8 ms | 23 ms
3 | 16 ms | 47 ms
4 | 31 ms | 94 ms
5 | 63 ms | 188 ms
6 | 125 ms | 375 ms
7 | 250 ms | 750 ms
8 | 500 ms | 1500 ms
Notice: Given times have been rounded to integer.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print the parameter
print "act. filter level =", d.SdoRd(0x32A0, 0x10)

# set the parameter
d.SdoWr(0x32A0, 0x10, 6)


3300.00h Velocity - desired value

Name | VEL_DesiredValue
Designation | Velocity - desired value
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | Vel(value)
Cross reference | VEL_DesiredValue_Source

Description

This parameter sets the digital desired value of the velocity.

The value is only active, if parameter VEL_DesiredValue_Source was set to 300h (VEL_DesiredValue) . Otherwise, this parameter has no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                     # NodeId = 1

print "Velocity =", d.SdoRd(0x3300, 0x00)      # print the actual value
d.SdoWr(0x3300, 0x00, 1000)                    # new velocity = 1000[rpm]


3302.00h Velocity scale factor - numerator

Name | VEL_ScaleNum
Designation | Velocity scale factor - numerator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelScaleNum(value), VelScale([value_num, value_den])
Cross reference | VEL_ScaleDen, VEL_DimensionNum, VEL_DimensionDen, VEL_DesiredValue

Description

This parameter sets the numerator of the velocity scale (Fvscale) .

This factor is calculated by the division of VEL_ScaleNum by VEL_ScaleDen. It can be used to convert different user units into each others.
It has an effect on the following parameters: desired value, limitation of rotation and on the rotation outputs of velocity and positioning function.
Acceleration (VEL_Acc_dV) and deceleration (VEL_Dec_dV) of the rotation will not be affected by this factor.

Fvscale = VEL_ScaleNum / VEL_ScaleDen

The set value for the rotation is calculated as follows:

Vset = VEL_DesiredValue * Fvscale * Fvdim* Fvgroup

Vset is the input of the rotation function.

factors for velocity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

d.SdoWr(0x3302, 0x00, 1)    # VEL_ScaleNum - Numerator = 1
d.SdoWr(0x3303, 0x00, 10)   # VEL_ScaleDen - Denominator = 10

# Vel = 1005 [0.1rpm] = 100.5 [rpm]
d.SdoWr(0x3300, 0x00, 1005) # VEL_DesiredValue


3303.00h Velocity scale factor - denominator

Name | VEL_ScaleDen
Designation | Velocity scale factor - denominator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] excluded {0}
Default value | 1
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelScaleDen(value), VelScale([value_num, value_den])
Cross reference | VEL_ScaleNum, VEL_DimensionNum, VEL_DimensionDen, VEL_DesiredValue

Description

This parameter sets the denominator of the rotation scale (Fvscale) .

This factor is calculated by the division of VEL_ScaleNum by VEL_ScaleDen. It can be used to convert different user units into each others.
It has an effect on the following parameters: set value, limitation of velocity and on the outputs of the velocity and positioning function.
Acceleration (VEL_Acc_dV) and deceleration (VEL_Dec_dV) of the velocity will not be affected by this factor.

Fvscale = VEL_ScaleNum / VEL_ScaleDen

The set value for the velocity is calculated as follows:

Vset = VEL_DesiredValue * Fvscale * Fvdim* Fvgroup

Vset is the input of the velocity function.

factors for velocity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

d.SdoWr(0x3302, 0x00, 1)    # VEL_ScaleNum - Numerator = 1
d.SdoWr(0x3303, 0x00, 10)   # VEL_ScaleDen - Denominator = 10

# Vel = 1005 [0.1rpm] = 100.5 [rpm]
d.SdoWr(0x3300, 0x00, 1005) # VEL_DesiredValue


3304.00h Velocity source

Name | VEL_DesiredValue_Source
Designation | Velocity source
Data type | uint16
Access | read / write
Attributs | Save
Value range | {100h, 101h, 300h, 3D1h}
Default value | 300h
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelSource(par_nr), VelSourcePar(), VelSourceAin(ain_nr)
Cross reference | VEL_DesiredValue_Reference, IO_AIN0, VEL_DesiredValue

Description

This parameter sets the source of the desired value of the velocity. You can choose either an analogue input or the parameter VEL_DesiredValue (default).

Parameter values:
Value (Hex) | Description
0100h | Velocity source = analogue input 0 (parameter IO_AIN0)
0101h | Velocity source = analogue input 1 (parameter IO_AIN1) - not available in all devices
0300h | Velocity source = parameter VEL_DesiredValue

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)      # DEV_Enable - disable

# set parameters
d.SdoWr(0x3003, 0x00, 3)      # DEV_Mode - velocity mode
d.SdoWr(0x3304, 0x00, 0x0100) # VEL_DesiredValue_Source - Source = Ain0
d.SdoWr(0x3305, 0x00, 2000)   # VEL_DesiredValue_Reference - 10 V = 2000 rpm

d.SdoWr(0x3004, 0x00, 1)      # DEV_Enable - enable


3305.00h Velocity reference value

Name | VEL_DesiredValue_Reference
Designation | Velocity reference value
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelReference(value)
Cross reference | VEL_DesiredValue_Source

Description

If the desired value of the current is fed by an analogue input (see parameter VEL_DesiredValue_Source), you need this parameter. It defines the relation between the voltage at the analogue input and the desired value.

In other words: 10V at the analogue input corresponds to this current

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)      # DEV_Enable - disable

# set parameters
d.SdoWr(0x3003, 0x00, 3)      # DEV_Mode - velocity mode
d.SdoWr(0x3304, 0x00, 0x0100) # VEL_DesiredValue_Source - Source = Ain0
d.SdoWr(0x3305, 0x00, 2000)   # VEL_DesiredValue_Reference - 10 V = 2000 rpm

d.SdoWr(0x3004, 0x00, 1)      # DEV_Enable - enable


330A.00h Velocity dimension factor - numerator

Name | VEL_DimensionNum
Designation | Velocity dimension factor - numerator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDimension([num,den]), VelDimensionNum(value)
Cross reference | VEL_DimensionDen, VEL_ScaleNum, VEL_ScaleDen

Description

This parameter sets the numerator of the dimension scale (Fvdim) .

This factor is calculated by the division of VEL_DimensionNum by VEL_DimensionDen. It can be used to convert different user units into each others.
It has an effect on the following parameters: desired value, limitation of velocity, ramps and on the outputs of velocity and positioning function.

Fvdim = VEL_DimensionNum / VEL_DimensionDen

The desired value for the velocity is calculated as follows:

Vset = VEL_DesiredValue * Fvscale * Fvdim* Fvgroup

Vset is the input of the velocity function.

factors for velocity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                       # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                         # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 3)                         # DEV_Mode - velocity mode
d.SdoWr(0x3300, 0x00, 0)                         # VEL_DesiredValue - velocity = 0

# read parameters
print "VelDimensionNum =", d.SdoRd(0x330A, 0x00) # VEL_DimensionNum
print "VelDimensionDen =", d.SdoRd(0x330B, 0x00) # VEL_DimensionDen

# set parameters
d.SdoWr(0x330A, 0x00, 10)                        # VEL_DimensionNum - Numerator   = 10
d.SdoWr(0x330B, 0x00, 2)                         # VEL_DimensionDen - Denumerator =  2

# velocity = 100 * (10/2) = 500 [rpm]
d.SdoWr(0x3300, 0x00, 100)                       # VEL_DesiredValue - velocity = 100

d.SdoWr(0x3004, 0x00, 1)                         # DEV_Enable - enable


330B.00h Velocity dimension factor - denominator

Name | VEL_DimensionDen
Designation | Velocity dimension factor - denominator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] excluded {0}
Default value | 1
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDimension([num,den]), VelDimensionDen(value)
Cross reference | VEL_DimensionNum

Description

This parameter sets the denominator of the dimension scale (Fvdim) .

This factor is calculated by the division of VEL_DimensionNum by VEL_DimensionDen. It can be used to convert different user units into each others.
It has an effect on the following parameters: desired value, limitation of velocity, ramps and on the outputs of velocity and positioning function.

Fvdim = VEL_DimensionNum / VEL_DimensionDen

The desired value for the velocity is calculated as follows:

Vset = VEL_DesiredValue * Fvscale * Fvdim* Fvgroup

Vset is the input of the velocity function.

factors for velocity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                       # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                         # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 3)                         # DEV_Mode - velocity mode
d.SdoWr(0x3300, 0x00, 0)                         # VEL_DesiredValue - velocity = 0

# read parameters
print "VelDimensionNum =", d.SdoRd(0x330A, 0x00) # VEL_DimensionNum
print "VelDimensionDen =", d.SdoRd(0x330B, 0x00) # VEL_DimensionDen

# set parameters
d.SdoWr(0x330A, 0x00, 10)                        # VEL_DimensionNum - Numerator   = 10
d.SdoWr(0x330B, 0x00, 2)                         # VEL_DimensionDen - Denumerator =  2

# velocity = 100 * (10/2) = 500 [rpm]
d.SdoWr(0x3300, 0x00, 100)                       # VEL_DesiredValue - velocity = 100

d.SdoWr(0x3004, 0x00, 1)                         # DEV_Enable - enable


Content - Parameters 3000h (DSA) - PID VEL (POS) controller

3310.00h | VEL_Kp | PID-Controller - gain
3311.00h | VEL_Ki | PID-Controller - integral factor
3312.00h | VEL_Kd | PID-Controller - differential factor
3313.00h | VEL_ILimit | PID-Controller - integral limit
3314.00h | VEL_Kvff | PID-Controller - velocity feed forward
3315.00h | VEL_Kaff | PID-Controller - acceleration feed forward
3317.00h | VEL_KIxR | IxR factor
3318.00h | VEL_KdSampleTime | PID-Controller - differential sample time


3310.00h PID-Controller - gain

Name | VEL_Kp
Designation | PID-Controller - gain
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelKp(value), VelKp_Stop(value), VelKp_AccPos(value), VelKp_ConstPos(value), VelKp_DecPos(value), VelKp_AccNeg(value), VelKp_ConstNeg(value), VelKp_DecNeg(value)
Cross reference | VEL_Ki, VEL_Kd, VEL_ILimit, VEL_Kvff, VEL_Kaff

Description

This parameter sets the proportional factor of the PID-controller (velocity- or positioning controller).

The default value was chosen in a way to fit a wide range of motors to run stable without any load. Therefore, this value can not be optimal for every motor. If you need to change it, you can find out empirically the best value by analysing the step response.

The PID-controller works as a velocity or as positioning controller depending on the mode and on the configuration.

Using the subindices 1...7 the factor can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. This function is maybe helpful to optimise following applications:
  • vertical axes
  • palettisation with different loads per transport direction
  • ....

Subindex | Name | Description
0 | VEL_Kp | Proportional factor - basis
1 | VEL_Kp_Stop | Proportional factor - stop
2 | VEL_Kp_AccPos | Proportional factor - acceleration in positive direction
3 | VEL_Kp_ConstPos | Proportional factor - constant velocity in positive direction
4 | VEL_Kp_DecPos | Proportional factor - deceleration in positive direction
5 | VEL_Kp_AccNeg | Proportional factor - acceleration in negative direction
6 | VEL_Kp_ConstNeg | Proportional factor - constant velocity in negative direction
7 | VEL_Kp_DecNeg | Proportional factor - deceleration in negative direction
Velocity profil for the different sections

The values VEL_Kp_Xxxx (subindex 1..7) are specified in [%] (percent) of VEL_Kp (subindex 0)

The following rules apply to the parameters:

Using VEL_Kp_Stop, VEL_Kp_AccPos, VEL_Kp_ConstPos, VEL_Kp_DecPos:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp
Using VEL_Kp_AccNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_AccPos
Using VEL_Kp_ConstNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_ConstPos
Using VEL_Kp_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

# get actual parameters
print "VelKp =", d.SdoRd(0x3310, 0x00)  # VEL_Kp
print "VelKi =", d.SdoRd(0x3311, 0x00)  # VEL_Ki
print "VelKd =", d.SdoRd(0x3312, 0x00)  # VEL_Kd

# set new parameters
d.SdoWr(0x3310, 0x00, 200)              # VEL_Kp - Kp = 200
d.SdoWr(0x3311, 0x00, 50)               # VEL_Ki - Ki = 50
d.SdoWr(0x3312, 0x00, 0)                # VEL_Kd - Kd = 0


3311.00h PID-Controller - integral factor

Name | VEL_Ki
Designation | PID-Controller - integral factor
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelKi(value), VelKi_Stop(value), VelKi_AccPos(value), VelKi_ConstPos(value), VelKi_DecPos(value), VelKi_AccNeg(value), VelKi_ConstNeg(value), VelKi_DecNeg(value)
Cross reference | VEL_Kp, VEL_Kd, VEL_ILimit, VEL_Kvff, VEL_Kaff

Description

This parameter sets the integral factor of the PID-controller (velocity- or positioning controller).

The default value was chosen in a way to fit a wide range of motors to run stable without any load. Therefore, this value can not be optimal for every motor. If you need to change it, you can find out empirically the best value by analysing the step response.

The PID-controller works as a velocity or as positioning controller depending on the mode and on the configuration.

Using the subindices 1...7 the factor can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. This function is maybe helpful to optimise following applications:
  • vertical axes
  • palettisation with different loads per transport direction
  • ....

Subindex | Name | Description
0 | VEL_Ki | Integral factor - basis
1 | VEL_Ki_Stop | Integral factor - stop
2 | VEL_Ki_AccPos | Integral factor - acceleration in positive direction
3 | VEL_Ki_ConstPos | Integral factor - constant velocity in positive direction
4 | VEL_Ki_DecPos | Integral factor - deceleration in positive direction
5 | VEL_Ki_AccNeg | Integral factor - acceleration in negative direction
6 | VEL_Ki_ConstNeg | Integral factor - constant velocity in negative direction
7 | VEL_Ki_DecNeg | Integral factor - deceleration in negative direction
Velocity profil for the different sections

The values VEL_Ki_Xxxx (subindex 1..7) are specified in [%] (percent) of VEL_Ki (subindex 0)

The following rules apply to the parameters:

Using VEL_Ki_Stop, VEL_Ki_AccPos, VEL_Ki_ConstPos, VEL_Ki_DecPos:
Parameter value | Result
x = 0..1000 | VEL_Ki * x / 100
0xFFFF | VEL_Ki
Using VEL_Ki_AccNeg:
Parameter value | Result
x = 0..1000 | VEL_Ki * x / 100
0xFFFF | VEL_Ki_AccPos
Using VEL_Ki_ConstNeg:
Parameter value | Result
x = 0..1000 | VEL_Ki * x / 100
0xFFFF | VEL_Ki_ConstPos
Using VEL_Ki_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Ki * x / 100
0xFFFF | VEL_Ki_DecPos
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

# get actual parameters
print "VelKp =", d.SdoRd(0x3310, 0x00)  # VEL_Kp
print "VelKi =", d.SdoRd(0x3311, 0x00)  # VEL_Ki
print "VelKd =", d.SdoRd(0x3312, 0x00)  # VEL_Kd

# set new parameters
d.SdoWr(0x3310, 0x00, 200)              # VEL_Kp - Kp = 200
d.SdoWr(0x3311, 0x00, 50)               # VEL_Ki - Ki = 50
d.SdoWr(0x3312, 0x00, 0)                # VEL_Kd - Kd = 0


3312.00h PID-Controller - differential factor

Name | VEL_Kd
Designation | PID-Controller - differential factor
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelKd(value), VelKd_Stop(value), VelKd_AccPos(value), VelKd_ConstPos(value), VelKd_DecPos(value), VelKd_AccNeg(value), VelKd_ConstNeg(value), VelKd_DecNeg(value)
Cross reference | VEL_Kp, VEL_Ki, VEL_ILimit, VEL_Kvff, VEL_Kaff

Description

This parameter sets the differential factor of the PID-controller (velocity- or positioning controller).

The default value was chosen in a way to fit a wide range of motors to run stable without any load. Therefore, this value can not be optimal for every motor. If you need to change it, you can find out empirically the best value by analysing the step response.

The PID-controller works as a velocity or as positioning controller depending on the mode and on the configuration.

Using the subindies 1...7 the factor can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. This function is maybe helpful to optimise following applications:
  • vertical axes
  • palettisation with different loads per transport direction
  • ....

Subindex | Name | Description
0 | VEL_Kd | Differential factor - basis
1 | VEL_Kd_Stop | Differential factor - stop
2 | VEL_Kd_AccPos | Differential factor - acceleration in positive direction
3 | VEL_Kd_ConstPos | Differential factor - constant velocity in positive direction
4 | VEL_Kd_DecPos | Differential factor - deceleration in positive direction
5 | VEL_Kd_AccNeg | Differential factor - acceleration in negative direction
6 | VEL_Kd_ConstNeg | Differential factor - constant velocity in negative direction
7 | VEL_Kd_DecNeg | Differential factor - deceleration in negative direction
Velocity profil for the different sections

The values VEL_Kd_Xxxx (subindex 1..7) are specified in [%] (percent) of VEL_Kd (subindex 0)

The following rules apply to the parameters:

Using VEL_Kd_Stop, VEL_Kd_AccPos, VEL_Kd_ConstPos, VEL_Kd_DecPos:
Parameter value | Result
x = 0..1000 | VEL_Kd * x / 100
0xFFFF | VEL_Kd
Using VEL_Kd_AccNeg:
Parameter value | Result
x = 0..1000 | VEL_Kd * x / 100
0xFFFF | VEL_Kd_AccPos
Using VEL_Kd_ConstNeg:
Parameter value | Result
x = 0..1000 | VEL_Kd * x / 100
0xFFFF | VEL_Kd_ConstPos
Using VEL_Kd_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kd * x / 100
0xFFFF | VEL_Kd_DecPos

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

# get actual parameters
print "VelKp =", d.SdoRd(0x3310, 0x00)  # VEL_Kp
print "VelKi =", d.SdoRd(0x3311, 0x00)  # VEL_Ki
print "VelKd =", d.SdoRd(0x3312, 0x00)  # VEL_Kd

# set new parameters
d.SdoWr(0x3310, 0x00, 200)              # VEL_Kp - Kp = 200
d.SdoWr(0x3311, 0x00, 50)               # VEL_Ki - Ki = 50
d.SdoWr(0x3312, 0x00, 0)                # VEL_Kd - Kd = 0


3313.00h PID-Controller - integral limit

Name | VEL_ILimit
Designation | PID-Controller - integral limit
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 10000]
Default value | 10000
Unit | -
Operating mode | Velocity,Position
Available since | 1.45.00.00
Devices | All
PLC Function | VelILimit(value), VelILimit_Stop(value), VelILimit_AccPos(value), VelILimit_ConstPos(value), VelILimit_DecPos(value), VelILimit_AccNeg(value), VelILimit_ConstNeg(value), VelILimit_DecNeg(value)
Cross reference | VEL_Kp, VEL_Ki, VEL_Kd, VEL_Kvff, VEL_Kaff

Description

Using VEL_ILimit you can limit the integral product of the PID-controller. This can be done in the range from 0 to 10000 which is the maximum of the controller output. You can use this parameter to reduce an overshooting in velocity and in positioning.

The PID-controller works as a velocity or as a positioning controller depending on the mode and on the configuration.

Using the subindices 1...7 the limit can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. This function is maybe helpful to optimise following applications:
  • vertical axes
  • palettisation with different loads per transport direction
  • ....

Subindex | Name | Description
0 | VEL_ILimit | Limit of the integral product - basis
1 | VEL_ILimit_Stop | Limit of the integral product - stop
2 | VEL_ILimit_AccPos | Limit of the integral product - acceleration in positive direction
3 | VEL_ILimit_ConstPos | Limit of the integral product - constant velocity in positive direction
4 | VEL_ILimit_DecPos | Limit of the integral product - deceleration in positive direction
5 | VEL_ILimit_AccNeg | Limit of the integral product - acceleration in negative direction
6 | VEL_ILimit_ConstNeg | Limit of the integral product - constant velocity in negative direction
7 | VEL_ILimit_DecNeg | Limit of the integral product - deceleration in negative direction
Velocity profil for the different sections

The values VEL_ILimit_Xxxx (subindex 1..7) are specified in [%] (percent) of VEL_ILimit (subindex 0)

The following rules apply to the parameters:

Using VEL_ILimit_Stop, VEL_ILimit_AccPos, VEL_ILimit_ConstPos, VEL_ILimit_DecPos:
Parameter value | Result
x = 0..1000 | VEL_ILimit * x / 100
0xFFFF | VEL_ILimit
Using VEL_ILimit_AccNeg:
Parameter value | Result
x = 0..1000 | VEL_ILimit * x / 100
0xFFFF | VEL_ILimit_AccPos
Using VEL_ILimit_ConstNeg:
Parameter value | Result
x = 0..1000 | VEL_ILimit * x / 100
0xFFFF | VEL_ILimit_ConstPos
Using VEL_ILimit_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_ILimit * x / 100
0xFFFF | VEL_ILimit_DecPos
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

# get the actual parameters
print "Vel ILimit =", d.SdoRd(0x3313, 0x00) # VEL_ILimit
print "Vel Kvff   =", d.SdoRd(0x3314, 0x00) # VEL_Kvff
print "Vel Kaff   =", d.SdoRd(0x3315, 0x00) # VEL_Kaff

# set new parameters
d.SdoWr(0x3313, 0x00, 10000)                # VEL_ILimit - ILimit = 10000
d.SdoWr(0x3314, 0x00, 1000)                 # VEL_Kvff - Kvff = 1000
d.SdoWr(0x3315, 0x00, 0)                    # VEL_Kaff - Kaff = 0


3314.00h PID-Controller - velocity feed forward

Name | VEL_Kvff
Designation | PID-Controller - velocity feed forward
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 2000]
Default value | 0
Unit | [o/oo]
Operating mode | Velocity,Position
Available since | 1.64.00.04
Devices | All
PLC Function | VelKvff(value)
Cross reference | VEL_Kp, VEL_Ki, VEL_Kd, VEL_ILimit, VEL_Kaff

Description

The parameter VEL_Kvff defines the velocity feed-forward control. This is valid in velocity and positioning mode with encoder or hall feedback.
In velocity mode with a feedback of the motor voltage this parameter should be set to zero (default).

In general a position controller alone only generates an output value if the following error ( = desired value - actual value) is unequal 0.
That means, if no feed forward is set, the following error in each phase of movement is almost never zero.
It is possible to adjust the dynamic properties of a controller with the help of integral and differential factors, but:
  • the integral factor leads to over-regulation (instability of the system)
  • the differential factor leads to "rough" regulation (with noises) - load of a mechanics
  • since a following error is necessary, the system reacts with a delay.
Only if the feed forward is set correctly, the following error can be minimized in each phase of movement.
Using a feed forward, no following error is required to get a constant movement.
In this case the position controller only corrects differences that occur because of non-ideal behavior of the velocity controller and speed changes.

Settings depending on the configuration of the feed back
Pos/Vel feed back | SVel feedback | VEL_Kvff | Description
Encoder | Encoder | 1000 | -
Encoder | EMF (motor voltage) | 1000 | You must set the motor parameters MOTOR_Nn (motor's nominal speed) and MOTOR_Un (motor's nominal voltage) correctly. Otherwise you must determine VEL_Kvff empirically.
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

# get the actual parameters
print "Vel ILimit =", d.SdoRd(0x3313, 0x00) # VEL_ILimit
print "Vel Kvff   =", d.SdoRd(0x3314, 0x00) # VEL_Kvff
print "Vel Kaff   =", d.SdoRd(0x3315, 0x00) # VEL_Kaff

# set new parameters
d.SdoWr(0x3313, 0x00, 10000)                # VEL_ILimit - ILimit = 10000
d.SdoWr(0x3314, 0x00, 1000)                 # VEL_Kvff - Kvff = 1000
d.SdoWr(0x3315, 0x00, 0)                    # VEL_Kaff - Kaff = 0


3315.00h PID-Controller - acceleration feed forward

Name | VEL_Kaff
Designation | PID-Controller - acceleration feed forward
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 100000]
Default value | 0
Unit | [mA]
Operating mode | Velocity,Position
Available since | 1.82.02.07
Devices | All
PLC Function | VelKaff(value)
Cross reference | VEL_Kp, VEL_Ki, VEL_Kd, VEL_ILimit, VEL_Kvff

Description

The parameter VEL_Kaff defines acceleration feed forward in velocity and position mode with encoder and hall sensors feedback.
The parameter should be set to 0 (default value) in velocity mode with emf (electromotive force) feedback.

In general a position controller alone only generates an output value if the following error ( = desired value - actual value) is unequal 0.
That means, if no feed forward is set, the following error in each phase of movement is almost never zero.
It is possible to adjust the dynamic properties of a controller with the help of integral and differential factors, but:
  • the integral factor leads to over-regulation (instability of the system)
  • the differential factor leads to "rough" regulation (with noises) - load of a mechanics
  • since a following error is necessary, the system reacts with a delay.
Only if the feed forward is set correctly, the following error can be minimized in each phase of movement.
Using a feed forward, no following error is required to get a constant movement.
In this case the position controller only corrects differences that occur because of non-ideal behavior of the velocity controller and speed changes.

Settings depending on motor feedback

Pos/Vel-Feedback | SVel-Feedback | VEL_Kaff | Description
Encoder | Encoder | = Current in [mA] needed to motor acceleration 1000 rpm / 1000 ms. | -
Encoder | EMF (motor voltage) | = Current in [mA] needed to motor acceleration 1000 rpm / 1000 ms. | -

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                  # NodeId = 1

# get the actual parameters
print "Vel ILimit =", d.SdoRd(0x3313, 0x00) # VEL_ILimit
print "Vel Kvff   =", d.SdoRd(0x3314, 0x00) # VEL_Kvff
print "Vel Kaff   =", d.SdoRd(0x3315, 0x00) # VEL_Kaff

# set new parameters
d.SdoWr(0x3313, 0x00, 10000)                # VEL_ILimit - ILimit = 10000
d.SdoWr(0x3314, 0x00, 1000)                 # VEL_Kvff - Kvff = 1000
d.SdoWr(0x3315, 0x00, 0)                    # VEL_Kaff - Kaff = 0


3317.00h IxR factor

Name | VEL_KIxR
Designation | IxR factor
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 1000]
Default value | 0
Unit | [o/oo]
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelKIxR(value)
Cross reference | -

Description

This parameter let you compensate the negative influence of the resistance coming from the motor winding and the supply cable on the quality of the controller.
In general, choosing values greater than zero the quality of the velocity control will increase. But if the values are too large the control will become instable. Therefore you should find out the largest value which has still a reliable and stable velocity control in the whole range.

This parameter is only valid in velocity mode with feedback of the motor voltage. Taking velocity or positioning mode with an encoder this parameter has no effect.

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PID-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# get the actual parameters
print "Vel KIxR =", d.SdoRd(0x3317, 0x00) # VEL_KIxR

# set new parameters
d.SdoWr(0x3317, 0x00, 0)                  # VEL_KIxR - KIxR = 0


3318.00h PID-Controller - differential sample time

Name | VEL_KdSampleTime
Designation | PID-Controller - differential sample time
Data type | int16
Access | read / write
Attributs | Save
Value range | [-255 .. 1000]
Default value | 0
Unit | -
Operating mode | Velocity,Position
Available since | 1.52.00.00
Devices | All
PLC Function | VelKdSampleTime(value)
Cross reference | -

Description

Using this parameter you can set the sample rate of the differential part of the PID-filter.
This value is a multiple of the sample rate of the controller.

Parameter value:
Value (Hex) | Description
= 0 | = sample rate of the control
> 0 | Sample rate in [100us]
< 0 | Sample rate in [multiple of the sample rate of the control] E.g. if value = -10 then D_sample rate = 10 * (sample rate of the control)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# get the actual parameters
print "Vel Kd SampleTime =", d.SdoRd(0x3318, 0x00) # VEL_KdSampleTime

# set new parameters
d.SdoWr(0x3318, 0x00, 0)                           # VEL_KdSampleTime - sample rate of the control


3321.00h Velocity max. limit - positiv direction

Name | VEL_LimitMaxPos
Designation | Velocity max. limit - positiv direction
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647]
Default value | 2147483647
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelLimitMaxPos(value), VelLimitMax([pos, neg])
Cross reference | VEL_LimitMaxNeg

Description

This limit applies to the range of the desired value of the velocity controller. This parameter defines the maximal velocity for the positive range.

With the parameters VEL_LimitMaxPos and VEL_LimitMaxNeg you can limit the velocity, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the velocity may exceed the limits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

# get actual parameters
print "VelLimitMaxPos =", d.SdoRd(0x3321, 0x00) # VEL_LimitMaxPos
print "VelLimitMaxNeg =", d.SdoRd(0x3323, 0x00) # VEL_LimitMaxNeg

# set new parameters
d.SdoWr(0x3321, 0x00, 1000)                     # VEL_LimitMaxPos - pos. limit = 1000
d.SdoWr(0x3323, 0x00, 500)                      # VEL_LimitMaxNeg - neg. limit =  500


3323.00h Velocity max. limit - negativ direction

Name | VEL_LimitMaxNeg
Designation | Velocity max. limit - negativ direction
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647]
Default value | 2147483647
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelLimitMaxNeg(value), VelLimitMax([pos, neg])
Cross reference | VEL_LimitMaxPos

Description

This limit applies to the range of the desired value of the velocity controller. This parameter defines the maximal velocity for the negative range.

With the parameters VEL_LimitMaxPos and VEL_LimitMaxNeg you can limit the velocity, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the velocity may exceed the limits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

# get actual parameters
print "VelLimitMaxPos =", d.SdoRd(0x3321, 0x00) # VEL_LimitMaxPos
print "VelLimitMaxNeg =", d.SdoRd(0x3323, 0x00) # VEL_LimitMaxNeg

# set new parameters
d.SdoWr(0x3321, 0x00, 1000)                     # VEL_LimitMaxPos - pos. limit = 1000
d.SdoWr(0x3323, 0x00, 500)                      # VEL_LimitMaxNeg - neg. limit =  500


3340.00h Velocity acceleration - delta V

Name | VEL_Acc_dV
Designation | Velocity acceleration - delta V
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelAcc([dV,dT]), VelAcc_dV(value)
Cross reference | VEL_Acc_dT, VEL_Dec_dV, VEL_Dec_dT, VEL_RampType

Description

The acceleration for the current defines the positive slop of the ramp.
It will be calculated by the quotation of the parameters VEL_Acc_dV (delta velocity) and VEL_Acc_dT (delta time).

acc = VEL_Acc_dV / VEL_Acc_dT [U/min/ms]

The parameter VEL_Acc_dV is the numerator of this quotation.

It is only active if VEL_RampType is unequal 0.

Profil of the rotation - Trapezium

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                 # NodeId = 1

# Print the actual values
# acceleration
print "VelAcc_dV =", d.SdoRd(0x3340, 0x00) # VEL_Acc_dV
print "VelAcc_dT =", d.SdoRd(0x3341, 0x00) # VEL_Acc_dT

# deceleration
print "VelDec_dV =", d.SdoRd(0x3342, 0x00) # VEL_Dec_dV
print "VelDec_dT =", d.SdoRd(0x3343, 0x00) # VEL_Dec_dT

# Set new values
# acceleration: dV = 2000rpm, dT = 500s -> dV/dT = 4rpm²
d.SdoWr(0x3340, 0x00, 2000)                # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 500)                 # VEL_Acc_dT

# deceleration: dV = 1000rpm, dT 5000s -> dV/dT = 0,2rpm²
d.SdoWr(0x3342, 0x00, 1000)                # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)                # VEL_Dec_dT


3341.00h Velocity acceleration - delta T

Name | VEL_Acc_dT
Designation | Velocity acceleration - delta T
Data type | uint32
Access | read / write
Attributs | Save
Value range | [1 .. 4294967295]
Default value | 1000
Unit | [ms]
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelAcc([dV,dT]), VelAcc_dT(value)
Cross reference | VEL_Acc_dV, VEL_Dec_dV, VEL_Dec_dT, VEL_RampType

Description

The acceleration for the current defines the positive slop of the ramp.
It will be calculated by the quotation of the parameters VEL_Acc_dV (delta velocity) and VEL_Acc_dT (delta time).

acc = VEL_Acc_dV / VEL_Acc_dT [U/min/ms]

The parameter VEL_Acc_dT is the denominator of this quotation.

It is only active if VEL_RampType is unequal 0.

Profil of the rotation - Trapezium

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                 # NodeId = 1

# Print the actual values
# acceleration
print "VelAcc_dV =", d.SdoRd(0x3340, 0x00) # VEL_Acc_dV
print "VelAcc_dT =", d.SdoRd(0x3341, 0x00) # VEL_Acc_dT

# deceleration
print "VelDec_dV =", d.SdoRd(0x3342, 0x00) # VEL_Dec_dV
print "VelDec_dT =", d.SdoRd(0x3343, 0x00) # VEL_Dec_dT

# Set new values
# acceleration: dV = 2000rpm, dT = 500s -> dV/dT = 4rpm²
d.SdoWr(0x3340, 0x00, 2000)                # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 500)                 # VEL_Acc_dT

# deceleration: dV = 1000rpm, dT 5000s -> dV/dT = 0,2rpm²
d.SdoWr(0x3342, 0x00, 1000)                # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)                # VEL_Dec_dT


3342.00h Velocity deceleration - delta V

Name | VEL_Dec_dV
Designation | Velocity deceleration - delta V
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDec([dV,dT]), VelDec_dV(value)
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dT, VEL_RampType

Description

The deceleration for the current defines the negative slop of the ramp.
It will be calculated by the quotation of the parameters VEL_Dec_dV (delta velocity) and VEL_Dec_dT (delta time).

acc = VEL_Dec_dV / VEL_Dec_dT [U/min/ms]

The parameter VEL_Dec_dV is the numerator of this quotation.

It is only active if VEL_RampType is unequal 0.

Profil of the rotation - Trapezium
Note
Der Typ bzw. Wertebereich des Parameters wurde ab der Firmware 1.20 von uin16 auf unint32 geändert

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                 # NodeId = 1

# Print the actual values
# acceleration
print "VelAcc_dV =", d.SdoRd(0x3340, 0x00) # VEL_Acc_dV
print "VelAcc_dT =", d.SdoRd(0x3341, 0x00) # VEL_Acc_dT

# deceleration
print "VelDec_dV =", d.SdoRd(0x3342, 0x00) # VEL_Dec_dV
print "VelDec_dT =", d.SdoRd(0x3343, 0x00) # VEL_Dec_dT

# Set new values
# acceleration: dV = 2000rpm, dT = 500s -> dV/dT = 4rpm²
d.SdoWr(0x3340, 0x00, 2000)                # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 500)                 # VEL_Acc_dT

# deceleration: dV = 1000rpm, dT 5000s -> dV/dT = 0,2rpm²
d.SdoWr(0x3342, 0x00, 1000)                # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)                # VEL_Dec_dT


3343.00h Velocity deceleration - delta T

Name | VEL_Dec_dT
Designation | Velocity deceleration - delta T
Data type | uint32
Access | read / write
Attributs | Save
Value range | [1 .. 4294967295]
Default value | 1000
Unit | [ms]
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDec([dV,dT]), VelDec_dT(value)
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV, VEL_RampType

Description

The deceleration for the current defines the negative slop of the ramp.
It will be calculated by the quotation of the parameters VEL_Dec_dV (delta velocity) and VEL_Dec_dT (delta time).

acc = VEL_Dec_dV / VEL_Dec_dT [U/min/ms]

The parameter VEL_Dec_dT is the denominator of this quotation.

It is only active if VEL_RampType is unequal 0.

Profil of the rotation - Trapezium

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                 # NodeId = 1

# Print the actual values
# acceleration
print "VelAcc_dV =", d.SdoRd(0x3340, 0x00) # VEL_Acc_dV
print "VelAcc_dT =", d.SdoRd(0x3341, 0x00) # VEL_Acc_dT

# deceleration
print "VelDec_dV =", d.SdoRd(0x3342, 0x00) # VEL_Dec_dV
print "VelDec_dT =", d.SdoRd(0x3343, 0x00) # VEL_Dec_dT

# Set new values
# acceleration: dV = 2000rpm, dT = 500s -> dV/dT = 4rpm²
d.SdoWr(0x3340, 0x00, 2000)                # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 500)                 # VEL_Acc_dT

# deceleration: dV = 1000rpm, dT 5000s -> dV/dT = 0,2rpm²
d.SdoWr(0x3342, 0x00, 1000)                # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)                # VEL_Dec_dT


3344.00h Velocity quick stop deceleration - delta V

Name | VEL_Dec_QuickStop_dV
Designation | Velocity quick stop deceleration - delta V
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDecQuickStop([dV,dT]), VelDecQuickStop_dV(value)
Cross reference | VEL_Dec_QuickStop_dT, VEL_Dec_dV, VEL_Dec_dT, VEL_RampType, DEV_DinLimitPos, DEV_DinLimitNeg

Description

This deceleration for the velocity defines the negative slop of the ramp for quick stop.
It will be calculated by the quotation of the parameters EL_Dec_QuickStop_dV (delta velocity) and VEL_Dec_QuickStop_dT (delta time).

dec = VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT [U/min/ms]

The parameter VEL_Dec_QuickStop_dV is the numerator of this quotation.

It is only active if VEL_RampType is unequal 0.

The following events leads into QuickStop:
  • Command Dev_Cmd = CMD_QuickStop
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).

If the "general" deceleration (VEL_Dec_dV / VEL_Dec_dT) is quicker than the quick stop deceleration, the general one is taken. This case you can find in the following diagram:

QuickStop ramp - second case

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# Print the actual values
print "VelDecQuickStop_dV =", d.SdoRd(0x3344, 0x00) # VEL_Dec_QuickStop_dV
print "VelDecQuickStop_dT =", d.SdoRd(0x3345, 0x00) # VEL_Dec_QuickStop_dT

# Set new values
# deceleration: dV = 3000rpm, dT 100s -> dV/dT = 30rpm²
d.SdoWr(0x3344, 0x00, 3000)                         # VEL_Dec_QuickStop_dV
d.SdoWr(0x3345, 0x00, 100)                          # VEL_Dec_QuickStop_dT


3345.00h Velocity quick stop deceleration - delta T

Name | VEL_Dec_QuickStop_dT
Designation | Velocity quick stop deceleration - delta T
Data type | uint32
Access | read / write
Attributs | Save
Value range | [1 .. 4294967295]
Default value | 100
Unit | [ms]
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | VelDecQuickStop([dV,dT]), VelDecQuickStop_dT(value)
Cross reference | VEL_Dec_QuickStop_dV, VEL_Dec_dV, VEL_Dec_dT, VEL_RampType, DEV_DinLimitPos, DEV_DinLimitNeg

Description

This deceleration for the velocity defines the negative slop of the ramp for quick stop.
It will be calculated by the quotation of the parameters EL_Dec_QuickStop_dV (delta velocity) and VEL_Dec_QuickStop_dT (delta time).

dec = VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT [U/min/ms]

The parameter VEL_Dec_QuickStop_dT is the numerator of this quotation.

It is only active if VEL_RampType is unequal 0.

The following events leads into QuickStop:
  • Command Dev_Cmd = CMD_QuickStop
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).

If the "general" deceleration (VEL_Dec_dV / VEL_Dec_dT) is quicker than the quick stop deceleration, the general one is taken. This case you can find in the following diagram:

QuickStop ramp - second case

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# Print the actual values
print "VelDecQuickStop_dV =", d.SdoRd(0x3344, 0x00) # VEL_Dec_QuickStop_dV
print "VelDecQuickStop_dT =", d.SdoRd(0x3345, 0x00) # VEL_Dec_QuickStop_dT

# Set new values
# deceleration: dV = 3000rpm, dT 100s -> dV/dT = 30rpm²
d.SdoWr(0x3344, 0x00, 3000)                         # VEL_Dec_QuickStop_dV
d.SdoWr(0x3345, 0x00, 100)                          # VEL_Dec_QuickStop_dT


334C.00h Ramp generator - ramp type

Name | VEL_RampType
Designation | Ramp generator - ramp type
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 1
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelRampType(value), VelRampDisable(), VelRampEnable()
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV, VEL_Dec_dT

Description

This parameter defines the type of the ramp in velocity mode.

Parameter values:
Value | Description
0 | No ramp - takes the quickest ramp possible by the device
1 | Trapezium - the slop of the ramp is defined by the parameters VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV and VEL_Dec_dT

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                 # NodeId = 1

print "VelRampType =", d.SdoRd(0x334C, 0x00)

d.SdoWr(0x334C, 0x00, 1)   # activate the ramp generator
d.SdoWr(0x334C, 0x00, 0)   # deactivate the ramp generator


334D.00h Ramp generator - state

Name | VEL_RampState
Designation | Ramp generator - state
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelRampState()
Cross reference | VEL_RampType

Description

This parameter provides the actual status of the generator of the current ramp.

Parameter values:

Values | Description
Bit [2..0] = 0 | TargetCurrent = 0
Bit [2..0] = 1 | ACC - acceleration
Bit [2..0] = 2 | CONST_CURR - the output from the generator equals the set value and it is unequal zero
Bit [2..0] = 4 | DEC - deceleration
Bit [3..6] | Reserved (undefined value)
Bit 7 | DIR_NEG -negative rotation
Status of the ramp

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                 # NodeId = 1

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity modus
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - desired velocity = 0

# acceleration = 500[rpm] / 5000[ms]
d.SdoWr(0x3340, 0x00, 500)                # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 5000)               # VEL_Acc_dT

# deceleratino = 500[rpm] / 5000[ms]
d.SdoWr(0x3342, 0x00, 500)                # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)               # VEL_Dec_dT

# enable ramp generator
d.SdoWr(0x334C, 0x00, 1)                  # VEL_RampType

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last ramp state
LastState = -1

# get system time
Timestamp = (time.clock() * 1000.0)

while True:
   act_state = d.SdoRd(0x334D, 0x00)      # VEL_RampState - get ramp state

   # after 10s
   if ((time.clock()*1000)-Timestamp) > 10000 :
      d.SdoWr(0x3300, 0x00, 500)          # VEL_DesiredValue - desired velocity = 500[rpm]

    # after 20s
   if ((time.clock()*1000)-Timestamp) > 20000 :
      d.SdoWr(0x3300, 0x00, 0)            # VEL_DesiredValue - desired velocity = 0
      Timestamp = (time.clock() * 1000.0) # get new system time

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0x00: print "Stillstand"
      elif act_state == 0x01: print "Beschleunigung    , positiv"
      elif act_state == 0x02: print "Konstante Drehzahl, positiv"
      elif act_state == 0x04: print "Verzögerung       , positiv"
      elif act_state == 0x81: print "Beschleunigung    , negativ"
      elif act_state == 0x82: print "Konstante Drehzahl, negativ"
      elif act_state == 0x84: print "Verzögerung       , negativ"

   time.sleep(0.1)                        # wait 100ms


3350.00h Velocity feedback

Name | VEL_Feedback
Designation | Velocity feedback
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 112h, 94Ah, 96Ah, 97Ah, 990h, 991h, 96A20h}
Default value | 0h
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelFeedback(value), VelFeedbackAin0(), VelFeedbackAuto(), VelFeedbackUm(), VelFeedbackEmk(), VelFeedbackHall(), VelFeedbackEnc()
Cross reference | IO_AIN_Voltage_Um, MOTOR_Nn, MOTOR_Un, MOTOR_PolN,

Description

This parameter defines the source of the feedback of the velocity and the positioning controller.
Not every feedback can be used for every type of motor. The hall feedback can only be applied to brushless motors. If you have a controller with encoder input you can use the encoder feedback for both motor types.

Remarks:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.
  • This parameter defines the feedback for the positioning controller, also. Therefore, in positioning mode you have to set this parameter to 0x96A (MOTOR_ENC_ActualPosition) if you have a brush type motor with encoder.
Parameter values:
Values (Hex) | Name | Description
0 | Default | Brush type motors - emf feedback Brushless motors - hall feedback
0100h | IO_AIN0 | Feedback through the analogue input 0 (DC-motors only)
0112h | IO_AIN_VOLTAGE_Um | EMF feedback
094Ah | MOTOR_HALL_ActualPosition | Hall feedback (brushless motors only)
096Ah | MOTOR_ENC_ActualPosition | Encoder feedback
096A20h | MOTOR_ENC_INC2_ActualPosition | SPI Encoder feedback Caution: Only drive controllers with SPI-Interface
097Ah | MOTOR_ENC_SSI_ActualPosition | Absolute encoder feedback Caution: Only drive controllers with SSI-Interface
0990h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 0 feedback
0991h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 1 feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

d.Disable()                      # DEV_Enable - disable

print "VelFeedback =", hex(d.SdoRd(0x3350, 0x00)) # VEL_Feedback

d.SdoWr(0x3350, 0x00, 0x096A)    # VEL_Feedback - encoder feedback
d.SdoWr(0x3003, 0x00, 3)         # DEV_Mode - velocity mode
d.SdoWr(0x3300, 0x00, 0)         # VEL_DesiredValue - velocity = 0


3350.03h Velocity feedback - reference

Name | VEL_Feedback_Reference
Designation | Velocity feedback - reference
Data type | int32
Access | read / write
Attributs | Save
Value range | -
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelFeedbackReference(value)
Cross reference | VEL_Feedback

Description

If the desired value of the velocity is fed by an analogue input (see parameter VEL_Feedback), you need this parameter. It defines the relation between the voltage at the analogue input and the set value.

In other words: 10V at the analogue input corresponds to this velocity.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                              # NodeId = 1

print "Velocity feedback =", hex(d.SdoRd(0x3350, 0x00)) # VEL_Feedback
print "Reference value   =", d.SdoRd(0x3350, 0x03)      # VEL_Feedback_Reference

# 3000[rpm] @ 10V at Ain0
d.SdoWr(0x3350, 0x03, 3000)                             # VEL_Feedback_Reference


3360.00h Velocity - target value

Name | VEL_ActualTargetVel
Designation | Velocity - target value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.85.03.30
Devices | All
PLC Function | ActTrgVel()
Cross reference | VEL_ActualCommandVel, VEL_ActualVel

Description

This parameter provides the actual set value of the velocity. This values is the input of the profile generator, also.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "motor target velocity =", d.SdoRd(0x3360, 0x00)


3361.00h Velocity - command value

Name | VEL_ActualCommandVel
Designation | Velocity - command value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rpm] - revolutions per minute
Operating mode | Velocity,Position
Available since | 1.85.03.93
Devices | All
PLC Function | ActCmdVel()
Cross reference | VEL_ActualTargetVel, VEL_ActualVel

Description

This parameter provides the actual command velocity. In position and vel mode this value is the same as the output value of the velocity controller (see also VEL_ActualCommandVelocity).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "command velocity =", d.SdoRd(0x3361, 0x00)


3362.00h Unfiltered velocity - actual value

Name | VEL_ActualVel
Designation | Unfiltered velocity - actual value
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rpm] - revolutions per minute
Operating mode | All
Available since | 1.85.03.30
Devices | All
PLC Function | ActVel(value)
Cross reference | VEL_ActualTargetVel, VEL_ActualCommandVel

Description

Using this parameter let you poll the actual velocity of the motor.

This value is the exact actual value to be used for the velocity control. Since there is no filtering, the value may look unstable (noisy), even if there is a stable velocity of the motor.

! ATTENTION !

To read the filterd velocity use the parameter MEASUREMENT_Vel_rpm or MEASUREMENT_Vel_cnt.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

print "actual velocity =", d.SdoRd(0x3362, 0x00)


3380.00h Velocity acceleration in [rev/min²]

Name | VEL_Acc
Designation | Velocity acceleration in [rev/min²]
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 2147483647]
Default value | 0
Unit | [rev/min²]
Operating mode | Velocity,Position
Available since | 1.50.00.00
Devices | All
PLC Function | VelAcc_rpm2(value)
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec

Description

The acceleration of the velocity (VEL_Acc) defines the slope of the positive ramp in rev/min². That is an alternative parameter to VEL_Acc_dV and VEL_Acc_dT. Using this parameter VEL_Acc_dV will be set to zero automatically. That means the acceleration is defined only by VEL_Acc. Also, VEL_Acc_dT has no influence in this case.

Velocity profil - Trapezium

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get actual parameters
print "VelAcc          =", d.SdoRd(0x3380, 0x00) # VEL_Acc - acceleration
print "VelDec          =", d.SdoRd(0x3381, 0x00) # VEL_Dec - deceleration
print "VelDecQuickStop =", d.SdoRd(0x3382, 0x00) # VEL_Dec_QuickStop - QucikStop deceleration

# set new parameters
d.SdoWr(0x3380, 0x00, 30000)    # VEL_Acc - 30000[rpm²] = 1000[rpm/2000[ms]
d.SdoWr(0x3381, 0x00, 60000)    # VEL_Dec - 60000[rpm²] = 1000[rpm]/1000[ms]
d.SdoWr(0x3382, 0x00, 600000)   # VEL_Dec_QuickStop - 600000[rpm²] = 1000[rpm]/100[ms]


3381.00h Velocity deceleration in [rev/min²]

Name | VEL_Dec
Designation | Velocity deceleration in [rev/min²]
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 2147483647]
Default value | 0
Unit | [rev/min²]
Operating mode | Velocity,Position
Available since | 1.50.00.00
Devices | All
PLC Function | VelDec_rpm2(value)
Cross reference | VEL_Dec_dV, VEL_Dec_dT, VEL_Acc

Description

The deceleration of the velocity set to zero automatically. That means the acceleration is defined only by VEL_Dec. Also, VEL_Dec_dT has no influence in this case.

Velocity profil - Trapezium

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get actual parameters
print "VelAcc          =", d.SdoRd(0x3380, 0x00) # VEL_Acc - acceleration
print "VelDec          =", d.SdoRd(0x3381, 0x00) # VEL_Dec - deceleration
print "VelDecQuickStop =", d.SdoRd(0x3382, 0x00) # VEL_Dec_QuickStop - QucikStop deceleration

# set new parameters
d.SdoWr(0x3380, 0x00, 30000)    # VEL_Acc - 30000[rpm²] = 1000[rpm/2000[ms]
d.SdoWr(0x3381, 0x00, 60000)    # VEL_Dec - 60000[rpm²] = 1000[rpm]/1000[ms]
d.SdoWr(0x3382, 0x00, 600000)   # VEL_Dec_QuickStop - 600000[rpm²] = 1000[rpm]/100[ms]


3382.00h Velocity quick-stop deceleration in [rev/min²]

Name | VEL_Dec_QuickStop
Designation | Velocity quick-stop deceleration in [rev/min²]
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 2147483647]
Default value | 0
Unit | -
Operating mode | Velocity,Position
Available since | 1.50.00.00
Devices | All
PLC Function | VelDecQuickStop_rpm2(value)
Cross reference | VEL_Dec_QuickStop_dV, VEL_Dec_QuickStop_dT

Description

This deceleration for the velocity defines the negative slop of the ramp for quick stop.
That is an alternative parameter to VEL_Dec_QuickStop_dV and VEL_Dec_QuickStop_dT. Using this parameter VEL_Dec_QuickStop_dV will be set to zero automatically. That means the QuickStop is defined only by VEL_Dec_QuickStop. Also, VEL_Dec_QuickStop_dT has no influence.

The following events leads into QuickStop:
  • Command Dev_Cmd = CMD_QuickStop
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).

If the "general" deceleration (VEL_Dec or VEL_Dec_dI / VEL_Dec_dT) is quicker than the quick stop deceleration, the general one (VEL_Dec or VEL_Dec_dI / VEL_Dec_dT) is taken. This case you can find in the following diagram:

QuickStop ramp - second case

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# get actual parameters
print "VelAcc          =", d.SdoRd(0x3380, 0x00) # VEL_Acc - acceleration
print "VelDec          =", d.SdoRd(0x3381, 0x00) # VEL_Dec - deceleration
print "VelDecQuickStop =", d.SdoRd(0x3382, 0x00) # VEL_Dec_QuickStop - QucikStop deceleration

# set new parameters
d.SdoWr(0x3380, 0x00, 30000)    # VEL_Acc - 30000[rpm²] = 1000[rpm/2000[ms]
d.SdoWr(0x3381, 0x00, 60000)    # VEL_Dec - 60000[rpm²] = 1000[rpm]/1000[ms]
d.SdoWr(0x3382, 0x00, 600000)   # VEL_Dec_QuickStop - 600000[rpm²] = 1000[rpm]/100[ms]


33A0.00h Velocity/position controller - sample time

Name | VEL_SampleTime
Designation | Velocity/position controller - sample time
Data type | uint16
Access | read / write
Attributs | Save
Value range | {1000, 2000}
Default value | 2000
Unit | [us]
Operating mode | Velocity,Position
Available since | 1.64.00.41
Devices | All
PLC Function | VelSampleTime(st_us)
Cross reference | -

Description

Using this parameter you can get and set the sample rate of the velocity- / positioning controller.

Controller according to the mode :
Mode | Type of Control
Vel | Velocity controller
Pos | Positioning controller
The lower the sampling rate, the easier you can achieve a better control of the velocity or the position.

This sampling rate influences the executing time of the MPU programs (MPU = Motion Process Unit). Lower sampling rates will enlarge the executing time of the MPU commands.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                     # NodeId = 1

print "VelSampleTime =", d.SdoRd(0x33A0, 0x00) # get value

d.SdoWr(0x33A0, 0x00, 1000)                    # sample time = 1ms


Content - Parameters 3000h (DSA) - Blockage guarding

33C0.00h | VEL_BlockageGuarding_ConfigFlags | Blockage guarding - config flags
33C0.01h | VEL_BlockageGuarding_VelLow | Blockage guarding - low velocity
33C0.02h | VEL_BlockageGuarding_VelHigh | Blockage guarding - high velocity
33C0.03h | VEL_BlockageGuarding_Time | Blockage guarding - time
33C0.04h | VEL_BlockageGuarding_Status | Blockage guarding - status


33C0.00h Blockage guarding - config flags

Name | VEL_BlockageGuarding_ConfigFlags
Designation | Blockage guarding - config flags
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | -
Cross reference | -

Description

Using this parameter you can configure the blockage guarding.

Bit assignment:
Bit | Description
0 | No error generation. If the bit is set, error is not generated, when motor is blocked. Only bit 3 of the parameter VEL_BlockageGuarding_Status will be set.
[1..7] | No function

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)
                                     # NodeId = 1
# get the value
print "BlockageGuarding Config Flags =", d.SdoRd(0x33C0, 0x00)

# set the value, 0 = set error on blockage
d.SdoWr(0x33C0, 0x00, 0)


33C0.01h Blockage guarding - low velocity

Name | VEL_BlockageGuarding_VelLow
Designation | Blockage guarding - low velocity
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 2147483647]
Default value | -1
Unit | [rpm] - revolutions per minute
Operating mode | All
Available since | 1.71.01.04
Devices | All
PLC Function | VelBlockageGuarding_VelLow(value)
Cross reference | VEL_BlockageGuarding_VelHigh, VEL_BlockageGuarding_Time

Description

This parameter activates the blockage guarding and sets the lower limit of the velocity.

A blockage error (ERR_Blockage = -3010) will occur, if the following conditions are true:
  • The limitation of the current is active.
  • First, the actual velocity of the motor must fall below the limit VEL_BlockageGuarding_VelLow.
  • Then, the actual velocity of the motor retains at least for the time VEL_BlockageGuarding_Time under the limit VEL_BlockageGuarding_VelHigh.

Parameter values:
Value | Description
-1 | Blockage guarding is not active
0..INT32_MAX | Blockage guarding is active, Vlow = VEL_BlockageGuarding_VelLow

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# print actual parameters
print "Blockage guarding:"
print "   VelLow  =", d.SdoRd(0x33C0, 0x01)         # VEL_BlockageGuarding_VelLow
print "   VelHigh =", d.SdoRd(0x33C0, 0x02)         # VEL_BlockageGuarding_VelHigh
print "   Time    =", d.SdoRd(0x33C0, 0x03), "[ms]" # VEL_BlockageGuarding_Time

# set new parameters
d.SdoRd(0x33C0, 0x01, 100)   # VEL_BlockageGuarding_VelLow  = 100[rpm]
d.SdoRd(0x33C0, 0x02, 120)   # VEL_BlockageGuarding_VelHigh = 120[rpm]
d.SdoRd(0x33C0, 0x03, 5000)  # VEL_BlockageGuarding_Time    = 5000[ms]


33C0.02h Blockage guarding - high velocity

Name | VEL_BlockageGuarding_VelHigh
Designation | Blockage guarding - high velocity
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 2147483647]
Default value | -1
Unit | -
Operating mode | All
Available since | 1.71.01.04
Devices | All
PLC Function | VelBlockageGuarding_VelHigh(value)
Cross reference | VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_Time

Description

This parameter activates the blockage guarding and sets the upper limit of the velocity.

A blockage error (ERR_Blockage = -3010) will occur, if the following conditions are true:
  • The limitation of the current is active.
  • First, the actual velocity of the motor must fall below the limit VEL_BlockageGuarding_VelLow.
  • Then, the actual velocity of the motor retains at least for the time VEL_BlockageGuarding_Time under the limit VEL_BlockageGuarding_VelHigh.

Parameter values:
Value | Description
-1 | Vhigh = VEL_BlockageGuarding_VelLow + 10%
0..INT32_MAX | Vhigh = VEL_BlockageGuarding_VelHigh

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# print actual parameters
print "Blockage guarding:"
print "   VelLow  =", d.SdoRd(0x33C0, 0x01)         # VEL_BlockageGuarding_VelLow
print "   VelHigh =", d.SdoRd(0x33C0, 0x02)         # VEL_BlockageGuarding_VelHigh
print "   Time    =", d.SdoRd(0x33C0, 0x03), "[ms]" # VEL_BlockageGuarding_Time

# set new parameters
d.SdoRd(0x33C0, 0x01, 100)   # VEL_BlockageGuarding_VelLow  = 100[rpm]
d.SdoRd(0x33C0, 0x02, 120)   # VEL_BlockageGuarding_VelHigh = 120[rpm]
d.SdoRd(0x33C0, 0x03, 5000)  # VEL_BlockageGuarding_Time    = 5000[ms]


33C0.03h Blockage guarding - time

Name | VEL_BlockageGuarding_Time
Designation | Blockage guarding - time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 10
Unit | [100ms]
Operating mode | All
Available since | 1.71.01.04
Devices | All
PLC Function | VelBlockageGuarding_Time(value)
Cross reference | VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_VelHigh

Description

This parameter sets the time for the blockage guarding.

A blockage error (ERR_Blockage = -3010) will occur, if the following conditions are true:
  • The limitation of the current is active.
  • First, the actual velocity of the motor must fall below the limit VEL_BlockageGuarding_VelLow.
  • Then, the actual velocity of the motor retains at least for the time VEL_BlockageGuarding_Time under the limit VEL_BlockageGuarding_VelHigh.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# print actual parameters
print "Blockage guarding:"
print "   VelLow  =", d.SdoRd(0x33C0, 0x01)         # VEL_BlockageGuarding_VelLow
print "   VelHigh =", d.SdoRd(0x33C0, 0x02)         # VEL_BlockageGuarding_VelHigh
print "   Time    =", d.SdoRd(0x33C0, 0x03), "[ms]" # VEL_BlockageGuarding_Time

# set new parameters
d.SdoRd(0x33C0, 0x01, 100)   # VEL_BlockageGuarding_VelLow  = 100[rpm]
d.SdoRd(0x33C0, 0x02, 120)   # VEL_BlockageGuarding_VelHigh = 120[rpm]
d.SdoRd(0x33C0, 0x03, 5000)  # VEL_BlockageGuarding_Time    = 5000[ms]


33C0.04h Blockage guarding - status

Name | VEL_BlockageGuarding_Status
Designation | Blockage guarding - status
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | -
Cross reference | -

Description

Provides actual status of the blockage guarding.

Bit assignment:
Bit | Name | Description
0 | BLF_Enabled | Blockage guarding is active.
1 | BLF_Error | Error - blockage has been occured. The bit is automatically removed, if the blockage disappears.
2 | - | Reserved
3 | BLF_SavedError | Stored error - blockage has been occured. The bit can be only removed when the value of this parameter is set to 8.
4 | - | Reserved
5 | BLF_VelLow | Velocity was fallen short of VEL_BlockageGuarding_VelLow in blockage state.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

# print actual value
print "blockage guarding status : ", d.SdoRd(0x33C0, 0x04)


3500.00h SVel desired value

Name | SVEL_DesiredValue
Designation | SVel desired value
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 0
Unit | -
Operating mode | SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVel(value)
Cross reference | SVEL_DesiredValue_Source

Description

This parameter sets the digital desired value of the SVEL-controller.

The value is only active, if parameter SVEL_DesiredValue_Source was set to 500h (SVEL_DesiredValue). Otherwise, this parameter has no effect.

The function of this parameter depends on the feedback of the SVEL-controller (SVEL_Feedback).

PWM_Feedback | Feedback | SVEL desired value | Description
0h | - | PWM | In this case the controller reacts as an PWM-actuator. The value can be set from -1000 to +1000 per mill. E.g. setting SVEL_DesiredValue to 500 the output is a 50% PWM-signal (effective).
112h | Um motor voltage | Velocity | SVEL_DesiredValue in [U/min], assuming the parameters MOTOR_Nn and MOTOR_Un were set correctly.
94Ah | Hall sensors | Velocity | SVEL_DesiredValue in [U/min], assuming the parameter MOTOR_PolN was set correctly.
96Ah | Encoder | Velocity | SVEL_DesiredValue in [U/min], assuming the parameters MOTOR_ENC_Resolution was set correctly.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)              # DEV_Enable - diable
d.SdoWr(0x3003, 0x00, 5)              # DEV_Mode -  velocity Mode without ramps
d.SdoWr(0x3500, 0x00, 0)              # SVEL_DesiredValue - velocity = 0
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - enable

# get value
print "SVel =", d.SdoRd(0x3500, 0x00) # SVEL_DesiredValue

# set value
d.SdoWr(0x3500, 0x00, 100)            # SVEL_DesiredValue - velocity = 100 [rpm]


3502.00h SVel scale factor - numerator

Name | SVEL_ScaleNum
Designation | SVel scale factor - numerator
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 1
Unit | -
Operating mode | SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelScaleNum(value), SVelScale([num,den])
Cross reference | SVEL_ScaleDen

Description

This parameter defines the numerator of the SVEL-scale.
The internal set value of SVEL (SVELset) is calculated as follows:

SVELset = SVEL_DesiredValue * (SVEL_DesiredValue_ScaleNum / SVEL_DesiredValue_ScaleDen)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)              # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 5)              # DEV_Mode -  velocity Mode without ramps
d.SdoWr(0x3500, 0x00, 0)              # SVEL_DesiredValue - velocity = 0
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - enable

# get parameters
print "SVelScaleNum =", d.SdoRd(0x3502, 0x00) # SVEL_ScaleNum
print "SVelScaleDen =", d.SdoRd(0x3503, 0x00) # SVEL_ScaleDen

# set new parameters
d.SdoRd(0x3502, 0x00, 2)              # SVEL_ScaleNum - numerator = 2
d.SdoRd(0x3503, 0x00, 10)             # SVEL_ScaleDen - denominator = 10  --> factor = 0,2
d.SdoWr(0x3500, 0x00, 1000)           # SVEL_DesiredValue - scaled velocity = 0.2 * 1000[rpm] = 200[rpm]


3503.00h SVel scale factor - denominator

Name | SVEL_ScaleDen
Designation | SVel scale factor - denominator
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767] excluded {0}
Default value | 1
Unit | -
Operating mode | SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelScaleDen(value), SVelScale([num,den])
Cross reference | SVEL_ScaleNum

Description

This parameter defines the denominator of the SVEL-scale.
The internal set value of SVEL (SVELset) is calculated as follows:

SVELset = SVEL_DesiredValue * (SVEL_DesiredValue_ScaleNum / SVEL_DesiredValue_ScaleDen)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)              # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 5)              # DEV_Mode -  velocity Mode without ramps
d.SdoWr(0x3500, 0x00, 0)              # SVEL_DesiredValue - velocity = 0
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - enable

# get parameters
print "SVelScaleNum =", d.SdoRd(0x3502, 0x00) # SVEL_ScaleNum
print "SVelScaleDen =", d.SdoRd(0x3503, 0x00) # SVEL_ScaleDen

# set new parameters
d.SdoRd(0x3502, 0x00, 2)              # SVEL_ScaleNum - numerator = 2
d.SdoRd(0x3503, 0x00, 10)             # SVEL_ScaleDen - denominator = 10  --> factor = 0,2
d.SdoWr(0x3500, 0x00, 1000)           # SVEL_DesiredValue - scaled velocity = 0.2 * 1000[rpm] = 200[rpm]


3504.00h SVel source of desired value

Name | SVEL_DesiredValue_Source
Designation | SVel source of desired value
Data type | uint16
Access | read / write
Attributs | Save
Value range | {100h, 500h}
Default value | 500h
Unit | -
Operating mode | SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelSource(value), SVelSourcePar(), SVelSourceAin()
Cross reference | IO_AIN0, SVEL_DesiredValue

Description

This parameter sets the source of the desired value of the SVEL-controller. You can choose either an analogue input or the parameter SVEL_DesiredValue (default).

Parameter values:
Value (Hex) | Description
0100h | SVelocity source = analogue input 0 (parameter IO_AIN0)
0300h | SVelocity source = parameter SVEL_DesiredValue

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                           # NodeId = 1

# print actual parameters
print "SVelSource    =", hex(d.SdoRd(0x3504, 0x00))  # SVEL_DesiredValue_Source
print "SVelReference =", d.SdoRd(0x3505, 0x00)       # SVEL_DesiredValue_Reference

# set new parameters
d.SdoWr(0x3504, 0x00, 0x0100)                        # SVEL_DesiredValue_Source    - source = Ain0
d.SdoWr(0x3505, 0x00, 3000)                          # SVEL_DesiredValue_Reference - 3000[rpm] @ 10V at Ain0


3505.00h SVel reference value

Name | SVEL_DesiredValue_Reference
Designation | SVel reference value
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | SVelocity
Available since | 1.64.00.50
Devices | All
PLC Function | SVelReference(value)
Cross reference | SVEL_DesiredValue_Source

Description

If the desired value of the SVEL-controller is fed by an analogue input (see parameter SVEL_DesiredValue_Source), you need this parameter. It defines the relation between the voltage at the analogue input and the desired value.

In other words: 10V at the analogue input corresponds to this desired value of the SVEL-controller

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                           # NodeId = 1

# print actual parameters
print "SVelSource    =", hex(d.SdoRd(0x3504, 0x00))  # SVEL_DesiredValue_Source
print "SVelReference =", d.SdoRd(0x3505, 0x00)       # SVEL_DesiredValue_Reference

# set new parameters
d.SdoWr(0x3504, 0x00, 0x0100)                        # SVEL_DesiredValue_Source    - source = Ain0
d.SdoWr(0x3505, 0x00, 3000)                          # SVEL_DesiredValue_Reference - 3000[rpm] @ 10V at Ain0


Content - Parameters 3000h (DSA) - PI SVEL controller

3510.00h | SVEL_Kp | SVel PI-Controller - gain
3511.00h | SVEL_Ki | SVel PI-Controller - integral factor
3517.00h | SVEL_KIxR | SVel IxR factor


3510.00h SVel PI-Controller - gain

Name | SVEL_Kp
Designation | SVel PI-Controller - gain
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | -
Operating mode | Velocity,Position,SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelKp(value)
Cross reference | SVEL_Ki

Description

This parameter sets the proportional factor of the SVEL-PI-controller.

The default value was chosen in a way to fit a wide range of motors to run stable without any load. Therefore, this value can not be optimal for every motor and loads. If you need to change it, you can find out empirically best value by analysing the step response.

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# print actual parameters
print "SVelKp =", d.SdoRd(0x3510, 0x00)   # SVEL_Kp
print "SVelKi =", d.SdoRd(0x3511, 0x00)   # SVEL_Ki

# set new parameters
d.SdoWr(0x3510, 0x00, 100)                # SVEL_Kp - Kp = 100
d.SdoWr(0x3511, 0x00, 10)                 # SVEL_Ki - Ki = 10


3511.00h SVel PI-Controller - integral factor

Name | SVEL_Ki
Designation | SVel PI-Controller - integral factor
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | -
Operating mode | Velocity,Position,SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelKi(value)
Cross reference | SVEL_Kp

Description

This parameter sets the integral factor of the SVEL-PI-controller.

The default value was chosen in a way to fit a wide range of motors to run stable without any load. Therefore, this value can not be optimal for every motor and loads. If you need to change it, you can find out empirically best value by analysing the step response.

The remaining control deviation can be reduced by the integral factor. The larger the factor, the quicker is the reduction of the remaining control deviation. If the factor is too large the control can become instable.

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# print actual parameters
print "SVelKp =", d.SdoRd(0x3510, 0x00)   # SVEL_Kp
print "SVelKi =", d.SdoRd(0x3511, 0x00)   # SVEL_Ki

# set new parameters
d.SdoWr(0x3510, 0x00, 100)                # SVEL_Kp - Kp = 100
d.SdoWr(0x3511, 0x00, 10)                 # SVEL_Ki - Ki = 10


3517.00h SVel IxR factor

Name | SVEL_KIxR
Designation | SVel IxR factor
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 1000]
Default value | 0
Unit | [o/oo]
Operating mode | Velocity,Position,SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelKIxR(value)
Cross reference | -

Description

This parameter let you compensate the negative influence of the resistance coming from the motor winding and the supply cable on the quality of the controller.
In general, choosing values greater than zero the quality of the rotation will increase. But if the values are too large the control will become instable. Therefore you should find out the largest value which has still a reliable and stable velocity control in the whole range.

This parameter is only valid in SVEL mode with feedback of the motor voltage. Taking velocity or positioning mode with an encoder this parameter has no effect.

ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the speed can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

# print actual parameter
print "SVelKIxR =", d.SdoRd(0x3517, 0x00)

# set new parameter
d.SdoWr(0x3517, 0x00, 100)


3521.00h SVelocity max. limit - positive direction

Name | SVEL_LimitMaxPos
Designation | SVelocity max. limit - positive direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [rpm] - revolutions per minute
Operating mode | Velocity
Available since | 1.85.03.B1
Devices | All
PLC Function | -
Cross reference | SVEL_LimitMaxNeg

Description

This limit applies to the range of the desired value of the svelocity controller. This parameter defines the maximal svelocity for the positive range.

With the parameters SVEL_LimitMaxPos and SVEL_LimitMaxNeg you can limit the svelocity, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the svelocity may exceed the limits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                       # NodeId = 1

# print actual parameters
print "SVelLimitMaxPos =", d.SdoRd(0x3521, 0x00) # SVEL_LimitMaxPos
print "SVelLimitMaxNeg =", d.SdoRd(0x3523, 0x00) # SVEL_LimitMaxNeg

# set new parameters
d.SdoWr(0x3521, 0x00, 1000)                      # SVEL_LimitMaxPos - positive limit  = 1000 [rpm]
d.SdoWr(0x3523, 0x00, 500)                       # SVEL_LimitMaxNeg - negative limit  =  500 [rpm]


3523.00h SVelocity max. limit - negative direction

Name | SVEL_LimitMaxNeg
Designation | SVelocity max. limit - negative direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [rpm] - revolutions per minute
Operating mode | Velocity
Available since | 1.85.03.B1
Devices | All
PLC Function | -
Cross reference | SVEL_LimitMaxPos

Description

This limit applies to the range of the desired value of the svelocity controller. This parameter defines the maximal svelocity for the negative range.

With the parameters SVEL_LimitMaxPos and SVEL_LimitMaxNeg you can limit the svelocity, which is an input for the controller. To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the svelocity may exceed the limits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                       # NodeId = 1

# print actual parameters
print "SVelLimitMaxPos =", d.SdoRd(0x3521, 0x00) # SVEL_LimitMaxPos
print "SVelLimitMaxNeg =", d.SdoRd(0x3523, 0x00) # SVEL_LimitMaxNeg

# set new parameters
d.SdoWr(0x3521, 0x00, 1000)                      # SVEL_LimitMaxPos - positive limit  = 1000 [rpm]
d.SdoWr(0x3523, 0x00, 500)                       # SVEL_LimitMaxNeg - negative limit  =  500 [rpm]


3550.00h SVel feedback

Name | SVEL_Feedback
Designation | SVel feedback
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 112h, 94Ah, 96Ah, 97Ah, 990h, 991h, 96A20h}
Default value | 0h
Unit | -
Operating mode | Velocity,Position,SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelFeedback(value), SVelFeedbackAuto(), SVelFeedbackUm(), SVelFeedbackEmk(), SVelFeedbackHall(), SVelFeedbackEnc()
Cross reference | IO_AIN_Voltage_Um, MOTOR_Nn, MOTOR_Un, MOTOR_PolN,

Description

This parameter defines the source of the SVEL-feedback.
Not every feed back can be used for every type of motor. The hall feedback can only be applied to brushless motors. If you have a controller with encoder input you can use the encoder feedback for both motor types.

Remarks:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.
  • This parameter defines the feedback for the positioning controller, also. Therefore, in positioning mode you have to set this parameter to 0x96A (MOTOR_ENC_ActualPosition) if you have a brush type motor with encoder.
Parameter values:
Values (Hex) | Name | Description
0 | Default | Brush type motors - emf feed back Brushless motors - PWM actuator
0112h | IO_AIN_VOLTAGE_Um | Emf feedback
094Ah | MOTOR_HALL_ActualPosition | Hall feedback (brushless motors only)
096Ah | MOTOR_ENC_ActualPosition | Encoder feedback
096A20h | MOTOR_ENC_INC2_ActualPosition | SPI Encoder feedback Caution: Only drive controllers with SPI-Interface
097Ah | MOTOR_ENC_SSI_ActualPosition | Absolute encoder feedback Caution: Only drive controllers with SSI-Interface
0990h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 0 feedback
0991h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 1 feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                           # DEV_Enable - disable

# print actual parameters
print "SVelFeedback =", hex(d.SdoRd(0x3550, 0x00)) # SVEL_Feedback

# set new parameters
d.SdoWr(0x3550, 0x00, 0x096A)                      # SVEL_Feedback - encoder feedback


3560.00h SVel - velocity target value

Name | SVEL_ActualTargetVel
Designation | SVel - velocity target value
Data type | int16
Access | read only
Attributs | -
Value range | -
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | SVelocity
Available since | 1.89.00.B0
Devices | All
PLC Function | -
Cross reference | SVEL_ActualCommandVel, VEL_ActualVel

Description

This parameter provides the actual set value of the velocity of the SVel controller. In SVel-Mode this value is the same as the parameter SVEL_ActualCommandVelocity. In all other modes the value is 0.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "motor target velocity =", d.SdoRd(0x3560, 0x00)


3561.00h SVel - velocity command value

Name | SVEL_ActualCommandVel
Designation | SVel - velocity command value
Data type | int16
Access | read only
Attributs | -
Value range | -
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | SVelocity,Velocity,Position
Available since | 1.89.00.B0
Devices | All
PLC Function | -
Cross reference | SVEL_ActualTargetVel, VEL_ActualVel

Description

This parameter provides the actual command velocity of the SVel controller.. This value is the output of the position- and velocity controller, if the device runs in position or velocity mode. If the device runs in SVel mode the value equals the velocity setpoint.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "command velocity =", d.SdoRd(0x3561, 0x00)


35A1.00h SVel max. velocity range

Name | SVEL_MaxVelRange
Designation | SVel max. velocity range
Data type | uint16
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | [512 .. 65535]
Default value | 16383
Unit | [rpm] - revolutions per minute
Operating mode | All
Available since | 1.82.02.42
Devices | All
PLC Function | -
Cross reference | -

Description

Defines internal scaling resp. velocity resolution of the SVel controller.

If you want to obtain steady velocity regulation, you should scale the output of the SVel controller to the maximal value.
Up to now the value was scaled to 30000 rpm, that means that the velocity resolution of the SVel controler was +- 1.8 rpm. It has led to jerking at low speed.
The default value of 16383 rpm leads to a resolution of +- 1 rpm.

Hint
  • This parameter is espescially helpful for direct drives with low speed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# print actual parameter
print "SVelFeedback =", d.SdoRd(0x35A1, 0x00) # SVEL_MaxVelRange

# set new parameter
d.SdoWr(0x35A1, 0x00, 8192)                   # SVEL_MaxVelRange -  range= 8192 [rpm] -> +- 0,5 [rpm]


3708.00h Position mode

Name | POS_Mode
Designation | Position mode
Data type | int8
Access | read / write
Attributs | Save
Value range | {0, 1, 2}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.17
Devices | All
PLC Function | PosMode(value), PosModeInterp(), PosModeInterpolation(), PosModeModulo()
Cross reference | ,

Description

This parameter defines the operation mode of the positioning

Parameter values:
Value Name Description
0 Positioning "General" Positioning
1 Interpolation The desired positions are sent periodically by a host (master) to the controller. If the refresh rate is greater than the sample rate of the positioning controller, positions in between are calculated by interpolation. The refresh rate of the master has to be a multiple of the sample rate of the controller.
Using this operation mode of the positioning you can realise applications with several synchronised axes. E.g.:
  • Continuous path control
  • Cam disc
Detailed descriptions you can find at the parameters POS_InterpMethod, POS_InterpTimePeriod and POS_InterpReference.
2 Modulo-Positioning This mode is called "round index table function" also.

E.g.: Setting the parameter POS_ModuloValue to 50, the position sequence is as follows:

in positive direction  ... 45 46 47 48 49 0  1  2  3  4  5 ...
in negative direction  ...  5  4  3  2  1 0 49 48 47 46 45 ...

Detailed descriptions you can find at the parameter POS_ModuloMethod.

  • Interpolation - system configuration with several axes

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameter
print "PosMode =", d.SdoRd(0x3708, 0x00)

# set new parameter
d.SdoWr(0x3708, 0x00, 2)   # Modulo-Mode


3709.00h Pos config

Name | POS_ConfigFlags
Designation | Pos config
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.89.00.B8
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter is used to configure the position mode

Bit assignments:
Bit | Name | Description
0 | EnableWrCmdPos | Bit 0 - A value can not be written in the parameter 3761.00h POS_ActualCommandPosition manually. Bit 1 - A value can be written in the parameter 3761.00h POS_ActualCommandPosition manually This command is available starting with the firmware version 1.85.03.93.
1 | NoPosLimit | Bit 0 - Position limits are active (POS_PositionLimitMin and POS_PositionLimitMax). Bit 1 - Position limits are inactive for modulo and relative positioning, provided that the parameters are POS_PositionLimitMin = -2147483648 and POS_PositionLimitMax = 2147483647. This command is available starting with the firmware version 1.91.00.71.
2..4 | reserved | -
5 | ModifyDecForShorterNewPos | Bit 0 - A position update during the brake ramp will not interfer with the brake ramp. After the braking is finished the motor will drive back to the new target position. Bit 1 - A position update during the brake ramp will make the ramp sharper to speed up the brake application so the new target position can be reached more quickly. This command is available starting with the firmware version 1.89.00.B8.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print hex(d.SdoRd(0x3709, 0x00))


3720.00h Position limit - minimum

Name | POS_PositionLimitMin
Designation | Position limit - minimum
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -2147483648
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.00
Devices | All
PLC Function | PosLimitMin(value), PosLimit([min, max])
Cross reference | POS_PositionLimitMax

Description

This parameter limits the target position and defines the lower limit of the position.
The value of the parameter refers to the zero point of the machine (see POS_HomingOffset). If the limit exceeds (using positioning mode) Bit5 (STAT_Limit) and Bit14 (STAT_LimitPos) are set.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosLimitMin =", d.SdoRd(0x3720, 0x00) # POS_PositionLimitMin
print "PosLimitMax =", d.SdoRd(0x3720, 0x01) # POS_PositionLimitMax

# set new parameters
d.SdoWr(0x3720, 0x00, 0)                     # POS_PositionLimitMin - lower limit =     0 ink
d.SdoWr(0x3720, 0x01, 10000)                 # POS_PositionLimitMax - upper limit = 10000 ink


3720.01h Position limit - maximum

Name | POS_PositionLimitMax
Designation | Position limit - maximum
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 2147483647
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.00
Devices | All
PLC Function | PosLimitMax(value), PosLimit([min, max])
Cross reference | POS_PositionLimitMin

Description

This parameter limits the target position and defines the upper limit of the position.
The value of the parameter refers to the zero point of the machine (see POS_HomingOffset). If the limit exceeds (using positioning mode) Bit5 (STAT_Limit) and Bit14 (STAT_LimitPos) are set.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosLimitMin =", d.SdoRd(0x3720, 0x00) # POS_PositionLimitMin
print "PosLimitMax =", d.SdoRd(0x3720, 0x01) # POS_PositionLimitMax

# set new parameters
d.SdoWr(0x3720, 0x00, 0)                     # POS_PositionLimitMin - lower limit =     0 ink
d.SdoWr(0x3720, 0x01, 10000)                 # POS_PositionLimitMax - upper limit = 10000 ink


3732.00h Position following error - window

Name | POS_FollowingErrorWindow
Designation | Position following error - window
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | -
Operating mode | Position
Available since | 1.10.00.00
Devices | All
PLC Function | PosFollowingErrorWindow(value)
Cross reference | POS_FollowingErrorTime, POS_FollowingErrorWindowDyn, POS_FollowingErrorTimeDyn, POS_ActualFollowingError

Description

This parameter defines the maximum permissible following error (deviation between command and actual position).
If the absolute value of the following error exceeds this value longer than the time POS_FollowingErrorTime a following error (ERR_Regp_FollowingError = -4000) is triggered
and Bit6 (STAT_FollowingError) of DEV_Status is set.
In general the actual following error can be read in the parameter POS_ActualFollowingError. In case of a.m. error the following error will be forced to the value when the error occurs.

A following error can have the following reasons among others :
  • blocked or defective motor
  • wrong polarity of power supply of the motor
  • permuted encoder wiring
  • defective encoder
  • Cable break or loose connexions (e.g.. motor or encoder cable)
  • desired value of the velocity couldn't be reached (e.g. power supply not big enough)
  • wrong setting for the controller (CURR_Kp. CURR_Ki, VEL_Kp, VEL_Ki, VEL_Kd, SVEL_Kp, SVEL_Ki).

Parameter values
POS_FollowingErrorWindow | Description
= FFFFFFFFh | No guarding of the following error (also, no dynamic error - POS_FollowingErrorWindowDyn).
< FFFFFFFFh | Guarding of the following error is active.

Parameter POS_FollowingErrorWindowDyn defines whether this following error is valid for stop and the movements or for the stop only (see the following table).

Parameter function
POS_FollowingErrorWindowDyn | Function of POS_FollowingErrorWindow
= FFFFFFFFh | Maximum permissible following error for stop and all sections of the movement
< FFFFFFFFh | Maximum permissible following error for stop only

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosFollowingErrorWindow    =", d.SdoRd(0x3732, 0x00) # POS_FollowingErrorWindow
print "PosFollowingErrorWindowDyn =", d.SdoRd(0x3732, 0x01) # POS_FollowingErrorWindowDyn
print "PosFollowingErrorTime      =", d.SdoRd(0x3733, 0x00) # POS_FollowingErrorTime
print "PosFollowingErrorTimeDyn   =", d.SdoRd(0x3733, 0x01) # POS_FollowingErrorTimeDyn

# set new parameters
d.SdoWr(0x3732, 0x00, 500)                                  # POS_FollowingErrorWindow
d.SdoWr(0x3732, 0x01, 2000)                                 # POS_FollowingErrorWindowDyn
d.SdoWr(0x3733, 0x00, 100)                                  # POS_FollowingErrorTime
d.SdoWr(0x3733, 0x01, 200)                                  # POS_FollowingErrorTimeDyn


3732.01h Position following error - window, dynamic

Name | POS_FollowingErrorWindowDyn
Designation | Position following error - window, dynamic
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | FFFFFFFFh
Unit | -
Operating mode | Position
Available since | 1.71.01.04
Devices | All
PLC Function | PosFollowingErrorWindowDyn(value)
Cross reference | POS_FollowingErrorTimeDyn, POS_FollowingErrorWindow, POS_FollowingErrorTime, POS_ActualFollowingError

Description

This parameter defines the maximum permissible following error (deviation between command and actual position) during a movement.
If the absolute value of the following error exceeds this value longer than the time POS_FollowingErrorTimeDyn a following error (ERR_Regp_FollowingError = -4001) is triggered and Bit6 (STAT_FollowingError) of DEV_Status is set.
In general the actual following error can be read in the parameter POS_ActualFollowingError. In case of a.m. error the following error will be forced to the value when the error occurs.

A following error can have the following reasons among others :
  • blocked or defective motor
  • wrong polarity of power supply of the motor
  • permuted encoder wiring
  • defective encoder
  • Cable break or loose connexions (e.g.. motor or encoder cable)
  • desired value of the velocity couldn't be reached (e.g. power supply not big enough)
  • wrong setting for the controller (CURR_Kp. CURR_Ki, VEL_Kp, VEL_Ki, VEL_Kd, SVEL_Kp, SVEL_Ki).
If this parameter is activated, the following error is valid the movements only. In this case parameter POS_FollowingErrorWindow defines the following error for the stop only (see the following table).

Parameter values :
POS_FollowingErrorWindowDyn | Description
= FFFFFFFFh | Parameter is not active. Maximum permissible following error is defined by parameter POS_FollowingErrorWindow, only.
< FFFFFFFFh | This parameter defines the maximum permissible following error for all sections of a movement except for the stop (see parameterPOS_FollowingErrorWindow)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosFollowingErrorWindow    =", d.SdoRd(0x3732, 0x00) # POS_FollowingErrorWindow
print "PosFollowingErrorWindowDyn =", d.SdoRd(0x3732, 0x01) # POS_FollowingErrorWindowDyn
print "PosFollowingErrorTime      =", d.SdoRd(0x3733, 0x00) # POS_FollowingErrorTime
print "PosFollowingErrorTimeDyn   =", d.SdoRd(0x3733, 0x01) # POS_FollowingErrorTimeDyn

# set new parameters
d.SdoWr(0x3732, 0x00, 500)                                  # POS_FollowingErrorWindow
d.SdoWr(0x3732, 0x01, 2000)                                 # POS_FollowingErrorWindowDyn
d.SdoWr(0x3733, 0x00, 100)                                  # POS_FollowingErrorTime
d.SdoWr(0x3733, 0x01, 200)                                  # POS_FollowingErrorTimeDyn


3733.00h Position following error - time

Name | POS_FollowingErrorTime
Designation | Position following error - time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.04
Devices | All
PLC Function | PosFollowingErrorTime(time_ms)
Cross reference | POS_FollowingErrorWindow, POS_FollowingErrorWindowDyn, POS_FollowingErrorTimeDyn

Description

A following error occurs only if the following deviation exceeds the value (POS_FollowingErrorWindow) longer than this time (POS_FollowingErrorTime). Further information you can get under the parameter POS_FollowingErrorWindow.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosFollowingErrorWindow    =", d.SdoRd(0x3732, 0x00) # POS_FollowingErrorWindow
print "PosFollowingErrorWindowDyn =", d.SdoRd(0x3732, 0x01) # POS_FollowingErrorWindowDyn
print "PosFollowingErrorTime      =", d.SdoRd(0x3733, 0x00) # POS_FollowingErrorTime
print "PosFollowingErrorTimeDyn   =", d.SdoRd(0x3733, 0x01) # POS_FollowingErrorTimeDyn

# set new parameters
d.SdoWr(0x3732, 0x00, 500)                                  # POS_FollowingErrorWindow
d.SdoWr(0x3732, 0x01, 2000)                                 # POS_FollowingErrorWindowDyn
d.SdoWr(0x3733, 0x00, 100)                                  # POS_FollowingErrorTime
d.SdoWr(0x3733, 0x01, 200)                                  # POS_FollowingErrorTimeDyn


3733.01h Position following error - time, dynamic

Name | POS_FollowingErrorTimeDyn
Designation | Position following error - time, dynamic
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | FFFFh
Unit | -
Operating mode | Position
Available since | 1.71.01.04
Devices | All
PLC Function | PosFollowingErrorTimeDyn(time_ms)
Cross reference | POS_FollowingErrorWindow, POS_FollowingErrorWindowDyn, POS_FollowingErrorTime

Description

A following error occurs only if the following deviation exceeds the value (POS_FollowingErrorWindowDyn) longer than this time (POS_FollowingErrorTimeDyn). Further information you can get under the parameter POS_FollowingErrorWindowDyn.

Parameter value:
Value | Description
= FFFFh | Internal value is set to the values of parameter POS_FollowingErrorTime
< FFFFh | Internal value is set to adjusted value

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameters
print "PosFollowingErrorWindow    =", d.SdoRd(0x3732, 0x00) # POS_FollowingErrorWindow
print "PosFollowingErrorWindowDyn =", d.SdoRd(0x3732, 0x01) # POS_FollowingErrorWindowDyn
print "PosFollowingErrorTime      =", d.SdoRd(0x3733, 0x00) # POS_FollowingErrorTime
print "PosFollowingErrorTimeDyn   =", d.SdoRd(0x3733, 0x01) # POS_FollowingErrorTimeDyn

# set new parameters
d.SdoWr(0x3732, 0x00, 500)                                  # POS_FollowingErrorWindow
d.SdoWr(0x3732, 0x01, 2000)                                 # POS_FollowingErrorWindowDyn
d.SdoWr(0x3733, 0x00, 100)                                  # POS_FollowingErrorTime
d.SdoWr(0x3733, 0x01, 200)                                  # POS_FollowingErrorTimeDyn


3734.00h Position following error limit

Name | POS_FollowingErrorLimit
Designation | Position following error limit
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 4294967295
Unit | [counts]
Operating mode | Position
Available since | 1.85.03.B2
Devices | All
PLC Function | -
Cross reference | -

Description

With the parameter, the following error can be limited. If the actual following error is greater than the value of this parameter, the velocity setting is reduced until the follwing error becomes smaller.
If the following error limit is disabled and the motor is blocked, the ramp generator keeps on generating the command postion. This can lead to a high acceleration when the blockade is released. The velocity can overcome its limits and the whole system can take damage.

If the following error limit is enabled and the motor is blocked, the ramp generator stops generating the command position, when the following error limit is reached. If the blockade is released only a low following error has to be corrected and therefore the system does not have to accelerate highly.

This parameter is interesting for application such as:
  • Door control
  • Barrier control
  • Palletizing (widely varying loads)
  • Positioning with temporary blockage
  • ...

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# read actual parameter
print "PosFollowingErrorLimit =", d.SdoRd(0x3734, 0x00) # POS_FollowingErrorLimit

# set new parameter
d.SdoWr(0x3734, 0x00, 1000)                              # POS_FollowingErrorLimit


373A.00h Position window

Name | POS_PositionWindow
Designation | Position window
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | FFFFFFFFh
Unit | -
Operating mode | Position
Available since | 1.64.00.30
Devices | All
PLC Function | PosWindow(value), PosWindowDisable()
Cross reference | POS_PositionWindowTime, POS_PositionWindowTimeout

Description

The position windows is symmetrically around the position target. If the target position is within this windows for a certain time (see parameter POS_PositionWindowTime), the bit STAT_Reached (desired value was reached) in the status (DEV_Status) will be set. The checking whether the position is within the window or not, is only be started when the positioning of the ramp generator is finished.

Parameter values:
Value | Description
<FFFFFFFFh | Position windows
=FFFFFFFh | Position windows not active. The status-bit STAT_Reached is set by the ramp generator directly.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# read actual parameters
print "PosWindow        =", d.SdoRd(0x373A, 0x00)  # POS_PositionWindow
print "PosWindowTime    =", d.SdoRd(0x373B, 0x00)  # POS_PositionWindowTime
print "PosWindowTimeout =", d.SdoRd(0x373B, 0x01)  # POS_PositionWindowTimeout

# set new parameters
d.SdoWr(0x373A, 0x00, 100)                         # POS_PositionWindow
d.SdoWr(0x373B, 0x00, 200)                         # POS_PositionWindowTime
d.SdoWr(0x373b, 0x01, 1000)                        # POS_PositionWindowTimeout


373B.00h Position window - time

Name | POS_PositionWindowTime
Designation | Position window - time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Position
Available since | 1.64.00.30
Devices | All
PLC Function | PosWindowTime(time_ms)
Cross reference | POS_PositionWindow, POS_PositionWindowTimeout

Description

Using this parameter you can avoid setting the status-bit STAT_Reached (see DEV_Status) when the motor overshoots the target only for a short time. The actual position must be within the position window for a certain time, before the status-bit is set.

Parameter values:
Value | Description
< FFFFh | Time in [ms] for the position window
= FFFFh | Time is deactivated. The status-bit STAT_Reached is set by the ramp generator directly.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# read actual parameters
print "PosWindow        =", d.SdoRd(0x373A, 0x00)  # POS_PositionWindow
print "PosWindowTime    =", d.SdoRd(0x373B, 0x00)  # POS_PositionWindowTime
print "PosWindowTimeout =", d.SdoRd(0x373B, 0x01)  # POS_PositionWindowTimeout

# set new parameters
d.SdoWr(0x373A, 0x00, 100)                         # POS_PositionWindow
d.SdoWr(0x373B, 0x00, 200)                         # POS_PositionWindowTime
d.SdoWr(0x373b, 0x01, 1000)                        # POS_PositionWindowTimeout


373B.01h Position window - timeout

Name | POS_PositionWindowTimeout
Designation | Position window - timeout
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [ms]
Operating mode | Position
Available since | 1.64.00.30
Devices | All
PLC Function | PosWindowTimeout(time_ms)
Cross reference | POS_PositionWindow, POS_PositionWindowTime

Description

Using this time-out you can check whether the target position was reached within this time or not. The checking starts after the positioning of the ramp generator lis finished.
If the status-bit STAT_Reached (see DEV_Status) is not set within this time, the error message (ERR_Regp_ReachedTimeout = -4005) is sent.

Parameter values:
Values | Description
< FFFFh | Timeout in [ms]
= FFFFh | Timeout not active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# read actual parameters
print "PosWindow        =", d.SdoRd(0x373A, 0x00)  # POS_PositionWindow
print "PosWindowTime    =", d.SdoRd(0x373B, 0x00)  # POS_PositionWindowTime
print "PosWindowTimeout =", d.SdoRd(0x373B, 0x01)  # POS_PositionWindowTimeout

# set new parameters
d.SdoWr(0x373A, 0x00, 100)                         # POS_PositionWindow
d.SdoWr(0x373B, 0x00, 200)                         # POS_PositionWindowTime
d.SdoWr(0x373b, 0x01, 1000)                        # POS_PositionWindowTimeout


373C.00h Position reached - config bits

Name | POS_ReachedConfigFlags
Designation | Position reached - config bits
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0h .. FFFFh]
Default value | 0h
Unit | -
Operating mode | Position
Available since | 1.71.01.11
Devices | All
PLC Function | PosReachedConfigFlags(value)
Cross reference | DEV_Status, POS_PositionWindow, POS_PositionWindowTime, POS_PositionWindowTimeout

Description

With these bits you can configure the behavior of the bit "STAT_Reached" (a bit of the DEV_Status) in position mode.

Terms:
    TrgPos - target position
    CmdPos - command position (position after the ramp generator)

Functioning of the bit "STAT_Reached":

If all bits in this parameter are set to 0, and POS_PositionWindow and POS_PositionWindowTime are not activated, then the bit "STAT_Reached" is set when the ramp generator (VEL_RampState) is in IDLE state (standstill).
A different behavior can be achieved with the following parameter values:

Parameter values:
Bit | Name | Description
0 | FLAG_SetOnlyIfTargetPosValid | If this bit == 1, the bit "STAT_Reached" will only be set after an enable-command, if a valid positioning command was executed.
1 | FLAG_SetOnlyIfTargetPosReached | If this bit == 1, the bit "STAT_Reached" will only be set if the command position is equal to the target position. This bit is only important, if the bit "STAT_Reached" is set by the ramp generator. That means, POS_PositionWindow and POS_PositionWindowTime are not activated.
2 | FLAG_NotSetTrgPosAfterHalt | If this bit == 1, the target position will not be set to the command position after a Halt-command. Hint: If the bit "STAT_Reached" should not be set after a Halt-command, the bits "FLAG_SetOnlyIfTargetPosReached" and "FLAG_NotSetTrgPosAfterHalt" must be set.
3 | FLAG_NotSetTrgPosAfterQuickStop | If this bit == 1, the target position will not be set to the command position after a QuickStop-command. Hint: If the bit "STAT_Reached" should not be set after a QuickStop-command, the bits "FLAG_SetOnlyIfTargetPosReached" and "FLAG_NotSetTrgPosAfterQuickStop" must be set.
4 | FLAG_SetTrgPosOnEnable | If this bit == 1, the target position will be set to the command position after an enable-command.
5 | FLAG_CheckTargetPosReachedTimeoutAfterEnable | If this bit == 1, the time guarding (POS_PositionWindowTimeout), whether the target position was reached or not, is started right after an enable-command. Otherwise it starts after the first positioning command.
6-15 | Reserved | Reserved for functions in future. These bits must be set to 0.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# read actual parameters
print "POS_ReachedConfigFlag =", hex(d.SdoRd(0x373C, 0x00))  # POS_ReachedConfigFlags

# set new parameters
d.SdoWr(0x373C, 0x00, 0x0)                                   # POS_ReachedConfigFlags


373D.00h Position window - disable amplifier

Name | POS_DeadWindowOff
Designation | Position window - disable amplifier
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [counts]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOn, POS_DeadTimeOff, POS_DeadTimeOn, POS_DeadVel

Description

This parameter can disable the amplifier when it reaches the target and stays for a defined time in a defined window around the target. This can save energy and reduces thermal strain of the amplifier and the motor.

The position windows is symmetrically around the position target. As soon as the bit STAT_Reached (desired value was reached) in the status register (DEV_Status) is set and the actual position is within the defined window (POS_DeadWindowOff) the timer (POS_DeadTimeOff) starts running. If the timer has expired the amplifier will automatically disable the motor.

Parameter values:
Value | Description
<FFFFFFFFh | Window width
=FFFFFFFh | Function deactivated.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373D.01h Position window - enable amplifier

Name | POS_DeadWindowOn
Designation | Position window - enable amplifier
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [counts]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOff, POS_DeadTimeOff, POS_DeadTimeOn, POS_DeadVel

Description

This parameter can enable the amplifier, if it unintentionally leaves a defined window around the target position for a certain time and move it back to the target position.

The position windows is symmetrically around the position target. When the actual position is outside the defined window (POS_DeadWindowOn) the timer (POS_DeadTimeOn) starts running. As soon as the timer expires the amplifier will be automatically enabled and the motor moves to the last target position.

Parameter values:
Value | Description
<FFFFFFFFh | Window width
=FFFFFFFh | Function deactivated.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373E.00h Position window time - disable amplifier

Name | POS_DeadTimeOff
Designation | Position window time - disable amplifier
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOff, POS_DeadWindowOn, POS_DeadTimeOn, POS_DeadVel

Description

When the timer (POS_DeadTimeOff) expires the amplifier will be automatically disabled. The timer starts running as soon as the bit STAT_Reached of the status register (DEV_Status) is set and the motor is inside the window POS_DeadWindowOff.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373E.01h Position window time - enable amplifier

Name | POS_DeadTimeOn
Designation | Position window time - enable amplifier
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOff, POS_DeadWindowOn, POS_DeadTimeOff, POS_DeadVel

Description

When the timer (POS_DeadTimeOn) expires the amplifier will be automatically enabled and the motor moves to the last target position. The timer starts running when the actual position is outside the defined window (POS_DeadWindowOn).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373F.00h Position window - velocity

Name | POS_DeadVel
Designation | Position window - velocity
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOff, POS_DeadWindowOn, POS_DeadTimeOn, POS_DeadTimeOff

Description

This parameter defines the velocity, with which the motor moves to the target position, if the timer (POS_DeadTimeOn) expires.
The value 0xFFFFFFFF (4294967295) deactivates this parameter and the desired velocity (VEL_DesiredValue) will be used instead.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


374C.00h Pos. ramp generator - ramp type

Name | POS_RampType
Designation | Pos. ramp generator - ramp type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {1, 2}
Default value | 1
Unit | -
Operating mode | Position
Available since | 1.82.02.12
Devices | All
PLC Function | PosRampType(value)
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV, VEL_Dec_dT

Description

This parameter defines the type of the ramp in positioning mode.

Parameter values:
Value | Description
1 | Trapezium - the slop of the ramp is defined by the parameter VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV and VEL_Dec_dT .
2 | S-Rampe - the slop of the ramp is defined by the parameters VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV und VEL_Dec_dT.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# read actual parameter
print "Aktuelle PosRampType =", d.SdoRd(0x374C, 0x00)

# set new parameter
d.SdoWr(0x374C, 0x00, 2)   # ramp type = S2


374D.00h Position ramp generator - state

Name | POS_RampState
Designation | Position ramp generator - state
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.10.00.00
Devices | All
PLC Function | PosRampState()
Cross reference | -

Description

This parameter provides the actual status of the ramp generator in positioning mode.

Parameter values:

Values | Description
Bit [0] = 1 | ACC - acceleration
Bit [1] = 2 | CONST_VEL - The velocity output of the ramp generator equals to the desired value but is not zero.
Bit [2] = 4 | DEC - deceleration
Bit [3..6] | Reserved (undefined value)
Bit 7 | DIR_NEG - negative rotation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                 # NodeId = 1

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - mode postion
d.SdoWr(0x3300, 0x00, 500)                # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3762, 0x00, 0)                  # POS_ActualPosition - actual postion = 0

# acceleration = 1000[rpm] / 5000[ms]
d.SdoWr(0x3340, 0x00, 1000)               # VEL_Acc_dV
d.SdoWr(0x3341, 0x00, 5000)               # VEL_Acc_dT

# deceleration  = 1000[rpm] / 5000[ms]
d.SdoWr(0x3342, 0x00, 1000)               # VEL_Dec_dV
d.SdoWr(0x3343, 0x00, 5000)               # VEL_Dec_dT

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Endstufe Freigeben

# last ramp state
LastState = -1

# get system time
Timestamp = (time.clock() * 1000.0)

while 1:
   act_state = d.SdoRd(0x374D, 0x00)      # POS_RampState - get ramp state

   # after 10 s
   if ((time.clock()*1000.0)-Timestamp) > 10000 :
      d.SdoWr(0x3790, 0x00, 20000)        # POS_Mova - go to 20000 ink

   # after 20 s
   if ((time.clock()*1000.0)-Timestamp) > 20000 :
      d.SdoWr(0x3790, 0x00, -20000)       # POS_Mova - go to -20000 ink
      Timestamp = (time.clock() * 1000.0) # get new system time

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0x00: print "Stillstand"
      elif act_state == 0x01: print "Beschleunigung    , positiv"
      elif act_state == 0x02: print "Konstante Drehzahl, positiv"
      elif act_state == 0x04: print "Verzögerung       , positiv"
      elif act_state == 0x81: print "Beschleunigung    , negativ"
      elif act_state == 0x82: print "Konstante Drehzahl, negativ"
      elif act_state == 0x84: print "Verzögerung       , negativ"

   time.sleep(0.1)                        # wait 100 ms


3760.00h Actual target position

Name | POS_ActualTargetPosition
Designation | Actual target position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.00.04
Devices | All
PLC Function | ActTrgPos(), TrgPos()
Cross reference | POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition, POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt

Description

This parameter provides the actual target position. This is the input of the profile generator.
This target position is an absolute value which is set by the parameters POS_Mova (absolute positioning) or POS_Movr (relative positioning). The motor will drive to this position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3761.00h Actual command position

Name | POS_ActualCommandPosition
Designation | Actual command position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.10.00.00
Devices | All
PLC Function | ActCmdPos(), CmdPos()
Cross reference | POS_ActualTargetPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition, POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt

Description

This parameter provides the actual command position.
This command position is the output of the profile generator and the input of the position controller.

With enabled Master-Tool-Function (TOOL_Master_Control) this parameter provides the actual command position, which was generated by the profile generator.

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3761.01h Actual internal command position

Name | POS_ActualCommandPositionReg
Designation | Actual internal command position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | POS_ActualPosition, POS_ActualPositionReg, POS_ActualFollowingError, POS_ActualFollowingErrorReg, POS_ActualCommandPosition

Description

This parameter provides the actual command position of the internal control loop.
The internal command position is the sum of the position value of the profile generator output and the command position value of the output of the P-filter of the Master-Tool.

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActCmdPosReg             =", d.SdoRd(0x3761, 0x01) # POS_ActualCommandPositionRef
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosReg                =", d.SdoRd(0x3762, 0x01) # POS_ActualPositionReg
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActPosFollowingErrorReg  =", d.SdoRd(0x3763, 0x01) # POS_ActualFollowingErrorReg


3762.00h Actual position

Name | POS_ActualPosition
Designation | Actual position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.10.00.00
Devices | All
PLC Function | ActPos(value)
Cross reference | POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualFollowingError, POS_ActualIndexPosition, POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt

Description

Using this parameter the actual position can be set and read. Depending on the feedback, the hall position (MOTOR_HALL_ActualPosition) or the encoder position (MOTOR_ENC_ActualPosition) etc. is valid.

Remark:
  • Writing to this parameter the value of the feedback (e.g. MOTOR_HALL_ActualPosition or MOTOR_ENC_ActualPosition etc.) will be changed respectively.

With enabled Master-Tool-Function (TOOL_MASTER_Control) this parameter provides the actual position of the Master-Tool.

Remark:
  • If the Master-Tool is activated the parameter source (TOOL_Master_ParSource) of the Master-Tool will be changed respectively with writing to this parameter.

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3762.01h Actual internal position

Name | POS_ActualPositionReg
Designation | Actual internal position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | POS_ActualPosition, POS_ActualFollowingError, POS_ActualFollowingErrorReg, POS_ActualCommandPosition, POS_ActualCommandPositionReg

Description

Using this parameter the actual position of the internal feedback can be set and read. Depending on the feedback the hall position (MOTOR_HALL_ActualPosition) or the encoder position (MOTOR_ENC_ActualPosition) etc. is valid.

Remark:
  • Writing to this parameter the value of the feedback (e.g. MOTOR_HALL_ActualPosition or MOTOR_ENC_ActualPosition etc.) will be changed respectively.

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActCmdPosReg             =", d.SdoRd(0x3761, 0x01) # POS_ActualCommandPositionRef
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosReg                =", d.SdoRd(0x3762, 0x01) # POS_ActualPositionReg
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActPosFollowingErrorReg  =", d.SdoRd(0x3763, 0x01) # POS_ActualFollowingErrorReg


3763.00h Actual position following error

Name | POS_ActualFollowingError
Designation | Actual position following error
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.10.00.00
Devices | All
PLC Function | ActPosFollowingError(), PosFollowingError()
Cross reference | POS_FollowingErrorWindow, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualIndexPosition, POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt

Description

This parameter provides the actual following error (deviation between command position and actual position).
In case of an error (see parameter POS_FollowingErrorWindow) the value is set to the following error which was valid when the error occurred.

With enabled Master-Tool-Function (TOOL_MASTER_Control) this parameter provides the difference between the command position and the actual position of the Master-Tool.
A following error will be generated if this difference or the difference between command position and actual internal position (POS_ActualPositionReg) exceeds the permissible following error (POS_FollowingErrorWindow).

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3763.01h Actual internal position following error

Name | POS_ActualFollowingErrorReg
Designation | Actual internal position following error
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | POS_ActualPosition, POS_ActualPositionReg, POS_ActualFollowingError, POS_ActualCommandPosition, POS_ActualCommandPositionReg

Description

This parameter provides the actual internal following error (deviation between command position and actual internal position). A deviation between internal feedback and the command position can occur without having a deviation of the Master-Tool position and the command position and vice versa. Therefore the highest actual following error (POS_Actual_FollowingErrorReg or POS_ActualFollowingError) will be used as criteria to generate a following error (POS_FollowingErrorWindow).

If the Master-Tool (TOOL_Master_Control) is deactivated the POS_ActualCommandPosition and POS_ActualCommandPositionReg are equal.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActCmdPosReg             =", d.SdoRd(0x3761, 0x01) # POS_ActualCommandPositionRef
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosReg                =", d.SdoRd(0x3762, 0x01) # POS_ActualPositionReg
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActPosFollowingErrorReg  =", d.SdoRd(0x3763, 0x01) # POS_ActualFollowingErrorReg


3764.00h Actual position of index

Name | POS_ActualIndexPosition
Designation | Actual position of index
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActIndexPos(), IndexPos()
Cross reference | POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt

Description

This parameter provides the absolute actual position (see POS_ActualPosition) when the index pulse (zero track) was reached. The actual position will be refreshed at every index pulse.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3765.00h Position origin

Name | POS_ActualOrigin
Designation | Position origin
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.85.03.22
Devices | All
PLC Function | -
Cross reference | POS_ActualPosition, POS_Mova, POS_ActualOrigin_cnt

Description

This parameter is used to relocate / read the origin position, which is the base for the calculation of a movement. Changing this parameter will effect the actual postion of the controller. If the factor group is set it will effect also this parameter and has to be taken into account.

The parameter can be, for example, use to calculate a distance between two end points of the machine. (See example below)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3221, 0x00, 2000)         # CURR_LimitMaxPos
d.SdoWr(0x3223, 0x00, 2000)         # CURR_LimitMaxNeg

d.SdoWr(0x3732, 0x00, 50000)        # POS_FollowingErrorWindow

d.SdoWr(0x37b7, 0x00, 1)            # POS_HomingBlock_ConfigFlags
d.SdoWr(0x37b7, 0x01, 100)          # POS_HomingBlock_VelLow
d.SdoWr(0x37B4, 0x00, 500)          # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 500)          # POS_HomingVelZero

d.SdoWr(0x37B2, 0x00, 17)           # POS_HomingMethod
d.SdoWr(0x37B0, 0x00, 1)            # POS_HomingCmd - Start Homing

while not (d.SdoRd(0x3002, 0x00) & (1<<7)):  # Homing Done
   time.sleep(0.01)

origin_up = d.SdoRd(0x3765, 0x00)   # POS_ActualOrigin

d.SdoWr(0x37B2, 0x00, 18)           # POS_HomingMethod
d.SdoWr(0x37B0, 0x00, 1)            # POS_HomingCmd - Start Homing

while not (d.SdoRd(0x3002, 0x00) & (1<<7)):  # Homing Done
   time.sleep(0.01)

origin_down = d.SdoRd(0x3765, 0x00) # POS_ActualOrigin

print "Distance:", (origin_down-origin_up)


3770.00h Actual target position in increments

Name | POS_ActualTargetPosition_cnt
Designation | Actual target position in increments
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.00.04
Devices | All
PLC Function | ActTrgPos_cnt(), TrgPos_cnt()
Cross reference | POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition

Description

This parameter provides the actual target position in increments. This is the input of the profile generator.
This target position is an absolute value which is set by the parameters POS_Mova (absolute positioning) or POS_Movr (relative positioning). The motor will drive to this position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3771.00h Actual command positin in increments

Name | POS_ActualCommandPosition_cnt
Designation | Actual command positin in increments
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.50.00.00
Devices | All
PLC Function | ActCmdPos_cnt(), CmdPos_cnt()
Cross reference | POS_ActualTargetPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition_cnt, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition

Description

his parameter provides the actual command position in increments.
This is the output of the profile generator and the input of the positioning controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3772.00h Actual positin in increments

Name | POS_ActualPosition_cnt
Designation | Actual positin in increments
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | ActPos_cnt(value)
Cross reference | POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualIndexPosition, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition

Description

Using this parameter you can get and set the actual position in increments. Depending on the feedback the hall position (MOTOR_HALL_ActualPosition) or the encoder position (MOTOR_ENC_ActualPosition) is valid.

Remark:
  • Writing to this parameter changes MOTOR_HALL_ActualPosition or MOTOR_ENC_ActualPosition respectively.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3773.00h Actual following error in increments

Name | POS_ActualFollowingError_cnt
Designation | Actual following error in increments
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.50.00.00
Devices | All
PLC Function | ActPosFollowingError_cnt(), PosFollowingError_cnt()
Cross reference | POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualIndexPosition_cnt, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition

Description

This parameter provides the actual following error (deviation between command position and actual position) in increments
In case of an error (see Parameter POS_FollowingErrorWindow) the value is set to the following error in increments which was valid when the error occured.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3774.00h Actual index positin in increments

Name | POS_ActualIndexPosition_cnt
Designation | Actual index positin in increments
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActIndexPos_cnt(), IndexPos_cnt()
Cross reference | POS_ActualTargetPosition_cnt, POS_ActualCommandPosition_cnt, POS_ActualPosition_cnt, POS_ActualFollowingError_cnt, POS_ActualTargetPosition, POS_ActualCommandPosition, POS_ActualPosition, POS_ActualFollowingError, POS_ActualIndexPosition

Description

This parameter provides the absolute position at the index pulse. The actual position will be stored at every index pulse.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                                # NodeId = 1

# print the actual parameters
print "ActTrgPos                =", d.SdoRd(0x3760, 0x00) # POS_ActualTargetPosition
print "ActCmdPos                =", d.SdoRd(0x3761, 0x00) # POS_ActualCommandPosition
print "ActPos                   =", d.SdoRd(0x3762, 0x00) # POS_ActualPosition
print "ActPosFollowingError     =", d.SdoRd(0x3763, 0x00) # POS_ActualFollowingError
print "ActIndexPos              =", d.SdoRd(0x3764, 0x00) # POS_ActualIndexPosition

print "ActTrgPos_cnt            =", d.SdoRd(0x3770, 0x00) # POS_ActualTargetPosition_cnt
print "ActCmdPos_cnt            =", d.SdoRd(0x3771, 0x00) # POS_ActualCommandPosition_cnt
print "ActPos_cnt               =", d.SdoRd(0x3772, 0x00) # POS_ActualPosition_cnt
print "ActPosFollowingError_cnt =", d.SdoRd(0x3773, 0x00) # POS_ActualFollowingError_cnt
print "ActIndexPos_cnt          =", d.SdoRd(0x3774, 0x00) # POS_ActualIndexPositon_cnt


3775.00h Position origin in inc

Name | POS_ActualOrigin_cnt
Designation | Position origin in inc
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.85.03.22
Devices | All
PLC Function | -
Cross reference | POS_ActualPosition, POS_Mova, POS_ActualOrigin

Description

This parameter is used to relocate / read the origin position in counts, which is the base for the calculation of a movement. Changing this parameter will effect the actual position of the controller. If the factor group is set it will effect also this parameter and has to be taken into account.

The parameter can be, for example, use to calculate a distance between two end points of the machine. (See example below)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3221, 0x00, 2000)         # CURR_LimitMaxPos
d.SdoWr(0x3223, 0x00, 2000)         # CURR_LimitMaxNeg

d.SdoWr(0x3732, 0x00, 50000)        # POS_FollowingErrorWindow

d.SdoWr(0x37b7, 0x00, 1)            # POS_HomingBlock_ConfigFlags
d.SdoWr(0x37b7, 0x01, 100)          # POS_HomingBlock_VelLow
d.SdoWr(0x37B4, 0x00, 500)          # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 500)          # POS_HomingVelZero

d.SdoWr(0x37B2, 0x00, 17)           # POS_HomingMethod
d.SdoWr(0x37B0, 0x00, 1)            # POS_HomingCmd - Start Homing

while not (d.SdoRd(0x3002, 0x00) & (1<<7)):  # Homing Done
   time.sleep(0.01)

origin_up = d.SdoRd(0x3775, 0x00)   # POS_ActualOrigin

d.SdoWr(0x37B2, 0x00, 18)           # POS_HomingMethod
d.SdoWr(0x37B0, 0x00, 1)            # POS_HomingCmd - Start Homing

while not (d.SdoRd(0x3002, 0x00) & (1<<7)):  # Homing Done
   time.sleep(0.01)

origin_down = d.SdoRd(0x3775, 0x00) # POS_ActualOrigin

print "Distance:", (origin_down-origin_up)


3790.00h Absolute moving

Name | POS_Mova
Designation | Absolute moving
Data type | int32
Access | write only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.10.00.00
Devices | All
PLC Function | Mova(value), IsMovCompleted()
Cross reference | DEV_Mode, DEV_Status, VEL_DesiredValue, VEL_Acc_dT, VEL_Acc_dV, VEL_Dec_dT, VEL_Dec_dV, POS_Movr

Description

Setting this parameter starts a movement to an absolute position.
The other parameters for the moving like maximum. velocity, acceleration and deceleration were taken from the respective parameters of the velocity function.
You can set the parameter to a new position during movement. This is called "on-the-fly" change of a movement.

Here you can find some examples for velocity profiles:

  1. Non symmetrical trapezium profile (different acceleration and deceleration ramps)

  2. At the time "t1" a new position command was triggered with (Acc2 > Acc1) and (V2 > V1).

    The new movement parameters (velocity, acceleration and deceleration) were set before the time "t1". Those parameters are only over taken giving the new position command. That means just a new velocity setting will not change the active movement. A new deceleration is only over taken if the new target position can be reached with this new deceleration. Otherwise the "old" deceleration is used for this movement. (This rules applies to the following examples also)

  3. At the time "t1" a new position command was triggered with (V1 > V2).

  4. At the times "t1" and "t2" new position commands were triggered with (Acc1 > Acc2) and (V2 > V3 > V1).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)            # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)            # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 500)          # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3762, 0x00, 0)            # POS_ActualPosition - set postion to 0
d.SdoWr(0x3004, 0x00, 1)            # DEV_Enable - enable

# move to 20000 ink:
d.SdoWr(0x3790, 0x00, 20000)        # POS_Mova

while 1:

   status = d.SdoRd(0x3002, 0x00)   # DEV_Status - get status
   if (status & 0x0110) == 0x0110:  # target reached? (Bit4 & Bit8 == 1)
      print "target postion reached"
      break                         # end loop


3791.00h Relative moving

Name | POS_Movr
Designation | Relative moving
Data type | int32
Access | write only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.0A.00.00
Devices | All
PLC Function | Movr(value), IsMovCompleted()
Cross reference | DEV_Mode, DEV_Status, VEL_DesiredValue, VEL_Acc_dT, VEL_Acc_dV, VEL_Dec_dT, VEL_Dec_dV

Description

Setting this parameter starts a movement to an relative position, means relative to the actual command position.
The other parameters for the moving like maximum. velocity, acceleration and deceleration were taken from the respective parameters of the velocity function.
You can set the parameter to a new position during movement. This is called "on-the-fly" change of a movement.

Some examples for velocity profiles can be found at parameter POS_Mova.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)            # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)            # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 500)          # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)            # DEV_Enable - enable

# move to 26666 ink:
d.SdoWr(0x3791, 0x00, 26666)        # POS_Movr

while 1:

   status = d.SdoRd(0x3002, 0x00)   # DEV_Status - get status
   if (status & 0x0110) == 0x0110:  # target reached? (Bit4 & Bit8 == 1)
      print "target postion reached"
      break                         # end loop


37A4.01h Gear backlash compensation - path

Name | POS_GearBacklashComp_Path
Designation | Gear backlash compensation - path
Data type | int32
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.85.03.54
Devices | All
PLC Function | PosGearBacklashCompPath(value)
Cross reference | POS_GearBacklashComp_Vel

Description

The parameter defines the distance for backlash compansation. If the value is not zero, a target position is always approached from one direction. The aproach direction is determined by the sign of the parameter value.

Parameter values:
Value | Description
0 | Backlash compensation is deactivated.
>0 | Backlash compensation in positive direction. 1. When positioning in positive direction, the drive goes directly to the target position. 2. When positioning in negative direction, the drive goes first to the position = target position - value of the parameter. After reaching the position the drive goes with the velocity POS_GearBacklashComp_Vel to the target position (in positive direction).
<0 | Backlash compensation in negative direction. 1. When positioning in negative direction, the drive goes directly to the target position. 2. When positioning in positive direction, the drive goes first to the position = target position + value of the parameter. After reaching the position the drive goes with the velocity POS_GearBacklashComp_Vel to the target position (in negative direction).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)            # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)            # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 500)          # VEL_DesiredValue - desired velocity = 500 [rpm]

# set new Parameter
d.SdoWr(0x37A4, 0x01, -6000)        # POS_GearBacklashComp_Path - go 6000 ink in negative direction
d.SdoWr(0x37A4, 0x02, 100)          # POS_GearBacklashComp_Vel - go with [100 rpm]

d.SdoWr(0x3004, 0x00, 1)            # DEV_Enable - enable

# move to 26666 ink:
d.SdoWr(0x3791, 0x00, 26666)        # POS_Movr

while 1:

   status = d.SdoRd(0x3002, 0x00)   # DEV_Status - get status
   if (status & 0x0110) == 0x0110:  # target reached? (Bit4 & Bit8 == 1)
      print "target postion reached"
      break                         # end loop


37A4.02h Gear backlash compensation - velocity

Name | POS_GearBacklashComp_Vel
Designation | Gear backlash compensation - velocity
Data type | uint32
Access | read / write
Attributs | Save
Value range | -
Default value | 100
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.85.03.54
Devices | All
PLC Function | PosGearBacklashCompVel(value)
Cross reference | POS_GearBacklashComp_Path

Description

The parameter determines the velocity of backlash compensation.
The description of the function, you will find in the description of the parameter POS_GearBacklashComp_Path.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)            # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)            # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 500)          # VEL_DesiredValue - desired velocity = 500 [rpm]

# set new Parameter
d.SdoWr(0x37A4, 0x01, -6000)        # POS_GearBacklashComp_Path - go 6000 ink in negative direction
d.SdoWr(0x37A4, 0x02, 100)          # POS_GearBacklashComp_Vel - go with [100 rpm]

d.SdoWr(0x3004, 0x00, 1)            # DEV_Enable - enable

# move to 26666 ink:
d.SdoWr(0x3791, 0x00, 26666)        # POS_Movr

while 1:

   status = d.SdoRd(0x3002, 0x00)   # DEV_Status - get status
   if (status & 0x0110) == 0x0110:  # target reached? (Bit4 & Bit8 == 1)
      print "target postion reached"
      break                         # end loop


Content - Parameters 3000h (DSA) - Homing

37B0.00h | POS_HomingCmd | Homing - command
37B1.00h | POS_HomingStatus | Homing - status
37B1.01h | POS_HomingError | Homing - error
37B1.02h | POS_HomingState | Homing - state
37B1.03h | POS_HomingRefToIndex | Homing - path of reference switch to index
37B1.04h | POS_HomingRefToIndex_cnt | Homing - path of reference switch to index in counts
37B2.00h | POS_HomingMethod | Homing - method
37B3.00h | POS_HomingOffset | Homing - offset
37B4.00h | POS_HomingVelSwitch | Homing - velocity for search of switch
37B4.01h | POS_HomingVelZero | Homing - Velocity for search of zero point
37B5.00h | POS_HomingAcc | Homing - acceleration
37B5.01h | POS_HomingDec | Homing - deceleration
37B6.00h | POS_HomingMaxIndexPath | Homing - max. path for search of index
37B6.01h | POS_HomingIndexOffset | Homing - index offset
37B7.00h | POS_HomingBlock_ConfigFlags | Homing blockage - config
37B7.01h | POS_HomingBlock_VelLow | Homing blockage - low velocity
37B7.02h | POS_HomingBlock_VelHigh | Homing blockage - high velocity
37B7.03h | POS_HomingBlock_Time | Homing blockage - time
37B7.04h | POS_HomingBlock_FollowingErrorWindow | Homing blockage - position following error window


37B0.00h Homing - command

Name | POS_HomingCmd
Designation | Homing - command
Data type | uint8
Access | write only
Attributs | -
Value range | {0, 1, 2}
Default value | -
Unit | -
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeCmd(value), HomingStart(), HomingBreak()
Cross reference | -

Description

This parameter is used for the homing command. To execute a homing, the controller has to be in positioning mode.

Parameter values:
Hex | Dec | Name | Description
00h | 0 | HOMING_CMD_NOP | No operation
01h | 1 | HOMING_CMD_Start | Starts the homing. The bit STAT_HomingDone (DEV_Status) is reseted. The method for the homing is defined in parameter POS_HomingMethod.
02h | 2 | HOMING_CMD_Break | Interrupts an active homing.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B1.00h Homing - status

Name | POS_HomingStatus
Designation | Homing - status
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeStatus()
Cross reference | -

Description

This parameter provides the status of the homing. Every bit has its own meaning (see table).

A detailed description of the function you can find at parameter POS_HomingMethod.

Bit assignment:
Bit | Name | Description if the bit is true
0 | HOME_STAT_Active | Homing is running.
1 | HOME_STAT_Error | There was an error during homing.
2 | HOME_STAT_Warning | Not uses at the moment
3 | HOME_STAT_Break | Homing was interrupted (e.g.: POS_HomingCmd = 2)
4 | HOME_STAT_Done | Homing was successfully done.
5 | HOME_STAT_IndexFound | Index pulse was found.
6 | HOME_STAT_VelZero | 0 : Velocity for the homing = POS_HomingVelSwitch 1 : Velocity for the homing = POS_HomingVelZero
7 | HOME_STAT_DirNeg | Negative rotation for the homing.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B1.01h Homing - error

Name | POS_HomingError
Designation | Homing - error
Data type | int16
Access | read only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeError()
Cross reference | -

Description

This parameter provides the error code of the homing.

A detailed description of the function you can find at parameter POS_HomingMethod.

Error code:
Error |  | Name | Description
Decimal | Hex
0 | 0 | OK | No error.
-4200 | 0xEF98 | ERR_Homing_UnknownMethod | Unknown method for the homing (Parameter POS_HomingMethod) is not supported.
-4201 | 0xEF97 | ERR_Homing_IndexNotFound | Index pulse was not detected. This error can only occur using homing method with index pulse.
-4202 | 0xEF96 | ERR_Homing_HwLimitPosReached | Positive limit switch (driving in positive direction onto the switch) was reached.
-4203 | 0xEF95 | ERR_Homing_HwLimitNegReached | Negative limit switch (driving in negative direction onto the switch) was reached.
-4204 | 0xEF94 | ERR_Homing_CannotStartMove | Movement can not be started because the positioning mode prevents it.
-4205 | 0xEF93 | ERR_Homing_DeviceIsNotEnabled | Device is not enabled. To start a reference movement, the device must be enabled (see DEV_Status, DEV_Enable). Note: This error is reported since firmware version V1.85.03.B6.
-4206 | 0xEF92 | ERR_Homing_DeviceIsNotInPosMode | The device is not in the positioning mode (see DEV_Mode). The reference movement is possible only in the positioning mode. Note: This error is reported since firmware version V1.85.03.B6.
-4207 | 0xEF91 | ERR_Homing_NoContinue | A previous movement was interrupted with a halt or quick stop (see DEV_Cmd, DEV_Status). To start a homing with HOMING_CMD_Start (POS_HomingCmd), a DEV_CMD_Continue must first be executed (see DEV_Cmd). A DEV_CMD_Continue command can be executed automatically when HOMING_CMD_Start is used (see DEV_ContinueMode). Note: This error is reported since firmware version V1.85.03.B6.

Hint:
  • This error does not appear in Error Register (DEV_ErrorReg)
  • In case of failure servo controller is not disable (DEV_Enable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B1.02h Homing - state

Name | POS_HomingState
Designation | Homing - state
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeState()
Cross reference | -

Description

Provides the internal status of the homing machine.

A detailed description of the function you can find at parameter POS_HomingMethod.

States:
Value | Name | Description
0 | HOME_STATE_Idle | Idle, no action
1 | HOME_STATE_Start | Starting of the homing
2 | HOME_STATE_Wait4Ref | Waiting for a homing switch
3 | HOME_STATE_Wait4RefRelease | Waiting for releasing the homing switch
4 | HOME_STATE_Wait4EndNeg | Waiting for a negative limit switch (driving in negative direction onto the switch)
5 | HOME_STATE_Wait4EndNegRelease | Waiting for releasing the negative limit switch (driving in negative direction onto the switch)
6 | HOME_STATE_Wait4EndPos | Waiting for a positive limit switch (driving in positive direction onto the switch)
7 | HOME_STATE_Wait4EndPosRelease | Waiting for releasing the positive limit switch (driving in positive direction onto the switch)
8 | HOME_STATE_Wait4Index | Waiting for the index pulse
16 | HOME_STATE_Wait4MoveCompleted | Waiting until movement is completed (help status, a part of the a.m. bits).
32 | HOME_STATE_Break | Homing is interrupted (temporary status, maybe valid for one cycle only).
33 | HOME_STATE_Done | Homing was successfully done (temporary status, maybe valid for one cycle only).
34 | HOME_STATE_End | Homing was stopped (temporary status, maybe valid for one cycle only).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B1.03h Homing - path of reference switch to index

Name | POS_HomingRefToIndex
Designation | Homing - path of reference switch to index
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeRef2Index()
Cross reference | POS_HomingRefToIndex_cnt, POS_HomingIndexOffset

Description

This parameter provides the distance between the homing switch and the index pulse (zero track) after the homing was done successfully. Positon scaling, which is determind by the factorgroup, influences the calculation of this value. This information is useful to find out whether the index pulse is too close to the homing switch or not.
If the Index pulse is too close or directly at the homing switch you may get different homing position (from one homing to the next homing), especially when using mechanical switches. In this case you get a difference of the homing positions of one encoder revolution.
Therefore, the best distance between the homing switch and the index pulse is half of the encoder resolution (in increments).

Reference switch to Index - wright

Reference switch to Index - wrong

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B1.04h Homing - path of reference switch to index in counts

Name | POS_HomingRefToIndex_cnt
Designation | Homing - path of reference switch to index in counts
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeRef2Index_cnt()
Cross reference | POS_HomingRefToIndex, POS_HomingIndexOffset

Description

This parameter provides the distance in increments between the homing switch and the index pulse (zero track) after the homing was done successfully. Positonscaling, which is determind by the factorgroup, will not influence this value.
You can get a detailed description at parameter POS_HomingRefToIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B2.00h Homing - method

Name | POS_HomingMethod
Designation | Homing - method
Data type | int8
Access | read / write
Attributs | Save
Value range | [-128 .. 127]
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeMethod(value)
Cross reference | DEV_DinLimitPos, DEV_DinLimitNeg, DEV_DinReference

Description

This parameter defines the homing method.

If you activate the method (unequal to zero) a homing has to be done successfully before a positioning command (POS_Mova, POS_Movr) is accepted.

The parameters DEV_DinLimitPos, DEV_DinLimitNeg and DEV_DinReference define the switches:
  • Which digital input is used for this switch.
  • Is it hi-active (normally opened contact) or low-active (normally closed contact)
  • Is it a limit/end switch (e.g. linear axes with limited ends) or a homing/reference switch (turn table without limits).

Method 0: No homing is needed.

Method 1: Homing using a negative limit switch and the index pulse

The motor starts running counter-clockwise (ccw), if the negative limit switch is not active (here, shown as a low signal). If limit switch is reached the direction changes to clockwise (cw). After the limit switch is left again, the motor will stop at the next index pulse.
This position is stored as homing position in the parameter POS_HomingRefToIndex and POS_HomingRefToIndex_cnt.

Method 2: Homing using the positive limit switch and the index pulse

The motor starts running clockwise (cw), if the positive limit switch is not active (here, shown as a low signal). If limit switch is reached the direction changes to counter-clockwise (ccw). After the limit switch is left again, the motor will stop at the next index pulse.
This position is stored as homing position in the parameter POS_HomingRefToIndex and POS_HomingRefToIndex_cnt.

Method 3 and 4: Homing using the positive reference and the index pulse

In this case the starting direction depends on the status of the reference switch.
The homing position is always at the index pulse. This position is left (method 3) or right (method 4) from the position where the reference switch changes its status.
If necessary, the rotation direction will change, when the status of the reference switch changes.

Method 5 and 6: Homing using the negative reference switch and the index pulse

In this case the starting direction depends on the status of the reference switch.
The homing position is always at the index pulse. This position is left (method 6) or right (method 5) from the position where the reference switch changes its status.
If necessary, the rotation direction will change, when the status of the reference switch changes.

Method 7 to 14: Homing using a reference switch and the index pulse

This methods use a reference switch which is active over a certain length.
Methods 7 to 10 start in right direction, methods 11 to 14 in left direction, if the reference switch is not active during the start.
In this case the starting direction depends on slope, the system is looking for.
The homing position is at the index pulse on both sides of the rising or falling slope of the reference switch. This is shown at the following diagrams.
If the starting direction runs away from the reference switch, the direction will change if the relevant limit switch is reached.

Method 15 and 16: Reserved

These methods are reserved for future extensions of the homing method.

Method 17 to 30: Homing without index pulse

These methods are similar to methods 1 to 14, except that the homing position depends not on the index pulse. It depends just on the according reference/limit switches.
E.g. method 19 and 20 are close to 3 and 4 as can be seen at the following diagram.

Method 31 and 32: Reserved

These methods are reserved for future extensions of the homing method.

Method 33 and 34: Homing using the index pulse only

At these methods the rotation direction is positive or negative. The homing position is at the first index pulse, which was found in the desired direction.

Method 35: Homing using the actual position

This method uses the actual position as the homing position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B3.00h Homing - offset

Name | POS_HomingOffset
Designation | Homing - offset
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeOffset(value)
Cross reference | -

Description

The HomingOffset is the difference between the zero position for the application and zero of the machine, found during homing.
After the homing this offset will be copied to the command and to the actual position with a negative sign. If you position the axis to zero, it will drive to the zero of the application. All positions refer to this zero position.
This parameter can also be set. This change has an immediate influence on target-, command- and actual position. If you change it during an active positioning, the original target position (based on the zero of the machine) remains.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B4.00h Homing - velocity for search of switch

Name | POS_HomingVelSwitch
Designation | Homing - velocity for search of switch
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeVelSwitch(value)
Cross reference | POS_HomingMethod

Description

This parameter defines the velocity to search for the homing switch during the homing. This velocity is also called quick homing velocity. The use of this velocity is described in detail in the diagrams of the homing method (see parameter POS_HomingMethod).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B4.01h Homing - Velocity for search of zero point

Name | POS_HomingVelZero
Designation | Homing - Velocity for search of zero point
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeVelZero(value)
Cross reference | POS_HomingMethod

Description

This parameter defines the velocity to search for the zero position during the homing. Since this velocity is normally less than the POS_HomingVelSwitch, this one is also called slow homing velocity. The use of this velocity is described in detail in the diagrams of the homing method (see parameter POS_HomingMethod).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B5.00h Homing - acceleration

Name | POS_HomingAcc
Designation | Homing - acceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 60000
Unit | [rev/min²]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeAcc(value)
Cross reference | -

Description

This parameter defines the acceleration for the homing.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B5.01h Homing - deceleration

Name | POS_HomingDec
Designation | Homing - deceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rev/min²]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeDec(value)
Cross reference | -

Description

This parameter defines the deceleration for the homing. The default value is 0, that means it is the same as the acceleration (see POS_HomingAcc).

Parameter value:
Value | Description
=0 | Deceleration = POS_HomingAcc
>0 | Deceleration = POS_HomingDec

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B6.00h Homing - max. path for search of index

Name | POS_HomingMaxIndexPath
Designation | Homing - max. path for search of index
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647]
Default value | 2147483647
Unit | [counts]
Operating mode | Position
Available since | 1.64.00.03
Devices | All
PLC Function | HomeMaxIndexPath(value)
Cross reference | -

Description

This parameter defines the maximum distance between the reference switch and the closest index pulse. The homing has to find an index pulse within this range. Otherwise the homing will be interrupted and an error (parameter POS_HomingError = -4201) is set. This parameter is only valid for homing methods with index pulse.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B6.01h Homing - index offset

Name | POS_HomingIndexOffset
Designation | Homing - index offset
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [counts]
Operating mode | Position
Available since | 1.71.00.04
Devices | All
PLC Function | HomeIndexOffset(value)
Cross reference | POS_HomingRefToIndex

Description

After the reference switch was found, the motor drives at least this distance POS_HomingIndexOffset. Then, the next index pulse will be taken as the zero point of the machine.
This parameter can be used e.g. if the index pulse is to close to the reference switch (see Parameter POS_HomingRefToIndex) or the reference switch cannot be adjusted mechanically.
This parameter is only valid for homing methods with index pulse.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - POS Mode
d.SdoWr(0x3300, 0x00, 0)                  # VEL_DesiredValue - velocity = 500 [rpm]

# init homing
d.SdoWr(0x3057, 0x00, 0x0135)             # DEV_DinReference
d.SdoWr(0x37B2, 0x00, 3)                  # POS_HomingMethod - methode 3
d.SdoWr(0x37B3 ,0x00, 150)                # POS_HomingOffset
d.SdoWr(0x37B4, 0x00, 500)                # POS_HomingVelSwitch
d.SdoWr(0x37B4, 0x01, 100)                # POS_HomingVelZero
d.SdoWr(0x37B5, 0x00, 5000)               # POS_HomingAcc
d.SdoWr(0x37B5, 0x01, 10000)              # POS_HomingDec
d.SdoWr(0x37B6, 0x00, 20000)              # POS_HomingMaxIndexPath
d.SdoWr(0x37B6, 0x01, 200)                # POS_HomingIndexOffset

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - enable

# last homing state
LastState = -1

while 1:

   act_state = d.SdoRd(0x37B1, 0x02)      # POS_HomingState  - get state
   status = d.SdoRd(0x37B1, 0x00)         # POS_HomingStatus - get status
   error_status = d.SdoRd(0x37B1, 0x01)   # POS_HomingError

   # if idle
   if status == 0:
      d.SdoWr(0x37B0, 0x00, 0x01)         # POS_HomingCmd - start homing

   # only if changed
   if LastState != act_state:
      LastState = act_state

      if   act_state == 0: print "Idle"
      elif act_state == 1: print "Start"
      elif act_state == 2: print "Wait for Ref"
      elif act_state == 3: print "Wait for leave Ref"
      elif act_state == 4: print "Wait for Endswitch negative"
      elif act_state == 5: print "Wait for Endswitch postivie -> negative "
      elif act_state == 6: print "Wait for Endswitch positive"
      elif act_state == 7: print "Wait for Endswitch negative -> positive"
      elif act_state == 8: print "Wait for Index"
      elif act_state == 16: print "Wait for movement finish"
      elif act_state == 32: print "Homing break"
      elif act_state == 33: print "Homing done"
      elif act_state == 34: print "Homing end"

   # homing done
   if (status & 0x10) == 0x10:            # HOMING_STAT_Done
      print "Homing successful"
      print "Distance referenceswitch to index:",
      print d.SdoRd(0x37B1, 0x03)         # POS_HomingRefToIndex
      print "Distance referenceswitch to index in ink:",
      print d.SdoRd(0x37B1, 0x04)         # POS_HomingRefToIndex_cnt
      break                               # end loop

   # error
   if error_status != 0:                  # Error
      print "error: ", error_status
      break                               # end loop


37B7.00h Homing blockage - config

Name | POS_HomingBlock_ConfigFlags
Designation | Homing blockage - config
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.85.00.60
Devices | All
PLC Function | -
Cross reference | -

Description

Configures "the homing blockage".

All homing methods using limit switches can be applied to the homing blockage. See description of the parameter POS_HomingMethod.

Bit | Name | Description for bit value = 1
0 | BIT_HomingBlock_Enable | Enable of the homing blockage. The homing method (POS_HomingMethod) decides which limit switch is substituted by the blockage.
1..6 | - | reserved
7 | BIT_HomingBlock_Config_StdParam | The following parameters are used for the blockage monitoring: VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_VelHigh and VEL_BlockageGuarding_Time


37B7.01h Homing blockage - low velocity

Name | POS_HomingBlock_VelLow
Designation | Homing blockage - low velocity
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 2147483647]
Default value | 10
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.85.00.60
Devices | All
PLC Function | -
Cross reference | -

Description

Defines the lower limit of the velocity for the homing blockage.

If the bit 7 in POS_HomingBlock_ConfigFlags is set, this parameter remains inactive. In this case parameters VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_VelHigh and VEL_BlockageGuarding_Time are valid also for the homing blockage.

The state of blockage will be recognized, if the following conditions are true:
  • The limitation of current is active.
  • First, the actual velocity of the motor must fall below the limitPOS_HomingBlock_VelLow.
  • Then, the actual velocity of the motor retains at least for the time POS_HomingBlock_Time under the limit POS_HomingBlock_VelHigh.

Parameter value:
Value | Description
0..INT32_MAX | Min. velocity for blockage guarding if bit7=0 in POS_HomingBlock_ConfigFlags, Vlow = POS_HomingBlock_VelLow or VEL_BlockageGuarding_VelLow (if bit7=1 in POS_HomingBlock_ConfigFlags)


37B7.02h Homing blockage - high velocity

Name | POS_HomingBlock_VelHigh
Designation | Homing blockage - high velocity
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 2147483647]
Default value | -1
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.85.00.60
Devices | All
PLC Function | -
Cross reference | -

Description

Defines the upper limit of the velocity for the homing blockage.

If the bit 7 in POS_HomingBlock_ConfigFlags is set, this parameter remains inactive. In this case parameters VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_VelHigh and VEL_BlockageGuarding_Time are valid also for the homing blockage.

The state of blockage will be recognized, if the following conditions are true:
  • The limitation of current is active.
  • First, the actual velocity of the motor must fall below the limitPOS_HomingBlock_VelLow.
  • Then, the actual velocity of the motor retains at least for the time POS_HomingBlock_Time under the limit POS_HomingBlock_VelHigh.

Parameter value:
Value | Description
-1 | Vhigh = POS_HomingBlock_VelLow + 10%
0..INT32_MAX | Vhigh = POS_HomingBlock_VelHigh


37B7.03h Homing blockage - time

Name | POS_HomingBlock_Time
Designation | Homing blockage - time
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 1
Unit | [100ms]
Operating mode | Position
Available since | 1.85.00.60
Devices | All
PLC Function | -
Cross reference | -

Description

Defines the time for the homing blockage.

If the bit 7 in POS_HomingBlock_ConfigFlags is set, this parameter remains inactive. In this case parameters VEL_BlockageGuarding_VelLow, VEL_BlockageGuarding_VelHigh and VEL_BlockageGuarding_Time are valid also for the homing blockage.

The state of blockage will be recognized, if the following conditions are true:
  • The limitation of current is active.
  • First, the actual velocity of the motor must fall below the limitPOS_HomingBlock_VelLow.
  • Then, the actual velocity of the motor retains at least for the time POS_HomingBlock_Time under the limit POS_HomingBlock_VelHigh.


37B7.04h Homing blockage - position following error window

Name | POS_HomingBlock_FollowingErrorWindow
Designation | Homing blockage - position following error window
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 2147483647]
Default value | -1
Unit | [counts]
Operating mode | Position
Available since | 1.85.03.B5
Devices | All
PLC Function | -
Cross reference | -

Description

Defines the maximal permissible following error (deviation between command position and actual position) for the homing blockage.

This value must be set such that the state of blockage may occur. If the maximal permissible following error is to low, it is possible that the error (-4000 ERR_Regp_FollowingError see DEV_ErrorReg) occurs before the state of blockage is recognized.

Parameter value:
Value | Description
= -1 | The standard parameter POS_FollowingErrorWindow is valid
> -1 | The standard parameter POS_HomingBlock_FollowingErrorWindow is valid.


Content - Parameters 3000h (DSA) - Interpolation

37C1.00h

POS_InterpStatus

 Interpolation - status


37C1.00h Interpolation - status

Name | POS_InterpStatus
Designation | Interpolation - status
Data type | uint16
Access | read only
Attributs | -
Value range | -
Default value | 0h
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | -
Cross reference | POS_Mode, , ,

Description

This parameter provides the actual interpolationstatus. The inhterpolationstatus is useful for diagnostics.

Bit assignments:
Bit Name Description
0 Enabled Bit = 0 - Interpolation mode is deactivated
Bit = 1 - Interpolation mode is activated
1 Error Bit = 0 - No error occured
Bit = 1 - Error occured
2 Warning Bit = 0 -No warning occured
Bit = 1 - Warning occured
3 Armed Bit = 0 - Buffer contains no valid data
Bit = 1 - Buffer contains valid data
4 Active Bit = 0 - Buffer is not active
Bit = 1 - Buffer is active
5 Data Lost Bit = 0 - No data lost
Bit = 1 - Data lost
6 Buffer Full Bit = 0 - Buffer is not full
Bit = 1 - Buffer is full

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "interpolation status =", hex(d.SdoRd(0x37C1, 0x00))


3830.00h PWM frequency

Name | PWM_Frequency
Designation | PWM frequency
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {12500, 25000}
Default value | 25000
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | PwmFreq(value)
Cross reference | -

Description

Using this parameter you can set the PWM frequency.

A PWM-frequency of 200 kHz is only possible for the device EDC-E65 and EDC-E65-M.

Attention
The lower the PWM-frequency and the inductance of the motor, the warmer (higher losses) becomes the motor in still stand.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency


3830.01h PWM mode

Name | PWM_Mode
Designation | PWM mode
Data type | uint8
Access | read only
Attributs | Save; Changeable only in disabled state
Value range | {0}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter defines the mode of the PWM signal.

Parameter value
Value | Name | Description
0 | PWM_Symetric | If the motor is in still stand without a load, the PWM signal is 50%. That equals an average voltage of 0V.
1 | PWM_Asymetric | If the motor is in still stand without a load, the PWM signal is 0%. Therefore the relative PWM signal is "positive" or "negative" depending on the direction. Since this mode has very low losses in still stand, it is particularly suitable for motors with low inductances.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency


3830.62h Actual PWM of the device

Name | PWM_ActualPwm_oo
Designation | Actual PWM of the device
Data type | int16
Access | read only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | [o/oo]
Operating mode | All
Available since | 1.89.00.62
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter shows the actual PWM in reference to the maximum possible PWM per mil.

PWMactual / PWMmax

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3000, 0x10, 3000)               # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 256000)             # DEV_CmdData1
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable
d.SdoWr(0x3000, 0x02, 0x34)               # DEV_Cmd2
ts = time.time()

print "Start"

while ((time.time())-ts) <= 3.5:
   act_pwm = d.SdoRd(0x3830, 0x62)/10.0   # PWM_ActualPwm_oo
   print "Act. PWM: %.1f %%" % act_pwm
   time.sleep(0.1)
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable


3850.00h System clock

Name | SYS_Clock
Designation | System clock
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [ms]
Operating mode | All
Available since | 1.71.00.01
Devices | All
PLC Function | SysClock()
Cross reference | -

Description

This parameter provides the value of the internal system clock . The time base is 1 millisecond. during switch-on the value is initialised to 0.Then it will be incremented every 1 [ms]. After an overrun it starts at 0 again.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

#read the intern system clock
print "system clock: ", d.SdoRd(0x3850, 0x00)            # SYS_Clock

# write a start value into timer
d.SdoWr(0x3850, 0x02, 1)                                # SYS_Timer_2ms

# read timer every 200 ms
for i in xrange (0, 11):
   print "timer %d" % i ,": %d" % d.SdoRd(0x3850, 0x02) # SYS_Timer_2ms
   time.sleep(0.2)


3850.02h System timer 2ms

Name | SYS_Timer_2ms
Designation | System timer 2ms
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | [2ms]
Operating mode | All
Available since | 1.71.00.25
Devices | All
PLC Function | SysTimer2ms(value)
Cross reference | SYS_Clock

Description

This parameter provides a system timer with a time base of 2 milliseconds. You can initialise this parameter by setting it to a desired start value. This value will be incremented every 2 [ms] immediately (with a delay of 0...2ms).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

#read the intern system clock
print "system clock: ", d.SdoRd(0x3850, 0x00)            # SYS_Clock

# write a start value into timer
d.SdoWr(0x3850, 0x02, 1)                                # SYS_Timer_2ms

# read timer every 200 ms
for i in xrange (0, 11):
   print "timer %d" % i ,": %d" % d.SdoRd(0x3850, 0x02) # SYS_Timer_2ms
   time.sleep(0.2)


3900.00h Motor type

Name | MOTOR_Type
Designation | Motor type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MotorType(value), MotorTypeDC(), MotorTypeBLDC()
Cross reference | DEV_Enable

Description

Using this parameter you can get and set the motor type.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.
  • If the controller is integrated in the motor the parameter can not be changed.

Value (Hex) | Description
0 | Brush type motor (DC) (The motor is connected to the Ma and Mb signals)
1 | Brushless motor (BLDC)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3901.00h Motor rated revolutions

Name | MOTOR_Nn
Designation | Motor rated revolutions
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 30000]
Default value | 3000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | MotorNn(value)
Cross reference | MOTOR_Type, MOTOR_Un

Description

This parameter is only used for brush type motors in velocity mode with emf feedback (see: VEL_Feedback). Together with the parameter (MOTOR_Un) the internal conversion from the velocity target value into the motor voltage (~velocity) is done.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3902.00h Motor rated voltage

Name | MOTOR_Un
Designation | Motor rated voltage
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 60000]
Default value | 24000
Unit | [mV]
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | MotorUn(value)
Cross reference | MOTOR_Type, MOTOR_Nn

Description

This parameter is only used for brush type motors in velocity mode with emf feedback (see: VEL_Feedback). Together with the parameter (MOTOR_Nn) the internal conversion from the velocity target value into the motor voltage (~velocity) is done.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3910.00h Motor pole number

Name | MOTOR_PolN
Designation | Motor pole number
Data type | uint8
Access | read / write
Attributs | Save
Value range | [1 .. 100]
Default value | 4
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | MotorPolN(value)
Cross reference | MOTOR_Type, MOTOR_Nn

Description

This parameter defines the number of poles. This value is used to determine the numbers of pulses for one revolution of motor shaft.

Nph = 3 * number of motor poles

with: Nph – number of pulse per revolution of the motor shaft

If you want to input the desired velocity in [rpm] (revolution per minute) at the motor shaft, you have to have the real number of the motor poles.

This parameter is only used for brushless motors and hall feedback (see: VEL_Feedback). Otherwise it has no effect.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3911.00h Motor polarity

Name | MOTOR_Polarity
Designation | Motor polarity
Data type | uint16
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MotorPolarity(value), Polarity(value)
Cross reference | -

Description

With this parameter you can adapt the controller to different motors. There are different definitions regarding the rotation direction of the motor shaft depending on the motor voltage. Also, the sequence of the hall sensors (brushless motors) pertaining to rotation direction can be different.

Therefore this parameter allows to change the sign of the following signals/units:
  • PWM signal
  • HALL counting direction
  • Encoder counting direction (for controller with encoder input only)
  • Absolute encoder counting direction (for controller with SSI-Interface)
  • mcSPI-IC2 encoder counting direction (for controller with mcSPI-Interface)
  • Virtual encoder 0 counting direction
  • Virtual encoder 1 counting direction
Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Bit assignment:
Bit | Description
0 | PWM signal: 0-positive, 1-negative
1 | Hall sensors; counting direction: 0-positive, 1-negative
2 | Reserved
3 | Encoder; counting direction: 0-positive, 1-negative
4 | Absolute encoder SSI; counting direction: 0-positive, 1-negative
5 | Reserved
6 | mcSPI-IC2 encoder; counting direction: 0-positive, 1-negative
7 | Reserved
8 | Virtual encoder 0; counting direction: 0-positive, 1-negative
9 | Virtual encoder 1; counting direction: 0-positive, 1-negative

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3913.00h Motor commutation type

Name | MOTOR_CommutationType
Designation | Motor commutation type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {00h, 10h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.91.00.27
Devices | All
PLC Function | -
Cross reference | , MOTOR_Commutation_Polarity

Description

The parameter defines the type of the motor commutation.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Information about the commutation scheme can be found in the application note AN_CommutationScheme.
Parameter values:
Value | Description
0 | Block commutation
0x10 | Encoder block commutation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.07h Motor commutation polarity

Name | MOTOR_Commutation_Polarity
Designation | Motor commutation polarity
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | [0 .. 7]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.91.00.34
Devices | All
PLC Function | -
Cross reference | , MOTOR_CommutationType

Description

This parameter sets the commutation polarity of the motor.

Assignment of the bits:
Bit | Description
0 | Encoder commutation: 0-positive, 1-negative
1 | Sectors: 0-positive, 1-negative
2 | Direction: 0-positive, 1-negative

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.20h Precommutation

Name | PreCommutationConfig
Designation | Precommutation
Data type | uint8
Access | read / write
Attributs | -
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.D0
Devices | All
PLC Function | -
Cross reference | PreCommutationVel, PreCommutationAngle

Description

Use this parameter to disable or enable the precommutation.

The mode of the controller depends also on the hardware enabling (see parameter DEV_DinEnable).

Parameter values:
Value | Name | PLC Function | Description
0 | DISABLE |  | Disables the precommutation
1 | ENABLE |  | Enables the precommutation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear Errors
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, 1<<3)               # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Inc. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Inc. encoder

d.SdoWr(0x3913, 0x00, 0x10)               # MOTOR_Commutation_Type - block encoder
d.SdoWr(0x3913, 0x11, 1)                  # MOTOR_Commutation_ReferencingMode - hall referencing
d.SdoWr(0x3913, 0x20, 1)                  # PreCommutationConfig - enable
d.SdoWr(0x3913, 0x21, 3000)               # PreCommutationVel - 3000 rpm
d.SdoWr(0x3913, 0x23, 15)                 # PreCommutationAngle - 15°

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Veloctiy mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.21h Precommutation reference velocity

Name | PreCommutationVel
Designation | Precommutation reference velocity
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 3000
Unit | [rpm] - revolutions per minute
Operating mode | All
Available since | 1.93.00.D0
Devices | All
PLC Function | -
Cross reference | PreCommutationConfig, PreCommutationAngle

Description

This parameter sets reference velocity for the precommutation. Reference velocity (PreCommutationVel) and precommutation angle (PreCommutationAngle) together generate the actual resulting precommutation angle, which is linear to the velocity., but will never exceed the predetermined value.

Example:

Reference velocity = 3000 rpm
Precommutation angle = 30°

actual velocity | actual electric precommutation angle
100 rpm | 1°
300 rpm | 3°
1000 rpm | 10°
2000 rpm | 20°
3000 rpm | 30°
4000 rpm | 30°

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear Errors
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, 1<<3)               # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Inc. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Inc. encoder

d.SdoWr(0x3913, 0x00, 0x10)               # MOTOR_Commutation_Type - block encoder
d.SdoWr(0x3913, 0x11, 1)                  # MOTOR_Commutation_ReferencingMode - hall referencing
d.SdoWr(0x3913, 0x20, 1)                  # PreCommutationConfig - enable
d.SdoWr(0x3913, 0x21, 3000)               # PreCommutationVel - 3000 rpm
d.SdoWr(0x3913, 0x23, 15)                 # PreCommutationAngle - 15°

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Veloctiy mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.23h Precommutation angle

Name | PreCommutationAngle
Designation | Precommutation angle
Data type | int32
Access | read / write
Attributs | -
Value range | [0 .. 60]
Default value | 10
Unit | [el°]
Operating mode | All
Available since | 1.93.00.D0
Devices | All
PLC Function | -
Cross reference | PreCommutationConfig, PreCommutationVel

Description

This parameter sets the angle for the precommutation. Reference velocity (PreCommutationVel) and precommutation angle (PreCommutationAngle) together generate the actual resulting precommutation angle, which is linear to the velocity., but will never exceed the predetermined value.

Example:

Reference velocity = 3000 rpm
Precommutation angle = 30°

actual velocity | actual electric precommutation angle
100 rpm | 1°
300 rpm | 3°
1000 rpm | 10°
2000 rpm | 20°
3000 rpm | 30°
4000 rpm | 30°

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear Errors
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, 1<<3)               # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Inc. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Inc. encoder

d.SdoWr(0x3913, 0x00, 0x10)               # MOTOR_Commutation_Type - block encoder
d.SdoWr(0x3913, 0x11, 1)                  # MOTOR_Commutation_ReferencingMode - hall referencing
d.SdoWr(0x3913, 0x20, 1)                  # PreCommutationConfig - enable
d.SdoWr(0x3913, 0x21, 3000)               # PreCommutationVel - 3000 rpm
d.SdoWr(0x3913, 0x23, 15)                 # PreCommutationAngle - 15°

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Veloctiy mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3940.00h Hall sensor type

Name | MOTOR_HALL_Type
Designation | Hall sensor type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | HallType(value), HallType120(), HallType60(), MotorHallType(value), MotorHallType120(), MotorHallType60()
Cross reference | -

Description

This parameter defines the commutation mode for the operation with brushless motors.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.
Parameter values:
Values | Description
0 | 120° Hall sensors
1 | 60° Hall sensors
2 | User

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


3949.00h Hall pulses - config flags

Name | MOTOR_HALL_DoutPulses_Mode
Designation | Hall pulses - config flags
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 3]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | HallDoutPulse_Mode(value)
Cross reference | MOTOR_HALL_DoutPulses_PosDirMask, MOTOR_HALL_DoutPulses_NegDirMask, MOTOR_HALL_DoutPulses_ModuloValue

Description

Activates the puls generation on a digital output in the sequence of hall sensors of the motor.

Note: The puls generation is available in devices that have at least one digital output.

Parameter value:
Device mode | Description
 | output "A" | output "B"
0 | deactivated | deactivated
1 | Puls generation for the positive direction of rotation (cw) | Puls generation for the negative direction of rotation (ccw)
2 | Puls generation for both directions of rotation | The direction of rotation (0= pos. cw, 1 = neg. ccw)
3 | A-Channel (for clockwise rotation A-Channel is 90° before B-Channel) | B-Channel (for clockwise rotation B-Channel is 90° after A-Channel)
[4..255] | Reserved | Reserved

Following 3 device modes are available:
  • Device mode 1
    • On a output "A", pulses appear for the positive direction of rotation (cw)
    • On a output "B", pulses appear for the negative direction of rotation (ccw)
    • Example for MOTOR_HALL_DoutPulses_ModuloValue = 1

  • Device mode 2
    • On a output "A", pulses appear independent of the direction of rotation
    • A output "B" serves to recognize the direction of rotation: 0 = positive (cw), 1 = negative (ccw)
    • Example for MOTOR_HALL_DoutPulses_ModuloValue = 1

  • Device mode 3
    • A-Channel appears on a output "A"
    • B-Channel appears on a output "B"
    • Channels are 90° out of phase: for clockwise rotation A-Channel is 90° before B-Channel, for counterclockwise rotation A-Channel is 90° after B-Channel
    • Example for MOTOR_HALL_DoutPulses_ModuloValue = 1

The definition of output "A" takes place in parameter MOTOR_HALL_DoutPulses_PosDirMask, of output "B" in MOTOR_HALL_DoutPulses_NegDirMask.

With the aid of parameter MOTOR_HALL_DoutPulses_ModuloValue you can divide the count of pulses.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


3949.01h Hall pulses - bit mask for positive direction

Name | MOTOR_HALL_DoutPulses_PosDirMask
Designation | Hall pulses - bit mask for positive direction
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | HallDoutPulse_MaskDoutA(value)
Cross reference | MOTOR_HALL_DoutPulses_Mode, MOTOR_HALL_DoutPulses_NegDirMask, MOTOR_HALL_DoutPulses_ModuloValue

Description

Defines the digital output as output "A". The functionality of the output is described in parameter MOTOR_HALL_DoutPulses_Mode.

The number of digital outputs depends on the device (see technical data).

Note: The puls generation is available in devices that have at least one digital output.

Parameter value:
Value [hex] | Assignment of output "A"
0 | no output defined
0x01 | dig. output 0
0x02 | dig. output 1
0x04 | dig. output 2
0x08 | dig. output 3
0x10 | dig. output 4
0x20 | dig. output 5

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


3949.02h Hall pulses - bit mask for negative direction

Name | MOTOR_HALL_DoutPulses_NegDirMask
Designation | Hall pulses - bit mask for negative direction
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | HallDoutPulse_MaskDoutB(value)
Cross reference | MOTOR_HALL_DoutPulses_Mode, MOTOR_HALL_DoutPulses_PosDirMask, MOTOR_HALL_DoutPulses_ModuloValue

Description

Defines the digital output as output "B". The functionality of the output is described in parameter MOTOR_HALL_DoutPulses_Mode.

The number of digital outputs depends on the device (see technical data).

Note: The puls generation is available in devices that have at least one digital output.

Parameter value:
Value [hex] | Assignment of output "B"
0 | no output defined
0x01 | dig. output 0
0x02 | dig. output 1
0x04 | dig. output 2
0x08 | dig. output 3
0x10 | dig. output 4
0x20 | dig. output 5

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


3949.03h Hall pulses - modulo value

Name | MOTOR_HALL_DoutPulses_ModuloValue
Designation | Hall pulses - modulo value
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.77.00.27
Devices | All
PLC Function | HallDoutPulse_ModuloValue(value)
Cross reference | MOTOR_HALL_DoutPulses_Mode, MOTOR_HALL_DoutPulses_PosDirMask

Description

Divides the count of pulses.

This parameter determines the proportion of hall position to the output:

  • Switching operation of digital outputs when MOTOR_HALL_DoutPulses_Modulo = 1 and device mode 1
    Each change of position causes switching operation of digital outputs.

    Betriebsart = 1

  • Switching operation of digital outputs when MOTOR_HALL_DoutPulses_Modulo = 3 and device mode 1
    Every third change of position causes switching operation of digital outputs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


394A.00h Actual hall position

Name | MOTOR_HALL_ActualPosition
Designation | Actual hall position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.52.00.00
Devices | All
PLC Function | ActPosHall(value), HallActPos(value)
Cross reference | MOTOR_Type, MOTOR_PolN, MOTOR_Polarity

Description

This parameter provides the actual counter position of the hall sensors. This number of pulses per revolution of the motor shaft depends on the real number of poles. The parameter MOTOR_PoIN has no influence on the counting. The counting direction can be changed with parameter MOTOR_Polarity.

Nph = 3 * number of motor poles

with: Nph – number of pulses per revolution of the motor shaft

Remarks:
  • The evaluation of the hall sensors is only taken place in case of brushless motors (see MOTOR_Type). If you switch the motor type to BLDC, the pulses will be counted independent on the enabling of the controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


Content - Parameters 3000h (DSA) - Quasi Absolute Encoder

39A2.00h | MOTOR_QuasiAbsEncoder_ConfigFlags | Quasi Absolute Encoder - config flags
39A2.01h | MOTOR_QuasiAbsEncoder_Status | Quasi Absolute Encoder - status
39A2.02h | MOTOR_QuasiAbsEncoder_Error | Quasi Absolute Encoder - error
39A2.07h | MOTOR_QuasiAbsEncoder_Tolerance_cnt | Quasi Absolute Encoder - tolerance
39A2.08h | MOTOR_QuasiAbsEncoder_Action | Quasi Absolute Encoder - command
39A2.10h | MOTOR_QuasiAbsEncoder_DeltaPos | Quasi Absolute Encoder - corrected position
39A2.20h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe | Quasi Absolute Encoder - minimum voltage to position save
39A2.21h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe | Quasi Absolute Encoder - maximum voltage to position save
39A2.31h | MOTOR_QuasiAbsEncoder_SavedPosition | Quasi Absolute Encoder - saved position
39A2.32h | MOTOR_QuasiAbsEncoder_SavedIndexPosition | Quasi Absolute Encoder - saved index position
39A2.33h | MOTOR_QuasiAbsEncoder_SavesCounter | Quasi Absolute Encoder - saves counter


39A2.00h Quasi Absolute Encoder - config flags

Name | MOTOR_QuasiAbsEncoder_ConfigFlags
Designation | Quasi Absolute Encoder - config flags
Data type | uint8
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

With the Quasi-Absolute Encoder function (QAE) it is possible to save position of the motor in a non-volatile memory. After restart of the drive controller the position can be read and set as actual, without need of homing.

The application should ensure that the rotor of the motor in a power-off state is not twisted. If the situation is possible, the drive controller can correct the position with the aid of index signal or recognize it as invalid. The reliablity of the function depends on the encoder resolution and the parametrizable tolerance (MOTOR_QuasiAbsEncoder_Tolerance_cnt).

This parameter configures the Quasi-Absolute Encoder function (QAE).

Parameter value:
Bit | Name | Description
0 | QAE_Enable | Activates the Quasi-Absolute Encoder function. During the initialization of the drive controller with active function, it is check if the position in a non-volatile memory is valid. If yes, the position will be taken over as actual. In other case the error QAE_ERR_InvalidPosition (MOTOR_QuasiAbsEncoder_Error) will be set.
1 | QAE_AutoCorrectionOnFirstIndex | With the function „AutoCorrectionOnFirstIndex“ it is possible to detect the rotation of the rotor in a power-off state. I.e. together with the actual position, the position of the index signal is stored in a non-volatile memory. With the first appearance of the index signal, it is checked if the index position corresponds with the index position from non-volatile memory. If the position of index is inside the permissible tolerance window, the actual position will be corrected by the difference of the index positions. In other case the error QAE_ERR_InvalidPosition (MOTOR_QuasiAbsEncoder_Error) will be set and the power stage disabled. - The larger the tolerance of index position, the smaller probability that the twist of rotor in a switch-off state will be recognized. - The smaller the tolerance of index position, the smaller probability that the value will be saved.
4 | QAE_SaveOnPositonReached | Stores automatically the position, when the position is reached (STAT_Reached in DEV_Status).
5 | QAE_SaveOnPowerOff | Stores automatically the position within 3 ms after a votlage breakdown. The voltage at which the storing of the postion takes place, can be set in the following parameters: MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe and MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.01h Quasi Absolute Encoder - status

Name | MOTOR_QuasiAbsEncoder_Status
Designation | Quasi Absolute Encoder - status
Data type | uint8
Access | read only
Attributs | Save
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

Provides the status of the Quasi-Absolute Encoder module.

Parameter value:
Bit | Name | Description
0 | QAE_Active | Module active.
1 | QAE_Error | An error has occured. You can find the error code in QuasiAbsEncoderModul_Error and in DEV_ErrorReg.
2 | QAE_Warning | Not used at the moment.
3 QAE_Valid The bit informs if the value that is saved in a non-volatile memory is valid.
The positon from a non-volatile memory is taken over if before the restart of the drive controller this bit is set.
The bit does not inform if the actual position is valid (see bit 7).

The bit is set to one, when:
- the command "Save" in QuasiAbsEncoderModul_Action was executed.
- automatic saving in MOTOR_QuasiAbsEncoder_ConfigFlags was set and has happend.
- after reset the drive controler returns valid position from a non-volatile memory.

The bit is set to zero, when:
- position from a non-volatile memory exceeds the value of the tolerance (MOTOR_QuasiAbsEncoder_Tolerance_cnt).
- in mode „AutoCorrectionOnFirstIndex“ (MOTOR_QuasiAbsEncoder_ConfigFlags) it is detected that the rotor was twisted in a switch-off state.
- the command "Unvalidate" in QuasiAbsEncoderModul_Action was executed.
4 QAE_PositionSaved The bit is set when the actual position is saved in a non-volatile memory.
5 QAE_PostionLoaded The bit is set when the actual position is loaded from a non-volatile memory.
6 QAE_PositionCorrected The bit is set in mode „AutoCorrectionOnFirstIndex“ (MOTOR_QuasiAbsEncoder_ConfigFlags) when the actual position is corrected with the first appearance of the index signal.
7 QAE_Referenced The bit informs if the actual position is valid. The bit has value 1 when QAE_Valid is set; 0 when QAE_Error.
For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.02h Quasi Absolute Encoder - error

Name | MOTOR_QuasiAbsEncoder_Error
Designation | Quasi Absolute Encoder - error
Data type | int16
Access | read only
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

Provides an error code of the Quasi-Absolute Encoder . All QAE errors appear in Error Register (DEV_ErrorReg).

A potential error can be cleared by setting DEV_Cmd to 1 (CMD_ClearError).

Error code:
Value | Description
=0 | No error
<0 | Error code (see table of error codes)
Error code:
QAE-error | DSA-error | Error message | Description
-10 | -710 | QAE_ERR_InvalidPosition | The difference between the actual position of index (MOTOR_ENC_ActualIndexPosition) and position of index from a non-volatile memory (MOTOR_QuasiAbsEncoder_SavedIndexPosition) is bigger as the tolerance (MOTOR_QuasiAbsEncoder_Tolerance_cnt).
-11 | -711 | QAE_ERR_StoredPositionIsInvalid | No valid position after a reset of a electronic voltage.
-15 | -715 | QAE_ERR_BadCRC | Read / write error due to CRC.
-16 | -716 | QAE_ERR_SavingError | Error during saving the position.
For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.07h Quasi Absolute Encoder - tolerance

Name | MOTOR_QuasiAbsEncoder_Tolerance_cnt
Designation | Quasi Absolute Encoder - tolerance
Data type | uint16
Access | read / write
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

Defines the tolerance window (difference between the actual position and the stored position) of the QAE function.
The parameter has following functions:
  1. If the difference between the actual position and the stored position is bigger as the tolerance window, the stored position is recognized as invalid (QAE_Valid=0 in MOTOR_QuasiAbsEncoder_Status).
    That means that after reset the drive controller does not read in the position from a non-volatile memory.
  2. The tolerance window has in mode "AutoCorrectionOnFirstIndex" a following meaning:
    Let's assume that after reset the drive controler returns valid position from a non-volatile memory. With the first appearance of the index signal, it is checked if the index position corresponds with the index position from non-volatile memory. If the position of index is inside the permissible tolerance window, the actual position will be corrected by the difference of the index positions. In other case the error QAE_ERR_InvalidPosition (MOTOR_QuasiAbsEncoder_Error) will be set and the power stage disabled.
Hints:
  • The larger the tolerance of index position, the smaller probability that the twist of rotor in a switch-off state will be recognized.
  • The smaller the tolerance of index position, the smaller probability that the value will be saved.
For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.08h Quasi Absolute Encoder - command

Name | MOTOR_QuasiAbsEncoder_Action
Designation | Quasi Absolute Encoder - command
Data type | uint32
Access | write only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

The followings commands are executed by setting the parameter:

Parameter value:
Hex | MSB...LSB | Command | Description
65766173h | "evas" | "Save" | Stores the actual position in a non-volatile memory. Bit 3 QAE_Valid and bit 7 QAE_Referenced in MOTOR_QuasiAbsEncoder_Status will be set. After that the drive controller can be switch off.
64616F6Ch | "daol" | "Load" | Loads position from a non-volatile memory to MOTOR_ENC_ActualPosition if the stored position is valid.
646C7675h | "dlvu" | "Unvalidate" | Invalidates the stored position. Bit 3 QAE_Valid and bit 7 QAE_Referenced in MOTOR_QuasiAbsEncoder_Status will be set to zero.
For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x39A2, 0x00, 0x01)                                    # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable

print
print "saved pos:", d.SdoRd(0x39A2, 0x31)                      # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)                # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "actual pos before load:", d.SdoRd(0x3762, 0x00)         # POS_ActualPosition
print "encoder index pos before load:", d.SdoRd(0x396B, 0x00)  # MOTOR_ENC_ActualIndexPosition

print "********************************"
print "loading"
print "********************************"

# load QuasiAbsEncoder memory
d.SdoWr(0x39A2, 0x08, 0x64616F6C)                              # MOTOR_QuasiAbsEncoder_Action - load

print "actual pos after load:", d.SdoRd(0x3762, 0x00)          # POS_ActualPosition
print "encoder index pos after load:", d.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition


39A2.10h Quasi Absolute Encoder - corrected position

Name | MOTOR_QuasiAbsEncoder_DeltaPos
Designation | Quasi Absolute Encoder - corrected position
Data type | int32
Access | read only
Attributs | Save
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

If the function "AutoCorrectionOnFirstIndex" is active (bit 1 in MOTOR_QuasiAbsEncoder_ConfigFlags), the parameter returns the value of the position correction.
The maximal position correction is dependent on tolerance (MOTOR_QuasiAbsEncoder_Tolerance_cnt).

For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.20h Quasi Absolute Encoder - minimum voltage to position save

Name | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
Designation | Quasi Absolute Encoder - minimum voltage to position save
Data type | uint16
Access | read / write
Attributs | Save
Value range | -
Default value | 16000
Unit | [mV]
Operating mode | All
Available since | 1.91.00.16
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

The value of the parameter defines the electronic voltage under which the position is automatically saved, if the "Save On Power Off" (see bit 5 in parameter QAE_SaveOnPowerOff MOTOR_QuasiAbsEncoder_ConfigFlags) is enabled. The position will be stored only once. The position can be saved once again, if the electronic voltage exceeds the value of the parameter MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe (the function is "armed"). The resolution of the value is 10mV.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.21h Quasi Absolute Encoder - maximum voltage to position save

Name | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe
Designation | Quasi Absolute Encoder - maximum voltage to position save
Data type | uint16
Access | read / write
Attributs | Save
Value range | -
Default value | 17000
Unit | [mV]
Operating mode | All
Available since | 1.91.00.16
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

The value of the parameter defines the electronics voltage over which the storage of the position is possible (the function "Save On Power Off" is "armed"). Storing of the position will take place only once, when the electronics voltage falls below the value of the parameter MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe. The resolution of the value is 10mV.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.31h Quasi Absolute Encoder - saved position

Name | MOTOR_QuasiAbsEncoder_SavedPosition
Designation | Quasi Absolute Encoder - saved position
Data type | int32
Access | read only
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedIndexPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

Provides last stored position from a non-volatile memory.
If the stored value is invalid (bit 0, QAE_Valid in MOTOR_QuasiAbsEncoder_Status is set to zero), the parameter returns the value 0.

For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.32h Quasi Absolute Encoder - saved index position

Name | MOTOR_QuasiAbsEncoder_SavedIndexPosition
Designation | Quasi Absolute Encoder - saved index position
Data type | int32
Access | read only
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavesCounter

Description

Provides last stored position of the index from a non-volatile memory.
If the stored value is invalid (bit 0, QAE_Valid in MOTOR_QuasiAbsEncoder_Status is set to zero), the parameter returns the value 0.

For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


39A2.33h Quasi Absolute Encoder - saves counter

Name | MOTOR_QuasiAbsEncoder_SavesCounter
Designation | Quasi Absolute Encoder - saves counter
Data type | uint32
Access | read only
Attributs | Save
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.06
Devices | All
PLC Function | -
Cross reference | MOTOR_QuasiAbsEncoder_ConfigFlags, MOTOR_QuasiAbsEncoder_Status, MOTOR_QuasiAbsEncoder_Error, MOTOR_QuasiAbsEncoder_Tolerance_cnt, MOTOR_QuasiAbsEncoder_Action, MOTOR_QuasiAbsEncoder_DeltaPos, MOTOR_QuasiAbsEncoder_SavedPosition, MOTOR_QuasiAbsEncoder_SavedIndexPosition

Description

Provides the count of storage operations.

For general informations see description of the parameter MOTOR_QuasiAbsEncoder_ConfigFlags.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

#init QuasiAbsEncoder
d.SdoWr(0x39A2, 0x00, 0x21)                                 # MOTOR_QuasiAbsEncoder_ConfigFlags - Enable + Save on power off
d.SdoWr(0x39A2, 0x07, 1000)                                 # MOTOR_QuasiAbsEncoder_Tolerance_cnt - Tolerance = 1000 inc

# print actual parameters
print
print "***************************************************"
print "config flag:", hex(d.SdoRd(0x39A2, 0x00))            # MOTOR_QuasiAbsEncoder_ConfigFlags

print "status:", hex(d.SdoRd(0x39A2, 0x01))                 # MOTOR_QuasiAbsEncoder_Status

print "error:", d.SdoRd(0x39A2, 0x02)                       # MOTOR_QuasiAbsEncoder_Error

print "tolerance:", d.SdoRd(0x39A2, 0x07)                   # MOTOR_QuasiAbsEncoder_Tolerance_cnt

print "corrected position:", d.SdoRd(0x39A2, 0x10)          # MOTOR_QuasiAbsEncoder_DeltaPos

print "min. voltage for saving:", d.SdoRd(0x39A2,0x20)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe
print "max. voltage for saving:", d.SdoRd(0x39A2,0x21)      # MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe

print "saved pos:", d.SdoRd(0x39A2, 0x31)                   # MOTOR_QuasiAbsEncoder_SavedPosition
print "saved index pos:", d.SdoRd(0x39A2, 0x32)             # MOTOR_QuasiAbsEncoder_SavedIndexPosition

print "saves counter:", d.SdoRd(0x39A2, 0x33)               # MOTOR_QuasiAbsEncoder_SavesCounter

print "actual pos:", d.SdoRd(0x3762, 0x00)                  # POS_ActualPosition
print "encoder index Pos:", d.SdoRd(0x396B, 0x00)           # MOTOR_ENC_ActualIndexPosition


3A02.00h Velocity measurement - gate time

Name | MEASUREMENT_VelTime_ms
Designation | Velocity measurement - gate time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 100
Unit | [ms]
Operating mode | All
Available since | 1.45.00.00
Devices | All
PLC Function | MesVelTime(value_ms)
Cross reference | -

Description

Using this parameter you can set the measurement period for measuring the velocity. The longer the period, the better the result (MEASUREMENT_Vel_cnt, MEASUREMENT_Vel_rpm).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3A02, 0x00, 100)                                   # MEASUREMENT_VelTime_ms - 100 ms
time.sleep(0.1)                                              # wait 100 ms
print
print
print "time for velocity measurement:",d.SdoRd(0x3A02, 0x00) # MEASUREMENT_VelTime_ms

meas_vel = d.SdoRd(0x3A04, 0x01)                             # MEASUREMENT_Vel_rpm
meas_vel_inc = d.SdoRd(0x3A04, 0x00)                         # MEASUREMENT_Vel_cnt

print "****************************************"
print "measured velocity:", meas_vel,"rpm"
print "****************************************"
print "measured velocity:", meas_vel_inc,"inc"
print "****************************************"


3A04.00h Measured velocity in increments

Name | MEASUREMENT_Vel_cnt
Designation | Measured velocity in increments
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.45.00.00
Devices | All
PLC Function | MesVel_cnt()
Cross reference | -

Description

This parameter provides the increments per the measurement period (MEASUREMENT_VelTime_ms).
Depending on the velocity feedback (VEL_Feedback) encoder or hall pulses are counted through the time of MEASUREMENT_VelTime_ms.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3A02, 0x00, 100)                                   # MEASUREMENT_VelTime_ms - 100 ms
time.sleep(0.1)                                              # wait 100 ms
print
print
print "time for velocity measurement:",d.SdoRd(0x3A02, 0x00) # MEASUREMENT_VelTime_ms

meas_vel = d.SdoRd(0x3A04, 0x01)                             # MEASUREMENT_Vel_rpm
meas_vel_inc = d.SdoRd(0x3A04, 0x00)                         # MEASUREMENT_Vel_cnt

print "****************************************"
print "measured velocity:", meas_vel,"rpm"
print "****************************************"
print "measured velocity:", meas_vel_inc,"inc"
print "****************************************"


3A04.01h Measured velocity in [rpm]

Name | MEASUREMENT_Vel_rpm
Designation | Measured velocity in [rpm]
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rpm] - revolutions per minute
Operating mode | All
Available since | 1.70.00.00
Devices | All
PLC Function | MesVel()
Cross reference | -

Description

This parameter provides the measurement of the velocity in revolutions per minute (rpm).
Depending on the velocity feedback (VEL_Feedback) encoder or hall pulses are counted through the time of MEASUREMENT_VelTime_ms.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)

d.SdoWr(0x3A02, 0x00, 100)                                   # MEASUREMENT_VelTime_ms - 100 ms
time.sleep(0.1)                                              # wait 100 ms
print
print
print "time for velocity measurement:",d.SdoRd(0x3A02, 0x00) # MEASUREMENT_VelTime_ms

meas_vel = d.SdoRd(0x3A04, 0x01)                             # MEASUREMENT_Vel_rpm
meas_vel_inc = d.SdoRd(0x3A04, 0x00)                         # MEASUREMENT_Vel_cnt

print "****************************************"
print "measured velocity:", meas_vel,"rpm"
print "****************************************"
print "measured velocity:", meas_vel_inc,"inc"
print "****************************************"


Content - Parameters 3000h (DSA) - Factor group

3B00.00h | FCT_Control | Factor group - control
3B00.01h | FCT_Precision | Factor group - precision
3B10.00h | FCT_Polarity | Factor group - polarity
3B11.00h | FCT_PosNotationIndex | Factor group - position notation index
3B12.00h | FCT_PosDimIndex | Factor group - position dimension index
3B13.00h | FCT_VelNotationIndex | Factor group - velocity notation index
3B14.00h | FCT_VelDimIndex | Factor group - velocity dimension index
3B15.00h | FCT_AccNotationIndex | Factor group - acceleration notation index
3B16.00h | FCT_AccDimIndex | Factor group - acceleration dimension index
3B16.01h | FCT_AccFactorNum | Factor group - acceleration scale - numinator
3B16.02h | FCT_AccFactorDen | Factor group - acceleration scale - denuminator
3B17.00h | FCT_PosScaleNum | Factor group - position scale - numerator
3B17.01h | FCT_PosScaleDen | Factor group - position scale - denominator
3B18.00h | FCT_VelScaleNum | Factor group - velocity scale - numerator
3B18.01h | FCT_VelScaleDen | Factor group - velocity scale - denominator
3B19.00h | FCT_GearRatio_MotorRev | Factor group - gear ratio - motor shaft revolutions
3B19.01h | FCT_GearRatio_ShaftRev | Factor group - gear ratio - driving shaft revolutions
3B1A.00h | FCT_FeedConstant_Feed | Factor group - feed constant - feed
3B1A.01h | FCT_FeedConstant_ShaftRev | Factor group - feed constant - driving shaft revolutions


3B00.00h Factor group - control

Name | FCT_Control
Designation | Factor group - control
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctControl(value)
Cross reference | -

Description

Using this parameter you can activate the factor group or parts of it. When it is switched off, the parameters of the factor group have no influence on the controller.

Bit assignment:
Bit | Description
0 | This Bit activates or deactivates the following parameters: VEL_ScaleNum, VEL_ScaleDen, VEL_DimensionNum, VEL_DimensionDen 0 - deactivated 1 - activated
1 | Complete factor group activated.
2 | Parameters of the factor group for velocity and acceleration are active only.
3 | Parameters of the factor group for position are active only.
4..6 | Reserved
7 | Update active. If this is set, the parameters of the factor group can be changed without any influence on the output values (velocity, acceleration and position). After reseting the bit all parameter become valid.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B00.01h Factor group - precision

Name | FCT_Precision
Designation | Factor group - precision
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.01
Devices | All
PLC Function | FctPrecision(value)
Cross reference | -

Description

This parameter defines the precision of the internal positioning factors.

Parameter values:
Value | Description
0 | Internal position calculations are done with single precision (32Bit).
1 | Internal position calculations are done with advanced precision (64Bit).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B10.00h Factor group - polarity

Name | FCT_Polarity
Designation | Factor group - polarity
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctPolarity(value)
Cross reference | -

Description

The position values (target position and actual position) are multiplied by 1 or -1 depending on this parameter. Positions like hall position (MOTOR_HALL_ActualPosition) and encoder position (MOTOR_ENC_ActualPosition) are not effected by this parameter.

Parameter values:
Value | Description
0 | Multiplied by 1
1 | Multiplied by -1 (minus one)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B11.00h Factor group - position notation index

Name | FCT_PosNotationIndex
Designation | Factor group - position notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-128 .. 127]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctPosNotationIndex(value)
Cross reference | FCT_PosDimIndex

Description

This parameter defines the unit of the position parameters (target position and actual positions).

Position_Unit = 10FCT_PosNotationIndex * PhyUnit(FCT_PosDimIndex)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B12.00h Factor group - position dimension index

Name | FCT_PosDimIndex
Designation | Factor group - position dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {B4h, ACh}
Default value | B4h
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctPosDimIndex(value)
Cross reference | FCT_PosNotationIndex

Description

This parameter defines the physical unit of the position parameters (target position and actual positions).

Position_Unit = 10FCT_PosNotationIndex * PhyUnit(FCT_PosDimIndex)

Parameter values:
Value | Description
B4h | Revolutions (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)
ACh | Increments

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B13.00h Factor group - velocity notation index

Name | FCT_VelNotationIndex
Designation | Factor group - velocity notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-128 .. 127]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctVelNotationIndex(value)
Cross reference | FCT_VelDimIndex

Description

This parameter defines the unit of the velocity parameters (target velocity and actual velocities).

Velocity_Unit = 10FCT_VelNotationIndex * PhyUnit(FCT_VelDimIndex)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B14.00h Factor group - velocity dimension index

Name | FCT_VelDimIndex
Designation | Factor group - velocity dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {A3h, A4h}
Default value | A4h
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | -
Cross reference | FCT_VelNotationIndex

Description

This parameter defines the physical unit of the velocity parameters (target velocity and actual velocities).

Velocity_Unit = 10FCT_VelNotationIndex * PhyUnit(FCT_VelDimIndex)

Parameter values:
Values | Description
A3h | [rps] - revolutions per seconds (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)
A4h | [rpm] - revolutions per minute Revolution (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B15.00h Factor group - acceleration notation index

Name | FCT_AccNotationIndex
Designation | Factor group - acceleration notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-128 .. 127]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctAccNotationIndex(value)
Cross reference | FCT_AccDimIndex

Description

This parameter defines the unit of the acceleration and deceleration.

Acceleration_Unit = 10FCT_AccNotationIndex * PhyUnit(FCT_AccDimIndex)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B16.00h Factor group - acceleration dimension index

Name | FCT_AccDimIndex
Designation | Factor group - acceleration dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {AFh, B0h}
Default value | B0h
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctAccDimIndex(value)
Cross reference | FCT_AccNotationIndex

Description

This parameter defines the physical unit of the acceleration and deceleration (see VEL_Acc, VEL_Dec).

Acceleration_Unit = 10FCT_AccNotationIndex * PhyUnit(FCT_AccDimIndex)

Parameter values:
Value | Description
AFh | [r/s²] - revolutions per second squared
B0h | [r/min²] - revolutions per minute squared

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B16.01h Factor group - acceleration scale - numinator

Name | FCT_AccFactorNum
Designation | Factor group - acceleration scale - numinator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | -
Cross reference | FCT_AccFactorDen

Description

This parameter defines the numerator of the acceleration scale factor (Ffct_accscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_AccFactorNum) by a denominator (FCT_AccFactorDen).

Ffct_accscale = FCT_AccFactorNum / FCT_AccFactorDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B16.02h Factor group - acceleration scale - denuminator

Name | FCT_AccFactorDen
Designation | Factor group - acceleration scale - denuminator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | -
Cross reference | FCT_AccFactorNum

Description

This parameter defines the denominator of the acceleration scale factor (Ffct_accscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_AccFactorNum) by a denominator (FCT_AccFactorDen).

Ffct_accscale = FCT_AccFactorNum / FCT_AccFactorDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B17.00h Factor group - position scale - numerator

Name | FCT_PosScaleNum
Designation | Factor group - position scale - numerator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctPosScale([numerator,denominator])
Cross reference | FCT_PosScaleDen

Description

This parameter defines the numerator of the position scale factor (Ffct_pscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_PosScaleNum) by a denominator (FCT_PosScaleDen).

Ffct_pscale = FCT_PosScaleNum / FCT_PosScaleDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B17.01h Factor group - position scale - denominator

Name | FCT_PosScaleDen
Designation | Factor group - position scale - denominator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctPosScale([numerator,denominator])
Cross reference | FCT_PosScaleNum

Description

This parameter defines the denominator of the position scale factor (Ffct_pscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_PosScaleNum) by a denominator (FCT_PosScaleDen).

Ffct_pscale = FCT_PosScaleNum / FCT_PosScaleDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B18.00h Factor group - velocity scale - numerator

Name | FCT_VelScaleNum
Designation | Factor group - velocity scale - numerator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctVelScale([numerator,denominator])
Cross reference | FCT_VelScaleDen

Description

This parameter defines the numerator of the velocity scale factor (Ffct_vscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_VelScaleNum) by a denominator (FCT_VelScaleDen).

Ffct_vscale = FCT_VelScaleNum / FCT_VelScaleDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B18.01h Factor group - velocity scale - denominator

Name | FCT_VelScaleDen
Designation | Factor group - velocity scale - denominator
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctVelScale([numerator,denominator])
Cross reference | FCT_VelScaleNum

Description

This parameter defines the denominator of the velocity scale factor (Ffct_vscale) within the factor group.

The scale factor is calculated by the division of a numerator (FCT_VelScaleNum) by a denominator (FCT_VelScaleDen).

Ffct_vscale = FCT_VelScaleNum / FCT_VelScaleDen

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B19.00h Factor group - gear ratio - motor shaft revolutions

Name | FCT_GearRatio_MotorRev
Designation | Factor group - gear ratio - motor shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctGearRatio([motor_rev,driving_rev])
Cross reference | FCT_GearRatio_ShaftRev

Description

This parameter defines the numerator of the gear ratio.

The gear ratio is the relation between the revolutions at the motor shaft (FCT_GearRatio_MotorRev) to the revolutions at the gear shaft (FCT_GearRatio_ShaftRev).

Fgear = FCT_GearRatio_MotorRev / FCT_GearRatio_ShaftRev

For an example have a look at parameter FCT_FeedConstant_Feed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B19.01h Factor group - gear ratio - driving shaft revolutions

Name | FCT_GearRatio_ShaftRev
Designation | Factor group - gear ratio - driving shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctGearRatio([motor_rev,driving_rev])
Cross reference | FCT_GearRatio_MotorRev

Description

This parameter defines the denominator of the gear ratio.

The gear ratio is the relation between the revolutions at the motor shaft (FCT_GearRatio_MotorRev) to the revolutions at the gear shaft (FCT_GearRatio_ShaftRev).

Fgear = FCT_GearRatio_MotorRev / FCT_GearRatio_ShaftRev

For an example have a look at parameter FCT_FeedConstant_Feed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B1A.00h Factor group - feed constant - feed

Name | FCT_FeedConstant_Feed
Designation | Factor group - feed constant - feed
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctFeedConstant([feed,shaft_rev])
Cross reference | FCT_FeedConstant_ShaftRev

Description

This parameter defines the numerator of the feed constant.

The feed constant defines the way per revolution of the motor shaft or of the gear (if available).

Ffeed = FCT_FeedConstant_Feed / FCT_FeedConstant_ShaftRev

Example:
  • Encoder with 500 "lines" equals 4*500 = 2000 increments
  • gear ratio = 22.5 : 1
  • 55 revolutions at the gear-wheel result in a feed of 1000 [mm]
Using the parameterisation shown in the diagram below, the following units are achieved (assumed the other parameters of the factor group are set to default values):
  • Positions in [mm]
  • Velocities in [mm/min]
  • Accelerations in [mm/min²]

Faktorgruppe - Beispiel

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


3B1A.01h Factor group - feed constant - driving shaft revolutions

Name | FCT_FeedConstant_ShaftRev
Designation | Factor group - feed constant - driving shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.50.00.00
Devices | All
PLC Function | FctFeedConstant([feed,driving_rev])
Cross reference | FCT_FeedConstant_Feed

Description

This parameter defines the denominator of the feed constant.

The feed constant defines the way per revolution of the motor shaft or of the gear (if available).

Ffeed = FCT_FeedConstant_Feed / FCT_FeedConstant_ShaftRev

For an example have a look at the parameter FCT_FeedConstant_Feed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3B00, 0x00, 0x02)      # FCT_Control - enable all
d.SdoWr(0x3B00, 0x01, 0)         # FCT_Precision - 32 Bit

d.SdoWr(0x3B10, 0x00, 0)         # FCT_Polarity - polarity +1

d.SdoWr(0x3B11, 0x00, 0)         # FCT_PosNotationIndex
d.SdoWr(0x3B12, 0x00, 0xB4)      # FCT_PosDimIndex
# --> Position: 10^0 = 1 * [rpm]

d.SdoWr(0x3B13, 0x00, 1)         # FCT_VelNotationIndex
d.SdoWr(0x3B14, 0x00, 0xA4)      # FCT_VelDimIndex
# --> velocity: 10^1 = 10 * [rpm]

d.SdoWr(0x3B15, 0x00, 0)         # FCT_AccNotationIndex
d.SdoWr(0x3B16, 0x00, 0xB0)      # FCT_AccDimIndex
d.SdoWr(0x3B16, 0x01, 4)         # FCT_AccFactorNum
d.SdoWr(0x3B16, 0x02, 8)         # FCT_AccFactorDen
# --> acceleration: (4/8) * 10^0 = 0.5 * [rpm²]

d.SdoWr(0x3B17, 0x00, 20)        # FCT_PosScaleNum
d.SdoWr(0x3B17, 0x01, 5)         # FCT_PosScaleDen
# --> position scale factor: 20/5 = 4

d.SdoWr(0x3B18, 0x00, 3)         # FCT_VelScaleNum
d.SdoWr(0x3B18, 0x01, 1)         # FCT_VelScaleDen
# --> velocity scale factor: 3/1 = 3

d.SdoWr(0x3B19, 0x00, 10)        # FCT_GearRatio_MotorRev
d.SdoWr(0x3B19, 0x01, 20)        # FCT_GearRatio_ShaftRev
# --> gear ratio: 10/20 = 0,5

d.SdoWr(0x3B1A, 0x00, 250)       # FCT_FeedConstant_Feed
d.SdoWr(0x3B1A, 0x01, 50)        # FCT_FeedConstant_ShaftRev
# --> feed: 250mm in 50U = 5 [mm/r]

d.SdoWr(0x3003, 0x00, 7)         # DEV_Mode - POS Mode
d.SdoWr(0x3004, 0x00, 1)         # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 50)        # DEV_CmdData0 - 50 [mm/min]
# --> 50 [mm/min] * gear 0,5 * velocity scale factor 3 * velocity 10^1 / feed [5 mm/r] = 150 [rpm]

d.SdoWr(0x3000, 0x11, 50)        # DEV_CmdData1  - 50 [mm]
# --> 50 [mm] * gear 0,5 * position scale factor 4 / feed [5 mm/r] = 20 [r]

d.SdoWr(0x3000, 0x01, 0)         # DEV_Cmd_ExecOnChange - toggle
d.SdoWr(0x3000, 0x01, 0x34)      # DEV_Cmd_ExecOnChange - MovR


Content - Parameters 3000h (DSA) - Diagnostic

3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


3F00.00h Diagnostic - write enable

Name | DIAG_Enable
Designation | Diagnostic - write enable
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_SIM_Control, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Mask, DIAG_SIM_DIN_Value

Description

The parameter sets the write enable for diagnose parameters. In order to avoid change of diagnose parameters by mistake, change is only executed when a specific signature is written to this parameter. To enable the write access, you must set the parameter to 0x55AA55AA. All others values disable the write access.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA0.00h Diagnostic - enable simulation of I/O's

Name | DIAG_SIM_Control
Designation | Diagnostic - enable simulation of I/O's
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Mask, DIAG_SIM_DIN_Value

Description

With this parameter virtual digital and analog inputs can be globally activated or deactivated.

Bit assignment:
Bit Name Description
0 Global SimAin
 Bit = 0 - deactivate virtual analog inputs
Bit = 1 - activate virtual analog inputs
1
 Global SimDin
 Bit = 0 - deactivate virtual digital inputs
Bit = 1 - activate virtual digital inputs

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA1.00h Diagnostic - ain simulation - mask

Name | DIAG_SIM_AIN_Mask
Designation | Diagnostic - ain simulation - mask
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_Control, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Mask, DIAG_SIM_DIN_Value

Description

With this parameter a bitmask can be generated to decide, which analog input will be simulated. Bit 0 stands for analog input 0, bit 1 stands for analog input 1 and so on. The parameter does not set the inputs, it just enable the virtual mode for the analog input.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA2.00h Diagnostic - ain simulation - value of ain0

Name | DIAG_SIM_AIN_ValueAin0
Designation | Diagnostic - ain simulation - value of ain0
Data type | int32
Access | read / write
Attributs | Password protected
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_Control, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Mask, DIAG_SIM_DIN_Value

Description

With this parameter the simulated value of analog input 0 can be set. The analog input 0 is only simulated, if it is switched to virtual mode.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA2.01h Diagnostic - ain simulation - value of ain1

Name | DIAG_SIM_AIN_ValueAin1
Designation | Diagnostic - ain simulation - value of ain1
Data type | int32
Access | read / write
Attributs | Password protected
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_Control, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_DIN_Mask, DIAG_SIM_DIN_Value

Description

With this parameter the simulated value of analog input 1 can be set. The analog input 1 is only simulated, if it is switched to virtual mode.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA3.00h Diagnostic - din simulation - mask

Name | DIAG_SIM_DIN_Mask
Designation | Diagnostic - din simulation - mask
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_Control, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Value

Description

With this parameter a bitmask can be generated to decide, which digital input will be simulated. Bit 0 stand for digital input 0, bit 1 stands for digital input 1 and so on. The parameter does not set the inputs, it just enable the virtual mode for the digital inputs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


3FA4.00h Diagnostic - ain simulation - value of digital inputs

Name | DIAG_SIM_DIN_Value
Designation | Diagnostic - ain simulation - value of digital inputs
Data type | uint32
Access | read / write
Attributs | Password protected
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.89.00.CB
Devices | All
PLC Function | -
Cross reference | DIAG_Enable, DIAG_SIM_Control, DIAG_SIM_AIN_Mask, DIAG_SIM_AIN_ValueAin0, DIAG_SIM_AIN_ValueAin1, DIAG_SIM_DIN_Mask

Description

With this parameter the digital inputs can be set, if they have been switched to virtual mode. Bit 0 sets digital input 0, bit 1 sets digital input 1 and so on.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x03)            # DIAG_SIM_Control - Activate virtual Ain & Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable

d.SdoWr(0x3FA1, 0x00, 0x03)            # DIAG_SIM_AIN_Mask - Bitmask for virtual Ain0 & Ain1

d.SdoWr(0x3FA2, 0x00, 4500)            # DIAG_SIM_AIN_ValueAin0 - Ain0 4500 mV
d.SdoWr(0x3FA2, 0x01, 7699)            # DIAG_SIM_AIN_ValueAin1 - Ain0 7699 mV

d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x09)            # DIAG_SIM_DIN_Value - Set Din0 & Din3


Content - Parameters 5000h (MPU)

5000.00h | MPU_Cmd | MPU command
5000.01h | MPU_Autostart | MPU autostart
5001.00h | MPU_Error | MPU error register
5002.00h | MPU_Status | MPU Status register
5023.00h | MPU_Version | MPU version
5023.01h | MPU_SubVersion | MPU subversion
5028.00h | MPU_PrgSize | Maximal MPU program size
5028.01h | MPU_RegSize | Maximal amount of MPU registers
5028.04h | MPU_PVarSize | Maximal amount of MPU registers in EEPROM


5000.00h MPU command

Name | MPU_Cmd
Designation | MPU command
Data type | int16
Access | write only
Attributs | -
Value range | [-8000h .. 7FFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

Writing to this parameter executes a MPU command.

Parameter value:
Hex | Dec | Name | PLC Function | Description
00h | 0 | MPU_CMD_NOP | - | No operation
01h | 1 | MPU_CMD_ClearError | ClearError() | Clears an potential error.
02h | 2 | MPU_CMD_Start | Start() | Starts the MPU program in the device.
03h | 3 | MPU_CMD_Break | Break() | Breaks the MPU program in the device.
04h | 4 | MPU_CMD_Continue | Continue() | Continues the MPU program in the device, after it has been broken.
80h | 128 | MPU_CMD_Store | Store() | Saves the MPU program in non-volatile memory.
81h | 129 | MPU_CMD_Restore | Restore() | Loads the MPU program from the non-volatile memory.
82h | 130 | MPU_CMD_Default | Default() | Deletes the MPU program from RAM (the program remains in the non-volatile memory).
83h | 131 | MPU_CMD_Clear | Clear() | Deletes the MPU program from the device.


5000.01h MPU autostart

Name | MPU_Autostart
Designation | MPU autostart
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter enables / disables the auto start (the start of the MPU program after power on of the device).

Parameter values:
Value | Description
0 | Disable auto start
1 | Enable auto start


5001.00h MPU error register

Name | MPU_Error
Designation | MPU error register
Data type | int16
Access | read only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter provides an error code. A potential error can be cleared by setting MPU_Cmd to 1 (MPU_CMD_ClearError).

Error code:
Value | Description
=0 | No error
<0 | Error (see table of error codes)

Error codes:
Error code [dec] | Error code [hex] | Name | Description
-6000 | 0xE890 | ERR_MPU_BadCode | bad MPU code (MPU program is broken!)
-6001 | 0xE88F | ERR_MPU_ProgramCounterOutOfRange | program counter out of range
-6002 | 0xE88E | ERR_MPU_JmpOutOfRange | jump out of range
-6003 | 0xE88D | ERR_MPU_Div0 | division by 0
-6020 | 0xE87C | ERR_MPU_RdErrArg0 | first argument could not be read
-6021 | 0xE87B | ERR_MPU_RdErrArg1 | second argument could not be read
-6030 | 0xE872 | ERR_MPU_WrErrArg0 | first argument could not be written
-6031 | 0xE871 | ERR_MPU_WrErrArg1 | second argument could not be written
-6040 | 0xE868 | ERR_MPU_CallStackOverflow | stack overflow at call routine
-6041 | 0xE867 | ERR_MPU_CallStackUnderflow | stack underflow at call routine
-6050 | 0xE85E | ERR_MPU_PrgBadMpuVersion | bad MPU version
-6051 | 0xE85D | ERR_MPU_PrgBadMpuCode | bad MPU code
-6052 | 0xE85C | ERR_MPU_PrgStoreFailed | storing of MPU failed
-6053 | 0xE84B | ERR_MPU_PrgRestoreFailed | restoring of MPU failed
-6054 | 0xE85A | ERR_MPU_PrgBadCrc | bad check sum of the MPU


5002.00h MPU Status register

Name | MPU_Status
Designation | MPU Status register
Data type | uint32
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter provides the value of the status register. Every Bit of this register has got its own meaning (see table).

Assignment of the bits:
Bit | Name | Description for bit = 1
0 | MPU_STAT_PrgRunning | The MPU program is running.
1 | MPU_STAT_Error | An error has occurred. You can find the error code in MPU_Error.


5023.00h MPU version

Name | MPU_Version
Designation | MPU version
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MPU_SubVersion

Description

The parameter returns the version of the MPU. Use parameters MPU_Version and MPU_SubVersion to get the complete version .

The version is encoded as follows:

    MPU_Version    = XXYYh        (in der Hex-Notation)
    MPU_SubVersion = UUZZh        (in der Hex-Notation)

The outcome of this is the following version:

    XX.YY.UU.ZZ

Example

    MPU_Version    = 0177h
    MPU_SubVersion = 0203h

    => version = 1.77.02.03


5023.01h MPU subversion

Name | MPU_SubVersion
Designation | MPU subversion
Data type | const uint16
Access | read only
Attributs | -
Value range | [0000h .. FFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MPU_Version

Description

The parameter returns the sub version of the MPU. Use parameters MPU_Version and MPU_SubVersion to get the complete version .

The version is encoded as follows:

    MPU_Version    = XXYYh        (in der Hex-Notation)
    MPU_SubVersion = UUZZh        (in der Hex-Notation)

The outcome of this is the following version:

    XX.YY.UU.ZZ

Example

    MPU_Version    = 0177h
    MPU_SubVersion = 0203h

    => version = 1.77.02.03


5028.00h Maximal MPU program size

Name | MPU_PrgSize
Designation | Maximal MPU program size
Data type | const uint16
Access | read only
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter returns the maximum number of commands of MPU program.


5028.01h Maximal amount of MPU registers

Name | MPU_RegSize
Designation | Maximal amount of MPU registers
Data type | const uint16
Access | read only
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter returns the maximum number of the MPU registers.


5028.04h Maximal amount of MPU registers in EEPROM

Name | MPU_PVarSize
Designation | Maximal amount of MPU registers in EEPROM
Data type | const uint16
Access | read only
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | -
Operating mode | All
Available since | 1.77.00.09
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter returns the maximum number of non-volatile MPU register (objects with the index 5060h).


Content - Parameters 1000h (DS301)

1000.00h | COP_DeviceType | Device type
1001.00h | COP_ErrorRegister | Error register
1002.00h | COP_ManufacturerStatusRegister | Manufacturer status register
1003.00h | COP_PredefinedErrorField_NumberOfErrors | Predefined error field - Number of errors
1003.01h | COP_PredefinedErrorField_StandardErrorField1 | Predefined error field - Standard error field 1
1003.02h | COP_PredefinedErrorField_StandardErrorField2 | Predefined error field - Standard error field 2
1003.03h | COP_PredefinedErrorField_StandardErrorField3 | Predefined error field - Standard error field 3
1003.04h | COP_PredefinedErrorField_StandardErrorField4 | Predefined error field - Standard error field 4
1003.05h | COP_PredefinedErrorField_StandardErrorField5 | Predefined error field - Standard error field 5
1003.06h | COP_PredefinedErrorField_StandardErrorField6 | Predefined error field - Standard error field 6
1003.07h | COP_PredefinedErrorField_StandardErrorField7 | Predefined error field - Standard error field 7
1003.08h | COP_PredefinedErrorField_StandardErrorField8 | Predefined error field - Standard error field 8
1005.00h | COP_CobId_Sync | COB-ID SYNC
1006.00h | COP_CommunicationCyclePeriod | Communication cycle period
1008.00h | COP_ManufacturerDeviceName | Manufacturer device name
1009.00h | COP_ManufacturerHardwareVersion | Manufacturer hardware version
100A.00h | COP_ManufacturerSoftwareVersion | Manufacturer software version
100C.00h | COP_GuardTime | Guard time
100D.00h | COP_LifeTimeFactor | Life time factor
100E.00h | COP_CobId_Guarding | COB-ID node and life Guarding
1010.00h | COP_StoreParameters_HighestSubindexSupported | Store parameters - highest sub-index supported
1010.01h | COP_StoreParameters_All | Store parameters - save all parameters
1010.02h | COP_StoreParameters_Communication | Store parameters - save communication parameters
1010.03h | COP_StoreParameters_Application | Store parameters - save application parameters
1010.05h | COP_StoreParameters_Manufacturer_0x2000 | Store parameters - save manufacturer defined parameters (range 0x2000-0x2FFF)
1010.06h | COP_StoreParameters_Manufacturer_0x3000 | Store parameters - save manufacturer defined parameters (range 0x3000-0x3FFF)
1011.00h | COP_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
1011.01h | COP_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
1011.02h | COP_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
1011.03h | COP_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
1011.05h | COP_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
1011.06h | COP_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
1012.00h | COP_CobId_TimeStampMessage | COB-ID time stamp message
1014.00h | COP_CobId_EmergencyMessage | COB-ID emergency message
1016.00h | COP_ConsumerHeartbeatTime_HighestSubindexSupported | Consumer heartbeat time - Highest sub-index supported
1016.01h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1 | Consumer 1 heartbeat time - Consumer heartbeat time
1016.02h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime2 | Consumer 2 heartbeat time - Consumer heartbeat time
1016.03h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime3 | Consumer 3 heartbeat time - Consumer heartbeat time
1016.04h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime4 | Consumer 4 heartbeat time - Consumer heartbeat time
1017.00h | COP_ProducerHeartbeatTime | Producer heartbeat time
1018.00h | COP_IdentityObject_HighestSubindexSupported | Identity object - Highest sub-index supported
1018.01h | COP_IdentityObject_VendorID | Identity object - Vendor-ID
1018.02h | COP_IdentityObject_ProductCode | Identity object - Product code
1018.03h | COP_IdentityObject_RevisionNumber | Identity object - Revision number
1029.00h | COP_ErrorBehavior_HighestSubindexSupported | Error behavior - Highest sub-index supported
1029.01h | COP_ErrorBehavior_CommunicationError | Error behavior - Communication error
1200.00h | COP_SDO_ServerParameter_HighestSubindexSupported | SDO server parameter - Highest sub-index supported
1200.01h | COP_SDO_ServerParameter_CobIdClientServer_Rx | SDO server parameter - COB-ID client -> server (rx)
1200.02h | COP_SDO_ServerParameter_CobIdServerClient_Tx | SDO server parameter - COB-ID server -> client (tx)
1400.00h | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported | RxPDO1 communication parameter - highest sub-index supported
1400.01h | COP_RxPDO1_CommunicationParameter_CobId | RxPDO1 communication parameter - COB-ID used by RxPDO 1
1400.02h | COP_RxPDO1_CommunicationParameter_TransmissionType | RxPDO1 communication parameter - transmission type
1400.03h | COP_RxPDO1_CommunicationParameter_InhibitTime | RxPDO1 communication parameter - inhibit time
1401.00h | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported | RxPDO2 communication parameter - highest sub-index supported
1401.01h | COP_RxPDO2_CommunicationParameter_CobId | RxPDO2 communication parameter - COB-ID used by RxPDO 2
1401.02h | COP_RxPDO2_CommunicationParameter_TransmissionType | RxPDO2 communication parameter - transmission type
1401.03h | COP_RxPDO2_CommunicationParameter_InhibitTime | RxPDO2 communication parameter - inhibit time
1402.00h | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported | RxPDO3 communication parameter - highest sub-index supported
1402.01h | COP_RxPDO3_CommunicationParameter_CobId | RxPDO3 communication parameter - COB-ID used by RxPDO 3
1402.02h | COP_RxPDO3_CommunicationParameter_TransmissionType | RxPDO3 communication parameter - transmission type
1402.03h | COP_RxPDO3_CommunicationParameter_InhibitTime | RxPDO3 communication parameter - inhibit time
1403.00h | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported | RxPDO4 communication parameter - highest sub-index supported
1403.01h | COP_RxPDO4_CommunicationParameter_CobId | RxPDO4 communication parameter - COB-ID used by RxPDO 4
1403.02h | COP_RxPDO4_CommunicationParameter_TransmissionType | RxPDO4 communication parameter - transmission type
1403.03h | COP_RxPDO4_CommunicationParameter_InhibitTime | RxPDO4 communication parameter - inhibit time
1404.00h | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported | RxPDO5 communication parameter - highest sub-index supported
1404.01h | COP_RxPDO5_CommunicationParameter_CobId | RxPDO5 communication parameter - COB-ID used by RxPDO 5
1404.02h | COP_RxPDO5_CommunicationParameter_TransmissionType | RxPDO5 communication parameter - transmission type
1404.03h | COP_RxPDO5_CommunicationParameter_InhibitTime | RxPDO5 communication parameter - inhibit time
1405.00h | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported | RxPDO6 communication parameter - highest sub-index supported
1405.01h | COP_RxPDO6_CommunicationParameter_CobId | RxPDO6 communication parameter - COB-ID used by RxPDO 6
1405.02h | COP_RxPDO6_CommunicationParameter_TransmissionType | RxPDO6 communication parameter - transmission type
1405.03h | COP_RxPDO6_CommunicationParameter_InhibitTime | RxPDO6 communication parameter - inhibit time
1406.00h | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported | RxPDO7 communication parameter - highest sub-index supported
1406.01h | COP_RxPDO7_CommunicationParameter_CobId | RxPDO7 communication parameter - COB-ID used by RxPDO 7
1406.02h | COP_RxPDO7_CommunicationParameter_TransmissionType | RxPDO7 communication parameter - transmission type
1406.03h | COP_RxPDO7_CommunicationParameter_InhibitTime | RxPDO7 communication parameter - inhibit time
1414.00h | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported | RxPDO21 communication parameter - highest sub-index supported
1414.01h | COP_RxPDO21_CommunicationParameter_CobId | RxPDO21 communication parameter - COB-ID used by RxPDO 21
1414.02h | COP_RxPDO21_CommunicationParameter_TransmissionType | RxPDO21 communication parameter - transmission type
1414.03h | COP_RxPDO21_CommunicationParameter_InhibitTime | RxPDO21 communication parameter - inhibit time
1600.00h | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects | RxPDO1 mapping - number of mapped application objects in RxPDO 1
1600.01h | COP_RxPDO1_Mapping_1ApplicationObject | RxPDO1 mapping - 1st application object
1600.02h | COP_RxPDO1_Mapping_2ApplicationObject | RxPDO1 mapping - 2nd application object
1600.03h | COP_RxPDO1_Mapping_3ApplicationObject | RxPDO1 mapping - 3rd application object
1600.04h | COP_RxPDO1_Mapping_4ApplicationObject | RxPDO1 mapping - 4th application object
1600.05h | COP_RxPDO1_Mapping_5ApplicationObject | RxPDO1 mapping - 5th application object
1600.06h | COP_RxPDO1_Mapping_6ApplicationObject | RxPDO1 mapping - 6th application object
1600.07h | COP_RxPDO1_Mapping_7ApplicationObject | RxPDO1 mapping - 7th application object
1600.08h | COP_RxPDO1_Mapping_8ApplicationObject | RxPDO1 mapping - 8th application object
1601.00h | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects | RxPDO2 mapping - number of mapped application objects in RxPDO 2
1601.01h | COP_RxPDO2_Mapping_1ApplicationObject | RxPDO2 mapping - 1st application object
1601.02h | COP_RxPDO2_Mapping_2ApplicationObject | RxPDO2 mapping - 2nd application object
1601.03h | COP_RxPDO2_Mapping_3ApplicationObject | RxPDO2 mapping - 3rd application object
1601.04h | COP_RxPDO2_Mapping_4ApplicationObject | RxPDO2 mapping - 4th application object
1601.05h | COP_RxPDO2_Mapping_5ApplicationObject | RxPDO2 mapping - 5th application object
1601.06h | COP_RxPDO2_Mapping_6ApplicationObject | RxPDO2 mapping - 6th application object
1601.07h | COP_RxPDO2_Mapping_7ApplicationObject | RxPDO2 mapping - 7th application object
1601.08h | COP_RxPDO2_Mapping_8ApplicationObject | RxPDO2 mapping - 8th application object
1602.00h | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects | RxPDO3 mapping - number of mapped application objects in RxPDO 3
1602.01h | COP_RxPDO3_Mapping_1ApplicationObject | RxPDO3 mapping - 1st application object
1602.02h | COP_RxPDO3_Mapping_2ApplicationObject | RxPDO3 mapping - 2nd application object
1602.03h | COP_RxPDO3_Mapping_3ApplicationObject | RxPDO3 mapping - 3rd application object
1602.04h | COP_RxPDO3_Mapping_4ApplicationObject | RxPDO3 mapping - 4th application object
1602.05h | COP_RxPDO3_Mapping_5ApplicationObject | RxPDO3 mapping - 5th application object
1602.06h | COP_RxPDO3_Mapping_6ApplicationObject | RxPDO3 mapping - 6th application object
1602.07h | COP_RxPDO3_Mapping_7ApplicationObject | RxPDO3 mapping - 7th application object
1602.08h | COP_RxPDO3_Mapping_8ApplicationObject | RxPDO3 mapping - 8th application object
1603.00h | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects | RxPDO4 mapping - number of mapped application objects in RxPDO 4
1603.01h | COP_RxPDO4_Mapping_1ApplicationObject | RxPDO4 mapping - 1st application object
1603.02h | COP_RxPDO4_Mapping_2ApplicationObject | RxPDO4 mapping - 2nd application object
1603.03h | COP_RxPDO4_Mapping_3ApplicationObject | RxPDO4 mapping - 3rd application object
1603.04h | COP_RxPDO4_Mapping_4ApplicationObject | RxPDO4 mapping - 4th application object
1603.05h | COP_RxPDO4_Mapping_5ApplicationObject | RxPDO4 mapping - 5th application object
1603.06h | COP_RxPDO4_Mapping_6ApplicationObject | RxPDO4 mapping - 6th application object
1603.07h | COP_RxPDO4_Mapping_7ApplicationObject | RxPDO4 mapping - 7th application object
1603.08h | COP_RxPDO4_Mapping_8ApplicationObject | RxPDO4 mapping - 8th application object
1604.00h | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects | RxPDO5 mapping - number of mapped application objects in RxPDO 5
1604.01h | COP_RxPDO5_Mapping_1ApplicationObject | RxPDO5 mapping - 1st application object
1604.02h | COP_RxPDO5_Mapping_2ApplicationObject | RxPDO5 mapping - 2nd application object
1604.03h | COP_RxPDO5_Mapping_3ApplicationObject | RxPDO5 mapping - 3rd application object
1604.04h | COP_RxPDO5_Mapping_4ApplicationObject | RxPDO5 mapping - 4th application object
1604.05h | COP_RxPDO5_Mapping_5ApplicationObject | RxPDO5 mapping - 5th application object
1604.06h | COP_RxPDO5_Mapping_6ApplicationObject | RxPDO5 mapping - 6th application object
1604.07h | COP_RxPDO5_Mapping_7ApplicationObject | RxPDO5 mapping - 7th application object
1604.08h | COP_RxPDO5_Mapping_8ApplicationObject | RxPDO5 mapping - 8th application object
1605.00h | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects | RxPDO6 mapping - number of mapped application objects in RxPDO 6
1605.01h | COP_RxPDO6_Mapping_1ApplicationObject | RxPDO6 mapping - 1st application object
1605.02h | COP_RxPDO6_Mapping_2ApplicationObject | RxPDO6 mapping - 2nd application object
1605.03h | COP_RxPDO6_Mapping_3ApplicationObject | RxPDO6 mapping - 3rd application object
1605.04h | COP_RxPDO6_Mapping_4ApplicationObject | RxPDO6 mapping - 4th application object
1605.05h | COP_RxPDO6_Mapping_5ApplicationObject | RxPDO6 mapping - 5th application object
1605.06h | COP_RxPDO6_Mapping_6ApplicationObject | RxPDO6 mapping - 6th application object
1605.07h | COP_RxPDO6_Mapping_7ApplicationObject | RxPDO6 mapping - 7th application object
1605.08h | COP_RxPDO6_Mapping_8ApplicationObject | RxPDO6 mapping - 8th application object
1606.00h | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects | RxPDO7 mapping - number of mapped application objects in RxPDO 7
1606.01h | COP_RxPDO7_Mapping_1ApplicationObject | RxPDO7 mapping - 1st application object
1606.02h | COP_RxPDO7_Mapping_2ApplicationObject | RxPDO7 mapping - 2nd application object
1606.03h | COP_RxPDO7_Mapping_3ApplicationObject | RxPDO7 mapping - 3rd application object
1606.04h | COP_RxPDO7_Mapping_4ApplicationObject | RxPDO7 mapping - 4th application object
1606.05h | COP_RxPDO7_Mapping_5ApplicationObject | RxPDO7 mapping - 5th application object
1606.06h | COP_RxPDO7_Mapping_6ApplicationObject | RxPDO7 mapping - 6th application object
1606.07h | COP_RxPDO7_Mapping_7ApplicationObject | RxPDO7 mapping - 7th application object
1606.08h | COP_RxPDO7_Mapping_8ApplicationObject | RxPDO7 mapping - 8th application object
1614.00h | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects | RxPDO21 mapping - number of mapped application objects in RxPDO 21
1614.01h | COP_RxPDO21_Mapping_1ApplicationObject | RxPDO21 mapping - 1st application object
1614.02h | COP_RxPDO21_Mapping_2ApplicationObject | RxPDO21 mapping - 2nd application object
1614.03h | COP_RxPDO21_Mapping_3ApplicationObject | RxPDO21 mapping - 3rd application object
1614.04h | COP_RxPDO21_Mapping_4ApplicationObject | RxPDO21 mapping - 4th application object
1614.05h | COP_RxPDO21_Mapping_5ApplicationObject | RxPDO21 mapping - 5th application object
1614.06h | COP_RxPDO21_Mapping_6ApplicationObject | RxPDO21 mapping - 6th application object
1614.07h | COP_RxPDO21_Mapping_7ApplicationObject | RxPDO21 mapping - 7th application object
1614.08h | COP_RxPDO21_Mapping_8ApplicationObject | RxPDO21 mapping - 8th application object
1800.00h | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported | TxPDO1 communication parameter - highest sub-index supported
1800.01h | COP_TxPDO1_CommunicationParameter_CobId | TxPDO1 communication parameter - COB-ID used by TxPDO
1800.02h | COP_TxPDO1_CommunicationParameter_TransmissionType | TxPDO1 communication parameter - transmission type
1800.03h | COP_TxPDO1_CommunicationParameter_InhibitTime | TxPDO1 communication parameter - inhibit time
1801.00h | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported | TxPDO2 communication parameter - highest sub-index supported
1801.01h | COP_TxPDO2_CommunicationParameter_CobId | TxPDO2 communication parameter - COB-ID used by TxPDO
1801.02h | COP_TxPDO2_CommunicationParameter_TransmissionType | TxPDO2 communication parameter - transmission type
1801.03h | COP_TxPDO2_CommunicationParameter_InhibitTime | TxPDO2 communication parameter - inhibit time
1802.00h | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported | TxPDO3 communication parameter - highest sub-index supported
1802.01h | COP_TxPDO3_CommunicationParameter_CobId | TxPDO3 communication parameter - COB-ID used by TxPDO
1802.02h | COP_TxPDO3_CommunicationParameter_TransmissionType | TxPDO3 communication parameter - transmission type
1802.03h | COP_TxPDO3_CommunicationParameter_InhibitTime | TxPDO3 communication parameter - inhibit time
1803.00h | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported | TxPDO4 communication parameter - highest sub-index supported
1803.01h | COP_TxPDO4_CommunicationParameter_CobId | TxPDO4 communication parameter - COB-ID used by TxPDO
1803.02h | COP_TxPDO4_CommunicationParameter_TransmissionType | TxPDO4 communication parameter - transmission type
1803.03h | COP_TxPDO4_CommunicationParameter_InhibitTime | TxPDO4 communication parameter - inhibit time
1804.00h | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported | TxPDO5 communication parameter - highest sub-index supported
1804.01h | COP_TxPDO5_CommunicationParameter_CobId | TxPDO5 communication parameter - COB-ID used by TxPDO
1804.02h | COP_TxPDO5_CommunicationParameter_TransmissionType | TxPDO5 communication parameter - transmission type
1804.03h | COP_TxPDO5_CommunicationParameter_InhibitTime | TxPDO5 communication parameter - inhibit time
1805.00h | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported | TxPDO6 communication parameter - highest sub-index supported
1805.01h | COP_TxPDO6_CommunicationParameter_CobId | TxPDO6 communication parameter - COB-ID used by TxPDO
1805.02h | COP_TxPDO6_CommunicationParameter_TransmissionType | TxPDO6 communication parameter - transmission type
1805.03h | COP_TxPDO6_CommunicationParameter_InhibitTime | TxPDO6 communication parameter - inhibit time
1806.00h | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported | TxPDO7 communication parameter - highest sub-index supported
1806.01h | COP_TxPDO7_CommunicationParameter_CobId | TxPDO7 communication parameter - COB-ID used by TxPDO
1806.02h | COP_TxPDO7_CommunicationParameter_TransmissionType | TxPDO7 communication parameter - transmission type
1806.03h | COP_TxPDO7_CommunicationParameter_InhibitTime | TxPDO7 communication parameter - inhibit time
1814.00h | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported | TxPDO21 communication parameter - highest sub-index supported
1814.01h | COP_TxPDO21_CommunicationParameter_CobId | TxPDO21 communication parameter - COB-ID used by TxPDO
1814.02h | COP_TxPDO21_CommunicationParameter_TransmissionType | TxPDO21 communication parameter - transmission type
1814.03h | COP_TxPDO21_CommunicationParameter_InhibitTime | TxPDO21 communication parameter - inhibit time
1A00.00h | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects | TxPDO1 mapping - number of mapped application objects in TxPDO 1
1A00.01h | COP_TxPDO1_Mapping_1ApplicationObject | TxPDO1 mapping - 1st application object
1A00.02h | COP_TxPDO1_Mapping_2ApplicationObject | TxPDO1 mapping - 2nd application object
1A00.03h | COP_TxPDO1_Mapping_3ApplicationObject | TxPDO1 mapping - 3rd application object
1A00.04h | COP_TxPDO1_Mapping_4ApplicationObject | TxPDO1 mapping - 4th application object
1A00.05h | COP_TxPDO1_Mapping_5ApplicationObject | TxPDO1 mapping - 5th application object
1A00.06h | COP_TxPDO1_Mapping_6ApplicationObject | TxPDO1 mapping - 6th application object
1A00.07h | COP_TxPDO1_Mapping_7ApplicationObject | TxPDO1 mapping - 7th application object
1A00.08h | COP_TxPDO1_Mapping_8ApplicationObject | TxPDO1 mapping - 8th application object
1A01.00h | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects | TxPDO2 mapping - number of mapped application objects in TxPDO 2
1A01.01h | COP_TxPDO2_Mapping_1ApplicationObject | TxPDO2 mapping - 1st application object
1A01.02h | COP_TxPDO2_Mapping_2ApplicationObject | TxPDO2 mapping - 2nd application object
1A01.03h | COP_TxPDO2_Mapping_3ApplicationObject | TxPDO2 mapping - 3rd application object
1A01.04h | COP_TxPDO2_Mapping_4ApplicationObject | TxPDO2 mapping - 4th application object
1A01.05h | COP_TxPDO2_Mapping_5ApplicationObject | TxPDO2 mapping - 5th application object
1A01.06h | COP_TxPDO2_Mapping_6ApplicationObject | TxPDO2 mapping - 6th application object
1A01.07h | COP_TxPDO2_Mapping_7ApplicationObject | TxPDO2 mapping - 7th application object
1A01.08h | COP_TxPDO2_Mapping_8ApplicationObject | TxPDO2 mapping - 8th application object
1A02.00h | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects | TxPDO3 mapping - number of mapped application objects in TxPDO 3
1A02.01h | COP_TxPDO3_Mapping_1ApplicationObject | TxPDO3 mapping - 1st application object
1A02.02h | COP_TxPDO3_Mapping_2ApplicationObject | TxPDO3 mapping - 2nd application object
1A02.03h | COP_TxPDO3_Mapping_3ApplicationObject | TxPDO3 mapping - 3rd application object
1A02.04h | COP_TxPDO3_Mapping_4ApplicationObject | TxPDO3 mapping - 4th application object
1A02.05h | COP_TxPDO3_Mapping_5ApplicationObject | TxPDO3 mapping - 5th application object
1A02.06h | COP_TxPDO3_Mapping_6ApplicationObject | TxPDO3 mapping - 6th application object
1A02.07h | COP_TxPDO3_Mapping_7ApplicationObject | TxPDO3 mapping - 7th application object
1A02.08h | COP_TxPDO3_Mapping_8ApplicationObject | TxPDO3 mapping - 8th application object
1A03.00h | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects | TxPDO4 mapping - number of mapped application objects in TxPDO 4
1A03.01h | COP_TxPDO4_Mapping_1ApplicationObject | TxPDO4 mapping - 1st application object
1A03.02h | COP_TxPDO4_Mapping_2ApplicationObject | TxPDO4 mapping - 2nd application object
1A03.03h | COP_TxPDO4_Mapping_3ApplicationObject | TxPDO4 mapping - 3rd application object
1A03.04h | COP_TxPDO4_Mapping_4ApplicationObject | TxPDO4 mapping - 4th application object
1A03.05h | COP_TxPDO4_Mapping_5ApplicationObject | TxPDO4 mapping - 5th application object
1A03.06h | COP_TxPDO4_Mapping_6ApplicationObject | TxPDO4 mapping - 6th application object
1A03.07h | COP_TxPDO4_Mapping_7ApplicationObject | TxPDO4 mapping - 7th application object
1A03.08h | COP_TxPDO4_Mapping_8ApplicationObject | TxPDO4 mapping - 8th application object
1A04.00h | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects | TxPDO5 mapping - number of mapped application objects in TxPDO 5
1A04.01h | COP_TxPDO5_Mapping_1ApplicationObject | TxPDO5 mapping - 1st application object
1A04.02h | COP_TxPDO5_Mapping_2ApplicationObject | TxPDO5 mapping - 2nd application object
1A04.03h | COP_TxPDO5_Mapping_3ApplicationObject | TxPDO5 mapping - 3rd application object
1A04.04h | COP_TxPDO5_Mapping_4ApplicationObject | TxPDO5 mapping - 4th application object
1A04.05h | COP_TxPDO5_Mapping_5ApplicationObject | TxPDO5 mapping - 5th application object
1A04.06h | COP_TxPDO5_Mapping_6ApplicationObject | TxPDO5 mapping - 6th application object
1A04.07h | COP_TxPDO5_Mapping_7ApplicationObject | TxPDO5 mapping - 7th application object
1A04.08h | COP_TxPDO5_Mapping_8ApplicationObject | TxPDO5 mapping - 8th application object
1A05.00h | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects | TxPDO6 mapping - number of mapped application objects in TxPDO 6
1A05.01h | COP_TxPDO6_Mapping_1ApplicationObject | TxPDO6 mapping - 1st application object
1A05.02h | COP_TxPDO6_Mapping_2ApplicationObject | TxPDO6 mapping - 2nd application object
1A05.03h | COP_TxPDO6_Mapping_3ApplicationObject | TxPDO6 mapping - 3rd application object
1A05.04h | COP_TxPDO6_Mapping_4ApplicationObject | TxPDO6 mapping - 4th application object
1A05.05h | COP_TxPDO6_Mapping_5ApplicationObject | TxPDO6 mapping - 5th application object
1A05.06h | COP_TxPDO6_Mapping_6ApplicationObject | TxPDO6 mapping - 6th application object
1A05.07h | COP_TxPDO6_Mapping_7ApplicationObject | TxPDO6 mapping - 7th application object
1A05.08h | COP_TxPDO6_Mapping_8ApplicationObject | TxPDO6 mapping - 8th application object
1A06.00h | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects | TxPDO7 mapping - number of mapped application objects in TxPDO 7
1A06.01h | COP_TxPDO7_Mapping_1ApplicationObject | TxPDO7 mapping - 1st application object
1A06.02h | COP_TxPDO7_Mapping_2ApplicationObject | TxPDO7 mapping - 2nd application object
1A06.03h | COP_TxPDO7_Mapping_3ApplicationObject | TxPDO7 mapping - 3rd application object
1A06.04h | COP_TxPDO7_Mapping_4ApplicationObject | TxPDO7 mapping - 4th application object
1A06.05h | COP_TxPDO7_Mapping_5ApplicationObject | TxPDO7 mapping - 5th application object
1A06.06h | COP_TxPDO7_Mapping_6ApplicationObject | TxPDO7 mapping - 6th application object
1A06.07h | COP_TxPDO7_Mapping_7ApplicationObject | TxPDO7 mapping - 7th application object
1A06.08h | COP_TxPDO7_Mapping_8ApplicationObject | TxPDO7 mapping - 8th application object
1A14.00h | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects | TxPDO21 mapping - number of mapped application objects in TxPDO 21
1A14.01h | COP_TxPDO21_Mapping_1ApplicationObject | TxPDO21 mapping - 1st application object
1A14.02h | COP_TxPDO21_Mapping_2ApplicationObject | TxPDO21 mapping - 2nd application object
1A14.03h | COP_TxPDO21_Mapping_3ApplicationObject | TxPDO21 mapping - 3rd application object
1A14.04h | COP_TxPDO21_Mapping_4ApplicationObject | TxPDO21 mapping - 4th application object
1A14.05h | COP_TxPDO21_Mapping_5ApplicationObject | TxPDO21 mapping - 5th application object
1A14.06h | COP_TxPDO21_Mapping_6ApplicationObject | TxPDO21 mapping - 6th application object
1A14.07h | COP_TxPDO21_Mapping_7ApplicationObject | TxPDO21 mapping - 7th application object
1A14.08h | COP_TxPDO21_Mapping_8ApplicationObject | TxPDO21 mapping - 8th application object


1400.00h RxPDO1 communication parameter - highest sub-index supported

Name | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO1 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_CommunicationParameter_CobId, COP_RxPDO1_CommunicationParameter_TransmissionType, COP_RxPDO1_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-2 communication parameter

1401.00h | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported | RxPDO2 communication parameter - highest sub-index supported
1401.01h | COP_RxPDO2_CommunicationParameter_CobId | RxPDO2 communication parameter - COB-ID used by RxPDO 2
1401.02h | COP_RxPDO2_CommunicationParameter_TransmissionType | RxPDO2 communication parameter - transmission type
1401.03h | COP_RxPDO2_CommunicationParameter_InhibitTime | RxPDO2 communication parameter - inhibit time


1401.00h RxPDO2 communication parameter - highest sub-index supported

Name | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO2 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_CommunicationParameter_CobId, COP_RxPDO2_CommunicationParameter_TransmissionType, COP_RxPDO2_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1401.01h RxPDO2 communication parameter - COB-ID used by RxPDO 2

Name | COP_RxPDO2_CommunicationParameter_CobId
Designation | RxPDO2 communication parameter - COB-ID used by RxPDO 2
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 40000300h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported, COP_RxPDO2_CommunicationParameter_TransmissionType, COP_RxPDO2_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1401.02h RxPDO2 communication parameter - transmission type

Name | COP_RxPDO2_CommunicationParameter_TransmissionType
Designation | RxPDO2 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported, COP_RxPDO2_CommunicationParameter_CobId, COP_RxPDO2_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1401.03h RxPDO2 communication parameter - inhibit time

Name | COP_RxPDO2_CommunicationParameter_InhibitTime
Designation | RxPDO2 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported, COP_RxPDO2_CommunicationParameter_CobId, COP_RxPDO2_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-3 communication parameter

1402.00h | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported | RxPDO3 communication parameter - highest sub-index supported
1402.01h | COP_RxPDO3_CommunicationParameter_CobId | RxPDO3 communication parameter - COB-ID used by RxPDO 3
1402.02h | COP_RxPDO3_CommunicationParameter_TransmissionType | RxPDO3 communication parameter - transmission type
1402.03h | COP_RxPDO3_CommunicationParameter_InhibitTime | RxPDO3 communication parameter - inhibit time


1402.00h RxPDO3 communication parameter - highest sub-index supported

Name | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO3 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_CommunicationParameter_CobId, COP_RxPDO3_CommunicationParameter_TransmissionType, COP_RxPDO3_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1402.01h RxPDO3 communication parameter - COB-ID used by RxPDO 3

Name | COP_RxPDO3_CommunicationParameter_CobId
Designation | RxPDO3 communication parameter - COB-ID used by RxPDO 3
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 40000400h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported, COP_RxPDO3_CommunicationParameter_TransmissionType, COP_RxPDO3_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1402.02h RxPDO3 communication parameter - transmission type

Name | COP_RxPDO3_CommunicationParameter_TransmissionType
Designation | RxPDO3 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported, COP_RxPDO3_CommunicationParameter_CobId, COP_RxPDO3_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1402.03h RxPDO3 communication parameter - inhibit time

Name | COP_RxPDO3_CommunicationParameter_InhibitTime
Designation | RxPDO3 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported, COP_RxPDO3_CommunicationParameter_CobId, COP_RxPDO3_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-4 communication parameter

1403.00h | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported | RxPDO4 communication parameter - highest sub-index supported
1403.01h | COP_RxPDO4_CommunicationParameter_CobId | RxPDO4 communication parameter - COB-ID used by RxPDO 4
1403.02h | COP_RxPDO4_CommunicationParameter_TransmissionType | RxPDO4 communication parameter - transmission type
1403.03h | COP_RxPDO4_CommunicationParameter_InhibitTime | RxPDO4 communication parameter - inhibit time


1403.00h RxPDO4 communication parameter - highest sub-index supported

Name | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO4 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_CommunicationParameter_CobId, COP_RxPDO4_CommunicationParameter_TransmissionType, COP_RxPDO4_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1403.01h RxPDO4 communication parameter - COB-ID used by RxPDO 4

Name | COP_RxPDO4_CommunicationParameter_CobId
Designation | RxPDO4 communication parameter - COB-ID used by RxPDO 4
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 40000500h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported, COP_RxPDO4_CommunicationParameter_TransmissionType, COP_RxPDO4_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1403.02h RxPDO4 communication parameter - transmission type

Name | COP_RxPDO4_CommunicationParameter_TransmissionType
Designation | RxPDO4 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported, COP_RxPDO4_CommunicationParameter_CobId, COP_RxPDO4_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1403.03h RxPDO4 communication parameter - inhibit time

Name | COP_RxPDO4_CommunicationParameter_InhibitTime
Designation | RxPDO4 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported, COP_RxPDO4_CommunicationParameter_CobId, COP_RxPDO4_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-5 communication parameter

1404.00h | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported | RxPDO5 communication parameter - highest sub-index supported
1404.01h | COP_RxPDO5_CommunicationParameter_CobId | RxPDO5 communication parameter - COB-ID used by RxPDO 5
1404.02h | COP_RxPDO5_CommunicationParameter_TransmissionType | RxPDO5 communication parameter - transmission type
1404.03h | COP_RxPDO5_CommunicationParameter_InhibitTime | RxPDO5 communication parameter - inhibit time


1404.00h RxPDO5 communication parameter - highest sub-index supported

Name | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO5 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_CommunicationParameter_CobId, COP_RxPDO5_CommunicationParameter_TransmissionType, COP_RxPDO5_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1404.01h RxPDO5 communication parameter - COB-ID used by RxPDO 5

Name | COP_RxPDO5_CommunicationParameter_CobId
Designation | RxPDO5 communication parameter - COB-ID used by RxPDO 5
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | C0000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported, COP_RxPDO5_CommunicationParameter_TransmissionType, COP_RxPDO5_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1404.02h RxPDO5 communication parameter - transmission type

Name | COP_RxPDO5_CommunicationParameter_TransmissionType
Designation | RxPDO5 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported, COP_RxPDO5_CommunicationParameter_CobId, COP_RxPDO5_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1404.03h RxPDO5 communication parameter - inhibit time

Name | COP_RxPDO5_CommunicationParameter_InhibitTime
Designation | RxPDO5 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported, COP_RxPDO5_CommunicationParameter_CobId, COP_RxPDO5_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-6 communication parameter

1405.00h | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported | RxPDO6 communication parameter - highest sub-index supported
1405.01h | COP_RxPDO6_CommunicationParameter_CobId | RxPDO6 communication parameter - COB-ID used by RxPDO 6
1405.02h | COP_RxPDO6_CommunicationParameter_TransmissionType | RxPDO6 communication parameter - transmission type
1405.03h | COP_RxPDO6_CommunicationParameter_InhibitTime | RxPDO6 communication parameter - inhibit time


1405.00h RxPDO6 communication parameter - highest sub-index supported

Name | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO6 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_CommunicationParameter_CobId, COP_RxPDO6_CommunicationParameter_TransmissionType, COP_RxPDO6_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1405.01h RxPDO6 communication parameter - COB-ID used by RxPDO 6

Name | COP_RxPDO6_CommunicationParameter_CobId
Designation | RxPDO6 communication parameter - COB-ID used by RxPDO 6
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | C0000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported, COP_RxPDO6_CommunicationParameter_TransmissionType, COP_RxPDO6_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1405.02h RxPDO6 communication parameter - transmission type

Name | COP_RxPDO6_CommunicationParameter_TransmissionType
Designation | RxPDO6 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported, COP_RxPDO6_CommunicationParameter_CobId, COP_RxPDO6_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1405.03h RxPDO6 communication parameter - inhibit time

Name | COP_RxPDO6_CommunicationParameter_InhibitTime
Designation | RxPDO6 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported, COP_RxPDO6_CommunicationParameter_CobId, COP_RxPDO6_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-7 communication parameter

1406.00h | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported | RxPDO7 communication parameter - highest sub-index supported
1406.01h | COP_RxPDO7_CommunicationParameter_CobId | RxPDO7 communication parameter - COB-ID used by RxPDO 7
1406.02h | COP_RxPDO7_CommunicationParameter_TransmissionType | RxPDO7 communication parameter - transmission type
1406.03h | COP_RxPDO7_CommunicationParameter_InhibitTime | RxPDO7 communication parameter - inhibit time


1406.00h RxPDO7 communication parameter - highest sub-index supported

Name | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO7 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_CommunicationParameter_CobId, COP_RxPDO7_CommunicationParameter_TransmissionType, COP_RxPDO7_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1406.01h RxPDO7 communication parameter - COB-ID used by RxPDO 7

Name | COP_RxPDO7_CommunicationParameter_CobId
Designation | RxPDO7 communication parameter - COB-ID used by RxPDO 7
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | C0000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported, COP_RxPDO7_CommunicationParameter_TransmissionType, COP_RxPDO7_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1406.02h RxPDO7 communication parameter - transmission type

Name | COP_RxPDO7_CommunicationParameter_TransmissionType
Designation | RxPDO7 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported, COP_RxPDO7_CommunicationParameter_CobId, COP_RxPDO7_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1406.03h RxPDO7 communication parameter - inhibit time

Name | COP_RxPDO7_CommunicationParameter_InhibitTime
Designation | RxPDO7 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported, COP_RxPDO7_CommunicationParameter_CobId, COP_RxPDO7_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-21 communication parameter

1414.00h | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported | RxPDO21 communication parameter - highest sub-index supported
1414.01h | COP_RxPDO21_CommunicationParameter_CobId | RxPDO21 communication parameter - COB-ID used by RxPDO 21
1414.02h | COP_RxPDO21_CommunicationParameter_TransmissionType | RxPDO21 communication parameter - transmission type
1414.03h | COP_RxPDO21_CommunicationParameter_InhibitTime | RxPDO21 communication parameter - inhibit time


1414.00h RxPDO21 communication parameter - highest sub-index supported

Name | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported
Designation | RxPDO21 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_CommunicationParameter_CobId, COP_RxPDO21_CommunicationParameter_TransmissionType, COP_RxPDO21_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the RxPDO (see Figure and Table).

Structure of RxPDO COB-ID

Description of RxPDO COB-ID:

Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which RxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 RxPDOs, because each CANopen device has only default CAN-IDs for the first four RxPDOs in the generic pre-defined connection set. It is not allowed to change bit 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

Generic pre-defined connection set for RxPDO:
Index | Default value
1400h | CAN-ID: 200h + Node-ID frame: 0b RTR: 1b valid: 0b
1401h | CAN-ID: 300h + Node-ID frame: 0b RTR: 1b valid: 0b
1402h | CAN-ID: 400h + Node-ID frame: 0b RTR: 1b valid: 0b
1403h | CAN-ID: 500h + Node-ID frame: 0b RTR: 1b valid: 0b
1404h - 1406h and 1414h | CAN-ID: 000h frame: 0b RTR: 1b valid: 1b
Sub-index 02h defines the reception character of the RxPDO (see Table).

Description of RxPDO transmission type:

Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is received before the SYNC. The CANopen device will actuate the data with the reception of the next SYNC .
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will buffer the data first and will actuate the data with the reception of the next SYNC (see Figure). In case it is event-driven the CANopen device will actuate the data immediately.
  • Event-driven means that the PDO may be received at any time. The CANopen device will actuate the data immediately.

Bus synchronization and actuation

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1400h
  • PDO 2 - Index 1401h
  • PDO 3 - Index 1402h
  • PDO 4 - Index 1403h
  • PDO 5 - Index 1404h
  • PDO 6 - Index 1405h
  • PDO 7 - Index 1406h
  • PDO 8 - Index 1414h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1414.01h RxPDO21 communication parameter - COB-ID used by RxPDO 21

Name | COP_RxPDO21_CommunicationParameter_CobId
Designation | RxPDO21 communication parameter - COB-ID used by RxPDO 21
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | C0000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported, COP_RxPDO21_CommunicationParameter_TransmissionType, COP_RxPDO21_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1414.02h RxPDO21 communication parameter - transmission type

Name | COP_RxPDO21_CommunicationParameter_TransmissionType
Designation | RxPDO21 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported, COP_RxPDO21_CommunicationParameter_CobId, COP_RxPDO21_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the reception character of the RxPDO.

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1414.03h RxPDO21 communication parameter - inhibit time

Name | COP_RxPDO21_CommunicationParameter_InhibitTime
Designation | RxPDO21 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamRxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported, COP_RxPDO21_CommunicationParameter_CobId, COP_RxPDO21_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_RxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.00h RxPDO1 mapping - number of mapped application objects in RxPDO 1

Name | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO1 mapping - number of mapped application objects in RxPDO 1
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 01h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO1_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1600.01h RxPDO1 mapping - 1st application object

Name | COP_RxPDO1_Mapping_1ApplicationObject
Designation | RxPDO1 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 60400010h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-2 mapping

1601.00h | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects | RxPDO2 mapping - number of mapped application objects in RxPDO 2
1601.01h | COP_RxPDO2_Mapping_1ApplicationObject | RxPDO2 mapping - 1st application object
1601.02h | COP_RxPDO2_Mapping_2ApplicationObject | RxPDO2 mapping - 2nd application object
1601.03h | COP_RxPDO2_Mapping_3ApplicationObject | RxPDO2 mapping - 3rd application object
1601.04h | COP_RxPDO2_Mapping_4ApplicationObject | RxPDO2 mapping - 4th application object
1601.05h | COP_RxPDO2_Mapping_5ApplicationObject | RxPDO2 mapping - 5th application object
1601.06h | COP_RxPDO2_Mapping_6ApplicationObject | RxPDO2 mapping - 6th application object
1601.07h | COP_RxPDO2_Mapping_7ApplicationObject | RxPDO2 mapping - 7th application object
1601.08h | COP_RxPDO2_Mapping_8ApplicationObject | RxPDO2 mapping - 8th application object


1601.00h RxPDO2 mapping - number of mapped application objects in RxPDO 2

Name | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO2 mapping - number of mapped application objects in RxPDO 2
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO2_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.01h RxPDO2 mapping - 1st application object

Name | COP_RxPDO2_Mapping_1ApplicationObject
Designation | RxPDO2 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.02h RxPDO2 mapping - 2nd application object

Name | COP_RxPDO2_Mapping_2ApplicationObject
Designation | RxPDO2 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.03h RxPDO2 mapping - 3rd application object

Name | COP_RxPDO2_Mapping_3ApplicationObject
Designation | RxPDO2 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.04h RxPDO2 mapping - 4th application object

Name | COP_RxPDO2_Mapping_4ApplicationObject
Designation | RxPDO2 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.05h RxPDO2 mapping - 5th application object

Name | COP_RxPDO2_Mapping_5ApplicationObject
Designation | RxPDO2 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.06h RxPDO2 mapping - 6th application object

Name | COP_RxPDO2_Mapping_6ApplicationObject
Designation | RxPDO2 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.07h RxPDO2 mapping - 7th application object

Name | COP_RxPDO2_Mapping_7ApplicationObject
Designation | RxPDO2 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1601.08h RxPDO2 mapping - 8th application object

Name | COP_RxPDO2_Mapping_8ApplicationObject
Designation | RxPDO2 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-3 mapping

1602.00h | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects | RxPDO3 mapping - number of mapped application objects in RxPDO 3
1602.01h | COP_RxPDO3_Mapping_1ApplicationObject | RxPDO3 mapping - 1st application object
1602.02h | COP_RxPDO3_Mapping_2ApplicationObject | RxPDO3 mapping - 2nd application object
1602.03h | COP_RxPDO3_Mapping_3ApplicationObject | RxPDO3 mapping - 3rd application object
1602.04h | COP_RxPDO3_Mapping_4ApplicationObject | RxPDO3 mapping - 4th application object
1602.05h | COP_RxPDO3_Mapping_5ApplicationObject | RxPDO3 mapping - 5th application object
1602.06h | COP_RxPDO3_Mapping_6ApplicationObject | RxPDO3 mapping - 6th application object
1602.07h | COP_RxPDO3_Mapping_7ApplicationObject | RxPDO3 mapping - 7th application object
1602.08h | COP_RxPDO3_Mapping_8ApplicationObject | RxPDO3 mapping - 8th application object


1602.00h RxPDO3 mapping - number of mapped application objects in RxPDO 3

Name | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO3 mapping - number of mapped application objects in RxPDO 3
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO3_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.01h RxPDO3 mapping - 1st application object

Name | COP_RxPDO3_Mapping_1ApplicationObject
Designation | RxPDO3 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.02h RxPDO3 mapping - 2nd application object

Name | COP_RxPDO3_Mapping_2ApplicationObject
Designation | RxPDO3 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.03h RxPDO3 mapping - 3rd application object

Name | COP_RxPDO3_Mapping_3ApplicationObject
Designation | RxPDO3 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.04h RxPDO3 mapping - 4th application object

Name | COP_RxPDO3_Mapping_4ApplicationObject
Designation | RxPDO3 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.05h RxPDO3 mapping - 5th application object

Name | COP_RxPDO3_Mapping_5ApplicationObject
Designation | RxPDO3 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.06h RxPDO3 mapping - 6th application object

Name | COP_RxPDO3_Mapping_6ApplicationObject
Designation | RxPDO3 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.07h RxPDO3 mapping - 7th application object

Name | COP_RxPDO3_Mapping_7ApplicationObject
Designation | RxPDO3 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1602.08h RxPDO3 mapping - 8th application object

Name | COP_RxPDO3_Mapping_8ApplicationObject
Designation | RxPDO3 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-4 mapping

1603.00h | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects | RxPDO4 mapping - number of mapped application objects in RxPDO 4
1603.01h | COP_RxPDO4_Mapping_1ApplicationObject | RxPDO4 mapping - 1st application object
1603.02h | COP_RxPDO4_Mapping_2ApplicationObject | RxPDO4 mapping - 2nd application object
1603.03h | COP_RxPDO4_Mapping_3ApplicationObject | RxPDO4 mapping - 3rd application object
1603.04h | COP_RxPDO4_Mapping_4ApplicationObject | RxPDO4 mapping - 4th application object
1603.05h | COP_RxPDO4_Mapping_5ApplicationObject | RxPDO4 mapping - 5th application object
1603.06h | COP_RxPDO4_Mapping_6ApplicationObject | RxPDO4 mapping - 6th application object
1603.07h | COP_RxPDO4_Mapping_7ApplicationObject | RxPDO4 mapping - 7th application object
1603.08h | COP_RxPDO4_Mapping_8ApplicationObject | RxPDO4 mapping - 8th application object


1603.00h RxPDO4 mapping - number of mapped application objects in RxPDO 4

Name | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO4 mapping - number of mapped application objects in RxPDO 4
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO4_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.01h RxPDO4 mapping - 1st application object

Name | COP_RxPDO4_Mapping_1ApplicationObject
Designation | RxPDO4 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.02h RxPDO4 mapping - 2nd application object

Name | COP_RxPDO4_Mapping_2ApplicationObject
Designation | RxPDO4 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.03h RxPDO4 mapping - 3rd application object

Name | COP_RxPDO4_Mapping_3ApplicationObject
Designation | RxPDO4 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.04h RxPDO4 mapping - 4th application object

Name | COP_RxPDO4_Mapping_4ApplicationObject
Designation | RxPDO4 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.05h RxPDO4 mapping - 5th application object

Name | COP_RxPDO4_Mapping_5ApplicationObject
Designation | RxPDO4 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.06h RxPDO4 mapping - 6th application object

Name | COP_RxPDO4_Mapping_6ApplicationObject
Designation | RxPDO4 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.07h RxPDO4 mapping - 7th application object

Name | COP_RxPDO4_Mapping_7ApplicationObject
Designation | RxPDO4 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1603.08h RxPDO4 mapping - 8th application object

Name | COP_RxPDO4_Mapping_8ApplicationObject
Designation | RxPDO4 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-5 mapping

1604.00h | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects | RxPDO5 mapping - number of mapped application objects in RxPDO 5
1604.01h | COP_RxPDO5_Mapping_1ApplicationObject | RxPDO5 mapping - 1st application object
1604.02h | COP_RxPDO5_Mapping_2ApplicationObject | RxPDO5 mapping - 2nd application object
1604.03h | COP_RxPDO5_Mapping_3ApplicationObject | RxPDO5 mapping - 3rd application object
1604.04h | COP_RxPDO5_Mapping_4ApplicationObject | RxPDO5 mapping - 4th application object
1604.05h | COP_RxPDO5_Mapping_5ApplicationObject | RxPDO5 mapping - 5th application object
1604.06h | COP_RxPDO5_Mapping_6ApplicationObject | RxPDO5 mapping - 6th application object
1604.07h | COP_RxPDO5_Mapping_7ApplicationObject | RxPDO5 mapping - 7th application object
1604.08h | COP_RxPDO5_Mapping_8ApplicationObject | RxPDO5 mapping - 8th application object


1604.00h RxPDO5 mapping - number of mapped application objects in RxPDO 5

Name | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO5 mapping - number of mapped application objects in RxPDO 5
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO5_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.01h RxPDO5 mapping - 1st application object

Name | COP_RxPDO5_Mapping_1ApplicationObject
Designation | RxPDO5 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.02h RxPDO5 mapping - 2nd application object

Name | COP_RxPDO5_Mapping_2ApplicationObject
Designation | RxPDO5 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.03h RxPDO5 mapping - 3rd application object

Name | COP_RxPDO5_Mapping_3ApplicationObject
Designation | RxPDO5 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.04h RxPDO5 mapping - 4th application object

Name | COP_RxPDO5_Mapping_4ApplicationObject
Designation | RxPDO5 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.05h RxPDO5 mapping - 5th application object

Name | COP_RxPDO5_Mapping_5ApplicationObject
Designation | RxPDO5 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.06h RxPDO5 mapping - 6th application object

Name | COP_RxPDO5_Mapping_6ApplicationObject
Designation | RxPDO5 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.07h RxPDO5 mapping - 7th application object

Name | COP_RxPDO5_Mapping_7ApplicationObject
Designation | RxPDO5 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1604.08h RxPDO5 mapping - 8th application object

Name | COP_RxPDO5_Mapping_8ApplicationObject
Designation | RxPDO5 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-6 mapping

1605.00h | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects | RxPDO6 mapping - number of mapped application objects in RxPDO 6
1605.01h | COP_RxPDO6_Mapping_1ApplicationObject | RxPDO6 mapping - 1st application object
1605.02h | COP_RxPDO6_Mapping_2ApplicationObject | RxPDO6 mapping - 2nd application object
1605.03h | COP_RxPDO6_Mapping_3ApplicationObject | RxPDO6 mapping - 3rd application object
1605.04h | COP_RxPDO6_Mapping_4ApplicationObject | RxPDO6 mapping - 4th application object
1605.05h | COP_RxPDO6_Mapping_5ApplicationObject | RxPDO6 mapping - 5th application object
1605.06h | COP_RxPDO6_Mapping_6ApplicationObject | RxPDO6 mapping - 6th application object
1605.07h | COP_RxPDO6_Mapping_7ApplicationObject | RxPDO6 mapping - 7th application object
1605.08h | COP_RxPDO6_Mapping_8ApplicationObject | RxPDO6 mapping - 8th application object


1605.00h RxPDO6 mapping - number of mapped application objects in RxPDO 6

Name | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO6 mapping - number of mapped application objects in RxPDO 6
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO6_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.01h RxPDO6 mapping - 1st application object

Name | COP_RxPDO6_Mapping_1ApplicationObject
Designation | RxPDO6 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.02h RxPDO6 mapping - 2nd application object

Name | COP_RxPDO6_Mapping_2ApplicationObject
Designation | RxPDO6 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.03h RxPDO6 mapping - 3rd application object

Name | COP_RxPDO6_Mapping_3ApplicationObject
Designation | RxPDO6 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.04h RxPDO6 mapping - 4th application object

Name | COP_RxPDO6_Mapping_4ApplicationObject
Designation | RxPDO6 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.05h RxPDO6 mapping - 5th application object

Name | COP_RxPDO6_Mapping_5ApplicationObject
Designation | RxPDO6 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.06h RxPDO6 mapping - 6th application object

Name | COP_RxPDO6_Mapping_6ApplicationObject
Designation | RxPDO6 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.07h RxPDO6 mapping - 7th application object

Name | COP_RxPDO6_Mapping_7ApplicationObject
Designation | RxPDO6 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1605.08h RxPDO6 mapping - 8th application object

Name | COP_RxPDO6_Mapping_8ApplicationObject
Designation | RxPDO6 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-7 mapping

1606.00h | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects | RxPDO7 mapping - number of mapped application objects in RxPDO 7
1606.01h | COP_RxPDO7_Mapping_1ApplicationObject | RxPDO7 mapping - 1st application object
1606.02h | COP_RxPDO7_Mapping_2ApplicationObject | RxPDO7 mapping - 2nd application object
1606.03h | COP_RxPDO7_Mapping_3ApplicationObject | RxPDO7 mapping - 3rd application object
1606.04h | COP_RxPDO7_Mapping_4ApplicationObject | RxPDO7 mapping - 4th application object
1606.05h | COP_RxPDO7_Mapping_5ApplicationObject | RxPDO7 mapping - 5th application object
1606.06h | COP_RxPDO7_Mapping_6ApplicationObject | RxPDO7 mapping - 6th application object
1606.07h | COP_RxPDO7_Mapping_7ApplicationObject | RxPDO7 mapping - 7th application object
1606.08h | COP_RxPDO7_Mapping_8ApplicationObject | RxPDO7 mapping - 8th application object


1606.00h RxPDO7 mapping - number of mapped application objects in RxPDO 7

Name | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO7 mapping - number of mapped application objects in RxPDO 7
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO7_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.01h RxPDO7 mapping - 1st application object

Name | COP_RxPDO7_Mapping_1ApplicationObject
Designation | RxPDO7 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.02h RxPDO7 mapping - 2nd application object

Name | COP_RxPDO7_Mapping_2ApplicationObject
Designation | RxPDO7 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.03h RxPDO7 mapping - 3rd application object

Name | COP_RxPDO7_Mapping_3ApplicationObject
Designation | RxPDO7 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.04h RxPDO7 mapping - 4th application object

Name | COP_RxPDO7_Mapping_4ApplicationObject
Designation | RxPDO7 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.05h RxPDO7 mapping - 5th application object

Name | COP_RxPDO7_Mapping_5ApplicationObject
Designation | RxPDO7 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.06h RxPDO7 mapping - 6th application object

Name | COP_RxPDO7_Mapping_6ApplicationObject
Designation | RxPDO7 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.07h RxPDO7 mapping - 7th application object

Name | COP_RxPDO7_Mapping_7ApplicationObject
Designation | RxPDO7 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1606.08h RxPDO7 mapping - 8th application object

Name | COP_RxPDO7_Mapping_8ApplicationObject
Designation | RxPDO7 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - RxPDO-21 mapping

1614.00h | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects | RxPDO21 mapping - number of mapped application objects in RxPDO 21
1614.01h | COP_RxPDO21_Mapping_1ApplicationObject | RxPDO21 mapping - 1st application object
1614.02h | COP_RxPDO21_Mapping_2ApplicationObject | RxPDO21 mapping - 2nd application object
1614.03h | COP_RxPDO21_Mapping_3ApplicationObject | RxPDO21 mapping - 3rd application object
1614.04h | COP_RxPDO21_Mapping_4ApplicationObject | RxPDO21 mapping - 4th application object
1614.05h | COP_RxPDO21_Mapping_5ApplicationObject | RxPDO21 mapping - 5th application object
1614.06h | COP_RxPDO21_Mapping_6ApplicationObject | RxPDO21 mapping - 6th application object
1614.07h | COP_RxPDO21_Mapping_7ApplicationObject | RxPDO21 mapping - 7th application object
1614.08h | COP_RxPDO21_Mapping_8ApplicationObject | RxPDO21 mapping - 8th application object


1614.00h RxPDO21 mapping - number of mapped application objects in RxPDO 21

Name | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects
Designation | RxPDO21 mapping - number of mapped application objects in RxPDO 21
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingRxPdo(pdo_nr, mapp_list)
Cross reference | COP_RxPDO21_Mapping_1ApplicationObject

Description

This object contains the mapping parameters for the PDOs the CANopen device is able to receive.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are received with the corresponding RxPDO.

RxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid
Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of RxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:

1. Destroy RxPDO by setting bit exists to 1b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).
2. Disable mapping by setting sub-index 00h to 00h.
3. Modify mapping by changing the values of the corresponding sub-indices.
4. Enable mapping by setting sub-index 00h to the number of mapped objects.
5. Create RxPDO by setting bit exists to 0b of sub-index 01h of the according RxPDO communication parameter (COP_RxPDO1_CommunicationParameter_HighestSubindexSupported).

If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service (abort code: 0602 0000h or 0604 0041h).

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

If the CANopen device receives a PDO that is having more data bytes than the number of mapped data bytes is (length), then the CANopen device uses the first data bytes up to the length and is initiate the EMCY write service.

If a CANopen device receives a PDO that is having less data bytes than the number of mapped data bytes (length), then the CANopen device initiates the EMCY write service with the error code 8210h.

Principle of RxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1600h
  • PDO 2 - Index 1601h
  • PDO 3 - Index 1602h
  • PDO 4 - Index 1603h
  • PDO 5 - Index 1604h
  • PDO 6 - Index 1605h
  • PDO 7 - Index 1606h
  • PDO 8 - Index 1614h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.01h RxPDO21 mapping - 1st application object

Name | COP_RxPDO21_Mapping_1ApplicationObject
Designation | RxPDO21 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.02h RxPDO21 mapping - 2nd application object

Name | COP_RxPDO21_Mapping_2ApplicationObject
Designation | RxPDO21 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.03h RxPDO21 mapping - 3rd application object

Name | COP_RxPDO21_Mapping_3ApplicationObject
Designation | RxPDO21 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.04h RxPDO21 mapping - 4th application object

Name | COP_RxPDO21_Mapping_4ApplicationObject
Designation | RxPDO21 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.05h RxPDO21 mapping - 5th application object

Name | COP_RxPDO21_Mapping_5ApplicationObject
Designation | RxPDO21 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.06h RxPDO21 mapping - 6th application object

Name | COP_RxPDO21_Mapping_6ApplicationObject
Designation | RxPDO21 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.07h RxPDO21 mapping - 7th application object

Name | COP_RxPDO21_Mapping_7ApplicationObject
Designation | RxPDO21 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1614.08h RxPDO21 mapping - 8th application object

Name | COP_RxPDO21_Mapping_8ApplicationObject
Designation | RxPDO21 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1800.00h TxPDO1 communication parameter - highest sub-index supported

Name | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO1 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO1_CommunicationParameter_CobId, COP_TxPDO1_CommunicationParameter_TransmissionType, COP_TxPDO1_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-2 communication parameter

1801.00h | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported | TxPDO2 communication parameter - highest sub-index supported
1801.01h | COP_TxPDO2_CommunicationParameter_CobId | TxPDO2 communication parameter - COB-ID used by TxPDO
1801.02h | COP_TxPDO2_CommunicationParameter_TransmissionType | TxPDO2 communication parameter - transmission type
1801.03h | COP_TxPDO2_CommunicationParameter_InhibitTime | TxPDO2 communication parameter - inhibit time


1801.00h TxPDO2 communication parameter - highest sub-index supported

Name | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO2 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO2_CommunicationParameter_CobId, COP_TxPDO2_CommunicationParameter_TransmissionType, COP_TxPDO2_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1801.01h TxPDO2 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO2_CommunicationParameter_CobId
Designation | TxPDO2 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 280h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported, COP_TxPDO2_CommunicationParameter_TransmissionType, COP_TxPDO2_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1801.02h TxPDO2 communication parameter - transmission type

Name | COP_TxPDO2_CommunicationParameter_TransmissionType
Designation | TxPDO2 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported, COP_TxPDO2_CommunicationParameter_CobId, COP_TxPDO2_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1801.03h TxPDO2 communication parameter - inhibit time

Name | COP_TxPDO2_CommunicationParameter_InhibitTime
Designation | TxPDO2 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported, COP_TxPDO2_CommunicationParameter_CobId, COP_TxPDO2_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-3 communication parameter

1802.00h | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported | TxPDO3 communication parameter - highest sub-index supported
1802.01h | COP_TxPDO3_CommunicationParameter_CobId | TxPDO3 communication parameter - COB-ID used by TxPDO
1802.02h | COP_TxPDO3_CommunicationParameter_TransmissionType | TxPDO3 communication parameter - transmission type
1802.03h | COP_TxPDO3_CommunicationParameter_InhibitTime | TxPDO3 communication parameter - inhibit time


1802.00h TxPDO3 communication parameter - highest sub-index supported

Name | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO3 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO3_CommunicationParameter_CobId, COP_TxPDO3_CommunicationParameter_TransmissionType, COP_TxPDO3_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1802.01h TxPDO3 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO3_CommunicationParameter_CobId
Designation | TxPDO3 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 380h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported, COP_TxPDO3_CommunicationParameter_TransmissionType, COP_TxPDO3_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1802.02h TxPDO3 communication parameter - transmission type

Name | COP_TxPDO3_CommunicationParameter_TransmissionType
Designation | TxPDO3 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported, COP_TxPDO3_CommunicationParameter_CobId, COP_TxPDO3_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1802.03h TxPDO3 communication parameter - inhibit time

Name | COP_TxPDO3_CommunicationParameter_InhibitTime
Designation | TxPDO3 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported, COP_TxPDO3_CommunicationParameter_CobId, COP_TxPDO3_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-4 communication parameter

1803.00h | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported | TxPDO4 communication parameter - highest sub-index supported
1803.01h | COP_TxPDO4_CommunicationParameter_CobId | TxPDO4 communication parameter - COB-ID used by TxPDO
1803.02h | COP_TxPDO4_CommunicationParameter_TransmissionType | TxPDO4 communication parameter - transmission type
1803.03h | COP_TxPDO4_CommunicationParameter_InhibitTime | TxPDO4 communication parameter - inhibit time


1803.00h TxPDO4 communication parameter - highest sub-index supported

Name | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO4 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO4_CommunicationParameter_CobId, COP_TxPDO4_CommunicationParameter_TransmissionType, COP_TxPDO4_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1803.01h TxPDO4 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO4_CommunicationParameter_CobId
Designation | TxPDO4 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 480h + node id
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported, COP_TxPDO4_CommunicationParameter_TransmissionType, COP_TxPDO4_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1803.02h TxPDO4 communication parameter - transmission type

Name | COP_TxPDO4_CommunicationParameter_TransmissionType
Designation | TxPDO4 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported, COP_TxPDO4_CommunicationParameter_CobId, COP_TxPDO4_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1803.03h TxPDO4 communication parameter - inhibit time

Name | COP_TxPDO4_CommunicationParameter_InhibitTime
Designation | TxPDO4 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported, COP_TxPDO4_CommunicationParameter_CobId, COP_TxPDO4_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-5 communication parameter

1804.00h | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported | TxPDO5 communication parameter - highest sub-index supported
1804.01h | COP_TxPDO5_CommunicationParameter_CobId | TxPDO5 communication parameter - COB-ID used by TxPDO
1804.02h | COP_TxPDO5_CommunicationParameter_TransmissionType | TxPDO5 communication parameter - transmission type
1804.03h | COP_TxPDO5_CommunicationParameter_InhibitTime | TxPDO5 communication parameter - inhibit time


1804.00h TxPDO5 communication parameter - highest sub-index supported

Name | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO5 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO5_CommunicationParameter_CobId, COP_TxPDO5_CommunicationParameter_TransmissionType, COP_TxPDO5_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1804.01h TxPDO5 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO5_CommunicationParameter_CobId
Designation | TxPDO5 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 80000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported, COP_TxPDO5_CommunicationParameter_TransmissionType, COP_TxPDO5_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1804.02h TxPDO5 communication parameter - transmission type

Name | COP_TxPDO5_CommunicationParameter_TransmissionType
Designation | TxPDO5 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported, COP_TxPDO5_CommunicationParameter_CobId, COP_TxPDO5_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1804.03h TxPDO5 communication parameter - inhibit time

Name | COP_TxPDO5_CommunicationParameter_InhibitTime
Designation | TxPDO5 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported, COP_TxPDO5_CommunicationParameter_CobId, COP_TxPDO5_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-6 communication parameter

1805.00h | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported | TxPDO6 communication parameter - highest sub-index supported
1805.01h | COP_TxPDO6_CommunicationParameter_CobId | TxPDO6 communication parameter - COB-ID used by TxPDO
1805.02h | COP_TxPDO6_CommunicationParameter_TransmissionType | TxPDO6 communication parameter - transmission type
1805.03h | COP_TxPDO6_CommunicationParameter_InhibitTime | TxPDO6 communication parameter - inhibit time


1805.00h TxPDO6 communication parameter - highest sub-index supported

Name | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO6 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO6_CommunicationParameter_CobId, COP_TxPDO6_CommunicationParameter_TransmissionType, COP_TxPDO6_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1805.01h TxPDO6 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO6_CommunicationParameter_CobId
Designation | TxPDO6 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 80000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported, COP_TxPDO6_CommunicationParameter_TransmissionType, COP_TxPDO6_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1805.02h TxPDO6 communication parameter - transmission type

Name | COP_TxPDO6_CommunicationParameter_TransmissionType
Designation | TxPDO6 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported, COP_TxPDO6_CommunicationParameter_CobId, COP_TxPDO6_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1805.03h TxPDO6 communication parameter - inhibit time

Name | COP_TxPDO6_CommunicationParameter_InhibitTime
Designation | TxPDO6 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported, COP_TxPDO6_CommunicationParameter_CobId, COP_TxPDO6_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-7 communication parameter

1806.00h | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported | TxPDO7 communication parameter - highest sub-index supported
1806.01h | COP_TxPDO7_CommunicationParameter_CobId | TxPDO7 communication parameter - COB-ID used by TxPDO
1806.02h | COP_TxPDO7_CommunicationParameter_TransmissionType | TxPDO7 communication parameter - transmission type
1806.03h | COP_TxPDO7_CommunicationParameter_InhibitTime | TxPDO7 communication parameter - inhibit time


1806.00h TxPDO7 communication parameter - highest sub-index supported

Name | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO7 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO7_CommunicationParameter_CobId, COP_TxPDO7_CommunicationParameter_TransmissionType, COP_TxPDO7_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1806.01h TxPDO7 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO7_CommunicationParameter_CobId
Designation | TxPDO7 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 80000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported, COP_TxPDO7_CommunicationParameter_TransmissionType, COP_TxPDO7_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1806.02h TxPDO7 communication parameter - transmission type

Name | COP_TxPDO7_CommunicationParameter_TransmissionType
Designation | TxPDO7 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported, COP_TxPDO7_CommunicationParameter_CobId, COP_TxPDO7_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1806.03h TxPDO7 communication parameter - inhibit time

Name | COP_TxPDO7_CommunicationParameter_InhibitTime
Designation | TxPDO7 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported, COP_TxPDO7_CommunicationParameter_CobId, COP_TxPDO7_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-21 communication parameter

1814.00h | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported | TxPDO21 communication parameter - highest sub-index supported
1814.01h | COP_TxPDO21_CommunicationParameter_CobId | TxPDO21 communication parameter - COB-ID used by TxPDO
1814.02h | COP_TxPDO21_CommunicationParameter_TransmissionType | TxPDO21 communication parameter - transmission type
1814.03h | COP_TxPDO21_CommunicationParameter_InhibitTime | TxPDO21 communication parameter - inhibit time


1814.00h TxPDO21 communication parameter - highest sub-index supported

Name | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported
Designation | TxPDO21 communication parameter - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 03h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_TxPDO21_CommunicationParameter_CobId, COP_TxPDO21_CommunicationParameter_TransmissionType, COP_TxPDO21_CommunicationParameter_InhibitTime

Description

This object contains the communication parameters for the PDOs the CANopen device is able to transmit.

Sub-index 00h contains the number of valid object entries within the record.

Sub-index 01h contains the COB-ID of the TxPDO (see Figure and Table).

Structure of TxPDO COB-ID

Description of TxPDO COB-ID:
Bit(s) | Value | Description
valid | 0b 1b | PDO exists / is valid PDO does not exist / is not valid
RTR | 0b 1b | RTR allowed on this PDO no RTR allowed on this PDO
frame | 0b 1b | 11-bit CAN-ID valid (CAN base frame) 29-bit CAN-ID valid (CAN extended frame)
29-bit CAN-ID | x | 29-bit CAN-ID of the CAN extended frame
11-bit CAN-ID | x | 11-bit CAN-ID of the CAN base frame

The bit valid (bit 31) allows selecting which TxPDOs are used in the NMT state Operational. There may be PDOs fully configured (e.g. by default) but not used, and therefore set to "not valid" (deleted). The feature is necessary for CANopen devices supporting more than 4 TxPDOs, because each CANopen device has only default CAN-IDs for the first four TxPDOs in the generic pre-defined connection set. It is not allowed to change bit from 0 to 29 while the PDO exists and is valid (bit 31 = 0b).

If the CANopen device has implemented one or more device profiles the generic pre-defined connection set shall apply (see Table).

Generic pre-defined connection set for TxPDO:
Index | Default value
1800h | CAN-ID: 180h + Node-ID frame: 0b RTR: 0b valid: 0b
1801h | CAN-ID: 280h + Node-ID frame: 0b RTR: 0b valid: 0b
1802h | CAN-ID: 380h + Node-ID frame: 0b RTR: 0b valid: 0b
1803h | CAN-ID: 480h + Node-ID frame: 0b RTR: 0b valid: 0b
1804h - 1806h and 1814h | CAN-ID: 000h frame: 0b RTR: 0b valid: 1b
Sub-index 02h defines the transmission character of the TxPDO (see Table).

Description of TxPDO transmission type:
Value | Description
00h | synchronous (acyclic)
01h | synchronous (cyclic every sync)
02h | synchronous (cyclic every 2nd SYNC)
03h | synchronous (cyclic every 3rd SYNC)
04h | synchronous (cyclic every 4th SYNC)
::::: | :::::
F0h | synchronous (cyclic every 240th SYNC)
F1h | reserved
::::: | :::::
FBh | reserved
FCh | RTR-only (synchronous)
FDh | RTR-only (event-driven)
FEh | event-driven (manufacturer-specific)
FFh | event-driven (device profile and application profile specific)
  • Synchronous means that the PDO is transmitted after the SYNC. The CANopen device will start sampling of the data with the reception of the SYNC (see Figure). In case it is acyclic the CANopen device internal event is given and with the next SYNC the sampling is started and the PDO is transmitted afterwards. In case it is cyclic the sampling is started with the reception of every SYNC, every 2nd SYNC, every 3rd SYNC, and s.o. depending on the given value and the PDO is transmitted afterwards.
  • RTR-only means that the PDO is not transmitted normally it shall be requested via RTR. In case it is synchronous the CANopen device will start sampling with the reception of every SYNC and then will buffer the PDO (see Figure). In case it is event-driven the CANopen device will start sampling with the reception of the RTR and will transmit the PDO immediately.
  • Event-driven means that the PDO may be transmitted at any time based on the occurrence of a CANopen device internal event.
Bus synchronization and sampling

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

The device supports 8 PDOs:
  • PDO 1 - Index 1800h
  • PDO 2 - Index 1801h
  • PDO 3 - Index 1802h
  • PDO 4 - Index 1803h
  • PDO 5 - Index 1804h
  • PDO 6 - Index 1805h
  • PDO 7 - Index 1806h
  • PDO 8 - Index 1814h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1814.01h TxPDO21 communication parameter - COB-ID used by TxPDO

Name | COP_TxPDO21_CommunicationParameter_CobId
Designation | TxPDO21 communication parameter - COB-ID used by TxPDO
Data type | uint32
Access | read / write
Attributs | Save; Save on write
Value range | [00h .. FFFFFFFFh]
Default value | 80000000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_CobId(pdo_nr,cob_id)
Cross reference | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported, COP_TxPDO21_CommunicationParameter_TransmissionType, COP_TxPDO21_CommunicationParameter_InhibitTime

Description

Sub-index 01h contains the COB-ID of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1814.02h TxPDO21 communication parameter - transmission type

Name | COP_TxPDO21_CommunicationParameter_TransmissionType
Designation | TxPDO21 communication parameter - transmission type
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_TransmissionType(pdo_nr,type)
Cross reference | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported, COP_TxPDO21_CommunicationParameter_CobId, COP_TxPDO21_CommunicationParameter_InhibitTime

Description

Sub-index 02h defines the transmission character of the TxPDO.

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1814.03h TxPDO21 communication parameter - inhibit time

Name | COP_TxPDO21_CommunicationParameter_InhibitTime
Designation | TxPDO21 communication parameter - inhibit time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [100us]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ParamTxPdo_InhibitTime(pdo_nr,t_ms)
Cross reference | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported, COP_TxPDO21_CommunicationParameter_CobId, COP_TxPDO21_CommunicationParameter_TransmissionType

Description

Sub-index 03h contains the inhibit time. The time is the minimum interval for PDO transmission if the transmission type is set to FEh and FFh. The value is defined as multiple of 100 μs. The value of 0 disables the inhibit time. It is not allowed to change the value while the PDO exists (bit 31 of sub-index 01h is set to 0b).

See also parameter COP_TxPDO1_CommunicationParameter_HighestSubindexSupported.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.00h TxPDO1 mapping - number of mapped application objects in TxPDO 1

Name | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO1 mapping - number of mapped application objects in TxPDO 1
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 01h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A00.01h TxPDO1 mapping - 1st application object

Name | COP_TxPDO1_Mapping_1ApplicationObject
Designation | TxPDO1 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 60410010h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-2 mapping

1A01.00h | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects | TxPDO2 mapping - number of mapped application objects in TxPDO 2
1A01.01h | COP_TxPDO2_Mapping_1ApplicationObject | TxPDO2 mapping - 1st application object
1A01.02h | COP_TxPDO2_Mapping_2ApplicationObject | TxPDO2 mapping - 2nd application object
1A01.03h | COP_TxPDO2_Mapping_3ApplicationObject | TxPDO2 mapping - 3rd application object
1A01.04h | COP_TxPDO2_Mapping_4ApplicationObject | TxPDO2 mapping - 4th application object
1A01.05h | COP_TxPDO2_Mapping_5ApplicationObject | TxPDO2 mapping - 5th application object
1A01.06h | COP_TxPDO2_Mapping_6ApplicationObject | TxPDO2 mapping - 6th application object
1A01.07h | COP_TxPDO2_Mapping_7ApplicationObject | TxPDO2 mapping - 7th application object
1A01.08h | COP_TxPDO2_Mapping_8ApplicationObject | TxPDO2 mapping - 8th application object


1A01.00h TxPDO2 mapping - number of mapped application objects in TxPDO 2

Name | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO2 mapping - number of mapped application objects in TxPDO 2
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.01h TxPDO2 mapping - 1st application object

Name | COP_TxPDO2_Mapping_1ApplicationObject
Designation | TxPDO2 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.02h TxPDO2 mapping - 2nd application object

Name | COP_TxPDO2_Mapping_2ApplicationObject
Designation | TxPDO2 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.03h TxPDO2 mapping - 3rd application object

Name | COP_TxPDO2_Mapping_3ApplicationObject
Designation | TxPDO2 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.04h TxPDO2 mapping - 4th application object

Name | COP_TxPDO2_Mapping_4ApplicationObject
Designation | TxPDO2 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.05h TxPDO2 mapping - 5th application object

Name | COP_TxPDO2_Mapping_5ApplicationObject
Designation | TxPDO2 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.06h TxPDO2 mapping - 6th application object

Name | COP_TxPDO2_Mapping_6ApplicationObject
Designation | TxPDO2 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.07h TxPDO2 mapping - 7th application object

Name | COP_TxPDO2_Mapping_7ApplicationObject
Designation | TxPDO2 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A01.08h TxPDO2 mapping - 8th application object

Name | COP_TxPDO2_Mapping_8ApplicationObject
Designation | TxPDO2 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-3 mapping

1A02.00h | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects | TxPDO3 mapping - number of mapped application objects in TxPDO 3
1A02.01h | COP_TxPDO3_Mapping_1ApplicationObject | TxPDO3 mapping - 1st application object
1A02.02h | COP_TxPDO3_Mapping_2ApplicationObject | TxPDO3 mapping - 2nd application object
1A02.03h | COP_TxPDO3_Mapping_3ApplicationObject | TxPDO3 mapping - 3rd application object
1A02.04h | COP_TxPDO3_Mapping_4ApplicationObject | TxPDO3 mapping - 4th application object
1A02.05h | COP_TxPDO3_Mapping_5ApplicationObject | TxPDO3 mapping - 5th application object
1A02.06h | COP_TxPDO3_Mapping_6ApplicationObject | TxPDO3 mapping - 6th application object
1A02.07h | COP_TxPDO3_Mapping_7ApplicationObject | TxPDO3 mapping - 7th application object
1A02.08h | COP_TxPDO3_Mapping_8ApplicationObject | TxPDO3 mapping - 8th application object


1A02.00h TxPDO3 mapping - number of mapped application objects in TxPDO 3

Name | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO3 mapping - number of mapped application objects in TxPDO 3
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.01h TxPDO3 mapping - 1st application object

Name | COP_TxPDO3_Mapping_1ApplicationObject
Designation | TxPDO3 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.02h TxPDO3 mapping - 2nd application object

Name | COP_TxPDO3_Mapping_2ApplicationObject
Designation | TxPDO3 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.03h TxPDO3 mapping - 3rd application object

Name | COP_TxPDO3_Mapping_3ApplicationObject
Designation | TxPDO3 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.04h TxPDO3 mapping - 4th application object

Name | COP_TxPDO3_Mapping_4ApplicationObject
Designation | TxPDO3 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.05h TxPDO3 mapping - 5th application object

Name | COP_TxPDO3_Mapping_5ApplicationObject
Designation | TxPDO3 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.06h TxPDO3 mapping - 6th application object

Name | COP_TxPDO3_Mapping_6ApplicationObject
Designation | TxPDO3 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.07h TxPDO3 mapping - 7th application object

Name | COP_TxPDO3_Mapping_7ApplicationObject
Designation | TxPDO3 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A02.08h TxPDO3 mapping - 8th application object

Name | COP_TxPDO3_Mapping_8ApplicationObject
Designation | TxPDO3 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-4 mapping

1A03.00h | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects | TxPDO4 mapping - number of mapped application objects in TxPDO 4
1A03.01h | COP_TxPDO4_Mapping_1ApplicationObject | TxPDO4 mapping - 1st application object
1A03.02h | COP_TxPDO4_Mapping_2ApplicationObject | TxPDO4 mapping - 2nd application object
1A03.03h | COP_TxPDO4_Mapping_3ApplicationObject | TxPDO4 mapping - 3rd application object
1A03.04h | COP_TxPDO4_Mapping_4ApplicationObject | TxPDO4 mapping - 4th application object
1A03.05h | COP_TxPDO4_Mapping_5ApplicationObject | TxPDO4 mapping - 5th application object
1A03.06h | COP_TxPDO4_Mapping_6ApplicationObject | TxPDO4 mapping - 6th application object
1A03.07h | COP_TxPDO4_Mapping_7ApplicationObject | TxPDO4 mapping - 7th application object
1A03.08h | COP_TxPDO4_Mapping_8ApplicationObject | TxPDO4 mapping - 8th application object


1A03.00h TxPDO4 mapping - number of mapped application objects in TxPDO 4

Name | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO4 mapping - number of mapped application objects in TxPDO 4
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.01h TxPDO4 mapping - 1st application object

Name | COP_TxPDO4_Mapping_1ApplicationObject
Designation | TxPDO4 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.02h TxPDO4 mapping - 2nd application object

Name | COP_TxPDO4_Mapping_2ApplicationObject
Designation | TxPDO4 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.03h TxPDO4 mapping - 3rd application object

Name | COP_TxPDO4_Mapping_3ApplicationObject
Designation | TxPDO4 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.04h TxPDO4 mapping - 4th application object

Name | COP_TxPDO4_Mapping_4ApplicationObject
Designation | TxPDO4 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.05h TxPDO4 mapping - 5th application object

Name | COP_TxPDO4_Mapping_5ApplicationObject
Designation | TxPDO4 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.06h TxPDO4 mapping - 6th application object

Name | COP_TxPDO4_Mapping_6ApplicationObject
Designation | TxPDO4 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.07h TxPDO4 mapping - 7th application object

Name | COP_TxPDO4_Mapping_7ApplicationObject
Designation | TxPDO4 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A03.08h TxPDO4 mapping - 8th application object

Name | COP_TxPDO4_Mapping_8ApplicationObject
Designation | TxPDO4 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-5 mapping

1A04.00h | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects | TxPDO5 mapping - number of mapped application objects in TxPDO 5
1A04.01h | COP_TxPDO5_Mapping_1ApplicationObject | TxPDO5 mapping - 1st application object
1A04.02h | COP_TxPDO5_Mapping_2ApplicationObject | TxPDO5 mapping - 2nd application object
1A04.03h | COP_TxPDO5_Mapping_3ApplicationObject | TxPDO5 mapping - 3rd application object
1A04.04h | COP_TxPDO5_Mapping_4ApplicationObject | TxPDO5 mapping - 4th application object
1A04.05h | COP_TxPDO5_Mapping_5ApplicationObject | TxPDO5 mapping - 5th application object
1A04.06h | COP_TxPDO5_Mapping_6ApplicationObject | TxPDO5 mapping - 6th application object
1A04.07h | COP_TxPDO5_Mapping_7ApplicationObject | TxPDO5 mapping - 7th application object
1A04.08h | COP_TxPDO5_Mapping_8ApplicationObject | TxPDO5 mapping - 8th application object


1A04.00h TxPDO5 mapping - number of mapped application objects in TxPDO 5

Name | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO5 mapping - number of mapped application objects in TxPDO 5
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.01h TxPDO5 mapping - 1st application object

Name | COP_TxPDO5_Mapping_1ApplicationObject
Designation | TxPDO5 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.02h TxPDO5 mapping - 2nd application object

Name | COP_TxPDO5_Mapping_2ApplicationObject
Designation | TxPDO5 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.03h TxPDO5 mapping - 3rd application object

Name | COP_TxPDO5_Mapping_3ApplicationObject
Designation | TxPDO5 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.04h TxPDO5 mapping - 4th application object

Name | COP_TxPDO5_Mapping_4ApplicationObject
Designation | TxPDO5 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.05h TxPDO5 mapping - 5th application object

Name | COP_TxPDO5_Mapping_5ApplicationObject
Designation | TxPDO5 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.06h TxPDO5 mapping - 6th application object

Name | COP_TxPDO5_Mapping_6ApplicationObject
Designation | TxPDO5 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.07h TxPDO5 mapping - 7th application object

Name | COP_TxPDO5_Mapping_7ApplicationObject
Designation | TxPDO5 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A04.08h TxPDO5 mapping - 8th application object

Name | COP_TxPDO5_Mapping_8ApplicationObject
Designation | TxPDO5 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-6 mapping

1A05.00h | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects | TxPDO6 mapping - number of mapped application objects in TxPDO 6
1A05.01h | COP_TxPDO6_Mapping_1ApplicationObject | TxPDO6 mapping - 1st application object
1A05.02h | COP_TxPDO6_Mapping_2ApplicationObject | TxPDO6 mapping - 2nd application object
1A05.03h | COP_TxPDO6_Mapping_3ApplicationObject | TxPDO6 mapping - 3rd application object
1A05.04h | COP_TxPDO6_Mapping_4ApplicationObject | TxPDO6 mapping - 4th application object
1A05.05h | COP_TxPDO6_Mapping_5ApplicationObject | TxPDO6 mapping - 5th application object
1A05.06h | COP_TxPDO6_Mapping_6ApplicationObject | TxPDO6 mapping - 6th application object
1A05.07h | COP_TxPDO6_Mapping_7ApplicationObject | TxPDO6 mapping - 7th application object
1A05.08h | COP_TxPDO6_Mapping_8ApplicationObject | TxPDO6 mapping - 8th application object


1A05.00h TxPDO6 mapping - number of mapped application objects in TxPDO 6

Name | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO6 mapping - number of mapped application objects in TxPDO 6
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.01h TxPDO6 mapping - 1st application object

Name | COP_TxPDO6_Mapping_1ApplicationObject
Designation | TxPDO6 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.02h TxPDO6 mapping - 2nd application object

Name | COP_TxPDO6_Mapping_2ApplicationObject
Designation | TxPDO6 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.03h TxPDO6 mapping - 3rd application object

Name | COP_TxPDO6_Mapping_3ApplicationObject
Designation | TxPDO6 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.04h TxPDO6 mapping - 4th application object

Name | COP_TxPDO6_Mapping_4ApplicationObject
Designation | TxPDO6 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.05h TxPDO6 mapping - 5th application object

Name | COP_TxPDO6_Mapping_5ApplicationObject
Designation | TxPDO6 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.06h TxPDO6 mapping - 6th application object

Name | COP_TxPDO6_Mapping_6ApplicationObject
Designation | TxPDO6 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.07h TxPDO6 mapping - 7th application object

Name | COP_TxPDO6_Mapping_7ApplicationObject
Designation | TxPDO6 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A05.08h TxPDO6 mapping - 8th application object

Name | COP_TxPDO6_Mapping_8ApplicationObject
Designation | TxPDO6 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-7 mapping

1A06.00h | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects | TxPDO7 mapping - number of mapped application objects in TxPDO 7
1A06.01h | COP_TxPDO7_Mapping_1ApplicationObject | TxPDO7 mapping - 1st application object
1A06.02h | COP_TxPDO7_Mapping_2ApplicationObject | TxPDO7 mapping - 2nd application object
1A06.03h | COP_TxPDO7_Mapping_3ApplicationObject | TxPDO7 mapping - 3rd application object
1A06.04h | COP_TxPDO7_Mapping_4ApplicationObject | TxPDO7 mapping - 4th application object
1A06.05h | COP_TxPDO7_Mapping_5ApplicationObject | TxPDO7 mapping - 5th application object
1A06.06h | COP_TxPDO7_Mapping_6ApplicationObject | TxPDO7 mapping - 6th application object
1A06.07h | COP_TxPDO7_Mapping_7ApplicationObject | TxPDO7 mapping - 7th application object
1A06.08h | COP_TxPDO7_Mapping_8ApplicationObject | TxPDO7 mapping - 8th application object


1A06.00h TxPDO7 mapping - number of mapped application objects in TxPDO 7

Name | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO7 mapping - number of mapped application objects in TxPDO 7
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.01h TxPDO7 mapping - 1st application object

Name | COP_TxPDO7_Mapping_1ApplicationObject
Designation | TxPDO7 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.02h TxPDO7 mapping - 2nd application object

Name | COP_TxPDO7_Mapping_2ApplicationObject
Designation | TxPDO7 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.03h TxPDO7 mapping - 3rd application object

Name | COP_TxPDO7_Mapping_3ApplicationObject
Designation | TxPDO7 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.04h TxPDO7 mapping - 4th application object

Name | COP_TxPDO7_Mapping_4ApplicationObject
Designation | TxPDO7 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.05h TxPDO7 mapping - 5th application object

Name | COP_TxPDO7_Mapping_5ApplicationObject
Designation | TxPDO7 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.06h TxPDO7 mapping - 6th application object

Name | COP_TxPDO7_Mapping_6ApplicationObject
Designation | TxPDO7 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.07h TxPDO7 mapping - 7th application object

Name | COP_TxPDO7_Mapping_7ApplicationObject
Designation | TxPDO7 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A06.08h TxPDO7 mapping - 8th application object

Name | COP_TxPDO7_Mapping_8ApplicationObject
Designation | TxPDO7 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 1000h (DS301) - TxPDO-21 mapping

1A14.00h | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects | TxPDO21 mapping - number of mapped application objects in TxPDO 21
1A14.01h | COP_TxPDO21_Mapping_1ApplicationObject | TxPDO21 mapping - 1st application object
1A14.02h | COP_TxPDO21_Mapping_2ApplicationObject | TxPDO21 mapping - 2nd application object
1A14.03h | COP_TxPDO21_Mapping_3ApplicationObject | TxPDO21 mapping - 3rd application object
1A14.04h | COP_TxPDO21_Mapping_4ApplicationObject | TxPDO21 mapping - 4th application object
1A14.05h | COP_TxPDO21_Mapping_5ApplicationObject | TxPDO21 mapping - 5th application object
1A14.06h | COP_TxPDO21_Mapping_6ApplicationObject | TxPDO21 mapping - 6th application object
1A14.07h | COP_TxPDO21_Mapping_7ApplicationObject | TxPDO21 mapping - 7th application object
1A14.08h | COP_TxPDO21_Mapping_8ApplicationObject | TxPDO21 mapping - 8th application object


1A14.00h TxPDO21 mapping - number of mapped application objects in TxPDO 21

Name | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects
Designation | TxPDO21 mapping - number of mapped application objects in TxPDO 21
Data type | uint8
Access | read / write
Attributs | Save
Value range | [00h .. 08h]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_1ApplicationObject

Description

This object contains the mapping for the PDOs the device is able to transmit.

Sub-index 00h contains the number of valid object entries within the mapping record or a specific value (see Table). The number of valid object entries is the number of the application objects that are transmitted with the corresponding TxPDO.

TxPDO mapping values:

Value | Description
00h | Mapping disabled
01h | Sub-index 01h valid
02h | Sub-index 01h and 02h valid
03h | Sub-index from 01h to 03h valid
04h | Sub-index from 01h to 04h valid
::::: | :::::
08h | Sub-index from 01h to 08h valid

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length (see Figures). The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

Structure of TxPDO mapping

An attempt to change the value of an object entry to any value that is not supported is responded with the SDO abort transfer service. The cause for a not supported value could be the mapping (index and sub-index) of a non-existing application object, a wrong length for the mapped application object, or a wrong length for the PDO at all.

The following procedure is used for re-mapping, which may take place during the NMT state Pre-operational and during the NMT state Operational:
  1. Destroy TxPDO by setting bit exists to 1b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
  2. Disable mapping by setting sub-index 00h to 00h.
  3. Modify mapping by changing the values of the corresponding sub-indices.
  4. Enable mapping by setting sub-index 00h to the number mapped objects.
  5. Create TxPDO by setting bit exists to 0b of sub-index 01h of the according TxPDO communication parameter (COP_TxPDO1_CommunicationParameter_HighestSubindexSupported).
If during step 3 the CANopen device detects that index and sub-index of the mapped object does not exist or the object cannot be mapped the CANopen device responds with the SDO abort transfer service.

If during step 4 the CANopen device detects that the RxPDO mapping is not valid or not possible the CANopen device responds with the SDO abort transfer service.

Principle of TxPDO mapping

The device supports 8 PDOs:
  • PDO 1 - Index 1A00h
  • PDO 2 - Index 1A01h
  • PDO 3 - Index 1A02h
  • PDO 4 - Index 1A03h
  • PDO 5 - Index 1A04h
  • PDO 6 - Index 1A05h
  • PDO 7 - Index 1A06h
  • PDO 8 - Index 1A14h

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.01h TxPDO21 mapping - 1st application object

Name | COP_TxPDO21_Mapping_1ApplicationObject
Designation | TxPDO21 mapping - 1st application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.02h TxPDO21 mapping - 2nd application object

Name | COP_TxPDO21_Mapping_2ApplicationObject
Designation | TxPDO21 mapping - 2nd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.03h TxPDO21 mapping - 3rd application object

Name | COP_TxPDO21_Mapping_3ApplicationObject
Designation | TxPDO21 mapping - 3rd application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.04h TxPDO21 mapping - 4th application object

Name | COP_TxPDO21_Mapping_4ApplicationObject
Designation | TxPDO21 mapping - 4th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.05h TxPDO21 mapping - 5th application object

Name | COP_TxPDO21_Mapping_5ApplicationObject
Designation | TxPDO21 mapping - 5th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.06h TxPDO21 mapping - 6th application object

Name | COP_TxPDO21_Mapping_6ApplicationObject
Designation | TxPDO21 mapping - 6th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.07h TxPDO21 mapping - 7th application object

Name | COP_TxPDO21_Mapping_7ApplicationObject
Designation | TxPDO21 mapping - 7th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


1A14.08h TxPDO21 mapping - 8th application object

Name | COP_TxPDO21_Mapping_8ApplicationObject
Designation | TxPDO21 mapping - 8th application object
Data type | uint32
Access | read / write
Attributs | Save
Value range | [00h .. FFFFFFFFh]
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MappingTxPdo(pdo_nr, mapp_list)
Cross reference | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects

Description

Sub-index from 01h to 08h contains the information of the mapped application objects. The object describes the content of the PDO by their index, sub-index and length. The length contains the length of the application object in bit. The device supports only following lengths: 8,16,32 bits.

See also parameter COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import mc

d = Dsa(1)                 # NodeId = 1

pdo = 1                    # PDO-Number [1..7, 21]

print "------"
print "RxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1400+(pdo-1),0x01))
print "TxPdo%d_CobId            = 0x%04X" % (pdo,d.SdoRd(0x1800+(pdo-1),0x01))

print "RxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1400+(pdo-1),0x02))
print "TxPdo%d_TransmissionType = 0x%x"   % (pdo,d.SdoRd(0x1800+(pdo-1),0x02))

print "RxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1400+(pdo-1),0x03)/10)
print "TxPdo%d_InhibitTime      = %d"     % (pdo,d.SdoRd(0x1800+(pdo-1),0x03)/10)

print "MappingRxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1600+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1600+(pdo-1),subindex))

print "MappingTxPdo%d:"                   % (pdo)
for subindex in xrange(1,d.SdoRd(0x1A00+(pdo-1),0x00)+1):
   print "   - 0x%X" % (d.SdoRd(0x1A00+(pdo-1),subindex))

#  Set mapping of RxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits        8Bits                 32Bits                 8Bits MSB

d.SdoWr(0x1600,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1600,0x01, 0x30002010)       # object 0: Device command - data 0 (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x20)
#                      index (0x3000)

d.SdoWr(0x1600,0x02, 0x30001208)       # object 1: Device command - data 2 (1 byte)
d.SdoWr(0x1600,0x03, 0x30001120)       # object 2: Device command - data 1 (4 bytes)
d.SdoWr(0x1600,0x04, 0x30000108)       # object 3: Device command - execute on change (1 byte)
d.SdoWr(0x1600,0x00, 0x04)             # Enable mapping with 4 objects

#  Set mapping of TxPDO1.
#
#  PDO Byte-configuration:
#
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
#  +--------+--------+--------+--------+--------+--------+--------+--------+
#  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
#  +--------+--------+--------+--------+--------+--------+--------+--------+
# LSB    16Bits            16Bits                     32Bits              MSB

d.SdoWr(0x1A00,0x00, 0x00)             # Disable mapping
d.SdoWr(0x1A00,0x01, 0x30020010)       # object 0: Status register (2 bytes)
#                      |   | |
#                      |   | length in bits (only 0x08,0x10,0x20 possible) (0x10)
#                      |   subindex (0x00)
#                      index (0x3002)

d.SdoWr(0x1A00,0x02, 0x30010010)       # object 1: Error register (2 bytes)
d.SdoWr(0x1A00,0x03, 0x30007020)       # object 2: Device command - result 0 (4 bytes)
d.SdoWr(0x1A00,0x00, 0x03)             # Enable mapping with 3 objects

mc.Can.PdoWr(0, [ 1, 1])               # StartNode - switch device in Operational-State (PDO active)


Content - Parameters 2000h

2000.00h | DS2000_CopConfigParam_HighestSubindexSupported | CANopen configuration - highest sub-index supported
2000.01h | DS2000_CopConfigParam_WriteEnable | CANopen configuration - write enable
2000.02h | DS2000_CopConfigParam_UserNodeId | CANopen configuration - user node id
2000.03h | DS2000_CopConfigParam_UserBaudrate | CANopen configuration - user baud rate
2000.04h | DS2000_CopConfigParam_AutoOperational | CANopen configuration - auto operational
2000.05h | DS2000_CopConfigParam_MessageOnBootup | CANopen configuration - message on bootup
2000.07h | DS2000_CopConfigParam_ProfibusSlaveNr | CANopen configuration - PROFIBUS slave number
2002.00h | DS2000_DS402ConfigParam_HighestSubindexSupported | DS402 configuration - highest sub-index supported
2002.01h | DS2000_DS402ConfigParam_WriteEnable | DS402 configuration - write enable
2002.02h | DS2000_DS402ConfigParam_DS402Activation | DS402 configuration - DS402 Activation
2009.00h | DS2000_CpuCommand_HighestSubindexSupported | CPU command - highest sub-index supported
2009.01h | DS2000_CpuCommand_WriteEnable | CPU command - write enable
2009.02h | DS2000_CpuCommand_Command | CPU command - command
2009.03h | DS2000_CpuCommand_DelayTime | CPU command - delay time
2011.00h | DS2000_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
2011.01h | DS2000_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
2011.02h | DS2000_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
2011.03h | DS2000_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
2011.05h | DS2000_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
2011.06h | DS2000_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
2021.00h | DS2000_SyncProducer_HighestSubindexSupported | Sync Producer - highest sub-index supported
2021.01h | DS2000_SyncProducer_Enable | Sync Producer - Enable


Content - Parameters 2000h - CANopen configuration

2000.00h | DS2000_CopConfigParam_HighestSubindexSupported | CANopen configuration - highest sub-index supported
2000.01h | DS2000_CopConfigParam_WriteEnable | CANopen configuration - write enable
2000.02h | DS2000_CopConfigParam_UserNodeId | CANopen configuration - user node id
2000.03h | DS2000_CopConfigParam_UserBaudrate | CANopen configuration - user baud rate
2000.04h | DS2000_CopConfigParam_AutoOperational | CANopen configuration - auto operational
2000.05h | DS2000_CopConfigParam_MessageOnBootup | CANopen configuration - message on bootup
2000.07h | DS2000_CopConfigParam_ProfibusSlaveNr | CANopen configuration - PROFIBUS slave number


2000.00h CANopen configuration - highest sub-index supported

Name | DS2000_CopConfigParam_HighestSubindexSupported
Designation | CANopen configuration - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | -
Default value | 7
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CopConfigParam_WriteEnable, DS2000_CopConfigParam_UserNodeId, DS2000_CopConfigParam_UserBaudrate, DS2000_CopConfigParam_AutoOperational, DS2000_CopConfigParam_MessageOnBootup, DS2000_CopConfigParam_ProfibusSlaveNr

Description

The object contains the CANopen configuration parameters.

Function of the subindexes:
  • Sub-index 00h - contains the number of supporting subindexes.
  • Sub-index 01h - sets the write enable
  • Sub-index 02h - contains the user node id
  • Sub-index 03h - contains the user baud rate of CAN bus
  • Sub-index 04h - contains the time for Auto-Operational
  • Sub-index 05h - contains the configuration of message on bootup
  • Sub-index 06h - contains the PIN number
  • Sub-index 07h - contains the PROFIBUS slave number


2000.07h CANopen configuration - PROFIBUS slave number

Name | DS2000_CopConfigParam_ProfibusSlaveNr
Designation | CANopen configuration - PROFIBUS slave number
Data type | int8
Access | read / write
Attributs | Save on write; Password protected
Value range | [-3 .. 126] excluded {0}
Default value | -1
Unit | -
Operating mode | All
Available since | 1.85.03.B5
Devices | All
PLC Function | -
Cross reference | DS2000_CopConfigParam_WriteEnable

Description

The parameter defines the PROFIBUS slave number of the device. The value is only evaluated in devices with the PROFIBUS interface.

Parameter value:
Value | Meaning (devices without Hex-Switches) | Meaning (devices with Hex-Switches)
-3 | The PROFIBUS slave number is defined by the appropriate inputs (only module variants of controller). 5 pins and external circuit (MUX) are required. | Not possible
-2 | The PROFIBUS slave number is defined by the appropriate inputs (only module variants of controller). 8 pins are required. | Not possible
-1 | The PROFIBUS slave number is 126. | The PROFIBUS slave number is defined by Hex-Switches.
1 ... 126 | Software PROFIBUS slave number. The value of this parameter is taken as the PROFIBUS slave number.
Important !!!
The value of the parameter will take effect after you reboot the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId

d.SdoWr(0x2000, 0x01, 0x6E657277)               # write enable
d.SdoWr(0x2000, 0x07, 76, timeout=500)          # set PROFIBUS slave number

print "The PROFIBUS slave number is applied after restarting the device."


Content - Parameters 2000h - DS402 configuration

2002.00h | DS2000_DS402ConfigParam_HighestSubindexSupported | DS402 configuration - highest sub-index supported
2002.01h | DS2000_DS402ConfigParam_WriteEnable | DS402 configuration - write enable
2002.02h | DS2000_DS402ConfigParam_DS402Activation | DS402 configuration - DS402 Activation


2002.00h DS402 configuration - highest sub-index supported

Name | DS2000_DS402ConfigParam_HighestSubindexSupported
Designation | DS402 configuration - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | -
Default value | 2
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_DS402ConfigParam_WriteEnable, DS2000_DS402ConfigParam_DS402Activation

Description

The object contains the DS402 configuration parameters.

Function of the subindexes:
  • Sub-index 00h - contains the number of supporting subindexes.
  • Sub-index 01h - sets the write enable
  • Sub-index 02h - deactivates / activates profile DS402


2002.01h DS402 configuration - write enable

Name | DS2000_DS402ConfigParam_WriteEnable
Designation | DS402 configuration - write enable
Data type | uint32
Access | read / write
Attributs | -
Value range | [0 .. 4294967295]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_DS402ConfigParam_HighestSubindexSupported

Description

The parameter sets the write enable for all subindexes of the object with index 2002h.

In order to avoid storage of parameters with index 2002h by mistake, storage is only executed when a specific signature is written to this sub-index. To enable the write access, you must set the parameter to 0x6E657277 (the ASCII characters for "WREN"). All others values disable the write access.

The information whether the write enable is active, is returned when the parameter is read.

Parameter values when reading:
Value | Meaning
0 | only read access
1 | read and write access


2002.02h DS402 configuration - DS402 Activation

Name | DS2000_DS402ConfigParam_DS402Activation
Designation | DS402 configuration - DS402 Activation
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {0, 1}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | EnableDs402(), DisableDs402(), IsEnabledDs402(), IsDisabledDs402()
Cross reference | DS2000_DS402ConfigParam_WriteEnable

Description

The parameter deactivates / activates profile DS402.

Parameter values:
Value | Meaning
0 | deactivate profile DS402
1 | activate profile DS402

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId

d.SdoWr(0x2002, 0x01, 0x6E657277)               # write enable
d.SdoWr(0x2002, 0x02, 0, timeout=500)           # DS402 deactivate

#d.SdoWr(0x1010,0x05,0x65766173,timeout=21000)  # save parameters from range 0x2000


Content - Parameters 3000h (DSA)

3000.00h | DEV_Cmd | Device command
3000.01h | DEV_Cmd_ExecOnChange | Device command - execute on change
3000.02h | DEV_Cmd2 | Device command 2
3000.08h | DEV_Cmd_SetError | Device command - set error
3000.10h | DEV_CmdData0 | Device command - data 0
3000.11h | DEV_CmdData1 | Device command - data 1
3000.12h | DEV_CmdData2 | Device command - data 2
3000.20h | DEV_CmdData0_i16 | Device command - data 0 (int16)
3000.21h | DEV_CmdData1_i16 | Device command - data 1 (int16)
3000.22h | DEV_CmdData2_i16 | Device command - data 2 (int16)
3000.70h | DEV_CmdResult | Device command - result
3000.81h | DEV_CmdError | Device command - Error
3000.83h | DEV_CmdCounter | Device command - counter
3001.00h | DEV_ErrorReg | Error register
3002.00h | DEV_Status | Status register
3003.00h | DEV_Mode | Device mode
3004.00h | DEV_Enable | Power enable
3008.00h | DEV_ConfigErrors | Error configuration
3010.11h | DEV_Event_Cmd1OnError | Event command 1 on errors
3010.12h | DEV_Event_Cmd2OnError | Event command 2 on errors
3010.13h | DEV_Event_Cmd3OnError | Event command 3 on errors
3010.14h | DEV_Event_Cmd4OnError | Event command 4 on errors
3010.31h | DEV_Event_Cmd1OnCommError | Event command 1 on communication errors
3010.32h | DEV_Event_Cmd2OnCommError | Event command 2 on communication errors
3010.33h | DEV_Event_Cmd3OnCommError | Event command 3 on communication errors
3010.34h | DEV_Event_Cmd4OnCommError | Event command 4 on communication errors
3012.10h | DEV_Event_CmdOnSpecificError1 | Event commands on specific error 1
3012.11h | DEV_Event_Cmd1OnSpecificError1 | Event command 1 on specific error 1
3012.12h | DEV_Event_Cmd2OnSpecificError1 | Event command 2 on specific error 1
3012.13h | DEV_Event_Cmd3OnSpecificError1 | Event command 3 on specific error 1
3012.14h | DEV_Event_Cmd4OnSpecificError1 | Event command 4 on specific error 1
3012.20h | DEV_Event_CmdOnSpecificError2 | Event commands on specific error 2
3012.21h | DEV_Event_Cmd1OnSpecificError2 | Event command 1 on specific error 2
3012.22h | DEV_Event_Cmd2OnSpecificError2 | Event command 2 on specific error 2
3012.23h | DEV_Event_Cmd3OnSpecificError2 | Event command 3 on specific error 2
3012.24h | DEV_Event_Cmd4OnSpecificError2 | Event command 4 on specific error 2
3012.30h | DEV_Event_CmdOnSpecificError3 | Event commands on specific error 3
3012.31h | DEV_Event_Cmd1OnSpecificError3 | Event command 1 on specific error 3
3012.32h | DEV_Event_Cmd2OnSpecificError3 | Event command 2 on specific error 3
3012.33h | DEV_Event_Cmd3OnSpecificError3 | Event command 3 on specific error 3
3012.34h | DEV_Event_Cmd4OnSpecificError3 | Event command 4 on specific error 3
3012.40h | DEV_Event_CmdOnSpecificError4 | Event commands on specific error 4
3012.41h | DEV_Event_Cmd1OnSpecificError4 | Event command 1 on specific error 4
3012.42h | DEV_Event_Cmd2OnSpecificError4 | Event command 2 on specific error 4
3012.43h | DEV_Event_Cmd3OnSpecificError4 | Event command 3 on specific error 4
3012.44h | DEV_Event_Cmd4OnSpecificError4 | Event command 4 on specific error 4
3014.11h | DEV_Event1_OnUserCmd1 | Command 1 on usercommand 1
3014.12h | DEV_Event2_OnUserCmd1 | Command 2 on usercommand 1
3014.13h | DEV_Event3_OnUserCmd1 | Command 3 on usercommand 1
3014.14h | DEV_Event4_OnUserCmd1 | Command 4 on usercommand 1
3014.21h | DEV_Event1_OnUserCmd2 | Command 1 on usercommand 2
3014.22h | DEV_Event2_OnUserCmd2 | Command 2 on usercommand 2
3014.23h | DEV_Event3_OnUserCmd2 | Command 3 on usercommand 2
3014.24h | DEV_Event4_OnUserCmd2 | Command 4 on usercommand 2
3014.31h | DEV_Event1_OnUserCmd3 | Command 1 on usercommand 3
3014.32h | DEV_Event2_OnUserCmd3 | Command 2 on usercommand 3
3014.33h | DEV_Event3_OnUserCmd3 | Command 3 on usercommand 3
3014.34h | DEV_Event4_OnUserCmd3 | Command 4 on usercommand 3
3014.41h | DEV_Event1_OnUserCmd4 | Command 1 on usercommand 4
3014.42h | DEV_Event2_OnUserCmd4 | Command 2 on usercommand 4
3014.43h | DEV_Event3_OnUserCmd4 | Command 3 on usercommand 4
3014.44h | DEV_Event4_OnUserCmd4 | Command 4 on usercommand 4
3014.51h | DEV_Event1_OnUserCmd5 | Command 1 on usercommand 5
3014.52h | DEV_Event2_OnUserCmd5 | Command 2 on usercommand 5
3014.53h | DEV_Event3_OnUserCmd5 | Command 3 on usercommand 5
3014.54h | DEV_Event4_OnUserCmd5 | Command 4 on usercommand 5
3014.61h | DEV_Event1_OnUserCmd6 | Command 1 on usercommand 6
3014.62h | DEV_Event2_OnUserCmd6 | Command 2 on usercommand 6
3014.63h | DEV_Event3_OnUserCmd6 | Command 3 on usercommand 6
3014.64h | DEV_Event4_OnUserCmd6 | Command 4 on usercommand 6
3014.71h | DEV_Event1_OnUserCmd7 | Command 1 on usercommand 7
3014.72h | DEV_Event2_OnUserCmd7 | Command 2 on usercommand 7
3014.73h | DEV_Event3_OnUserCmd7 | Command 3 on usercommand 7
3014.74h | DEV_Event4_OnUserCmd7 | Command 4 on usercommand 7
3014.81h | DEV_Event1_OnUserCmd8 | Command 1 on usercommand 8
3014.82h | DEV_Event2_OnUserCmd8 | Command 2 on usercommand 8
3014.83h | DEV_Event3_OnUserCmd8 | Command 3 on usercommand 8
3014.84h | DEV_Event4_OnUserCmd8 | Command 4 on usercommand 8
301A.00h | DEV_ValueEvent1_Config | Value event 1 - configuration
301A.01h | DEV_ValueEvent1_Status | Value event 1 - status
301A.02h | DEV_ValueEvent1_ParNr | Value event 1 - parameter
301A.03h | DEV_ValueEvent1_PollingTime | Value event 1 - polling time
301A.04h | DEV_ValueEvent1_ScaleNum | Value event 1 - scaling numerator
301A.05h | DEV_ValueEvent1_ScaleDen | Value event 1 - scaling denominator
301A.06h | DEV_ValueEvent1_ScaledValue | Value event 1 - scaled value
301A.08h | DEV_ValueEvent1_Treshold1 | Value event 1 - threshold 1
301A.09h | DEV_ValueEvent1_Hysteresis1 | Value event 1 - hysteresis 1
301A.0Ah | DEV_ValueEvent1_Mask1 | Value event 1 - mask 1
301A.0Bh | DEV_ValueEvent1_Cmd1 | Value event 1 - command 1
301A.0Ch | DEV_ValueEvent1_Cmd1_Data0 | Value event 1 - command 1 data 0
301A.0Dh | DEV_ValueEvent1_Cmd1_Data1 | Value event 1 - command 1 data 1
301A.0Eh | DEV_ValueEvent1_Treshold2 | Value event 1 - threshold 2
301A.0Fh | DEV_ValueEvent1_Hysteresis2 | Value event 1 - hysteresis 2
301A.10h | DEV_ValueEvent1_Mask2 | Value event 1 - mask 2
301A.11h | DEV_ValueEvent1_Cmd2 | Value event 1 - command 2
301A.12h | DEV_ValueEvent1_Cmd2_Data0 | Value event 1 - command 2 data 0
301A.13h | DEV_ValueEvent1_Cmd2_Data1 | Value event 1 - command 2 data 1
301D.00h | DEV_LatchEvent0_Control | Latch event 1 - control
301D.01h | DEV_LatchEvent0_Status | Latch event 1 - status
301D.03h | DEV_LatchEvent0_Mode | Latch event 1 - mode
301D.08h | DEV_LatchEvent0_ParTrigger | Latch event 1 - trigger parameter
301D.09h | DEV_LatchEvent0_ParToLatch | Latch event 1 - parameter to latch
301D.10h | DEV_LatchEvent0_LhCount | Latch event 1 - low-high edge counter
301D.11h | DEV_LatchEvent0_LhVal | Latch event 1 - low-high edge latched value
301D.12h | DEV_LatchEvent0_LhDiff | Latch event 1 - difference low-high - high-low
301D.13h | DEV_LatchEvent0_HlCount | Latch event 1 - high-low edge counter
301D.14h | DEV_LatchEvent0_HlVal | Latch event 1 - high-low edge latched value
301D.15h | DEV_LatchEvent0_HlDiff | Latch event 1 - difference high-low - low-high
301D.20h | DEV_LatchEvent1_Control | Latch event 2 - control
301D.21h | DEV_LatchEvent1_Status | Latch event 2 - status
301D.23h | DEV_LatchEvent1_Mode | Latch event 2 - mode
301D.28h | DEV_LatchEvent1_ParTrigger | Latch event 2 - trigger parameter
301D.29h | DEV_LatchEvent1_ParToLatch | Latch event 2 - parameter to latch
301D.30h | DEV_LatchEvent1_LhCount | Latch event 2 - low-high edge counter
301D.31h | DEV_LatchEvent1_LhVal | Latch event 2 - low-high edge latched value
301D.32h | DEV_LatchEvent1_LhDiff | Latch event 2 - difference low-high - high-low
301D.33h | DEV_LatchEvent1_HlCount | Latch event 2 - high-low edge counter
301D.34h | DEV_LatchEvent1_HlVal | Latch event 2 - high-low edge latched value
301D.35h | DEV_LatchEvent1_HlDiff | Latch event 2 - difference high-low - low-high
3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number
302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9
302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3
3031.00h | DEV_MaxUp | Max. power voltage
3032.00h | DEV_MaxIm | Max. motor current
3050.00h | DEV_DinEnable | Input assignment - enable
3051.00h | DEV_DinClearError | Input assignment - error quitting
3052.00h | DEV_DinStartStop | Input assignment - start/stop
3053.00h | DEV_DinDir | Input assignment - Change of rotation direction
3055.00h | DEV_DinLimitPos | Input assignment - positive limit switch
3056.00h | DEV_DinLimitNeg | Input assignment - negative limit switch
3057.00h | DEV_DinReference | Input assignment - reference switch
3060.00h | DEV_DoutError | Output assignment - error
3080.00h | DEV_ContinueMode | Continue - mode
3090.00h | DEV_MinUp_Error | Minimum Up - error
3090.04h | DEV_UpOff_Stotterbremse | Up - disable cadence braking
3090.05h | DEV_UpOn_Stotterbremse | Up - enable cadence
3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
310A.00h | IO_AIN0_DeadBand | Analog input 0 - dead band
310A.01h | IO_AIN1_DeadBand | Analog input 1 - dead band
3110.00h | IO_AIN_Voltage_Ue | Electronic voltage - Ue
3111.00h | IO_AIN_Voltage_Up | Power voltage - Up
3112.00h | IO_AIN_Voltage_Um | Motor voltage - Um
3113.00h | IO_AIN_Current_Im | Motor current - Im
3114.00h | IO_AIN_Temperature_Power | Temperature of power amplifier
3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3128.00h | IO_DIN_Hall | Digital inputs - hall sensors
3128.01h | IO_DIN_Enc | Digital inputs - encoder
3129.01h | IO_DIN_NodeIdSwitch | NodeId-Switch - state
3150.00h | IO_DOUT_P0 | Digital outputs - Port0
3154.00h | IO_DOUT_Enable | Enable digital outputs
3158.00h | IO_DOUT_LedsEnable | LED - enable user control
3158.01h | IO_DOUT_LedsState | LED - state
3200.00h | CURR_DesiredValue | Current - desired value
3204.00h | CURR_DesiredValue_Source | Source of current desired value
3205.00h | CURR_DesiredValue_Reference | Current reference of analog input
3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator
3221.00h | CURR_LimitMaxPos | Current limit - max. positiv
3223.00h | CURR_LimitMaxNeg | Current limit - max. negativ
3224.00h | CURR_DynLimitMode | Dynamic current limit - mode
3224.01h | CURR_DynLimitPeak | Dynamic current limit - peak current
3224.02h | CURR_DynLimitCont | Dynamic current limit - continues current
3224.03h | CURR_DynLimitTime | Dynamic current limit - time
3224.12h | CURR_ActDynLimitCurrent | Dynamic current limit I*t - actual limit
3240.00h | CURR_Acc_dI | Current acceleration - delta I
3241.00h | CURR_Acc_dT | Current acceleration - delta T
3242.00h | CURR_Dec_dI | Current deceleration - delta I
3243.00h | CURR_Dec_dT | Current deceleration - delta T
3244.00h | CURR_Dec_QuickStop_dI | Current quick-stop deleleration - delta I
3245.00h | CURR_Dec_QuickStop_dT | Current quick-stop deleleration - delta T
324C.00h | CURR_RampType | Current ramp type
324D.00h | CURR_RampState | Current ramp generator - state
3250.00h | CURR_Feedback | Current controller - feedback
3250.03h | CURR_Feedback_Reference | Current controller - feedback reference
3260.00h | CURR_ActualTargetCurrent | Current - target value
3261.00h | CURR_ActualCommandCurrent | Current - command value
3262.00h | CURR_ActualCurrent | Current - actual value
3262.01h | CURR_ActualAvgCurrent | Current - actual filtred value
3262.04h | CURR_ActualPosMaxCurr | Maximal positive motor current
3262.05h | CURR_ActualNegMaxCurr | Minimal negative motor current
3263.00h | CURR_ActualFollowingError | Current - following error
32A0.00h | CURR_SampleTime | Current controller - sample time
32A0.08h | CURR_SamplePoint | Current controller - sample point correction
32A0.09h | CURR_SampleRlCorr | Current controller - R/L correction
32A0.10h | CURR_ActAvgCurrFilterLevel | Filter level for actual filtred current
3300.00h | VEL_DesiredValue | Velocity - desired value
3302.00h | VEL_ScaleNum | Velocity scale factor - numerator
3303.00h | VEL_ScaleDen | Velocity scale factor - denominator
3304.00h | VEL_DesiredValue_Source | Velocity source
3305.00h | VEL_DesiredValue_Reference | Velocity reference value
330A.00h | VEL_DimensionNum | Velocity dimension factor - numerator
330B.00h | VEL_DimensionDen | Velocity dimension factor - denominator
3310.00h | VEL_Kp | PID-Controller - gain
3311.00h | VEL_Ki | PID-Controller - integral factor
3312.00h | VEL_Kd | PID-Controller - differential factor
3313.00h | VEL_ILimit | PID-Controller - integral limit
3314.00h | VEL_Kvff | PID-Controller - velocity feed forward
3315.00h | VEL_Kaff | PID-Controller - acceleration feed forward
3317.00h | VEL_KIxR | IxR factor
3318.00h | VEL_KdSampleTime | PID-Controller - differential sample time
3321.00h | VEL_LimitMaxPos | Velocity max. limit - positiv direction
3323.00h | VEL_LimitMaxNeg | Velocity max. limit - negativ direction
3340.00h | VEL_Acc_dV | Velocity acceleration - delta V
3341.00h | VEL_Acc_dT | Velocity acceleration - delta T
3342.00h | VEL_Dec_dV | Velocity deceleration - delta V
3343.00h | VEL_Dec_dT | Velocity deceleration - delta T
3344.00h | VEL_Dec_QuickStop_dV | Velocity quick stop deceleration - delta V
3345.00h | VEL_Dec_QuickStop_dT | Velocity quick stop deceleration - delta T
334C.00h | VEL_RampType | Ramp generator - ramp type
334D.00h | VEL_RampState | Ramp generator - state
3350.00h | VEL_Feedback | Velocity feedback
3350.03h | VEL_Feedback_Reference | Velocity feedback - reference
3360.00h | VEL_ActualTargetVel | Velocity - target value
3361.00h | VEL_ActualCommandVel | Velocity - command value
3362.00h | VEL_ActualVel | Unfiltered velocity - actual value
3380.00h | VEL_Acc | Velocity acceleration in [rev/min²]
3381.00h | VEL_Dec | Velocity deceleration in [rev/min²]
3382.00h | VEL_Dec_QuickStop | Velocity quick-stop deceleration in [rev/min²]
33A0.00h | VEL_SampleTime | Velocity/position controller - sample time
33C0.00h | VEL_BlockageGuarding_ConfigFlags | Blockage guarding - config flags
33C0.01h | VEL_BlockageGuarding_VelLow | Blockage guarding - low velocity
33C0.02h | VEL_BlockageGuarding_VelHigh | Blockage guarding - high velocity
33C0.03h | VEL_BlockageGuarding_Time | Blockage guarding - time
33C0.04h | VEL_BlockageGuarding_Status | Blockage guarding - status
3500.00h | SVEL_DesiredValue | SVel desired value
3502.00h | SVEL_ScaleNum | SVel scale factor - numerator
3503.00h | SVEL_ScaleDen | SVel scale factor - denominator
3504.00h | SVEL_DesiredValue_Source | SVel source of desired value
3505.00h | SVEL_DesiredValue_Reference | SVel reference value
3510.00h | SVEL_Kp | SVel PI-Controller - gain
3511.00h | SVEL_Ki | SVel PI-Controller - integral factor
3517.00h | SVEL_KIxR | SVel IxR factor
3521.00h | SVEL_LimitMaxPos | SVelocity max. limit - positive direction
3523.00h | SVEL_LimitMaxNeg | SVelocity max. limit - negative direction
3550.00h | SVEL_Feedback | SVel feedback
3560.00h | SVEL_ActualTargetVel | SVel - velocity target value
3561.00h | SVEL_ActualCommandVel | SVel - velocity command value
35A1.00h | SVEL_MaxVelRange | SVel max. velocity range
3708.00h | POS_Mode | Position mode
3709.00h | POS_ConfigFlags | Pos config
3720.00h | POS_PositionLimitMin | Position limit - minimum
3720.01h | POS_PositionLimitMax | Position limit - maximum
3732.00h | POS_FollowingErrorWindow | Position following error - window
3732.01h | POS_FollowingErrorWindowDyn | Position following error - window, dynamic
3733.00h | POS_FollowingErrorTime | Position following error - time
3733.01h | POS_FollowingErrorTimeDyn | Position following error - time, dynamic
3734.00h | POS_FollowingErrorLimit | Position following error limit
373A.00h | POS_PositionWindow | Position window
373B.00h | POS_PositionWindowTime | Position window - time
373B.01h | POS_PositionWindowTimeout | Position window - timeout
373C.00h | POS_ReachedConfigFlags | Position reached - config bits
373D.00h | POS_DeadWindowOff | Position window - disable amplifier
373D.01h | POS_DeadWindowOn | Position window - enable amplifier
373E.00h | POS_DeadTimeOff | Position window time - disable amplifier
373E.01h | POS_DeadTimeOn | Position window time - enable amplifier
373F.00h | POS_DeadVel | Position window - velocity
374C.00h | POS_RampType | Pos. ramp generator - ramp type
374C.11h | POS_Ramp_JerkFactorAcc | Jerk acceleration
374C.12h | POS_Ramp_JerkFactorDec | Jerk deceleration
374D.00h | POS_RampState | Position ramp generator - state
3760.00h | POS_ActualTargetPosition | Actual target position
3761.00h | POS_ActualCommandPosition | Actual command position
3761.01h | POS_ActualCommandPositionReg | Actual internal command position
3762.00h | POS_ActualPosition | Actual position
3762.01h | POS_ActualPositionReg | Actual internal position
3763.00h | POS_ActualFollowingError | Actual position following error
3763.01h | POS_ActualFollowingErrorReg | Actual internal position following error
3764.00h | POS_ActualIndexPosition | Actual position of index
3765.00h | POS_ActualOrigin | Position origin
3770.00h | POS_ActualTargetPosition_cnt | Actual target position in increments
3771.00h | POS_ActualCommandPosition_cnt | Actual command positin in increments
3772.00h | POS_ActualPosition_cnt | Actual positin in increments
3773.00h | POS_ActualFollowingError_cnt | Actual following error in increments
3774.00h | POS_ActualIndexPosition_cnt | Actual index positin in increments
3775.00h | POS_ActualOrigin_cnt | Position origin in inc
3790.00h | POS_Mova | Absolute moving
3791.00h | POS_Movr | Relative moving
37A4.01h | POS_GearBacklashComp_Path | Gear backlash compensation - path
37A4.02h | POS_GearBacklashComp_Vel | Gear backlash compensation - velocity
37B0.00h | POS_HomingCmd | Homing - command
37B1.00h | POS_HomingStatus | Homing - status
37B1.01h | POS_HomingError | Homing - error
37B1.02h | POS_HomingState | Homing - state
37B1.03h | POS_HomingRefToIndex | Homing - path of reference switch to index
37B1.04h | POS_HomingRefToIndex_cnt | Homing - path of reference switch to index in counts
37B2.00h | POS_HomingMethod | Homing - method
37B3.00h | POS_HomingOffset | Homing - offset
37B4.00h | POS_HomingVelSwitch | Homing - velocity for search of switch
37B4.01h | POS_HomingVelZero | Homing - Velocity for search of zero point
37B5.00h | POS_HomingAcc | Homing - acceleration
37B5.01h | POS_HomingDec | Homing - deceleration
37B6.00h | POS_HomingMaxIndexPath | Homing - max. path for search of index
37B6.01h | POS_HomingIndexOffset | Homing - index offset
37B7.00h | POS_HomingBlock_ConfigFlags | Homing blockage - config
37B7.01h | POS_HomingBlock_VelLow | Homing blockage - low velocity
37B7.02h | POS_HomingBlock_VelHigh | Homing blockage - high velocity
37B7.03h | POS_HomingBlock_Time | Homing blockage - time
37B7.04h | POS_HomingBlock_FollowingErrorWindow | Homing blockage - position following error window
37C1.00h | POS_InterpStatus | Interpolation - status
37C2.00h | POS_InterpMethod | Interpolation - method
37C2.01h | POS_InterpTime | Interpolation - time
37C2.02h | POS_InterpReference | Interpolation - reference
37C5.00h | POS_InterpBufConfig | Interpolation - buffer configuration
37C6.00h | POS_InterpData | Interpolation - data
37C7.00h | POS_InterpActualTargetPosition | Interpolation - actual target position
37C7.01h | POS_InterpActualCommandPosition | Interpolation - actual command position
37C7.02h | POS_InterpActualPosition | Interpolation - actual position
37C8.00h | POS_ModuloMethod | Modulo method
37C9.00h | POS_ModuloValue | Modulo value
3830.00h | PWM_Frequency | PWM frequency
3830.01h | PWM_Mode | PWM mode
3830.62h | PWM_ActualPwm_oo | Actual PWM of the device
3850.00h | SYS_Clock | System clock
3850.02h | SYS_Timer_2ms | System timer 2ms
3868.01h | PAR_SI_STO_Cmd | Device Safe Torque Off Commands
3868.05h | PAR_SI_STO_Config | Device Safe Torque Off Configuration
3868.23h | PAR_SI_STO_Version | Device Safe Torque Off Software Version
3900.00h | MOTOR_Type | Motor type
3901.00h | MOTOR_Nn | Motor rated revolutions
3902.00h | MOTOR_Un | Motor rated voltage
3910.00h | MOTOR_PolN | Motor pole number
3911.00h | MOTOR_Polarity | Motor polarity
3913.00h | MOTOR_CommutationType | Motor commutation type
3913.07h | MOTOR_Commutation_Polarity | Motor commutation polarity
3913.10h | MOTOR_Commutation_Referencing | Encoder commutation referencing
3913.11h | MOTOR_Commutation_ReferencingMode | Encoder commutation referencing mode
3913.20h | PreCommutationConfig | Precommutation
3913.21h | PreCommutationVel | Precommutation reference velocity
3913.23h | PreCommutationAngle | Precommutation angle
3940.00h | MOTOR_HALL_Type | Hall sensor type
3944.01h | MOTOR_HALL_Diag_ErrCnt1 | Hall diagnostics - wrong pulses
3944.02h | MOTOR_HALL_Diag_ErrCnt2 | Hall diagnostics - wrong order
3946.00h | MOTOR_HALL_Tuning_Sector0 | Halltuning - sector 0
3946.01h | MOTOR_HALL_Tuning_Sector1 | Halltuning - sector 1
3946.02h | MOTOR_HALL_Tuning_Sector2 | Halltuning - sector 2
3946.03h | MOTOR_HALL_Tuning_Sector3 | Halltuning - sector 3
3946.04h | MOTOR_HALL_Tuning_Sector4 | Halltuning - sector 4
3946.05h | MOTOR_HALL_Tuning_Sector5 | Halltuning - sector 5
3946.08h | MOTOR_HALL_Tuning_WrEnable | Halltuning - write enable
3949.00h | MOTOR_HALL_DoutPulses_Mode | Hall pulses - config flags
3949.01h | MOTOR_HALL_DoutPulses_PosDirMask | Hall pulses - bit mask for positive direction
3949.02h | MOTOR_HALL_DoutPulses_NegDirMask | Hall pulses - bit mask for negative direction
3949.03h | MOTOR_HALL_DoutPulses_ModuloValue | Hall pulses - modulo value
394A.00h | MOTOR_HALL_ActualPosition | Actual hall position
3961.22h | MOTOR_ENC_INC2_Config_McSpiAddr | mcSPI-IC2 encoder configuration - SPI address
3962.00h | MOTOR_ENC_Resolution | Encoder resolution in counts
3962.20h | MOTOR_ENC_INC2_Resolution_Cnt | mcSPI-IC2 encoder resolution in counts
3963.00h | MOTOR_ENC_Resolution_lines | Encoder resolution in lines
3964.00h | MOTOR_ENC_Diag_Enable | Encoder diagnostics - enable
3964.01h | MOTOR_ENC_Diag_Status | Encoder diagnostics - status
396A.00h | MOTOR_ENC_ActualPosition | Actual encoder position
396A.20h | MOTOR_ENC_INC2_ActualPosition | Actual mcSPI-IC2 encoder position
396B.00h | MOTOR_ENC_ActualIndexPosition | Actual encoder index position
396C.00h | MOTOR_ENC_ActualIndexCount | Count of encoder index pulses
3970.00h | MOTOR_ENC_SSI_Enable | SSI absolute encoder - enable
3970.01h | MOTOR_ENC_SSI_Status | SSI absolute encoder - status
3970.08h | MOTOR_ENC_SSI_Save | SSI absolute encoder - save
3971.00h | MOTOR_ENC_SSI_Code | SSI absolute encoder - code
3971.01h | MOTOR_ENC_SSI_SignificantBits | SSI absolute encoder - significant bits
3971.02h | MOTOR_ENC_SSI_Bits | SSI absolute encoder - bits
3972.00h | MOTOR_ENC_SSI_Resolution | SSI absolute encoder - single turn resolution in counts
397A.00h | MOTOR_ENC_SSI_ActualPosition | SSI absolute encoder - actual position (extended on 32 bits)
397A.02h | MOTOR_ENC_SSI_ActualSsiDirectPosition | SSI absolute encoder - direct position
398F.00h | HENC_Cmd | HALL encoder - command
398F.08h | HENC_ReferencePos | HALL encoder - reference position
398F.0Ah | HENC_Hysteresis | HALL encoder - hysteresis
3990.08h | MOTOR_ENC_VIRT0_RawPosBits | Virtual encoder 0 - bits
3990.10h | MOTOR_ENC_VIRT0_RawPos | Virtual encoder 0 - raw position
3990.11h | MOTOR_ENC_VIRT0_RawIndexPos | Virtual encoder 0 - raw index position
3990.20h | MOTOR_ENC_VIRT0_Resolution_Cnt | Virtual encoder 0 - resolution in counts
3990.A0h | MOTOR_ENC_VIRT0_ActualPosition | Virtual encoder 0 - actual position
3990.B0h | MOTOR_ENC_VIRT0_ActualIndexPosition | Virtual encoder 0 - actual index position
3990.C0h | MOTOR_ENC_VIRT0_ActualIndexCount | Virtual encoder 0 - index counter
3991.08h | MOTOR_ENC_VIRT1_RawPosBits | Virtual encoder 1 - bits
3991.10h | MOTOR_ENC_VIRT1_RawPos | Virtual encoder 1 - raw position
3991.11h | MOTOR_ENC_VIRT1_RawIndexPos | Virtual encoder 1 - raw index position
3991.20h | MOTOR_ENC_VIRT1_Resolution_Cnt | Virtual encoder 1 - resolution in counts
3991.A0h | MOTOR_ENC_VIRT1_ActualPosition | Virtual encoder 1 - actual position
3991.B0h | MOTOR_ENC_VIRT1_ActualIndexPosition | Virtual encoder 1 - actual index position
3991.C0h | MOTOR_ENC_VIRT1_ActualIndexCount | Virtual encoder 1 - index counter
39A0.00h | MOTOR_BrakeManagement_Config | Brake management - configuration
39A0.01h | MOTOR_BrakeManagement_Status | Brake management - status
39A0.06h | MOTOR_BrakeManagement_VelMin | Brake management - threshold velocity
39A0.07h | MOTOR_BrakeManagement_Din | Brake management - brake input
39A0.08h | MOTOR_BrakeManagement_Dout | Brake management - brake output
39A0.09h | MOTOR_BrakeManagement_UpBrakeOff | Brake management - threshold voltage OFF
39A0.0Ah | MOTOR_BrakeManagement_UpBrakeOn | Brake management - threshold voltage ON
39A0.10h | MOTOR_BrakeManagement_OffDelay1 | Brake management - OFF-Delay1
39A0.11h | MOTOR_BrakeManagement_OffDelay2 | Brake management - OFF-Delay2
39A0.12h | MOTOR_BrakeManagement_OnDelay1 | Brake management - ON-Delay1
39A0.13h | MOTOR_BrakeManagement_OnDelay2 | Brake management - ON-Delay2
39A0.18h | MOTOR_BrakeManagement_OffOrConditionFlags | Brake management - OFF-OR-Condition
39A0.19h | MOTOR_BrakeManagement_OffAndConditionFlags | Brake management - OFF-AND-Condition
39A0.1Ah | MOTOR_BrakeManagement_OnOrConditionFlags | Brake management - ON-OR-Condition
39A0.1Bh | MOTOR_BrakeManagement_OnAndConditionFlags | Brake management - ON-AND-Condition
39A2.00h | MOTOR_QuasiAbsEncoder_ConfigFlags | Quasi Absolute Encoder - config flags
39A2.01h | MOTOR_QuasiAbsEncoder_Status | Quasi Absolute Encoder - status
39A2.02h | MOTOR_QuasiAbsEncoder_Error | Quasi Absolute Encoder - error
39A2.07h | MOTOR_QuasiAbsEncoder_Tolerance_cnt | Quasi Absolute Encoder - tolerance
39A2.08h | MOTOR_QuasiAbsEncoder_Action | Quasi Absolute Encoder - command
39A2.10h | MOTOR_QuasiAbsEncoder_DeltaPos | Quasi Absolute Encoder - corrected position
39A2.20h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe | Quasi Absolute Encoder - minimum voltage to position save
39A2.21h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe | Quasi Absolute Encoder - maximum voltage to position save
39A2.31h | MOTOR_QuasiAbsEncoder_SavedPosition | Quasi Absolute Encoder - saved position
39A2.32h | MOTOR_QuasiAbsEncoder_SavedIndexPosition | Quasi Absolute Encoder - saved index position
39A2.33h | MOTOR_QuasiAbsEncoder_SavesCounter | Quasi Absolute Encoder - saves counter
3A02.00h | MEASUREMENT_VelTime_ms | Velocity measurement - gate time
3A04.00h | MEASUREMENT_Vel_cnt | Measured velocity in increments
3A04.01h | MEASUREMENT_Vel_rpm | Measured velocity in [rpm]
3B00.00h | FCT_Control | Factor group - control
3B00.01h | FCT_Precision | Factor group - precision
3B10.00h | FCT_Polarity | Factor group - polarity
3B11.00h | FCT_PosNotationIndex | Factor group - position notation index
3B12.00h | FCT_PosDimIndex | Factor group - position dimension index
3B13.00h | FCT_VelNotationIndex | Factor group - velocity notation index
3B14.00h | FCT_VelDimIndex | Factor group - velocity dimension index
3B15.00h | FCT_AccNotationIndex | Factor group - acceleration notation index
3B16.00h | FCT_AccDimIndex | Factor group - acceleration dimension index
3B16.01h | FCT_AccFactorNum | Factor group - acceleration scale - numinator
3B16.02h | FCT_AccFactorDen | Factor group - acceleration scale - denuminator
3B17.00h | FCT_PosScaleNum | Factor group - position scale - numerator
3B17.01h | FCT_PosScaleDen | Factor group - position scale - denominator
3B18.00h | FCT_VelScaleNum | Factor group - velocity scale - numerator
3B18.01h | FCT_VelScaleDen | Factor group - velocity scale - denominator
3B19.00h | FCT_GearRatio_MotorRev | Factor group - gear ratio - motor shaft revolutions
3B19.01h | FCT_GearRatio_ShaftRev | Factor group - gear ratio - driving shaft revolutions
3B1A.00h | FCT_FeedConstant_Feed | Factor group - feed constant - feed
3B1A.01h | FCT_FeedConstant_ShaftRev | Factor group - feed constant - driving shaft revolutions
3CE0.00h | COM_ASI_Cmd | ASI command
3CE0.06h | COM_ASI_Baudrate | ASI baud rate
3D14.00h | TOOL_Master_Control | Master-Tool - config
3D14.10h | TOOL_Master_ParSource | Master-Tool - feedback parameter
3D14.12h | TOOL_Master_ScaleNum | Master-Tool - scale numerator
3D14.13h | TOOL_Master_ScaleDen | Master-Tool - scale denominator
3D14.14h | TOOL_Master_MaxVel | Master-Tool - maximum velocity
3D14.31h | TOOL_Master_FilterKp | Master-Tool - filter gain factor
3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


Content - Parameters 3000h (DSA) - Value event

301A.00h | DEV_ValueEvent1_Config | Value event 1 - configuration
301A.01h | DEV_ValueEvent1_Status | Value event 1 - status
301A.02h | DEV_ValueEvent1_ParNr | Value event 1 - parameter
301A.03h | DEV_ValueEvent1_PollingTime | Value event 1 - polling time
301A.04h | DEV_ValueEvent1_ScaleNum | Value event 1 - scaling numerator
301A.05h | DEV_ValueEvent1_ScaleDen | Value event 1 - scaling denominator
301A.06h | DEV_ValueEvent1_ScaledValue | Value event 1 - scaled value
301A.08h | DEV_ValueEvent1_Treshold1 | Value event 1 - threshold 1
301A.09h | DEV_ValueEvent1_Hysteresis1 | Value event 1 - hysteresis 1
301A.0Ah | DEV_ValueEvent1_Mask1 | Value event 1 - mask 1
301A.0Bh | DEV_ValueEvent1_Cmd1 | Value event 1 - command 1
301A.0Ch | DEV_ValueEvent1_Cmd1_Data0 | Value event 1 - command 1 data 0
301A.0Dh | DEV_ValueEvent1_Cmd1_Data1 | Value event 1 - command 1 data 1
301A.0Eh | DEV_ValueEvent1_Treshold2 | Value event 1 - threshold 2
301A.0Fh | DEV_ValueEvent1_Hysteresis2 | Value event 1 - hysteresis 2
301A.10h | DEV_ValueEvent1_Mask2 | Value event 1 - mask 2
301A.11h | DEV_ValueEvent1_Cmd2 | Value event 1 - command 2
301A.12h | DEV_ValueEvent1_Cmd2_Data0 | Value event 1 - command 2 data 0
301A.13h | DEV_ValueEvent1_Cmd2_Data1 | Value event 1 - command 2 data 1


301A.00h Value event 1 - configuration

Name | DEV_ValueEvent1_Config
Designation | Value event 1 - configuration
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

This parameter is used to configure the "value event" object

Meaning of bits
Bit | Name | Description
[0..2] | Mode | 0 = deactivated 1 = activated
3 | reserved | -
4 | Edge1 | 0 = react to rising edge 1 = react to falling edge
5 | Edge2 | 0 = react to rising edge 1 = react to falling edge

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.01h Value event 1 - status

Name | DEV_ValueEvent1_Status
Designation | Value event 1 - status
Data type | uint16
Access | read only
Attributs | -
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

This parameter is used to read the actual state of the "value event" object.

Meaning of bits:
Bit | Name | Description
0 | VALUE_EVENT_STATUS_Enabled | Shows if the "value event" is active
1 | VALUE_EVENT_STATUS_GetParValueError | Shows if a parameter error occurred (for example if a parameter is read which does not exist)
2 | VALUE_EVENT_STATUS_DevCmdError | Shows if a command error occurred (see DEV_CmdError)
[3..7] | reserved | -
[8..11] | State1 | Shows the state of the first threshold. Edge1 = 0: If the actual read value falls below the threshold1 - hysteresis1 the State1 = 0. If the actual read value rises above the threshold1 the State1 = 1. Edge1 = 1: If the actual read value rises above the threshold1 + hysteresis1 the State1 = 0. If the actual read value falls below the threshold1 the State 1 = 1
[12..15] | State2 | Shows the state of the 1. threshold. Edge1 = 0: If the actual read value falls below the threshold1 - hysteresis1 the State1 = 0. If the actual read value rises above the threshold1 the State1 = 1. Edge1 = 1: If the actual read value rises above the threshold1 - hysteresis1 the State1 = 0. If the actual read value falls below the threshold1 the State1 = 1.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.02h Value event 1 - parameter

Name | DEV_ValueEvent1_ParNr
Designation | Value event 1 - parameter
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 3211264
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.03h Value event 1 - polling time

Name | DEV_ValueEvent1_PollingTime
Designation | Value event 1 - polling time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 65535]
Default value | 100
Unit | [ms]
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.04h Value event 1 - scaling numerator

Name | DEV_ValueEvent1_ScaleNum
Designation | Value event 1 - scaling numerator
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.05h Value event 1 - scaling denominator

Name | DEV_ValueEvent1_ScaleDen
Designation | Value event 1 - scaling denominator
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.06h Value event 1 - scaled value

Name | DEV_ValueEvent1_ScaledValue
Designation | Value event 1 - scaled value
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.08h Value event 1 - threshold 1

Name | DEV_ValueEvent1_Treshold1
Designation | Value event 1 - threshold 1
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 5000
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.09h Value event 1 - hysteresis 1

Name | DEV_ValueEvent1_Hysteresis1
Designation | Value event 1 - hysteresis 1
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1000
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Ah Value event 1 - mask 1

Name | DEV_ValueEvent1_Mask1
Designation | Value event 1 - mask 1
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Bh Value event 1 - command 1

Name | DEV_ValueEvent1_Cmd1
Designation | Value event 1 - command 1
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Ch Value event 1 - command 1 data 0

Name | DEV_ValueEvent1_Cmd1_Data0
Designation | Value event 1 - command 1 data 0
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Dh Value event 1 - command 1 data 1

Name | DEV_ValueEvent1_Cmd1_Data1
Designation | Value event 1 - command 1 data 1
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Eh Value event 1 - threshold 2

Name | DEV_ValueEvent1_Treshold2
Designation | Value event 1 - threshold 2
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.0Fh Value event 1 - hysteresis 2

Name | DEV_ValueEvent1_Hysteresis2
Designation | Value event 1 - hysteresis 2
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1000
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.10h Value event 1 - mask 2

Name | DEV_ValueEvent1_Mask2
Designation | Value event 1 - mask 2
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.11h Value event 1 - command 2

Name | DEV_ValueEvent1_Cmd2
Designation | Value event 1 - command 2
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2_Data0, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.12h Value event 1 - command 2 data 0

Name | DEV_ValueEvent1_Cmd2_Data0
Designation | Value event 1 - command 2 data 0
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data1

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


301A.13h Value event 1 - command 2 data 1

Name | DEV_ValueEvent1_Cmd2_Data1
Designation | Value event 1 - command 2 data 1
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.46
Devices | All
PLC Function | -
Cross reference | DEV_ValueEvent1_Config, DEV_ValueEvent1_Status, DEV_ValueEvent1_ParNr, DEV_ValueEvent1_PollingTime, DEV_ValueEvent1_ScaleNum, DEV_ValueEvent1_ScaleDen, DEV_ValueEvent1_ScaledValue, DEV_ValueEvent1_Treshold1, DEV_ValueEvent1_Hysteresis1, DEV_ValueEvent1_Mask1, DEV_ValueEvent1_Cmd1, DEV_ValueEvent1_Cmd1_Data0, DEV_ValueEvent1_Cmd1_Data1, DEV_ValueEvent1_Treshold2, DEV_ValueEvent1_Hysteresis2, DEV_ValueEvent1_Mask2, DEV_ValueEvent1_Cmd2, DEV_ValueEvent1_Cmd2_Data0

Description

The function "Value event" triggers a command, when a defined parameter rises above or falls below a certain threshold.

The parameter, which is watched, has to be written in the object DEV_ValueEvent1_ParNr. The way it is written is the following:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

The parameter DEV_ValueEvent1_PollingTime determines in which interval the parameter, which is watched, is read. The value is stated in milliseconds.

The value in the parameter which is watched can be scaled with the objects DEV_ValueEvent1_ScaleNum and DEV_ValueEvent1_ScaleDen. The scaled parameter value can be read with the object DEV_ValueEvent1_ScaledValue.

The objects DEV_ValueEvent1_Treshold1 and DEV_ValueEvent1_Treshold2 determine the threshold, at which the command is triggered. Is the value of the parameter, which is watched, equal or above/below the threshold, the command is triggered.

If the value of the parameter, which is watched, is noisy, a hysteresis can be defined in the objects DEV_ValueEvent1_Hysteresis1 and DEV_ValueEvent1_Hysteresis2, to avoid a repetition of the command.

The command is triggered if the according State (see DEV_ValueEvent1_Status) changes from 0 to 1.

If only certain bits of a parameter, that is watched, shall be evaluated, a bit mask can be defined with the objects DEV_ValueEvent1_Mask1 and DEV_ValueEvent1_Mask2. Each mask works for the according threshold. This is useful if for example digital inputs are watched.

The command that is triggered by each threshold, can be defined in the objects DEV_ValueEvent1_Cmd1 and DEV_ValueEvent1_Cmd2. The commands work similar to the device commands DEV_Cmd_ExecOnChange.
The according data for the command DEV_ValueEvent1_Cmd1 are defined in the objects DEV_ValueEvent1_Cmd1_Data0 and DEV_ValueEvent1_Cmd1_Data1.
The according data for the command DEV_ValueEvent1_Cmd2 are defined in the objects DEV_ValueEvent1_Cmd2_Data0 and DEV_ValueEvent1_Cmd2_Data1.

The following graphic illustrates the functionality of the "value event"

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                             # NodeId = 1

d.SdoWr(0x301A, 0x00, (1<<4)|(1<<0))   # DEV_ValueEvent1_Config
d.SdoWr(0x301A, 0x02, 0x376200)        # DEV_ValueEvent1_ParNr
d.SdoWr(0x301A, 0x03, 1)               # DEV_ValueEvent1_PollingTime

d.SdoWr(0x301A, 0x04, 1)               # DEV_ValueEvent1_ScaleNum
d.SdoWr(0x301A, 0x05, 10)              # DEV_ValueEvent1_ScaleDen

d.SdoWr(0x301A, 0x08, 2000)            # DEV_ValueEvent1_Treshold1
d.SdoWr(0x301A, 0x09, 100)             # DEV_ValueEvent1_Hysteresis1
d.SdoWr(0x301A, 0x0A, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask1

d.SdoWr(0x301A, 0x0B, 0x31)            # DEV_ValueEvent1_Cmd1
d.SdoWr(0x301A, 0x0C, 2000)            # DEV_ValueEvent1_Cmd1_Data0
d.SdoWr(0x301A, 0x0D, 0)               # DEV_ValueEvent1_Cmd1_Data1

d.SdoWr(0x301A, 0x0E, 6000)            # DEV_ValueEvent1_Treshold2
d.SdoWr(0x301A, 0x0F, 100)             # DEV_ValueEvent1_Hysteresis2

d.SdoWr(0x301A, 0x10, 0xFFFFFFFF)      # DEV_ValueEvent1_Mask2

d.SdoWr(0x301A, 0x11, 0x72)            # DEV_ValueEvent1_Cmd2
d.SdoWr(0x301A, 0x12, 0)               # DEV_ValueEvent1_Cmd2_Data0
d.SdoWr(0x301A, 0x13, 0)               # DEV_ValueEvent1_Cmd2_Data1

d.SdoWr(0x3003, 0x00, 3)               # DEV_Mode
d.SdoWr(0x3300, 0x00, 500)             # VEL_DesiredValue

d.SdoWr(0x3762, 0x00, 0)               # POS_ActualPosition

d.SdoWr(0x3004, 0x00, 1)               # DEV_Enable

while 1:
   Status = d.SdoRd(0x301A, 0x01)      # DEV_ValueEvent1_Status
   Value  = d.SdoRd(0x301A, 0x06)      # DEV_ValueEvent1_ScaledValue
   ActPos = d.SdoRd(0x3762, 0x00)      # POS_ActualPosition

   print
   print "Value Event Status: 0x%X"  % (Status)
   print "Scaled Value: %d" % (Value)
   print "Actual Position: %d" % (ActPos)
   if d.SdoRd(0x3004, 0x00) == 0:      # DEV_Enable
      break


Content - Parameters 3000h (DSA) - Latch event

301D.00h | DEV_LatchEvent0_Control | Latch event 1 - control
301D.01h | DEV_LatchEvent0_Status | Latch event 1 - status
301D.03h | DEV_LatchEvent0_Mode | Latch event 1 - mode
301D.08h | DEV_LatchEvent0_ParTrigger | Latch event 1 - trigger parameter
301D.09h | DEV_LatchEvent0_ParToLatch | Latch event 1 - parameter to latch
301D.10h | DEV_LatchEvent0_LhCount | Latch event 1 - low-high edge counter
301D.11h | DEV_LatchEvent0_LhVal | Latch event 1 - low-high edge latched value
301D.12h | DEV_LatchEvent0_LhDiff | Latch event 1 - difference low-high - high-low
301D.13h | DEV_LatchEvent0_HlCount | Latch event 1 - high-low edge counter
301D.14h | DEV_LatchEvent0_HlVal | Latch event 1 - high-low edge latched value
301D.15h | DEV_LatchEvent0_HlDiff | Latch event 1 - difference high-low - low-high
301D.20h | DEV_LatchEvent1_Control | Latch event 2 - control
301D.21h | DEV_LatchEvent1_Status | Latch event 2 - status
301D.23h | DEV_LatchEvent1_Mode | Latch event 2 - mode
301D.28h | DEV_LatchEvent1_ParTrigger | Latch event 2 - trigger parameter
301D.29h | DEV_LatchEvent1_ParToLatch | Latch event 2 - parameter to latch
301D.30h | DEV_LatchEvent1_LhCount | Latch event 2 - low-high edge counter
301D.31h | DEV_LatchEvent1_LhVal | Latch event 2 - low-high edge latched value
301D.32h | DEV_LatchEvent1_LhDiff | Latch event 2 - difference low-high - high-low
301D.33h | DEV_LatchEvent1_HlCount | Latch event 2 - high-low edge counter
301D.34h | DEV_LatchEvent1_HlVal | Latch event 2 - high-low edge latched value
301D.35h | DEV_LatchEvent1_HlDiff | Latch event 2 - difference high-low - low-high


301D.00h Latch event 1 - control

Name | DEV_LatchEvent0_Control
Designation | Latch event 1 - control
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter is used to configure the latch events.

A latch event has a trigger and a parameter which is read. When the trigger is activated the according parameter is read. Besides that the amounts of trigger activation is counted.
This function can, for example, be used for read position flags via the digital inputs.

Assignment of the bits:
Bit | Name | Description
0 | Enable | Activates the latch events
1 | BiDirCounters | Activates the bidirectional counter. The bit that follows the bit of the trigger in DEV_LatchEvent0_ParTrigger determines the direction of the counting. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.01h Latch event 1 - status

Name | DEV_LatchEvent0_Status
Designation | Latch event 1 - status
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.E1
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter is used to read the status of the latch event. Writing in this parameter resets the status. This is necessary when OneShot is activated in DEV_LatchEvent0_Mode, because resetting the status arms the trigger.

To reset the status bit 0 (LhEdge), the value 1 has to be written in the parameter DEV_LatchEvent0_Status.
To reset the status bit 1 (HlEdge), the value 2 has to be written in the parameter DEV_LatchEvent0_Status.
To reset the status bits 0 and 1 (LhEdge and HlEdge), the value 3 has to be written in the parameter DEV_LatchEvent0_Status.

Assignment of the bits:
Bit | Name | Description
0 | LhEdge | Changes to high, when a rising edge is detected.
1 | HlEdge | Changes to high, when a falling edge is detected.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.03h Latch event 1 - mode

Name | DEV_LatchEvent0_Mode
Designation | Latch event 1 - mode
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.E1
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

With this parameter the mode of the latch event can be selected.

If the mode OneShot is selected, the according edge will only be recognized once. When the according status bit in DEV_LatchEvent0_Status is reset, the trigger is armed again.

Assignment of the bits:
Bit | Name | Description
0 | OneShot_LhEdge | Activates OneShot for the rising edge.
1 | OneShot_HlEdge | Activates OneShot for the falling edge.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.08h Latch event 1 - trigger parameter

Name | DEV_LatchEvent0_ParTrigger
Designation | Latch event 1 - trigger parameter
Data type | uint32
Access | read / write
Attributs | -
Value range | [0h .. 312000FFh]
Default value | 31200000h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter is used to select the trigger for the latch event.

The trigger is a parameter and has to be written the following way:

0xIIIISSBB

Whereas IIII is the index of the parameter and SS is the subindex of the parameter and BB is the bit number of the parameter.

If bidirectional counting is activated in DEV_LatchEvent0_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.09h Latch event 1 - parameter to latch

Name | DEV_LatchEvent0_ParToLatch
Designation | Latch event 1 - parameter to latch
Data type | uint32
Access | read / write
Attributs | -
Value range | {376200h, 377200h, 394A00h, 396A00h, 394A20h, 397A00h, 3990A0h, 3991A0h}
Default value | 376200h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter is used to select which parameter shall be read when the latch event is triggered.

The parameter has to be written the following way:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

Parameters that can be latched are:

Parameter name | Parameter index and subindex
None | 0x000000
POS_ActualPosition | 0x376200
POS_ActualPosition_cnt | 0x377200
MOTOR_HALL_ActualPosition | 0x394A00
MOTOR_ENC_ActualPosition | 0x396A00
MOTOR_ENC_INC2_ActualPosition | 0x396A20
MOTOR_ENC_SSI_ActualPosition | 0x397A00
MOTOR_ENC_VIRT0_ActualPosition | 0x3990A0
MOTOR_ENC_VIRT1_ActualPosition | 0x3991A0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.10h Latch event 1 - low-high edge counter

Name | DEV_LatchEvent0_LhCount
Designation | Latch event 1 - low-high edge counter
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter contains the amount of recognized rising edges of the latch event trigger.

If OneShot is activated in DEV_LatchEvent0_Mode, the edges will only be counted if the trigger is armed.

If bidirectional counting is activated in DEV_LatchEvent0_Control, the direction of counting will be determined by the according bit.

If bidirectional counting is activated in DEV_LatchEvent0_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.11h Latch event 1 - low-high edge latched value

Name | DEV_LatchEvent0_LhVal
Designation | Latch event 1 - low-high edge latched value
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter contains the value of the parameter, which is read when the rising edge is detected.

If OneShot is activated in DEV_LatchEvent0_Mode, the value will only be latched if the trigger is armed.

The time between the trigger activation and the latching of the value is at most 125 µs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.12h Latch event 1 - difference low-high - high-low

Name | DEV_LatchEvent0_LhDiff
Designation | Latch event 1 - difference low-high - high-low
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter contains the difference between the latched value of the rising edge and the latched value of the falling edge.

DEV_LatchEvent0_LhDiff = DEV_LatchEvent0_LhVal - DEV_LatchEvent0_HlVal

The difference is calculated when a rising edge is detected and the latched value is written in DEV_LatchEvent0_LhVal.

If OneShot is activated in DEV_LatchEvent0_Mode, the difference will only be calculated if the trigger is armed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.13h Latch event 1 - high-low edge counter

Name | DEV_LatchEvent0_HlCount
Designation | Latch event 1 - high-low edge counter
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlVal, DEV_LatchEvent0_HlDiff

Description

This parameter contains the amount of recognized falling edge of the latch event trigger.

If OneShot is activated in DEV_LatchEvent0_Mode, the edges will only be counted if the trigger is armed.

If bidirectional counting is activated in DEV_LatchEvent0_Control, the direction of counting will be determined by the according bit.

If bidirectional counting is activated in DEV_LatchEvent0_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.14h Latch event 1 - high-low edge latched value

Name | DEV_LatchEvent0_HlVal
Designation | Latch event 1 - high-low edge latched value
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlDiff

Description

This parameter contains the value of the parameter, which is read when the falling edge is detected.

If OneShot is activated in DEV_LatchEvent0_Mode, the value will only be latched if the trigger is armed.

The time between the trigger activation and the latching of the value is at most 125 µs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.15h Latch event 1 - difference high-low - low-high

Name | DEV_LatchEvent0_HlDiff
Designation | Latch event 1 - difference high-low - low-high
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent0_Control, DEV_LatchEvent0_Status, DEV_LatchEvent0_Mode, DEV_LatchEvent0_ParTrigger, DEV_LatchEvent0_ParToLatch, DEV_LatchEvent0_LhCount, DEV_LatchEvent0_LhVal, DEV_LatchEvent0_LhDiff, DEV_LatchEvent0_HlCount, DEV_LatchEvent0_HlVal

Description

This parameter contains the difference between the latched value of the falling edge and the latched value of the rising edge.

DEV_LatchEvent0_HlDiff = DEV_LatchEvent0_HlVal - DEV_LatchEvent0_LhVal

The difference is calculated when a rising edge is detected and the latched value is written in DEV_LatchEvent0_HlVal.

If OneShot is activated in DEV_LatchEvent0_Mode, the difference will only be calculated if the trigger is armed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x00, 3)               # DEV_LatchEvent0_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x03, 1)               # DEV_LatchEvent0_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x08, 0x31200001)      # DEV_LatchEvent0_ParTrigger - Bit 1 from digital input port 0
d.SdoWr(0x301D, 0x09, 0x396A00)        # DEV_LatchEvent0_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x301D, 0x01, 0x01)            # DEV_LatchEvent0_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x01)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x10)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x11)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x12)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x13)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x14)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x15)


301D.20h Latch event 2 - control

Name | DEV_LatchEvent1_Control
Designation | Latch event 2 - control
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter is used to configure the latch events.

A latch event has a trigger and a parameter which is read. When the trigger is activated the according parameter is read. Besides that the amounts of trigger activation is counted.
This function can, for example, be used for read position flags via the digital inputs.

Assignment of the bits:
Bit | Name | Description
0 | Enable | Activates the latch events
1 | BiDirCounters | Activates the bidirectional counter. The bit that follows the bit of the trigger in DEV_LatchEvent1_ParTrigger determines the direction of the counting. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.21h Latch event 2 - status

Name | DEV_LatchEvent1_Status
Designation | Latch event 2 - status
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.E1
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter is used to read the status of the latch event. Writing in this parameter resets the status. This is necessary when OneShot is activated in DEV_LatchEvent1_Mode, because resetting the status arms the trigger.

To reset the status bit 0 (LhEdge), the value 1 has to be written in the parameter DEV_LatchEvent1_Status.
To reset the status bit 1 (HlEdge), the value 2 has to be written in the parameter DEV_LatchEvent1_Status.
To reset the status bits 0 and 1 (LhEdge and HlEdge), the value 3 has to be written in the parameter DEV_LatchEvent1_Status.

Assignment of the bits:
Bit | Name | Description
0 | LhEdge | Changes to high, when a rising edge is detected.
1 | HlEdge | Changes to high, when a falling edge is detected.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.23h Latch event 2 - mode

Name | DEV_LatchEvent1_Mode
Designation | Latch event 2 - mode
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.93.00.E1
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

With this parameter the mode of the latch event can be selected.

If the mode OneShot is selected, the according edge will only be recognized once. When the according status bit in DEV_LatchEvent1_Status is reset, the trigger is armed again..

Assignment of the bits:
Bit | Name | Description
0 | OneShot_LhEdge | Activates OneShot for the rising edge.
1 | OneShot_HlEdge | Activates OneShot for the falling edge.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.28h Latch event 2 - trigger parameter

Name | DEV_LatchEvent1_ParTrigger
Designation | Latch event 2 - trigger parameter
Data type | uint32
Access | read / write
Attributs | -
Value range | [0h .. 312000FFh]
Default value | 31200100h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter is used to select the trigger for the latch event.

The trigger is a parameter and has to be written the following way:

0xIIIISSBB

Whereas IIII is the index of the parameter and SS is the subindex of the parameter and BB is the bit number of the parameter.

If bidirectional counting is activated in DEV_LatchEvent1_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.29h Latch event 2 - parameter to latch

Name | DEV_LatchEvent1_ParToLatch
Designation | Latch event 2 - parameter to latch
Data type | uint32
Access | read / write
Attributs | -
Value range | {376200h, 377200h, 394A00h, 396A00h, 394A20h, 397A00h, 3990A0h, 3991A0h}
Default value | 376200h
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter is used to select which parameter shall be read when the latch event is triggered.

The parameter has to be written the following way:

0xIIIISS

Whereas IIII is the index of the parameter and SS is the subindex of the parameter.

Parameters that can be latched are:

Parameter name | Parameter index and subindex
None | 0x000000
POS_ActualPosition | 0x376200
POS_ActualPosition_cnt | 0x377200
MOTOR_HALL_ActualPosition | 0x394A00
MOTOR_ENC_ActualPosition | 0x396A00
MOTOR_ENC_INC2_ActualPosition | 0x396A20
MOTOR_ENC_SSI_ActualPosition | 0x397A00
MOTOR_ENC_VIRT0_ActualPosition | 0x3990A0
MOTOR_ENC_VIRT1_ActualPosition | 0x3991A0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.30h Latch event 2 - low-high edge counter

Name | DEV_LatchEvent1_LhCount
Designation | Latch event 2 - low-high edge counter
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter contains the amount of recognized rising edge of the latch event trigger.

If OneShot is activated in DEV_LatchEvent1_Mode, the edges will only be counted if the trigger is armed.

If bidirectional counting is activated in DEV_LatchEvent1_Control, the direction of counting will be determined be the according bit.

If bidirectional counting is activated in DEV_LatchEvent1_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.31h Latch event 2 - low-high edge latched value

Name | DEV_LatchEvent1_LhVal
Designation | Latch event 2 - low-high edge latched value
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter contains the value of the parameter, which is read when the rising edge is detected.

If OneShot is activated in DEV_LatchEvent1_Mode, the value will only be latched if the trigger is armed.

The time between the trigger activation and the latching of the value is at most 125 µs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.32h Latch event 2 - difference low-high - high-low

Name | DEV_LatchEvent1_LhDiff
Designation | Latch event 2 - difference low-high - high-low
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter contains the difference between the latched value of the rising edge and the latched value of the falling edge.

DEV_LatchEvent1_LhDiff = DEV_LatchEvent1_LhVal - DEV_LatchEvent1_HlVal

The difference is calculated when a rising edge is detected and the latched value is written in DEV_LatchEvent1_LhVal.

If OneShot is activated in DEV_LatchEvent1_Mode, the difference is only calculated if the trigger is armed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.33h Latch event 2 - high-low edge counter

Name | DEV_LatchEvent1_HlCount
Designation | Latch event 2 - high-low edge counter
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlVal, DEV_LatchEvent1_HlDiff

Description

This parameter contains the amount of recognized falling edge of the latch event trigger.

If OneShot is activated in DEV_LatchEvent1_Mode, the edges will only be counted if the trigger is armed.

If bidirectional counting is activated in DEV_LatchEvent1_Control, the direction of counting will be determined be the according bit.

If bidirectional counting is activated in DEV_LatchEvent1_Control, the bit that follows the bit of the trigger is used to determine the counting direction.
If i.e. din 0 is used as trigger (0x31200000), din 1 will be used to determine the counting direction. (low = positive, high = negative)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.34h Latch event 2 - high-low edge latched value

Name | DEV_LatchEvent1_HlVal
Designation | Latch event 2 - high-low edge latched value
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlDiff

Description

This parameter contains the value of the parameter, which is read when the falling edge is detected.

If OneShot is activated in DEV_LatchEvent1_Mode, the value will only be latched if the trigger is armed.

The time between the trigger activation and the latching of the value is at most 125 µs.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


301D.35h Latch event 2 - difference high-low - low-high

Name | DEV_LatchEvent1_HlDiff
Designation | Latch event 2 - difference high-low - low-high
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.DE
Devices | All
PLC Function | -
Cross reference | DEV_LatchEvent1_Control, DEV_LatchEvent1_Status, DEV_LatchEvent1_Mode, DEV_LatchEvent1_ParTrigger, DEV_LatchEvent1_ParToLatch, DEV_LatchEvent1_LhCount, DEV_LatchEvent1_LhVal, DEV_LatchEvent1_LhDiff, DEV_LatchEvent1_HlCount, DEV_LatchEvent1_HlVal

Description

This parameter contains the difference between the latched value of the falling edge and the latched value of the rising edge.

DEV_LatchEvent1_HlDiff = DEV_LatchEvent1_HlVal - DEV_LatchEvent1_LhVal

The difference is calculated when a rising edge is detected and the latched value is written in DEV_LatchEvent1_HlVal.

If OneShot is activated in DEV_LatchEvent1_Mode, the difference is only calculated if the trigger is armed.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)

pos_1 = 2599
pos_2 = 4777
pos_3 = 6822
pos_4 = 9007

d.SdoWr(0x301D, 0x20, 3)               # DEV_LatchEvent1_Control - Enable & BiDirCounter
d.SdoWr(0x301D, 0x23, 1)               # DEV_LatchEvent1_Mode - OneShot on rising edge
d.SdoWr(0x301D, 0x28, 0x31200001)      # DEV_LatchEvent1_ParTrigger - Bit 1 from digital ipnut port 0
d.SdoWr(0x301D, 0x29, 0x396A00)        # DEV_LatchEvent1_ParToLatch - Actual encoder position

d.SdoWr(0x3F00, 0x00, 0x55AA55AA)      # DIAG_Enable - Write enable
d.SdoWr(0x3FA0, 0x00, 0x02)            # DIAG_SIM_Control - Activate virtual Din
d.SdoWr(0x3F00, 0x00, 0x00)            # DIAG_Enable - Write disable
d.SdoWr(0x3FA3, 0x00, 0x0F)            # DIAG_SIM_DIN_Mask - Bitmask for virtual Din0 & Din1 & Din2 & Din3
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din0 & din1 & din2 & din3

d.SdoWr(0x396A, 0x00, pos_1)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "1.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_2)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "1.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x396A, 0x00, pos_3)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "2.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Reset din1
print
print "2.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x301D, 0x21, 0x01)            # DEV_LatchEvent1_Status - Arm OneShot on rising edge
d.SdoWr(0x396A, 0x00, pos_4)           # MOTOR_ENC_ActualPosition - Set position
d.SdoWr(0x3FA4, 0x00, 0x02)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge low-high"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4, 0x00, 0x00)            # DIAG_SIM_DIN_Value - Set din1
print
print "3.Edge high-low"
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)

d.SdoWr(0x3FA4,0x00, 0x04)            # DIAG_SIM_DIN_Value - Set din2
for i in xrange (6):
   if not i%2:
      d.SdoWr(0x3FA4,0x00, 0x06)      # DIAG_SIM_DIN_Value - Set din1 & din2
   else:
      d.SdoWr(0x3FA4,0x00, 0x04)      # DIAG_SIM_DIN_Value - Reset din1 & set din2
print
print "Latch Evt. Status   :",d.SdoRd(0x301D, 0x21)
print "Latch Evt. LhCount  :",d.SdoRd(0x301D, 0x30)
print "Latch Evt. LhValue  :",d.SdoRd(0x301D, 0x31)
print "Latch Evt. LhDiff   :",d.SdoRd(0x301D, 0x32)
print "Latch Evt. HlCount  :",d.SdoRd(0x301D, 0x33)
print "Latch Evt. HlValue  :",d.SdoRd(0x301D, 0x34)
print "Latch Evt. HlDiff   :",d.SdoRd(0x301D, 0x35)


3128.00h Digital inputs - hall sensors

Name | IO_DIN_Hall
Designation | Digital inputs - hall sensors
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 7]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DinHall()
Cross reference | IO_DIN_Enc

Description

Provides the actual status of the digital inputs of the hall sensors.
If you have a brush-type motor you can use the inputs of the hall sensors as general inputs. In this case they are digital inputs at 5V.

ATTENTION Do not apply more than 5V to the hall sensors !!

Bit allocation:

Bit-no. | Meaning
0 | Hall sensor 1
1 | Hall sensor 2
2 | Hall sensor 3

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3128, 0x00))  # Print the state of hall sensors
   time.sleep(1)                     # wait 1 seconds


3129.01h NodeId-Switch - state

Name | IO_DIN_NodeIdSwitch
Designation | NodeId-Switch - state
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.01.10
Devices | All
PLC Function | DinNodeId()
Cross reference | -

Description

Provides the actual status of the HEX-switches, setting of NodeId.

If the NodeId is changed by software, the HEX-switches are not used to set NodeId of device and they can be used in other way (e.g in application).

 Bit assignment:
Bit-Nr. | Meaning
7.. 4 | NodeId-Hi
3 .. 0 | NodeId-Lo

Only available in devices with HEX-Switches.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # Node ID = 1

print "Node-Id switch:", d.SdoRd(0x3129, 0x01) # IO_DIN_NodeIdSwitch


3154.00h Enable digital outputs

Name | IO_DOUT_Enable
Designation | Enable digital outputs
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.85.00.08
Devices | All
PLC Function | -
Cross reference | DEV_DoutError, IO_DOUT_P0, MOTOR_HALL_DoutPulses_Mode, MOTOR_BrakeManagement_Config

Description

With the help of this parameter digital outputs can be locked or unlocked.

This is only valid for the parameter 3150.00h (IO_DOUT_P0), the firmware itself can set the outputs
furthermore.

The lock prevents that the state of the digital output is changed accidentally or unjustified, when the output is already used by internal functions of the firmware (e.g. brake management, error output, etc.).

The amount of digital outputs, which are available, depends on the device (see technical data of the device).

Bit assignment:
Bit-Nr. | Meaning
0 | digital output 0 (=1 enable, =0 disable)
1 | digital output 1 (=1 enable, =0 disable)
2 | digital output 2 (=1 enable, =0 disable)
3 | digital output 3 (=1 enable, =0 disable)
4 | digital output 4 (=1 enable, =0 disable)
5 | digital output 5 (=1 enable, =0 disable)
6 | digital output 6 (=1 enable, =0 disable)
7 | digital output 7 (=1 enable, =0 disable)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# enable digital output of Port0 with bitmask
set_dout = 0x02             # set only bit 1 (dout1)
d_out = (d.SdoRd(0x3154, 0x00) | set_dout)
d.SdoWr(0x3154, 0x00, d_out)

# disable digital output of Port0 with bitmask
reset_dout = 0x01          # reset only bit 0 (dout0)
d_out = (d.SdoRd(0x3154, 0x00) & ~reset_dout)
d.SdoWr(0x3154, 0x00, d_out)

# print the digital output of Port0
print "enable_Dout =", hex(d.SdoRd(0x3154, 0x00))


3224.00h Dynamic current limit - mode

Name | CURR_DynLimitMode
Designation | Dynamic current limit - mode
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1, *2} *since firmware version 1.93.00.FC
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitMode(value), CurrDynLimitOn(), CurrDynLimitOff()
Cross reference | CURR_DynLimitPeak, CURR_DynLimitCont, CURR_DynLimitTime

Description

This parameter activates and deactivates the dynamic limitation of the current I*t or I²t.

Parameter value:
Value | Description
0 | Dynamic limitation of the current deactivated
1 | Dynamic limitation of the current I*t activated
2 | Dynamic limitation of the current I²t activated
You can find a detailed description of this function at the parameter CURR_DynLimitPeak, CURR_DynLimitCont and CURR_DynLimitTime.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.01h Dynamic current limit - peak current

Name | CURR_DynLimitPeak
Designation | Dynamic current limit - peak current
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitPeak(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitCont, CURR_DynLimitTime

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter sets the peak current for both the positive and the negative rotating direction.

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the area of current and time (Ixt or I²t). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt or I²t , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Dynamic limitation of the current I²t

To activate this function you have to set the parameter CURR_DynLimitMode to 2. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip²-Ic²)dt represents the maximum allowed power. If the actual power ∫(Im²-Ic²)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.02h Dynamic current limit - continues current

Name | CURR_DynLimitCont
Designation | Dynamic current limit - continues current
Data type | int32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | = peak current of the device. Defaul Value depends of the device (see technical data)
Unit | [mA]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitCont(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitPeak, CURR_DynLimitTime

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter sets the continuous current for both the positive and the negative rotating direction

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the area of current and time (Ixt or I²t). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt or I²t , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Dynamic limitation of the current I²t

To activate this function you have to set the parameter CURR_DynLimitMode to 2. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip²-Ic²)dt represents the maximum allowed power. If the actual power ∫(Im²-Ic²)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3224.03h Dynamic current limit - time

Name | CURR_DynLimitTime
Designation | Dynamic current limit - time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 10000]
Default value | 1000
Unit | [ms]
Operating mode | All
Available since | 1.64.00.71
Devices | All
PLC Function | CurrDynLimitTime(value)
Cross reference | CURR_DynLimitMode, CURR_DynLimitPeak, CURR_DynLimitCont

Description

Dynamic limitation of the current

The dynamic limitation of the current I*t limits the desired value of the controller depending on the actual current of the motor and the time.
This parameter sets the time for the peak current limit.

Peak current must only flow for a certain time. This time is defined in parameter CURR_DynLimitTime. After this time the current decreases to the continuous current (CURR_DynLimitCont). This is only valid, if the current was limited to the peak current (CURR_DynLimitPeak) all the time. If the current is above the continuous current (CURR_DynLimitCont) but below the peak current (CURR_DynLimitPeak), the valid time will be calculated using the area of current and time (Ixt or I²t). In order for the current to be able to raise above the continuous current, it has to recover accordingly. Therefore the current has to stay below the continuous current for the according time.

Is the recovery only half the prdouct of Ixt or I²t , the current can only raise above the continuous level for half the time.

Independent of the activation or deactivation of the dynamic current limitation, the static limitation of the current (CURR_LimitMaxPos, CURR_LimitMaxNeg) is always active. The following diagram shows the interaction of both current limitations.

Diagram - Interaction of the current limitations

Dynamic limitation of the current Ixt

To activate this function you have to set the parameter CURR_DynLimitMode to 1. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip-Ic)dt represents the maximum allowed power. If the actual power ∫(Im-Ic)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Dynamic limitation of the current I²t

To activate this function you have to set the parameter CURR_DynLimitMode to 2. By default this function is deactivated.

To achieve correct limitation you have to have a stable running controller. If the controller is not stable, the current may exceed the limits.

The area that is calculated from the difference of peak current and continuous current ∫(Ip²-Ic²)dt represents the maximum allowed power. If the actual power ∫(Im²-Ic²)dt ) exceeds the maximum allowed power the current will be limited. This can protect the motor against overload.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                   # NodeId = 1

# print the parameters
print "Dynamische Strombegrenzung:"
print " Enabled              =", d.SdoRd(0x3224, 0x00)         # CURR_DynLimitMode
print " peak current         =", d.SdoRd(0x3224, 0x01), "[mA]" # CURR_DynLimitPeak
print " continous current    =", d.SdoRd(0x3224, 0x02), "[mA]" # CURR_DynLimitCont
print " time                 =", d.SdoRd(0x3224, 0x03), "[ms]" # CURR_DynLimitTime
print " actual current limit =", d.SdoRd(0x3224, 0x12), "[mA]" # CURR_ActDynLimitCurrent

# write the parameters
d.SdoWr(0x3224, 0x00, 1)     # CURR_DynLimitMode - activate dyn. current limit
d.SdoWr(0x3224, 0x01, 1500)  # CURR_DynLimitPeak - peak current      = 1500 mA
d.SdoWr(0x3224, 0x02, 1000)  # CURR_DynLimitCont - continous current = 1000 mA
d.SdoWr(0x3224, 0x03, 1500)  # CURR_DynLimitTime - peak time         = 1500 ms


3350.00h Velocity feedback

Name | VEL_Feedback
Designation | Velocity feedback
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 112h, 94Ah, 96Ah, 97Ah, 990h, 991h, 96A20h}
Default value | 0h
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelFeedback(value), VelFeedbackAin0(), VelFeedbackAuto(), VelFeedbackUm(), VelFeedbackEmk(), VelFeedbackHall(), VelFeedbackEnc()
Cross reference | IO_AIN_Voltage_Um, MOTOR_Nn, MOTOR_Un, MOTOR_PolN, MOTOR_ENC_Resolution

Description

This parameter defines the source of the feedback of the velocity and the positioning controller.
Not every feedback can be used for every type of motor. The hall feedback can only be applied to brushless motors. If you have a controller with encoder input you can use the encoder feedback for both motor types.

Remarks:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.
  • This parameter defines the feedback for the positioning controller, also. Therefore, in positioning mode you have to set this parameter to 0x96A (MOTOR_ENC_ActualPosition) if you have a brush type motor with encoder.
Parameter values:
Values (Hex) | Name | Description
0 | Default | Brush type motors - emf feedback Brushless motors - hall feedback
0100h | IO_AIN0 | Feedback through the analogue input 0 (DC-motors only)
0112h | IO_AIN_VOLTAGE_Um | EMF feedback
094Ah | MOTOR_HALL_ActualPosition | Hall feedback (brushless motors only)
096Ah | MOTOR_ENC_ActualPosition | Encoder feedback
096A20h | MOTOR_ENC_INC2_ActualPosition | SPI Encoder feedback Caution: Only drive controllers with SPI-Interface
097Ah | MOTOR_ENC_SSI_ActualPosition | Absolute encoder feedback Caution: Only drive controllers with SSI-Interface
0990h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 0 feedback
0991h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 1 feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

d.Disable()                      # DEV_Enable - disable

print "VelFeedback =", hex(d.SdoRd(0x3350, 0x00)) # VEL_Feedback

d.SdoWr(0x3350, 0x00, 0x096A)    # VEL_Feedback - encoder feedback
d.SdoWr(0x3003, 0x00, 3)         # DEV_Mode - velocity mode
d.SdoWr(0x3300, 0x00, 0)         # VEL_DesiredValue - velocity = 0


3550.00h SVel feedback

Name | SVEL_Feedback
Designation | SVel feedback
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 112h, 94Ah, 96Ah, 97Ah, 990h, 991h, 96A20h}
Default value | 0h
Unit | -
Operating mode | Velocity,Position,SVelocity
Available since | 1.00.00.00
Devices | All
PLC Function | SVelFeedback(value), SVelFeedbackAuto(), SVelFeedbackUm(), SVelFeedbackEmk(), SVelFeedbackHall(), SVelFeedbackEnc()
Cross reference | IO_AIN_Voltage_Um, MOTOR_Nn, MOTOR_Un, MOTOR_PolN, MOTOR_ENC_Resolution

Description

This parameter defines the source of the SVEL-feedback.
Not every feed back can be used for every type of motor. The hall feedback can only be applied to brushless motors. If you have a controller with encoder input you can use the encoder feedback for both motor types.

Remarks:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.
  • This parameter defines the feedback for the positioning controller, also. Therefore, in positioning mode you have to set this parameter to 0x96A (MOTOR_ENC_ActualPosition) if you have a brush type motor with encoder.
Parameter values:
Values (Hex) | Name | Description
0 | Default | Brush type motors - emf feed back Brushless motors - PWM actuator
0112h | IO_AIN_VOLTAGE_Um | Emf feedback
094Ah | MOTOR_HALL_ActualPosition | Hall feedback (brushless motors only)
096Ah | MOTOR_ENC_ActualPosition | Encoder feedback
096A20h | MOTOR_ENC_INC2_ActualPosition | SPI Encoder feedback Caution: Only drive controllers with SPI-Interface
097Ah | MOTOR_ENC_SSI_ActualPosition | Absolute encoder feedback Caution: Only drive controllers with SSI-Interface
0990h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 0 feedback
0991h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 1 feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                           # DEV_Enable - disable

# print actual parameters
print "SVelFeedback =", hex(d.SdoRd(0x3550, 0x00)) # SVEL_Feedback

# set new parameters
d.SdoWr(0x3550, 0x00, 0x096A)                      # SVEL_Feedback - encoder feedback


3708.00h Position mode

Name | POS_Mode
Designation | Position mode
Data type | int8
Access | read / write
Attributs | Save
Value range | {0, 1, 2}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.17
Devices | All
PLC Function | PosMode(value), PosModeInterp(), PosModeInterpolation(), PosModeModulo()
Cross reference | POS_ModuloMethod, POS_ModuloValue

Description

This parameter defines the operation mode of the positioning

Parameter values:
Value Name Description
0 Positioning "General" Positioning
1 Interpolation The desired positions are sent periodically by a host (master) to the controller. If the refresh rate is greater than the sample rate of the positioning controller, positions in between are calculated by interpolation. The refresh rate of the master has to be a multiple of the sample rate of the controller.
Using this operation mode of the positioning you can realise applications with several synchronised axes. E.g.:
  • Continuous path control
  • Cam disc
Detailed descriptions you can find at the parameters POS_InterpMethod, POS_InterpTimePeriod and POS_InterpReference.
2 Modulo-Positioning This mode is called "round index table function" also.

E.g.: Setting the parameter POS_ModuloValue to 50, the position sequence is as follows:

in positive direction  ... 45 46 47 48 49 0  1  2  3  4  5 ...
in negative direction  ...  5  4  3  2  1 0 49 48 47 46 45 ...

Detailed descriptions you can find at the parameter POS_ModuloMethod.

  • Interpolation - system configuration with several axes

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

# print actual parameter
print "PosMode =", d.SdoRd(0x3708, 0x00)

# set new parameter
d.SdoWr(0x3708, 0x00, 2)   # Modulo-Mode


374C.11h Jerk acceleration

Name | POS_Ramp_JerkFactorAcc
Designation | Jerk acceleration
Data type | uint16
Access | read / write
Attributs | -
Value range | [1 .. 100]
Default value | 100
Unit | [%]
Operating mode | Position
Available since | 1.93.00.EB
Devices | All
PLC Function | -
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV, VEL_Dec_dT, POS_RampType, POS_Ramp_JerkFactorDec

Description

With this parameter the smoothening of the S² acceleration ramp can be set. With the change of this parameter ramp profiles between a trapezoidal and the standard S² ramp can be achieved.

The mean acceleration is set with the parameters VEL_Acc_dV and VEL_Acc_dT. The smoothening of the ramp is set in percent. The value 1 leads to the trapezoidal ramp and the value 100 to the standard S² ramp.
The maximum acceleration of the S² ramp in its turning point is twice as high (+100%) as the mean acceleration. With a smoothening of 50% a curved ramp with maximum acceleration of 1,5 times (+50%) of the mean acceleration is achieved. With a smoothening of 0% a linear acceleration, which is corresponding to the mean acceleration, is achieved.

The maximum acceleration is calculated as follows:

Acc_max = Acc * (1 + POS_Ramp_JerkFactorAcc / 100)

The higher the smoothening the lower is the maximum jerk (dA/dT).

The smoothening can be set separately for the acceleration and the deceleration ramp (POS_Ramp_JerkFactorAcc and POS_Ramp_JerkFactorDec).

This parameter will only have an effect if the ramp type (POS_RamType) is set to S².

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x374C, 0x00, 2)            # RampType S²
d.SdoWr(0x374C, 0x11, 50)           # POS_Ramp_JerkFactorAcc
d.SdoWr(0x374C, 0x12, 50)           # POS_Ramp_JerkFactorDec


374C.12h Jerk deceleration

Name | POS_Ramp_JerkFactorDec
Designation | Jerk deceleration
Data type | uint16
Access | read / write
Attributs | -
Value range | [1 .. 100]
Default value | 100
Unit | [%]
Operating mode | Position
Available since | 1.93.00.EB
Devices | All
PLC Function | -
Cross reference | VEL_Acc_dV, VEL_Acc_dT, VEL_Dec_dV, VEL_Dec_dT, POS_RampType, POS_Ramp_JerkFactorAcc

Description

With this parameter the smoothening of the S² acceleration ramp can be set. With the change of this parameter ramp profiles between a trapezoidal and the standard S² ramp can be achieved.

The mean acceleration is set with the parameters VEL_Acc_dV and VEL_Acc_dT. The smoothening of the ramp is set in percent. The value 1 leads to the trapezoidal ramp and the value 100 to the standard S² ramp.
The maximum acceleration of the S² ramp in its turning point is twice as high (+100%) as the mean acceleration. With a smoothening of 50% a curved ramp with maximum acceleration of 1,5 times (+50%) of the mean acceleration is achieved. With a smoothening of 0% a linear acceleration, which is corresponding to the mean acceleration, is achieved.

The maximum acceleration is calculated as follows:

Acc_max = Acc * (1 + POS_Ramp_JerkFactorAcc / 100)

The higher the smoothening the lower is the maximum jerk (dA/dT).

The smoothening can be set separately for the acceleration and the deceleration ramp (POS_Ramp_JerkFactorAcc and POS_Ramp_JerkFactorDec).

This parameter will only have an effect if the ramp type (POS_RamType) is set to S².

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x374C, 0x00, 2)            # RampType S²
d.SdoWr(0x374C, 0x11, 50)           # POS_Ramp_JerkFactorAcc
d.SdoWr(0x374C, 0x12, 50)           # POS_Ramp_JerkFactorDec


Content - Parameters 3000h (DSA) - Interpolation

37C1.00h | POS_InterpStatus | Interpolation - status
37C2.00h | POS_InterpMethod | Interpolation - method
37C2.01h | POS_InterpTime | Interpolation - time
37C2.02h | POS_InterpReference | Interpolation - reference
37C5.00h | POS_InterpBufConfig | Interpolation - buffer configuration
37C6.00h | POS_InterpData | Interpolation - data
37C7.00h | POS_InterpActualTargetPosition | Interpolation - actual target position
37C7.01h | POS_InterpActualCommandPosition | Interpolation - actual command position
37C7.02h | POS_InterpActualPosition | Interpolation - actual position


37C1.00h Interpolation - status

Name | POS_InterpStatus
Designation | Interpolation - status
Data type | uint16
Access | read only
Attributs | -
Value range | -
Default value | 0h
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | -
Cross reference | POS_Mode, POS_InterpMethod, POS_InterpBufConfig, POS_InterpData

Description

This parameter provides the actual interpolationstatus. The inhterpolationstatus is useful for diagnostics.

Bit assignments:
Bit Name Description
0 Enabled Bit = 0 - Interpolation mode is deactivated
Bit = 1 - Interpolation mode is activated
1 Error Bit = 0 - No error occured
Bit = 1 - Error occured
2 Warning Bit = 0 -No warning occured
Bit = 1 - Warning occured
3 Armed Bit = 0 - Buffer contains no valid data
Bit = 1 - Buffer contains valid data
4 Active Bit = 0 - Buffer is not active
Bit = 1 - Buffer is active
5 Data Lost Bit = 0 - No data lost
Bit = 1 - Data lost
6 Buffer Full Bit = 0 - Buffer is not full
Bit = 1 - Buffer is full

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

print "interpolation status =", hex(d.SdoRd(0x37C1, 0x00))


37C2.00h Interpolation - method

Name | POS_InterpMethod
Designation | Interpolation - method
Data type | uint8
Access | read only
Attributs | Save
Value range | {0}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | PosInterpolationMethod(value), InterpMethod(value)
Cross reference | POS_Mode, POS_InterpTime, POS_InterpReference

Description

This parameter provides the used interpolation method.

Parameter value:
Value | Description
0 | Linear interpolation
  • Linear interpolation

The points between the interpolation points (diagram: calculated points) are calculated by the linear equation:

Pi+j = Mn + (Mn+1 - Mn) / N * j

 j = [0..N]

 N = TM / TP
Interpolation - Detail A

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C2.01h Interpolation - time

Name | POS_InterpTime
Designation | Interpolation - time
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 1000000]
Default value | 2000
Unit | [us]
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | PosInterpolationTime(time_us), InterpTime(time_us)
Cross reference | POS_InterpMethod, POS_InterpReference

Description

This parameter defines the interpolation time.
A master (e.g. PLC) can send a new set of interpolation points to the controllers periodically with its own master cycle.
Until to the next set every controller has to calculate the points in between (interpolate). This is done with the cycle time of the controller (see Parameter VEL_SampleTime). Therefore, the cycle of the master ( = interpolation time) has to be a multiple of the cycle of the controller.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C2.02h Interpolation - reference

Name | POS_InterpReference
Designation | Interpolation - reference
Data type | uint8
Access | read / write
Attributs | Save
Value range | [1 .. 100]
Default value | 1
Unit | [rev]
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | PosInterpolationReference(value), InterpReference(value)
Cross reference | POS_InterpMethod, POS_InterpTime

Description

This parameter defines the relation between the interpolation data and the revolution of the encoder.
That means how many revolutions of the encoder are needed to reach the value 100000000h ( = 232 ).

The following diagrams show examples for POS_InterpReference=1 and POS_InterpReference=2.

Interpolation - Referenz, 1 Umdrehung

Interpolation - Referenz, 2 Umdrehung

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C5.00h Interpolation - buffer configuration

Name | POS_InterpBufConfig
Designation | Interpolation - buffer configuration
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | PosInterpolationBufConfig(value), InterpBufConfig(value)
Cross reference | POS_InterpData

Description

With this parameter you can configure the buffer for interpolation positions (Parameter POS_InterpData).

Bit assignments:
Bit | Name | Description
0 | INTERP_DATA_Relative | Bit = 0 The type of Parameters POS_InterpData is an Uint32. The data is taken as absolute target positions. The target will be reached by the shortest way. Bit = 1 The type of Parameters POS_InterpData is an Uint32. The data is taken as relative target positions.
1 | INTERP_DATA_Normalized | Bit = 0 The type of Parameters POS_InterpData is an Uint32. The data is interpreted normalized. Bit = 1 The type of Parameters POS_InterpData is an Uint32. The data is not normalized. The unit is defined by bit 2 "INTERP_DATA_UseFactorGroup".
2 | INTERP_DATA_UseFactorGroup | This bit only interpreted if bit 1 "INTERP_DATA_Normalized" is set to 1. Bit = 0 The type of Parameters POS_InterpData is an Uint32. The data is interpreted in increments. Bit = 1 The type of Parameters POS_InterpData is an Uint32. The data is interpreted in the unit defined by the factor group settings.
3..7 | Reserved | -

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C6.00h Interpolation - data

Name | POS_InterpData
Designation | Interpolation - data
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | PosInterpolationData(value), InterpData(value)
Cross reference | POS_InterpBufConfig

Description

This parameter is a buffer for the interpolation data. The buffer configuration (POS_InterpBufConfig) decides whether the data of the buffer is taken as an absolute or as a relative target position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C7.00h Interpolation - actual target position

Name | POS_InterpActualTargetPosition
Designation | Interpolation - actual target position
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | InterpActTrgPos()
Cross reference | POS_InterpActualCommandPosition, POS_InterpActualPosition

Description

This parameter provides the actual target position in the interpolation mode. This position equals the interpolation data (POS_InterpData).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C7.01h Interpolation - actual command position

Name | POS_InterpActualCommandPosition
Designation | Interpolation - actual command position
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | InterpActCmdPos()
Cross reference | POS_InterpActualTargetPosition, POS_InterpActualPosition

Description

This parameter provides the actual command position in the interpolation mode.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C7.02h Interpolation - actual position

Name | POS_InterpActualPosition
Designation | Interpolation - actual position
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | Position
Available since | 1.71.01.19
Devices | All
PLC Function | InterpActPos()
Cross reference | POS_InterpActualTargetPosition, POS_InterpActualCommandPosition

Description

This parameter provides the actual position in the interpolation method.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # DS2000_RestoreDefaultParameters_Application - Set default parameter 0x6000
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Set default parameter 0x3000

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - Motor type - BLDC
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN - Motor pole number
d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity - Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - VEL Feedback - Encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - SVEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution - Encoder resolution in inc.

d.SdoWr(0x3310, 0x00, 10)                 # VEL_Kp - VEL PID-Controller - gain
d.SdoWr(0x3314, 0x00, 1000)               # VEL_Kvff - VEL PID-Controller - velocity feed forward [o/oo]

d.SdoWr(0x3003, 0x00, 7)                  # DEV_Mode - Mode of operation - position mode

d.SdoWr(0x3708, 0x00, 1)                  # POS_Mode - Position mode - Interpolation
d.SdoWr(0x37C2, 0x01, INTERPOLATION_TIME_MS*1000) # POS_InterpTime - Interpolation - time [us]
d.SdoWr(0x37C5, 0x00, 3)                  # POS_InterpBufConfig - Interpolation - buffer configuration
                                          #    bit 0: 0=InterpData as absolute position  1: InterpData as relative position
                                          #    bit 1: 0=InterpData is normalised         1: InterpData is in counts

d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable

StartPos  = 0
TargetPos = StartPos

d.SdoWr(0x3762, 0x00, TargetPos)          # POS_ActualPosition - Set current position
d.SdoWr(0x37C6, 0x00, TargetPos)          # POS_InterpData - Interpolation - data

ts  = d.SdoRd(0x3850, 0x00)               # SYS_Clock - System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shifting

angle = 0.0
i = 1

print "method:" ,d.SdoRd(0x37C2, 0x00)   # POS_InterpMethod

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # SYS_Clock - System clock
      pass
   i += 1
   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x37C6, 0x00, TargetPos)       # POS_InterpData - Interpolation - data

   if i == 10:
     print
     print "target pos:" ,d.SdoRd(0x37C7, 0x00)  # POS_InterpActualTargetPosition
     print "actual pos:", d.SdoRd(0x37C7, 0x02)  # POS_InterpActualPosition
     print "command pos:" ,d.SdoRd(0x37C7, 0x01) # POS_InterpActualCommandPosition
     i = 1


37C8.00h Modulo method

Name | POS_ModuloMethod
Designation | Modulo method
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1, 2}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.71.01.27
Devices | All
PLC Function | PosModuloMethod(value)
Cross reference | POS_Mode, POS_ModuloValue

Description

This parameter defines the modulo mode of the positioning function. This mode lis only active, if parameter POS_Mode is set to 2.

Parameter value:
Value | Name | Description
0 | MODULO_METHOD_ShortPath | The drive takes the shortest way to the target.
1 | MODULO_METHOD_PosOnly | The drive runs in positive direction only.
2 | MODULO_METHOD_NegOnly | The drive runs in negative direction only.
In the following examples the parameter POS_ModuloValue is set to 1000. That means the absolute positions are limited to 0 ... 999.
It is possible that the drive runs through 0 depending on start and target position.

Shortest Way start position = 0, target positions = 250 and 750

Modulo - kürzeste Strecke

start position = 0, target positions = 499 and 500

Modulo - kürzeste Strecke - Grenzfälle

Movement in positive direction only start position = 0, target positions = 250 and 750

Modulo - nur positiv

Movement in negative direction only start position = 0, target positions = 250 and 750

Modulo - nur negative Richtung

Example

# -*- coding: iso-8859-1 -*-
import time
from mc.dsa import *

MODULO_VALUE = 30

d = Dsa(1)                            # NodeId = 1

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Default parameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 1)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN

   d.SdoWr(0x3350, 0x00, 0)           # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 0)           # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 5000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 5000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3310, 0x00, 60)          # VEL_Kp
   d.SdoWr(0x3311, 0x00, 5)           # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3510, 0x00, 200)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 200)         # SVEL_Ki

   d.SdoWr(0x3003, 0x00, 7)           # DEV_Mode -> Position mode

InitPars(d)

d.SdoWr(0x3708, 0x00, 2)              # POS_Mode -> Modulo positioning
d.SdoWr(0x37C8, 0x00, 1)              # POS_ModuloMethod -> MODULO_METHOD_PosOnly
d.SdoWr(0x37C9, 0x00, MODULO_VALUE)   # POS_ModuloValue

d.SdoWr(0x3300, 0x00, 3000)           # VEL_DesiredValue
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - Enable

print "Start..."

for i in xrange(10):
   if i%2:
      d.SdoWr(0x3790, 0x00, MODULO_VALUE-1)   # POS_Mova
   else:
      d.SdoWr(0x3790, 0x00, MODULO_VALUE/2-1) # POS_Mova

   time.sleep(1)

   print "ActPos = ", d.SdoRd(0x3762, 0x00)   # POS_ActualPosition


37C9.00h Modulo value

Name | POS_ModuloValue
Designation | Modulo value
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 2147483647]
Default value | 1
Unit | -
Operating mode | Position
Available since | 1.71.01.27
Devices | All
PLC Function | PosModuloValue(value)
Cross reference | POS_Mode, POS_ModuloMethod

Description

This parameter defines the so called modulo value for the modulo positioning (round table function).

Example:

 If the parameter POS_ModuloValue is set to 50, the position sequence is as follows:

   in positive direction  ... 45 46 47 48 49 0  1  2  3  4  5 ...
   in negative direction  ...  5  4  3  2  1 0 49 48 47 46 45 ...

More examples you can find at the parameter POS_ModuloMethod.

Example

# -*- coding: iso-8859-1 -*-
import time
from mc.dsa import *

MODULO_VALUE = 30

d = Dsa(1)                            # NodeId = 1

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Default parameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 1)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN

   d.SdoWr(0x3350, 0x00, 0)           # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 0)           # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 5000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 5000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3310, 0x00, 60)          # VEL_Kp
   d.SdoWr(0x3311, 0x00, 5)           # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3510, 0x00, 200)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 200)         # SVEL_Ki

   d.SdoWr(0x3003, 0x00, 7)           # DEV_Mode -> Position mode

InitPars(d)

d.SdoWr(0x3708, 0x00, 2)              # POS_Mode -> Modulo positioning
d.SdoWr(0x37C8, 0x00, 1)              # POS_ModuloMethod -> MODULO_METHOD_PosOnly
d.SdoWr(0x37C9, 0x00, MODULO_VALUE)   # POS_ModuloValue

d.SdoWr(0x3300, 0x00, 3000)           # VEL_DesiredValue
d.SdoWr(0x3004, 0x00, 1)              # DEV_Enable - Enable

print "Start..."

for i in xrange(10):
   if i%2:
      d.SdoWr(0x3790, 0x00, MODULO_VALUE-1)   # POS_Mova
   else:
      d.SdoWr(0x3790, 0x00, MODULO_VALUE/2-1) # POS_Mova

   time.sleep(1)

   print "ActPos = ", d.SdoRd(0x3762, 0x00)   # POS_ActualPosition


3830.00h PWM frequency

Name | PWM_Frequency
Designation | PWM frequency
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {12500, 25000, 32000, 50000, *100000, *200000} *since firmware version 1.93.00.CD
Default value | 25000
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | PwmFreq(value)
Cross reference | -

Description

Using this parameter you can set the PWM frequency.

A PWM-frequency of 200 kHz is only possible for the device EDC-E65 and EDC-E65-M.

Attention
The lower the PWM-frequency and the inductance of the motor, the warmer (higher losses) becomes the motor in still stand.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency
   d.SdoWr(0x3830, 0x01, 1)                        # PWM_Mode


3830.01h PWM mode

Name | PWM_Mode
Designation | PWM mode
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | PwmMode(value), PwmModeSym(), PwmModeAsym()
Cross reference | -

Description

This parameter defines the mode of the PWM signal.

Parameter value
Value | Name | Description
0 | PWM_Symetric | If the motor is in still stand without a load, the PWM signal is 50%. That equals an average voltage of 0V.
1 | PWM_Asymetric | If the motor is in still stand without a load, the PWM signal is 0%. Therefore the relative PWM signal is "positive" or "negative" depending on the direction. Since this mode has very low losses in still stand, it is particularly suitable for motors with low inductances.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency
   d.SdoWr(0x3830, 0x01, 1)                        # PWM_Mode


Content - Parameters 3000h (DSA) - Functional Safety

3868.01h | PAR_SI_STO_Cmd | Device Safe Torque Off Commands
3868.05h | PAR_SI_STO_Config | Device Safe Torque Off Configuration
3868.23h | PAR_SI_STO_Version | Device Safe Torque Off Software Version


3868.01h Device Safe Torque Off Commands

Name | PAR_SI_STO_Cmd
Designation | Device Safe Torque Off Commands
Data type | uint32
Access | write only
Attributs | -
Value range | {43495053h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.97.00.24 (PAR_SI_STO_Version 1.04.00.00)
Devices | All
PLC Function | -
Cross reference | PAR_SI_STO_Config

Description

Writing to this parameter excecutes a Safe Torque Off command.

Parameter values:
Value (Hex) | Value (Dec) | Name | Description
43495053h | 1128878163 | STO_Cmd_PwrEnableInterlockClear | clears safe torque off motor power interlock

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3868, 0x01, 0x43495053)   # clear power enable interlock
#PAR_SI_STO_Version


3868.05h Device Safe Torque Off Configuration

Name | PAR_SI_STO_Config
Designation | Device Safe Torque Off Configuration
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 4]
Default value | -
Unit | -
Operating mode | All
Available since | 1.97.00.24 (PAR_SI_STO_Version 1.04.00.00)
Devices | All
PLC Function | -
Cross reference | PAR_SI_STO_Cmd

Description

Writing to this parameter configurates the Safe Torque Off behavior.

Parameter values:
BitNo | Function | Description
0 | reserved | -
1 | reserved | -
2 | reserved | -
3 | reserved | -
4 | PwrEnableInterlock | 0 = set power enable interlock off, 1 = set power enable interlock on

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3868, 0x05, 0x10)   # set power enable interlock on
#PAR_SI_STO_Version


3868.23h Device Safe Torque Off Software Version

Name | PAR_SI_STO_Version
Designation | Device Safe Torque Off Software Version
Data type | const uint32
Access | read only
Attributs | -
Value range | [00000000h .. FFFFFFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.97.00.24 (PAR_SI_STO_Version 1.04.00.00)
Devices | All
PLC Function | -
Cross reference | PAR_SI_STO_Config, PAR_SI_STO_Cmd

Description

Provides a safety software version code of the device

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)           # NodeId = 1

print "SafetySoftwareVersion: 0x%08X" % (d.SdoRd(0x3868, 0x23))
#PAR_SI_STO_Version


3913.00h Motor commutation type

Name | MOTOR_CommutationType
Designation | Motor commutation type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {00h, 10h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.91.00.27
Devices | All
PLC Function | -
Cross reference | MOTOR_Commutation_Referencing, MOTOR_Commutation_Polarity

Description

The parameter defines the type of the motor commutation.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Information about the commutation scheme can be found in the application note AN_CommutationScheme.
Parameter values:
Value | Description
0 | Block commutation
0x10 | Encoder block commutation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.07h Motor commutation polarity

Name | MOTOR_Commutation_Polarity
Designation | Motor commutation polarity
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | [0 .. 7]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.91.00.34
Devices | All
PLC Function | -
Cross reference | MOTOR_Commutation_Referencing, MOTOR_CommutationType

Description

This parameter sets the commutation polarity of the motor.

Assignment of the bits:
Bit | Description
0 | Encoder commutation: 0-positive, 1-negative
1 | Sectors: 0-positive, 1-negative
2 | Direction: 0-positive, 1-negative

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.10h Encoder commutation referencing

Name | MOTOR_Commutation_Referencing
Designation | Encoder commutation referencing
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [mA]
Operating mode | All
Available since | 1.85.00.21
Devices | All
PLC Function | -
Cross reference | MOTOR_Commutation_Polarity, MOTOR_CommutationType

Description

Writing to this parameter starts the encoder adjustment with specified current. The value of the parameter defines the current. The encoder adjustment must be always performed after the start of the controller. Otherwise the controller generates the error -730.
After successful adjustment, the commutation works over encoder signals. The Hall signals are not needed for this.

Reading from this parameter gives information, if the adjustment was performed or not. The value 1 means, that the adjustment was performed successful.

ATTENTION

After executing the command, the shaft of the motor can move jerkily.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3913.11h Encoder commutation referencing mode

Name | MOTOR_Commutation_ReferencingMode
Designation | Encoder commutation referencing mode
Data type | int32
Access | read / write
Attributs | -
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.93.00.D0
Devices | All
PLC Function | -
Cross reference | MOTOR_Commutation_Polarity, MOTOR_CommutationType

Description

With this parameter the encoder referencing method can be choosen.

Value | Name | Description
0 | Encoder commutation referencing | manual commutation referencing, executed with the parameter MOTOR_Commutation_Referencing
1 | Hall referencing | automatic commutation referencing, executed by the hall sensors during a regular movement

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear Errors
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, 1<<3)               # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Inc. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Inc. encoder

d.SdoWr(0x3913, 0x00, 0x10)               # MOTOR_Commutation_Type - block encoder
d.SdoWr(0x3913, 0x11, 1)                  # MOTOR_Commutation_ReferencingMode - hall referencing
d.SdoWr(0x3913, 0x20, 1)                  # PreCommutationConfig - enable
d.SdoWr(0x3913, 0x21, 3000)               # PreCommutationVel - 3000 rpm
d.SdoWr(0x3913, 0x23, 15)                 # PreCommutationAngle - 15°

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Veloctiy mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


3944.01h Hall diagnostics - wrong pulses

Name | MOTOR_HALL_Diag_ErrCnt1
Designation | Hall diagnostics - wrong pulses
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.81.01.01
Devices | All
PLC Function | HallDiagErrCounter(nr, value)
Cross reference | MOTOR_HALL_Diag_ErrCnt2

Description

This parameter lets you diagnose hall signals.
In case of three hall sensors there are theoretically 8 states [0..7]. Because of the electrical construction states 0 and 7 shouldn't occur (the motor with hall typ = 120°).
MOTOR_HALL_Diag_ErrCnt1 counts wrong states.

Right-hand motion (Hall typ=120°):

° electrical | Hall sensor 1 | Hall sensor 2 | Hall sensor 3 | ° mechanical 2 pole pairs | ° mechanical 4 pole pairs | ° mechanical 5 pole pairs
0 | 1 | 0 | 0 | 0 | 0 | 0
60 | 1 | 1 | 0 | 30 | 15 | 12
120 | 0 | 1 | 0 | 60 | 30 | 24
180 | 0 | 1 | 1 | 90 | 45 | 36
240 | 0 | 0 | 1 | 120 | 60 | 48
300 | 1 | 0 | 1 | 150 | 75 | 60
360 | 1 | 0 | 0 | 180 | 90 | 72

Left-hand motion (Hall typ=120°):

° electrical | Hall sensor 1 | Hall sensor 2 | Hall sensor 3 | ° mechanical 2 pole pairs | ° mechanical 4 pole pairs | ° mechanical 5 pole pairs
0 | 1 | 0 | 0 | 0 | 0 | 0
60 | 1 | 0 | 1 | 30 | 15 | 12
120 | 0 | 0 | 1 | 60 | 30 | 24
180 | 0 | 1 | 1 | 90 | 45 | 36
240 | 0 | 1 | 0 | 120 | 60 | 48
300 | 1 | 1 | 0 | 150 | 75 | 60
360 | 1 | 0 | 0 | 180 | 90 | 72

Hint:
  • In case of the motor with 1 pole pair electrical and mechanical angles are the same. E.g the motor with 5 pole pairs has 5 time more impulses; it means 360° electrical corresponds with 72° mechanical.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


3944.02h Hall diagnostics - wrong order

Name | MOTOR_HALL_Diag_ErrCnt2
Designation | Hall diagnostics - wrong order
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.81.01.01
Devices | All
PLC Function | HallDiagErrCounter(nr, value)
Cross reference | MOTOR_HALL_Diag_ErrCnt1

Description

This parameter lets you diagnose hall signals.
The order of the hall signal coming is determined by the motor construction. MOTOR_HALL_Diag_ErrCnt2 counts wrong orders of signal coming .

Right-hand motion (Hall typ=120°):

° electrical | Hall sensor 1 | Hall sensor 2 | Hall sensor 3 | ° mechanical 2 pole pairs | ° mechanical 4 pole pairs | ° mechanical 5 pole pairs
0 | 1 | 0 | 0 | 0 | 0 | 0
60 | 1 | 1 | 0 | 30 | 15 | 12
120 | 0 | 1 | 0 | 60 | 30 | 24
180 | 0 | 1 | 1 | 90 | 45 | 36
240 | 0 | 0 | 1 | 120 | 60 | 48
300 | 1 | 0 | 1 | 150 | 75 | 60
360 | 1 | 0 | 0 | 180 | 90 | 72

Left-hand motion (Hall typ=120°):

° electrical | Hall sensor 1 | Hall sensor 2 | Hall sensor 3 | ° mechanical 2 pole pairs | ° mechanical 4 pole pairs | ° mechanical 5 pole pairs
0 | 1 | 0 | 0 | 0 | 0 | 0
60 | 1 | 0 | 1 | 30 | 15 | 12
120 | 0 | 0 | 1 | 60 | 30 | 24
180 | 0 | 1 | 1 | 90 | 45 | 36
240 | 0 | 1 | 0 | 120 | 60 | 48
300 | 1 | 1 | 0 | 150 | 75 | 60
360 | 1 | 0 | 0 | 180 | 90 | 72

Hint:
  • In case of the motor with 1 pole pair electrical and mechanical angles are the same. E.g the motor with 5 pole pairs has 5 time more impulses; it means 360° electrical corresponds with 72° mechanical.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                              # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 1)                              # DEV_Cmd - clear errors

d.SdoWr(0x3003, 0x00, 7)                              # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                              # VEL_DesiredValue - desired velocity = 0 [rpm]

d.SdoWr(0x3940, 0x00, 0)                              # MOTOR_HALL_Type - 120° hall sensors

d.SdoWr(0x3949, 0x00, 2)                              # MOTOR_HALL_DoutPulses_Mode - out A => pulses / out B => direction

d.SdoWr(0x3949, 0x01, 0x01)                           # MOTOR_HALL_DoutPulses_PosDirMask - dout0 => out A
d.SdoWr(0x3949, 0x02, 0x02)                           # MOTOR_HALL_DoutPulses_NegDirMask - dout1 => out B

d.SdoWr(0x3949, 0x03, 3)                              # MOTOR_HALL_DoutPulses_ModuloValue - 3 pulses => 0 -> 1

d.SdoWr(0x3004, 0x00, 1)                              # DEV_Enable - enable

# write movement command
d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0
d.SdoWr(0x3000, 0x11, 120)                            # DEV_CmdData1
d.SdoWr(0x3000, 0x01, 0x00)                           # DEV_Cmd_ExecOnChange - Toggle
d.SdoWr(0x3000, 0x01, 0x34)                           # DEV_Cmd_ExecOnChange - MovR

# print results
print "start hall position: ", d.SdoRd(0x394A, 0x00)  # MOTOR_HALL_ActualPosition
while 1:

   status = d.SdoRd(0x3002, 0x00)                     # DEV_Status - get status
   if (status & 0x0110) == 0x0110:                    # target reached? (Bit4 & Bit8 == 1)
      print "target reached"
      d.SdoWr(0x3004, 0x00, 0)
      break                                           # end loop

print "Diag Cnt 1: ", d.SdoRd(0x3944, 0x01)           # MOTOR_HALL_Diag_ErrCnt1
print "Diag Cnt 2: ", d.SdoRd(0x3944, 0x02)           # MOTOR_HALL_Diag_ErrCnt2

print "end hall position: ", d.SdoRd(0x394A, 0x00)    # MOTOR_HALL_ActualPosition


Content - Parameters 3000h (DSA) - Hall tuning

3946.00h | MOTOR_HALL_Tuning_Sector0 | Halltuning - sector 0
3946.01h | MOTOR_HALL_Tuning_Sector1 | Halltuning - sector 1
3946.02h | MOTOR_HALL_Tuning_Sector2 | Halltuning - sector 2
3946.03h | MOTOR_HALL_Tuning_Sector3 | Halltuning - sector 3
3946.04h | MOTOR_HALL_Tuning_Sector4 | Halltuning - sector 4
3946.05h | MOTOR_HALL_Tuning_Sector5 | Halltuning - sector 5
3946.08h | MOTOR_HALL_Tuning_WrEnable | Halltuning - write enable


3946.00h Halltuning - sector 0

Name | MOTOR_HALL_Tuning_Sector0
Designation | Halltuning - sector 0
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_Sector5, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.01h Halltuning - sector 1

Name | MOTOR_HALL_Tuning_Sector1
Designation | Halltuning - sector 1
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 5
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_Sector5, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.02h Halltuning - sector 2

Name | MOTOR_HALL_Tuning_Sector2
Designation | Halltuning - sector 2
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 4
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_Sector5, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.03h Halltuning - sector 3

Name | MOTOR_HALL_Tuning_Sector3
Designation | Halltuning - sector 3
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 6
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_Sector5, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.04h Halltuning - sector 4

Name | MOTOR_HALL_Tuning_Sector4
Designation | Halltuning - sector 4
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 2
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector5, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.05h Halltuning - sector 5

Name | MOTOR_HALL_Tuning_Sector5
Designation | Halltuning - sector 5
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | {1, 2, 3, 4, 5, 6}
Default value | 3
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_WrEnable

Description

This parameter is used to specify a hall sector for the according commutation point.
The parameter only has an effect if the hall sensor type is set to "User" (see MOTOR_HALL_Type)
A write enable has to be set in order to write values to the parameter (see MOTOR_HALL_Tuning_WrEnable).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3946.08h Halltuning - write enable

Name | MOTOR_HALL_Tuning_WrEnable
Designation | Halltuning - write enable
Data type | uint16
Access | read / write
Attributs | -
Value range | {0, 21930}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | MOTOR_HALL_Tuning_Sector0, MOTOR_HALL_Tuning_Sector1, MOTOR_HALL_Tuning_Sector2, MOTOR_HALL_Tuning_Sector3, MOTOR_HALL_Tuning_Sector4, MOTOR_HALL_Tuning_Sector5

Description

This parameter is used to set "write enable" if the hall sectors should be set manually.
In order to avoid change of hall sector by mistake, a change is only executed when a specific signature is written to this parameter. To enable the write access, the parameter has to be set to 0x55AA55AA. All others values disable the write access.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x3940,0, 2)          # HallType
d.SdoWr(0x3946,8, 0x55AA)     # Write enable
d.SdoWr(0x3946,0, 1)          # Sector 0 = 1
d.SdoWr(0x3946,1, 5)          # Sector 1 = 5
d.SdoWr(0x3946,2, 4)          # Sector 2 = 4
d.SdoWr(0x3946,3, 6)          # Sector 3 = 6
d.SdoWr(0x3946,4, 2)          # Sector 4 = 2
d.SdoWr(0x3946,5, 3)          # Sector 5 = 3


3961.22h mcSPI-IC2 encoder configuration - SPI address

Name | MOTOR_ENC_INC2_Config_McSpiAddr
Designation | mcSPI-IC2 encoder configuration - SPI address
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 255
Unit | -
Operating mode | All
Available since | 1.93.00.56
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | MOTOR_ENC_INC2_ActualPosition, MOTOR_ENC_INC2_Resolution_Cnt

Description

This parameter is used to configure the SPI address of an mcSPI-IC2 encoder. The value 255 disables the mcSPI-IC2 encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa

d = Dsa(1)

d.SdoWr(0x3961, 0x22, 0)                                    # MOTOR_ENC_INC2_Config_McSpiAddr - Addr 0
d.SdoWr(0x3962, 0x20, 500)                                  # MOTOR_ENC_INC2_Resolution_Cnt

print "Actual SPI encoder position:", d.SdoRd(0x396A, 0x20) # MOTOR_ENC_INC2_ActualPosition


3962.00h Encoder resolution in counts

Name | MOTOR_ENC_Resolution
Designation | Encoder resolution in counts
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 60000]
Default value | 2000
Unit | [counts]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | EncResolution(value), MotorEncResolution(value)
Cross reference | MOTOR_ENC_Resolution_lines

Description

Using this parameter you can define the resolution (in pulses per revolution) of the incremental encoder (rotary encoder).

Example:
  • Having an encoder with a resolution of 1024 „lines“ (bars) per revolution the parameter MOTOR_ENC_Resolution must be set to 4*1024 = 4096.

In case of an encoder feedback (see VEL_Feedback) this parameter is used by the velocity controller to define the relation between the desired and the actual value of the velocity. In other operation modes this parameter has no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


3962.20h mcSPI-IC2 encoder resolution in counts

Name | MOTOR_ENC_INC2_Resolution_Cnt
Designation | mcSPI-IC2 encoder resolution in counts
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 60000]
Default value | 2000
Unit | [counts]
Operating mode | All
Available since | 1.93.00.02
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | MOTOR_ENC_INC2_ActualPosition, MOTOR_ENC_INC2_Config_McSpiAddr

Description

Using this parameter you can define the resolution (in pulses per revolution) of the incremental mcSPI-IC2 encoder (rotary encoder).

Example:
  • Having an mcSPI-IC2 encoder with a resolution of 1024 „lines“ (bars) per revolution the parameter MOTOR_ENC_INC2_Resolution_Cnt must be set to 4*1024 = 4096.

In case of an mcSPI-IC2 encoder feedback (see VEL_Feedback) this parameter is used by the velocity controller to define the relation between the desired and the actual value of the velocity. In other operation modes this parameter has no effect.


3963.00h Encoder resolution in lines

Name | MOTOR_ENC_Resolution_lines
Designation | Encoder resolution in lines
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 60000]
Default value | 500
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | EncResolution_lines(value)
Cross reference | MOTOR_ENC_Resolution

Description

Using this parameter you can define the resolution (in "lines" per revolution) of the incremental encoder (rotary encoder).

Remark:
  • The counted "lines" are internally multiplied by four. You have to consider this when you set this value.
Example:
  • Having an encoder with a resolution of 1024 „lines“ (bars) per revolution the parameter MOTOR_ENC_Resolution_lines must be set to 1024.

This parameter is an alternative to MOTOR_ENC_Resolution. Both parameter are converted to each other during the setting according to the following equation:

MOTOR_ENC_Resolution = MOTOR_ENC_Resolution_lines * 4

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


3964.00h Encoder diagnostics - enable

Name | MOTOR_ENC_Diag_Enable
Designation | Encoder diagnostics - enable
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 1]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | EncDiagEnable(value)
Cross reference | MOTOR_ENC_Diag_Status

Description

Activates the monitoring of encoder.

It is checked, if every puls of hall sensors corresonds with the assigned number of encoder pulses.
Lack of 50% of expected encoder pulses causes error (ERR_Enc_Failed = -1078) in error register (DEV_ErrorReg).

Bit assignment:
Bit | Name | Description
0 | MOTOR_ENC_Diag_Enable | 0 = disabled, 1 = enabled

Hint:
  • The function is valid only with brushless motors and when
  • Vel-Feedback (VEL_Feedback) and SVel-Feedback (SVEL_Feedback) are set to encoder feedback.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


3964.01h Encoder diagnostics - status

Name | MOTOR_ENC_Diag_Status
Designation | Encoder diagnostics - status
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | EncDiagStatus()
Cross reference | MOTOR_ENC_Diag_Enable

Description

Provides the actual status of the encoder monitoring.

For more information see description of parameter MOTOR_ENC_Diag_Enable.

Bit assignment:
Bit | Name | Description
0 | MOTOR_ENC_Diag_Status_Enable | 0 = disabled, 1 = enabled
1 | MOTOR_ENC_Diag_Status_Error | 0 = no error, 1 = error

Hint:
  • The function is valid only with brushless motors and when
  • Vel-Feedback (VEL_Feedback) and SVel-Feedback (SVEL_Feedback) are set to encoder feedback.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


396A.00h Actual encoder position

Name | MOTOR_ENC_ActualPosition
Designation | Actual encoder position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActPosEnc(), EncActPos(value), ActEncPos(value)
Cross reference | -

Description

This parameter provides the actual position which was counted by the encoder. The number of pulses per revolution of the motor shaft depends on the resolution of the encoder. The parameter MOTOR_ENC_Resolution has no influence on this counting. The encoder pulses were internally multiplied by four. That means if you have an encoder with Ne"lines" (bars) 4 * Ne pulses are counted. You can change the counting direction with the parameter MOTOR_Polarity.

Npe = 4 * Ne

with: Npe - number of pulses per revolution and Ne - "lines" of the encoder

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


396A.20h Actual mcSPI-IC2 encoder position

Name | MOTOR_ENC_INC2_ActualPosition
Designation | Actual mcSPI-IC2 encoder position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.02
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | MOTOR_ENC_INC2_Resolution_Cnt, MOTOR_ENC_INC2_Config_McSpiAddr

Description

This parameter provides the actual position which was counted by the mcSPI-IC2 encoder. The number of pulses per revolution of the motor shaft depends on the resolution of the mcSPI-IC2 encoder. The parameter MOTOR_ENC_INC2_Resolution_Cnt has no influence on this counting. The mcSPI-IC2 encoder pulses were internally multiplied by four. That means if you have an mcSPI-IC2 encoder with Ne"lines" (bars) 4 * Ne pulses are counted. You can change the counting direction with the parameter MOTOR_Polarity.

Npe = 4 * Ne

with: Npe - number of pulses per revolution and Ne - "lines" of the mcSPI-IC2 encoder


396B.00h Actual encoder index position

Name | MOTOR_ENC_ActualIndexPosition
Designation | Actual encoder index position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActIndexPosEnc(), EncActIndexPos()
Cross reference | MOTOR_ENC_ActualIndexCount

Description

This parameter provides the actual position of the index pulses coming from the encoder. The actual position will be stored at every index pulse.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


396C.00h Count of encoder index pulses

Name | MOTOR_ENC_ActualIndexCount
Designation | Count of encoder index pulses
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | ActIndexCountEnc(value), EncActIndexCount(value)
Cross reference | MOTOR_ENC_ActualIndexPosition

Description

This parameter provides the actual number of index pulses. You can also set this parameter to an initial value.

Hint:
  • If the index input is not used as an encoder index, you could take it as a 5V counter input.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                            # NodeId = 1

# set resolution
d.SdoWr(0x3962, 0x00, 2000)                           # MOTOR_ENC_Resolution
print "encoder res in lines: ", d.SdoRd(0x3963, 0x00) # MOTOR_ENC_Resolution_lines

# activate diagnosis
d.SdoWr(0x3964, 0x00, 1)                              # MOTOR_ENC_Diag_Enable
status = d.SdoRd(0x3964, 0x01)                        # MOTOR_ENC_Diag_Status

if status == 0:
   print "inactive"
elif status == 1:
   print "active, no error"
elif status == 3:
   print "active, error"
else:
   print "unkwon status"

# print parameters
print "encoder position: ", d.SdoRd(0x396A, 0x00)     # MOTOR_ENC_ActualPosition
print "index position: ", d.SdoRd(0x396B, 0x00)       # MOTOR_ENC_ActualIndexPosition
print "index pulses: ", d.SdoRd(0x396C, 0x00)         # MOTOR_ENC_ActualIndexCount


Content - Parameters 3000h (DSA) - SSI absolute encoder

3970.00h | MOTOR_ENC_SSI_Enable | SSI absolute encoder - enable
3970.01h | MOTOR_ENC_SSI_Status | SSI absolute encoder - status
3970.08h | MOTOR_ENC_SSI_Save | SSI absolute encoder - save
3971.00h | MOTOR_ENC_SSI_Code | SSI absolute encoder - code
3971.01h | MOTOR_ENC_SSI_SignificantBits | SSI absolute encoder - significant bits
3971.02h | MOTOR_ENC_SSI_Bits | SSI absolute encoder - bits
3972.00h | MOTOR_ENC_SSI_Resolution | SSI absolute encoder - single turn resolution in counts
397A.00h | MOTOR_ENC_SSI_ActualPosition | SSI absolute encoder - actual position (extended on 32 bits)
397A.02h | MOTOR_ENC_SSI_ActualSsiDirectPosition | SSI absolute encoder - direct position


3970.00h SSI absolute encoder - enable

Name | MOTOR_ENC_SSI_Enable
Designation | SSI absolute encoder - enable
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.01
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

This parameter activates optional absolute SSI-encoder.

Parameter value:
Value | Description
0 | SSI-Encoder deactivated
1 | SSI-Encoder active

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3970.01h SSI absolute encoder - status

Name | MOTOR_ENC_SSI_Status
Designation | SSI absolute encoder - status
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.77.00.40
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

Provides the status of an absolute SSI-Encoder.

Bit assignment:
Bit | Description
0 | SSI-Encoder is active
1 | Error (e.g. CRC of stored data is wrong)
2 | Reserved
3 | The values of parameters MOTOR_ENC_SSI_ActualPosition and MOTOR_ENC_SSI_ActualSsiDirectPosition correspond.
[4..7] | Reserved

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3970.08h SSI absolute encoder - save

Name | MOTOR_ENC_SSI_Save
Designation | SSI absolute encoder - save
Data type | uint32
Access | write only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.77.00.33
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

Saves the set absolute position in the device.

Parameter value:
Value | Description
0x65766173 | save position
rest | no action

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3971.00h SSI absolute encoder - code

Name | MOTOR_ENC_SSI_Code
Designation | SSI absolute encoder - code
Data type | uint8
Access | read only
Attributs | -
Value range | {0}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.64.00.01
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

This parameter provides the format of the data that are transmitted via the SSI interface.

Parameter values:
Value | Description
0 | Gray code

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3971.01h SSI absolute encoder - significant bits

Name | MOTOR_ENC_SSI_SignificantBits
Designation | SSI absolute encoder - significant bits
Data type | uint8
Access | read / write
Attributs | Save
Value range | [8 .. 32]
Default value | 25
Unit | -
Operating mode | All
Available since | 1.64.00.01
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

This parameter defines the number of significant bits in the SSI message.
The total number of bits in the message defines parameter MOTOR_ENC_SSI_Bits.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3971.02h SSI absolute encoder - bits

Name | MOTOR_ENC_SSI_Bits
Designation | SSI absolute encoder - bits
Data type | uint8
Access | read / write
Attributs | Save
Value range | [8 .. 32]
Default value | 25
Unit | -
Operating mode | All
Available since | 1.64.00.01
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

This parameter defines the total number of bits in the SSI message.
The number of significant bits in the message defines parameter MOTOR_ENC_SSI_SignificantBits.

Note
This parameter had to the firmware version 1.85.03.46 the access "read only".

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


3972.00h SSI absolute encoder - single turn resolution in counts

Name | MOTOR_ENC_SSI_Resolution
Designation | SSI absolute encoder - single turn resolution in counts
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 60000]
Default value | 8192
Unit | [counts]
Operating mode | All
Available since | 1.85.00.35
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | -

Description

The parameter defines the resolution (in pulses per revolution) of the absolute encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


397A.00h SSI absolute encoder - actual position (extended on 32 bits)

Name | MOTOR_ENC_SSI_ActualPosition
Designation | SSI absolute encoder - actual position (extended on 32 bits)
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.64.00.01
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | MOTOR_ENC_SSI_ActualSsiDirectPosition

Description

Using this parameter let you poll the actual absolute position provided by SSI-Encoder.
The number of pulses per rotation of the motor shaft depends on encoder resolution.
The parameter provides position with 32-bit resolution.
If the SSI-Encoder has lower resolution as 32 bits, the position is counted without underflow (overflow). In case of underflow (overflow) of SSI-Encoder the encoder position (MOTOR_ENC_SSI_ActualSsiDirectPosition) doesn't correspond with the value of this parameter. The underflow (overflow) is also recognized and shown in status register (MOTOR_ENC_SSI_Status) by setting bit 3 to 0.

ATTENTION

In case of underflow (overflow) of SSI-Encoder position, the absolute position is lost after switching off the device. This case has to be recognized and separately treated by application.

Procedure for the setting of absolute position

  1. Set parameter MOTOR_ENC_SSI_ActualPosition to the desired value.
  2. Store position in the device by setting the parameter MOTOR_ENC_SSI_Save to 0x65766173.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


397A.02h SSI absolute encoder - direct position

Name | MOTOR_ENC_SSI_ActualSsiDirectPosition
Designation | SSI absolute encoder - direct position
Data type | int32
Access | read only
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.85.00.17
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | MOTOR_ENC_SSI_ActualPosition

Description

Provides actual absolute position direct from SSI-Encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

NodeId = 1

d = Dsa(NodeId)

d.SdoWr(0x3000, 0x00, 1)                            # DEV_Cmd - clear error
d.SdoWr(0x3004, 0x00, 0)                            # DEV_Enable - disable
d.SdoWr(0x3000, 0x00, 0x82)                         # DEV_Cmd - default parameter

# SSI Encoder: 25 Bit
d.SdoWr(0x3970, 0x00, 1)                            # MOTOR_ENC_SSI_Enable - activate SSI
d.SdoWr(0x3971, 0x01, 25)                           # MOTOR_ENC_SSI_SignificantBits - significant bits
d.SdoWr(0x3971, 0x02, 25)                           # MOTOR_ENC_SSI_Bits - bits
d.SdoWr(0x3972, 0x00, 4096)                         # MOTOR_ENC_SSI_Resolution - resolution

d.SdoWr(0x3350, 0x00, 0x97A)                        # VEL_Feedback - feedback - SSI encoder

if 1:
   d.SdoWr(0x3762, 0x00, 0)                         # POS_ActualPosition - set absolute position
   d.SdoWr(0x3970, 0x08, 0x65766173)                # MOTOR_ENC_SSI_Save - save absolute position (MSB..LSB == 'evas')

print "SsiDirectPos =", d.SdoRd(0x397A, 0x02)       # MOTOR_ENC_SSI_ActualSsiDirectPosition
print "ActPos       =", d.SdoRd(0x3762, 0x00)       # POS_ActualPosition
print "SsiActPos    =", d.SdoRd(0x397A, 0x00)       # MOTOR_ENC_SSI_ActualPosition
print "SsiStatus    =", hex(d.SdoRd(0x3970, 0x01))  # MOTOR_ENC_SSI_SignificantBits - Bit0=Active, Bit1=Error, Bit2=Reserved, Bit3=PositionIsValid


Content - Parameters 3000h (DSA) - HALL encoder

398F.00h | HENC_Cmd | HALL encoder - command
398F.08h | HENC_ReferencePos | HALL encoder - reference position
398F.0Ah | HENC_Hysteresis | HALL encoder - hysteresis


398F.00h HALL encoder - command

Name | HENC_Cmd
Designation | HALL encoder - command
Data type | uint32
Access | write only
Attributs | Changeable only in disabled state
Value range | {0x0, 0x1, 0x2, 0x80, 0x6E657277}
Default value | 0x0
Unit | -
Operating mode | All
Available since | 1.89.00.56
Devices | only: EDC-xx-SinCos, EDC-xx-Henc
PLC Function | -
Cross reference | HENC_ReferencePos, HENC_Hysteresis

Description

This parameter is used to send commands to the hall encoder chip of the device.

Possible commands:
Command | Description
1 | Clears all errors in the encoder chip.
2 | Activates the encoder chip.
3 | Deactivates the encoder chip.
0x80 | Saves all parameters in the encoder chip.
0x6E652777 | Write enable

* This parameter is only necessary if the device uses sin/cos or magnetic encoder chip feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x398F, 0x00, 0x6E657277)                           # Write enable
d.SdoWr(0x398F, 0x00, 1)                                    # Clear errors (even fatal)
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip

d.SdoWr(0x398F, 0x08, 661)                                  # Commutation reference position
d.SdoWr(0x398F, 0x0A, 5)                                    # Commutation hysteresis

d.SdoWr(0x3000, 0x00, 0x80)                                 # Save

d.SdoWr(0x398F, 0x00, 3)                                    # deactivate encoder chip
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip


398F.08h HALL encoder - reference position

Name | HENC_ReferencePos
Designation | HALL encoder - reference position
Data type | uint16
Access | read / write
Attributs | Password protected
Value range | -
Default value | 0
Unit | [counts]
Operating mode | All
Available since | 1.89.00.56
Devices | only: EDC-xx-SinCos, EDC-xx-Henc
PLC Function | -
Cross reference | HENC_Cmd, HENC_Hysteresis

Description

This parameter sets the reference position of the hall encoder. The reference position tells the device at which position the commutation has to be done.
A write enable has to be set in order to write values to the parameter (see HENC_Cmd).

An inappropriate value can lead to uncontrolled behavior.

Uncontrolled behavior can be dangerous for man and machine.

* This parameter is only necessary if the device uses sin/cos or magnetic encoder chip feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x398F, 0x00, 0x6E657277)                           # Write enable
d.SdoWr(0x398F, 0x00, 1)                                    # Clear errors (even fatal)
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip

d.SdoWr(0x398F, 0x08, 661)                                  # Commutation reference position
d.SdoWr(0x398F, 0x0A, 5)                                    # Commutation hysteresis

d.SdoWr(0x3000, 0x00, 0x80)                                 # Save

d.SdoWr(0x398F, 0x00, 3)                                    # deactivate encoder chip
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip


398F.0Ah HALL encoder - hysteresis

Name | HENC_Hysteresis
Designation | HALL encoder - hysteresis
Data type | uint8
Access | read / write
Attributs | Password protected
Value range | -
Default value | 0
Unit | [%]
Operating mode | All
Available since | 1.89.00.56
Devices | only: EDC-xx-SinCos, EDC-xx-Henc
PLC Function | -
Cross reference | HENC_Cmd, HENC_ReferencePos

Description

This parameter is used to set the commutation hysteresis of the hall encoder chip. The hysteresis prevents a permanent commutation if the motor stops directly at a commutation point.
A write enable has to be set in order to write values to the parameter (see HENC_Cmd).

* This parameter is only necessary if the device uses sin/cos or magnetic encoder chip feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x398F, 0x00, 0x6E657277)                           # Write enable
d.SdoWr(0x398F, 0x00, 1)                                    # Clear errors (even fatal)
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip

d.SdoWr(0x398F, 0x08, 661)                                  # Commutation reference position
d.SdoWr(0x398F, 0x0A, 5)                                    # Commutation hysteresis

d.SdoWr(0x3000, 0x00, 0x80)                                 # Save

d.SdoWr(0x398F, 0x00, 3)                                    # deactivate encoder chip
d.SdoWr(0x398F, 0x00, 2)                                    # activate encoder chip


Content - Parameters 3000h (DSA) - Virtual encoder

3990.08h | MOTOR_ENC_VIRT0_RawPosBits | Virtual encoder 0 - bits
3990.10h | MOTOR_ENC_VIRT0_RawPos | Virtual encoder 0 - raw position
3990.11h | MOTOR_ENC_VIRT0_RawIndexPos | Virtual encoder 0 - raw index position
3990.20h | MOTOR_ENC_VIRT0_Resolution_Cnt | Virtual encoder 0 - resolution in counts
3990.A0h | MOTOR_ENC_VIRT0_ActualPosition | Virtual encoder 0 - actual position
3990.B0h | MOTOR_ENC_VIRT0_ActualIndexPosition | Virtual encoder 0 - actual index position
3990.C0h | MOTOR_ENC_VIRT0_ActualIndexCount | Virtual encoder 0 - index counter
3991.08h | MOTOR_ENC_VIRT1_RawPosBits | Virtual encoder 1 - bits
3991.10h | MOTOR_ENC_VIRT1_RawPos | Virtual encoder 1 - raw position
3991.11h | MOTOR_ENC_VIRT1_RawIndexPos | Virtual encoder 1 - raw index position
3991.20h | MOTOR_ENC_VIRT1_Resolution_Cnt | Virtual encoder 1 - resolution in counts
3991.A0h | MOTOR_ENC_VIRT1_ActualPosition | Virtual encoder 1 - actual position
3991.B0h | MOTOR_ENC_VIRT1_ActualIndexPosition | Virtual encoder 1 - actual index position
3991.C0h | MOTOR_ENC_VIRT1_ActualIndexCount | Virtual encoder 1 - index counter


3990.08h Virtual encoder 0 - bits

Name | MOTOR_ENC_VIRT0_RawPosBits
Designation | Virtual encoder 0 - bits
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 32]
Default value | 32
Unit | -
Operating mode | All
Available since | 1.93.00.47
Devices | All
PLC Function | -
Cross reference | MOTOR_ENC_VIRT0_Resolution_Cnt

Description

This parameter defines the total number of bits of the virtual encoder position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.10h Virtual encoder 0 - raw position

Name | MOTOR_ENC_VIRT0_RawPos
Designation | Virtual encoder 0 - raw position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter is used to read the raw position of the virtual encoder. If you have e.g. CAN encoder, you should write its position in this parameter. The parameter does not detect overflow.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.11h Virtual encoder 0 - raw index position

Name | MOTOR_ENC_VIRT0_RawIndexPos
Designation | Virtual encoder 0 - raw index position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter is used to read the raw index position of the virtual encoder. If you have e.g. CAN encoder, you should write its index position in this parameter. The parameter does not detect overflow.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.20h Virtual encoder 0 - resolution in counts

Name | MOTOR_ENC_VIRT0_Resolution_Cnt
Designation | Virtual encoder 0 - resolution in counts
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 2000
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | MOTOR_ENC_VIRT0_RawPosBits

Description

This parameter specifies the resolution of vitual encoder (in pulses per revolution).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.A0h Virtual encoder 0 - actual position

Name | MOTOR_ENC_VIRT0_ActualPosition
Designation | Virtual encoder 0 - actual position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current position, which was counted over the virtual encoder. The number of pulses per revolution of the motor shaft depends on the resolution of the virtual encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.B0h Virtual encoder 0 - actual index position

Name | MOTOR_ENC_VIRT0_ActualIndexPosition
Designation | Virtual encoder 0 - actual index position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current index position, which was counted over the virtual encoder. With a pulse of the index signal, the current virtual encoder position is stored. This value can then be queried using this parameter.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3990.C0h Virtual encoder 0 - index counter

Name | MOTOR_ENC_VIRT0_ActualIndexCount
Designation | Virtual encoder 0 - index counter
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current number of index pulses, which was counted over the virtual encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x990)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39901020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT0_RawPos
d_slave.SdoWr(0x1600, 2, 0x39901120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT0_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3990, 0xA0)     # MOTOR_ENC_VIRT0_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3990, 0xB0)     # MOTOR_ENC_VIRT0_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3990, 0xC0)     # MOTOR_ENC_VIRT0_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3990, 0x10)     # MOTOR_ENC_VIRT0_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3990, 0x11)     # MOTOR_ENC_VIRT0_RawIndexPos
      break


3991.08h Virtual encoder 1 - bits

Name | MOTOR_ENC_VIRT1_RawPosBits
Designation | Virtual encoder 1 - bits
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 32]
Default value | 32
Unit | -
Operating mode | All
Available since | 1.93.00.47
Devices | All
PLC Function | -
Cross reference | MOTOR_ENC_VIRT1_Resolution_Cnt

Description

This parameter defines the total number of bits of the virtual encoder position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.10h Virtual encoder 1 - raw position

Name | MOTOR_ENC_VIRT1_RawPos
Designation | Virtual encoder 1 - raw position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter is used to read the raw position of the virtual encoder. If you have e.g. CAN encoder, you should write its position in this parameter. The parameter does not detect overflow.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.11h Virtual encoder 1 - raw index position

Name | MOTOR_ENC_VIRT1_RawIndexPos
Designation | Virtual encoder 1 - raw index position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter is used to read the raw index position of the virtual encoder. If you have e.g. CAN encoder, you should write its index position in this parameter. The parameter does not detect overflow.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.20h Virtual encoder 1 - resolution in counts

Name | MOTOR_ENC_VIRT1_Resolution_Cnt
Designation | Virtual encoder 1 - resolution in counts
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 2000
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | MOTOR_ENC_VIRT1_RawPosBits

Description

This parameter specifies the resolution of vitual encoder (in pulses per revolution).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.A0h Virtual encoder 1 - actual position

Name | MOTOR_ENC_VIRT1_ActualPosition
Designation | Virtual encoder 1 - actual position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current position, which was counted over the virtual encoder. The number of pulses per revolution of the motor shaft depends on the resolution of the virtual encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.B0h Virtual encoder 1 - actual index position

Name | MOTOR_ENC_VIRT1_ActualIndexPosition
Designation | Virtual encoder 1 - actual index position
Data type | int32
Access | read / write
Attributs | -
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current index position, which was counted over the virtual encoder. With a pulse of the index signal, the current virtual encoder position is stored. This value can then be queried using this parameter.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


3991.C0h Virtual encoder 1 - index counter

Name | MOTOR_ENC_VIRT1_ActualIndexCount
Designation | Virtual encoder 1 - index counter
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | -
Unit | [counts]
Operating mode | All
Available since | 1.93.00.20
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the current number of index pulses, which was counted over the virtual encoder.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import Dsa
import time

d_master = Dsa(2)
d_slave  = Dsa(1)

def InitPars (d):
   d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - Disable
   d.SdoWr(0x3000, 0x00, 1)           # DEV_Cmd - Clear Error
   d.SdoWr(0x3000, 0x00, 0x82)        # DEV_Cmd - Defaultparameter

   d.SdoWr(0x3900, 0x00, 1)           # MOTOR_Type
   d.SdoWr(0x3911, 0x00, 0)           # MOTOR_Polarity

   d.SdoWr(0x3910, 0x00, 10)          # MOTOR_PolN
   d.SdoWr(0x3962, 0x00, 2000)        # MOTOR_ENC_Resolution

   d.SdoWr(0x3901, 0x00, 3000)        # MOTOR_Nn
   d.SdoWr(0x3902, 0x00, 24000)       # MOTOR_Un

   d.SdoWr(0x3350, 0x00, 2410)        # VEL_Feedback
   d.SdoWr(0x3550, 0x00, 2410)        # SVEL_Feedback

   d.SdoWr(0x3221, 0x00, 2000)        # CURR_LimitMaxPos
   d.SdoWr(0x3223, 0x00, 2000)        # CURR_LimitMaxNeg

   d.SdoWr(0x3210, 0x00, 51)          # CURR_Kp
   d.SdoWr(0x3211, 0x00, 54)          # CURR_Ki

   d.SdoWr(0x3310, 0x00, 200)         # VEL_Kp
   d.SdoWr(0x3311, 0x00, 10)          # VEL_Ki
   d.SdoWr(0x3314, 0x00, 1000)        # VEL_Kvff

   d.SdoWr(0x3341, 0x00, 500)         # VEL_Acc_dT
   d.SdoWr(0x3343, 0x00, 500)         # VEL_Dec_dT

   d.SdoWr(0x3510, 0x00, 205)         # SVEL_Kp
   d.SdoWr(0x3511, 0x00, 108)         # SVEL_Ki

InitPars(d_master)
InitPars(d_slave)

# Virtueller Encoder Init
d_slave.SdoWr(0x3350, 0x00, 0x991)                                       # VEL_FeedbackEncoderfeedback Set feedback to virtual encoder (Value via PDO)
d_slave.SdoWr(0x3991, 0x08, 16)                                      # MOTOR_ENC_VIRT1_RawPosBits External encoder resoultion 25bit
d_slave.SdoWr(0x3991, 0x20, 2000)                                    # MOTOR_ENC_VIRT1_Resolution_Cnt External encoder resolution per round

# Rx-Pdo Mapping
d_slave.SdoWr(0x1600, 0, 0)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1600, 1, 0x39911020)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 1: Virtuell-Encoder Raw position MOTOR_ENC_VIRT1_RawPos
d_slave.SdoWr(0x1600, 2, 0x39911120)                                 # COP_RxPDO1_Mapping_1stApplicationObject Objekt 2: Virtuell-Encoder Raw Index position MOTOR_ENC_VIRT1_RawIndexPos
d_slave.SdoWr(0x1600, 0, 2)                                          # COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects
d_slave.SdoWr(0x1400, 1, 0x182)                                      # COP_RxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Tx-Pdo Mapping
d_master.SdoWr(0x1A00, 0, 0)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1A00, 1, 0x396A0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 1: actual encoder position MOTOR_ENC_ActualPosition
d_master.SdoWr(0x1A00, 1, 0x396B0020)                                # COP_TxPDO1_Mapping_1stApplicationObject Objetk 2: actual index position MOTOR_ENC_ActualIndexPosition
d_master.SdoWr(0x1A00, 0, 2)                                         # COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects
d_master.SdoWr(0x1800, 0x03, 100)                                    # COP_TxPDO1_CommunicationParameter_InhibitTime Inhibt-Time 10 ms
d_master.SdoWr(0x1800, 1, 0x182)                                     # COP_TxPDO1_CommunicationParameter_CobId Cob-ID : 0x182

# Init Betriebsart
d_master.SdoWr(0x3004, 0x00, 0)                                      # DEV_Enable
d_master.SdoWr(0x3003, 0x00, 7)                                      # DEV_Mode
d_master.SdoWr(0x3004, 0x00, 1)                                      # DEV_Enable

mc.Can.PdoWr(0, [1, 0])                                              # NMT Protocol - Set all Devices to Operational

d_master.SdoWr(0x3000, 0x11, 300000)                                 # DEV_CmdData1
d_master.SdoWr(0x3000, 0x10, 2500)                                   # DEV_CmdData0
d_master.SdoWr(0x3000, 0x01, 0)                                      # DEV_Cmd
d_master.SdoWr(0x3000, 0x01, 0x34)                                   # DEV_Cmd

while 1:
   stat = d_master.SdoRd(0x3002, 0x00)                               # DEV_Status
   if (stat & 0x10) == 0x10:                                         # If position reached
      print "Encoder-Master    :%d" % d_master.SdoRd(0x396A, 0x00)   # MOTOR_ENC_ActualPosition
      print "Index-Master      :%d" % d_master.SdoRd(0x396B, 0x00)   # MOTOR_ENC_ActualIndexPosition
      print "Encoder-Slave     :%d"% d_slave.SdoRd(0x3991, 0xA0)     # MOTOR_ENC_VIRT1_ActualPosition
      print "Index-Slave       :%d"% d_slave.SdoRd(0x3991, 0xB0)     # MOTOR_ENC_VIRT1_ActualIndexPosition
      print "Index-Cnt-Slave   :%d"% d_slave.SdoRd(0x3991, 0xC0)     # MOTOR_ENC_VIRT1_ActualIndexCount
      print "Encoder-Slave-Raw :%d"% d_slave.SdoRd(0x3991, 0x10)     # MOTOR_ENC_VIRT1_RawPos
      print "Index-Slave-Raw   :%d"% d_slave.SdoRd(0x3991, 0x11)     # MOTOR_ENC_VIRT1_RawIndexPos
      break


Content - Parameters 3000h (DSA) - Brake management

39A0.00h | MOTOR_BrakeManagement_Config | Brake management - configuration
39A0.01h | MOTOR_BrakeManagement_Status | Brake management - status
39A0.06h | MOTOR_BrakeManagement_VelMin | Brake management - threshold velocity
39A0.07h | MOTOR_BrakeManagement_Din | Brake management - brake input
39A0.08h | MOTOR_BrakeManagement_Dout | Brake management - brake output
39A0.09h | MOTOR_BrakeManagement_UpBrakeOff | Brake management - threshold voltage OFF
39A0.0Ah | MOTOR_BrakeManagement_UpBrakeOn | Brake management - threshold voltage ON
39A0.10h | MOTOR_BrakeManagement_OffDelay1 | Brake management - OFF-Delay1
39A0.11h | MOTOR_BrakeManagement_OffDelay2 | Brake management - OFF-Delay2
39A0.12h | MOTOR_BrakeManagement_OnDelay1 | Brake management - ON-Delay1
39A0.13h | MOTOR_BrakeManagement_OnDelay2 | Brake management - ON-Delay2
39A0.18h | MOTOR_BrakeManagement_OffOrConditionFlags | Brake management - OFF-OR-Condition
39A0.19h | MOTOR_BrakeManagement_OffAndConditionFlags | Brake management - OFF-AND-Condition
39A0.1Ah | MOTOR_BrakeManagement_OnOrConditionFlags | Brake management - ON-OR-Condition
39A0.1Bh | MOTOR_BrakeManagement_OnAndConditionFlags | Brake management - ON-AND-Condition


39A0.00h Brake management - configuration

Name | MOTOR_BrakeManagement_Config
Designation | Brake management - configuration
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Configures the brake management.

Parameter value:
Bit | Function | Description
0 | Brake_Management_Enable | Activates the brake management
1 | Brake_Management_AutoDisable | Disables automatically the power stage at the end of move.
There are two possibilities of the brake management available:
  • Control over the power enable
  • Control over start of the movement
Furthermore, the digital output for the brake (Brake_Management_Dout) can be defined. Four different delay times (t1 ... t4) are described in detail below.

In case of an error (Error Register DEV_ErrorReg <0) the brake is automatically activated.

Functions in detail:

1. Brake management over the power enable
  • Function
    • The command enable power stage is executed immediately
    • Deactivate the brake after delay time t1(MOTOR_BrakeManagement_OffDelay1)
    • Wait for deactivation of the brake: t2 (MOTOR_BrakeManagement_OffDelay2)
    • Now it is possible to start the movement
    • Deactivate the command enable
    • Activate the brake after delay tiime t3 (MOTOR_BrakeManagement_OnDelay1)
    • Wait for activation of the brake: t4 (MOTOR_BrakeManagement_OffDelay2)
    • Disable power stage

  • Parameter
    • MOTOR_BrakeManagement_Config =1
    • MOTOR_BrakeManagement_OffOrConditionFlags = 4
    • MOTOR_BrakeManagement_OnOrConditionFlags = 4
    • Digital output s. MOTOR_BrakeManagement_Dout
    • Times t1 ... t4 s. MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2

2. Brake management over the movement

There is a possibility to disable the power stage (or not) at the end of the movement:

2.1 Brake management over the movement (without disable of power stage at the end of the movement)
  • Function
    • The move command
    • Enable of power stage and deactivation of the brake are immediately
    • Wait for deactivation of the brake: t2 (MOTOR_BrakeManagement_OffDelay2)
    • Start of the movement
    • End of the movement
    • Activate the brake after delay time: t3 (MOTOR_BrakeManagement_OnDelay1)
    • Enable of power stage remains in force

  • Parameter
    • MOTOR_BrakeManagement_Config =1
    • MOTOR_BrakeManagement_OffOrConditionFlags = 1
    • MOTOR_BrakeManagement_OnOrConditionFlags = 1
    • Digital output s. MOTOR_BrakeManagement_Dout
    • Times t2 ... t3 s. MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1

2.2 Brake management over the movement (with disable of power stage at the end of the movement)
  • Function
    • The move command
    • The command enable power stage is executed immediately
    • Deactivate the brake after delay time t1(MOTOR_BrakeManagement_OffDelay1)
    • Wait for deactivation of the brake: t2 (MOTOR_BrakeManagement_OffDelay2)
    • Start of the movement
    • End of the movement
    • Activate the brake after delay time: t3 (MOTOR_BrakeManagement_OnDelay1)
    • Wait for activation of the brake: t4 (MOTOR_BrakeManagement_OffDelay2)
    • Disable power stage

  • Parameter
    • MOTOR_BrakeManagement_Config =3
    • MOTOR_BrakeManagement_OffOrConditionFlags = 1
    • MOTOR_BrakeManagement_OnOrConditionFlags = 1
    • Digital output s. MOTOR_BrakeManagement_Dout
    • Times t1 ... t4 s. MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.01h Brake management - status

Name | MOTOR_BrakeManagement_Status
Designation | Brake management - status
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Provides the actual status of the brake management.

Bit assignment:
Bit | Name | Description
0 | MOTOR_BrakeManagement_Status_Enable | Brake management active
3 | MOTOR_BrakeManagement_Status_Brake | 0 = brake deactivated, 1 = brake activated
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.06h Brake management - threshold velocity

Name | MOTOR_BrakeManagement_VelMin
Designation | Brake management - threshold velocity
Data type | int32
Access | read / write
Attributs | -
Value range | [-1 .. 2147483647]
Default value | -1
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

This parameter defines the minimal speed of the motor shaft before the brake is activated.
The value 0xFFFFFFFF turns off the check of velocity (function is deactivated).

The velocity is only considered, if at least one of the following bits of On-Conditions (MOTOR_BrakeManagement_OnOrConditionFlags and MOTOR_BrakeManagement_OnAndConditionFlags) is set:
- bit 0 - Rampgenerator stop
- bit 5 - TargetReachedBit
- bit 6 - After QuickStop
- bit 7 - After Halt

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.07h Brake management - brake input

Name | MOTOR_BrakeManagement_Din
Designation | Brake management - brake input
Data type | int16
Access | read / write
Attributs | Save
Value range | {-137h, -136h, -135h, -134h, -133h, -132h, -131h, -130h, 0h, 130h, 131h, 132h, 133h, 134h, 135h, 136h, 137h}
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

This parameter defines the source of the Brake-Input.
Positive values select a digital input high-active (negative values for low-active inputs).

The number of digital inputs can vary according to the device (see technical data sheet).

Parameter value:
Value (Hex) | Description
-0137h | Digital input 7 as Brake-Input, Low-Active
-0136h | Digital input 6 as Brake-Input, Low-Active
-0135h | Digital input 5 as Brake-Input, Low-Active
-0134h | Digital input 4 as Brake-Input, Low-Active
-0133h | Digital input 3 as Brake-Input, Low-Active
-0132h | Digital input 2 as Brake-Input, Low-Active
-0131h | Digital input 1 as Brake-Input, Low-Active
-0130h | Digital input 0 as Brake-Input, Low-Active
0 | no hardware Brake-Input
0130h | Digital input 0 as Brake-Input, High-Active
0131h | Digital input 1 as Brake-Input, High-Active
0132h | Digital input 2 as Brake-Input, High-Active
0133h | Digital input 3 as Brake-Input, High-Active
0134h | Digital input 4 as Brake-Input, High-Active
0135h | Digital input 5 as Brake-Input, High-Active
0136h | Digital input 6 as Brake-Input, High-Active
0137h | Digital input 7 as Brake-Input, High-Active
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.08h Brake management - brake output

Name | MOTOR_BrakeManagement_Dout
Designation | Brake management - brake output
Data type | int16
Access | read / write
Attributs | -
Value range | {-163h, -162h, -161h, -160h, 0h, 160h, 161h, 162h, 163h}
Default value | -160h
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

The parameter defines digital output for the brake management.
Positive values select a digital output high-active (negative values for low-active output).

When the brake is direct supplied from digital output, the digital output should be set as low-active. I.e. if digital output is low, the brake holds the motor shaft.

The numbers of digital outputs can vary according to the device (see technical data sheet).

Parameter value:
Value (Hex) | Description
-0163h | digital output 3 used as brake output, Low-Active
-0162h | digital output 2 used as brake output, Low-Active
-0161h | digital output 1 used as brake output, Low-Active
-0160h | digital output 0 used as brake output, Low-Active
0160h | digital output 0 used as brake output, High-Active
0161h | digital output 1 used as brake output, High-Active
0162h | digital output 2 used as brake output, High-Active
0163h | digital output 3 used as brake output, High-Active
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.09h Brake management - threshold voltage OFF

Name | MOTOR_BrakeManagement_UpBrakeOff
Designation | Brake management - threshold voltage OFF
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65530]
Default value | 10000
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

This parameter defines the threshold voltage (Up_br_off) of the power voltage Up, which must be exceeded before the brake is deactivated.

The parameter has only effect when bit 5 "Up > Up_br_off" of parameters MOTOR_BrakeManagement_OffOrConditionFlags or MOTOR_BrakeManagement_OffAndConditionFlags is set.

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.0Ah Brake management - threshold voltage ON

Name | MOTOR_BrakeManagement_UpBrakeOn
Designation | Brake management - threshold voltage ON
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65530]
Default value | 8000
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

This parameter defines the threshold voltage (Up_br_on) of the power voltage Up, which must be exceeded before the brake is activated.

The parameter has only effect when bit 5 "Up > Up_br_on" of parameters MOTOR_BrakeManagement_OffOrConditionFlags or MOTOR_BrakeManagement_OffAndConditionFlags is set.

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.10h Brake management - OFF-Delay1

Name | MOTOR_BrakeManagement_OffDelay1
Designation | Brake management - OFF-Delay1
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines the delay time (t1) in ms before the brake is deactivated.

It is the time between enable of the power stage and deactivation of the brake.
With this parameter it is possible to adjust the time needed to set drive enable.

The following example shows the brake management over the power enable:

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Hint
  • The delay time is not active at the function "Brake management over the movement (without disable of power stage at the end of the movement)" s. MOTOR_BrakeManagement_Config (2.1)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.11h Brake management - OFF-Delay2

Name | MOTOR_BrakeManagement_OffDelay2
Designation | Brake management - OFF-Delay2
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines the delay time (t2) in ms after the brake is activated.

It is the time between deactivation of the brake and start of the movement.
With this parameter it is possible to adjust the time needed to deactivate the brake.

The following example shows the brake management over the power enable:

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.12h Brake management - ON-Delay1

Name | MOTOR_BrakeManagement_OnDelay1
Designation | Brake management - ON-Delay1
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines the delay time (t3) in ms before the brake is activated.

Depending on MOTOR_BrakeManagement_OnOrConditionFlags it is matter of following times:

Parameter value of MOTOR_BrakeManagement_OnOrConditionFlags:
Value | Function | Time
1 | Brake management over power enable | Time between deactivation of the command enable and activation of the brake
4 | Brake management over the movement | Time between the end of the movement and activation of the brake

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.13h Brake management - ON-Delay2

Name | MOTOR_BrakeManagement_OnDelay2
Designation | Brake management - ON-Delay2
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines the delay time (t4) in ms after the brake is activated.

It is the time between activation of the brake and disable of the power stage.
With this parameter it is possible to adjust the time needed to activate the brake.

The following example shows the brake management over the power enable:

For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Hint
  • The delay time is not active at the function "Brake management over the movement (without disable of power stage at the end of the movement)" s. MOTOR_BrakeManagement_Config (2.1)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.18h Brake management - OFF-OR-Condition

Name | MOTOR_BrakeManagement_OffOrConditionFlags
Designation | Brake management - OFF-OR-Condition
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines under what conditions the brake is deactivated.
After fulfilment of at least one of the set conditions, the brake is deactivated.

Parameter value:
Bit | Function | Description
0 | MoveCmd | Deactivation of the brake after start of the movement
1 | BrakeDin | Deactivation of the brake with change of signal at BrakeDin (Low-Active or High-Acitve)
2 | Enable | Deactivation of the brake after command "Enable"
3 | ErrorClear | Deactivation of the brake after command "ErrorClear"
4 | Up > Up_br_off | Deactivation of the brake if the power voltage Up is greater as the volatge Up_br_off
5 | Reserved | Reserved
6 | OnContinue after QuickStop | Deactivation of the brake after command "Continue" after QuickStop
7 | OnContinue after Halt | Deactivation of the brake after command "Continue" after Halt
For general informations see description of the parameter MOTOR_BrakeManagement_Config.


39A0.19h Brake management - OFF-AND-Condition

Name | MOTOR_BrakeManagement_OffAndConditionFlags
Designation | Brake management - OFF-AND-Condition
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines under what conditions the brake is deactivated.
After fulfilment of all set conditions, the brake is deactivated.

Parameter value:
Bit | Function | Description
0 | MoveCmd | Deactivation of the brake after start of the movement
1 | BrakeDin | Deactivation of the brake with change of signal at BrakeDin (Low-Active or High-Acitve)
2 | Enable | Deactivation of the brake after command "Enable"
3 | ErrorClear | Deactivation of the brake after command "ErrorClear"
4 | Up > Up_br_off | Deactivation of the brake if the power voltage Up is greater as the volatge Up_br_off
5 | Reserved | Reserved
6 | OnContinue after QuickStop | Deactivation of the brake after command "Continue" after QuickStop
7 | OnContinue after Halt | Deactivation of the brake after command "Continue" after Halt
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.1Ah Brake management - ON-OR-Condition

Name | MOTOR_BrakeManagement_OnOrConditionFlags
Designation | Brake management - ON-OR-Condition
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 1
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnAndConditionFlags

Description

Defines under what conditions the brake is activated.
After fulfilment of at least one of the set conditions, the brake is activated.

Parameter value:
Bit | Function | Description
0 | Rampgenerator stop | Activation of the brake after the end of the movement
1 | BrakeDin | Activation of the brake with change of signal at BrakeDin (Low-Active or High-Acitve)
2 | Disable | Activation of the brake after deactivation of the command enable
3 | Error | Activation of the brake after the occurrence of an error
4 | Up < Up_br_on | Activation of the brake if the power voltage Up is lower as the volatge Up_br_on
5 | TargetReachedBit | Activation of the brake after set of the bit STAT_Reached (bit 4 in DEV_Status)
6 | After QuickStop | Activation of the brake after command "QuickStop"
7 | After Halt | Activation of the brake after command "Halt"
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


39A0.1Bh Brake management - ON-AND-Condition

Name | MOTOR_BrakeManagement_OnAndConditionFlags
Designation | Brake management - ON-AND-Condition
Data type | uint8
Access | read / write
Attributs | -
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.82.02.50
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_Config, MOTOR_BrakeManagement_Status, MOTOR_BrakeManagement_VelMin, MOTOR_BrakeManagement_Din, MOTOR_BrakeManagement_Dout, MOTOR_BrakeManagement_UpBrakeOff, MOTOR_BrakeManagement_UpBrakeOn, MOTOR_BrakeManagement_OffDelay1, MOTOR_BrakeManagement_OffDelay2, MOTOR_BrakeManagement_OnDelay1, MOTOR_BrakeManagement_OnDelay2, MOTOR_BrakeManagement_OffOrConditionFlags, MOTOR_BrakeManagement_OffAndConditionFlags, MOTOR_BrakeManagement_OnOrConditionFlags

Description

Defines under what conditions the brake is activated.
After fulfilment of all set conditions, the brake is activated.

Parameter value:
Bit | Function | Description
0 | Rampgenerator stop | Activation of the brake after the end of the movement
1 | BrakeDin | Activation of the brake with change of signal at BrakeDin (Low-Active or High-Acitve)
2 | Disable | Activation of the brake after deactivation of the command enable
3 | Error | Activation of the brake after the occurrence of an error
4 | Up < Up_br_on | Activation of the brake if the power voltage Up is lower as the volatge Up_br_on
5 | TargetReachedBit | Activation of the brake after set of the bit STAT_Reached (bit 4 in DEV_Status)
6 | After QuickStop | Activation of the brake after command "QuickStop"
7 | After Halt | Activation of the brake after command "Halt"
For general informations see description of the parameter MOTOR_BrakeManagement_Config.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                                  # NodeId = 1

d.SdoWr(0x39A0, 0x00, 1)                                    # MOTOR_BrakeManagement_Config - Enable

print "Brakemanagement config=",  d.SdoRd(0x39A0, 0x00)     # MOTOR_BrakeManagement_Config
print "Brakemanagement Status=", hex(d.SdoRd(0x39A0, 0x01)) # MOTOR_BrakeManagement_Status

print "Min. velocity=", d.SdoRd(0x39A0, 0x06)               # MOTOR_BrakeManagement_VelMin

print "Digital input brake=", d.SdoRd(0x39A0, 0x07)         # MOTOR_BrakeManagement_Din
print "Digital output brake=", hex(d.SdoRd(0x39A0, 0x08))   # MOTOR_BrakeManagement_Dout

print "Above Up:", d.SdoRd(0x39A0, 0x09),"mV release brake" # MOTOR_BrakeManagement_UpBrakeOff
print "Below Up:", d.SdoRd(0x39A0, 0x0A),"mV activate brake"# MOTOR_BrakeManagement_UpBrakeOn

#init brakemanagement
d.SdoWr(0x39A0, 0x10, 25)                                   # MOTOR_BrakeManagement_OffDelay1 - t1 = 25 ms
d.SdoWr(0x39A0, 0x11, 75)                                   # MOTOR_BrakeManagement_OffDelay2 - t2 = 75 ms

d.SdoWr(0x39A0, 0x12, 15)                                   # MOTOR_BrakeManagement_OnDelay1 - t3 = 15 ms
d.SdoWr(0x39A0, 0x13, 35)                                   # MOTOR_BrakeManagement_OnDelay2 - t4 = 35 ms

d.SdoWr(0x39A0, 0x18, 0x01)                                 # MOTOR_BrakeManagement_OffOrConditionFlags - Release on MoveCmd
d.SdoWr(0x39A0, 0x19, 0x00)                                 # MOTOR_BrakeManagement_OffAndConditionFlags

d.SdoWr(0x39A0, 0x1A, 0x21)                                 # MOTOR_BrakeManagement_OnOrConditionFlags - Activate on ramp stop or target reached
d.SdoWr(0x39A0, 0x1B, 0x00)                                 # MOTOR_BrakeManagement_OnAndConditionFlags

#init
d.SdoWr(0x3004, 0x00, 0)                                    # DEV_Enable - Disable
d.SdoWr(0x3003, 0x00, 7)                                    # DEV_Mode - POS mode
d.SdoWr(0x3300, 0x00, 0)                                    # VEL_DesiredValue - desired velocity = 500 [rpm]
d.SdoWr(0x3004, 0x00, 1)                                    # DEV_Enable - Enable

# write parameters for movement
d.SdoWr(0x3000, 0x10, 600)                                  # DEV_CmdData0 - 600 [rpm]
d.SdoWr(0x3000, 0x11, 6000)                                 # DEV_CmdData1 - 6000 [inc]

# move 10 times
for i in xrange(10):
   d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - Toggle
   d.SdoWr(0x3000, 0x01, 0x34)                              # DEV_Cmd_ExecOnChange - MovR
   reached = (d.SdoRd(0x3002, 0x00) & 0x10)                 # DEV_Status
   while not(reached):                                      # Target not reached yet?
      reached = (d.SdoRd(0x3002, 0x00) & 0x10)              # DEV_Status
   if reached:                                              # Target reached?
      time.sleep(0.5)                                       # wait 500 ms


3CE0.00h ASI command

Name | COM_ASI_Cmd
Designation | ASI command
Data type | uint32
Access | write only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.03.AA
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | COM_ASI_Baudrate

Description

Writing to this parameter executes a ASI command.

Value | Description
0 | No operation
1 | Activate baud rate
Attention
The parameter is only available in the devices with RS232 or RS485 interface.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId

d.SdoWr(0x3CE0, 0x06, 57600)     # COM_ASI_Baudrate - set new baud rate
d.SdoWr(0x3CE0, 0x00, 1)         # COM_ASI_Cmd - activate new baud rate


3CE0.06h ASI baud rate

Name | COM_ASI_Baudrate
Designation | ASI baud rate
Data type | int32
Access | read / write
Attributs | Save
Value range | [-1 .. 115200]
Default value | -1
Unit | [Baud]
Operating mode | All
Available since | 1.85.03.AA
Devices | excluding: EDC-xx-EtherCat
PLC Function | -
Cross reference | COM_ASI_Cmd

Description

The parameter determines the ASI baud rate of the device. The change of baud rate will take effect after the execution of the parameter COM_ASI_Cmd. The value -1 means 9600 bit/s.
Attention
The parameter is only available in the devices with RS232 or RS485 interface.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId

d.SdoWr(0x3CE0, 0x06, 57600)     # COM_ASI_Baudrate - set new baud rate
d.SdoWr(0x3CE0, 0x00, 1)         # COM_ASI_Cmd - activate new baud rate


Content - Parameters 3000h (DSA) - Master-Tool

3D14.00h | TOOL_Master_Control | Master-Tool - config
3D14.10h | TOOL_Master_ParSource | Master-Tool - feedback parameter
3D14.12h | TOOL_Master_ScaleNum | Master-Tool - scale numerator
3D14.13h | TOOL_Master_ScaleDen | Master-Tool - scale denominator
3D14.14h | TOOL_Master_MaxVel | Master-Tool - maximum velocity
3D14.31h | TOOL_Master_FilterKp | Master-Tool - filter gain factor


3D14.00h Master-Tool - config

Name | TOOL_Master_Control
Designation | Master-Tool - config
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_ParSource, TOOL_Master_ScaleNum, TOOL_Master_ScaleDen, TOOL_Master_MaxVel, TOOL_Master_FilterKp

Description

With this parameter the Master-Tool can be activated or deactivated.

Parameter values:
Value | Description
0 | Master-Tool is not active
1 | Master-Tool is active

With the help of the Master-Tool it is possible to synchronize the position control with a second feedback, the so called Master-Tool feedback. If the command position and the position of the Master-Tool feedback are drifting apart, though there is no deviation of internal position and command position, the controller will try to compensate this deviation. Therefore the desired velocity will be adjusted depending on the direction of the following error.

The feedback for the Master-Tool will be set with the object TOOL_Master_ParSource. The parameter object, which will be the reference source for this feedback, is written with the following format:

0xIIIISS

Whereas IIII is the index of the parameter and SS the subindex of the parameter for the Master-Tool feedback.

 Since the Master-Tool feedback and the internal feedback can have different resolutions, the resolution of the Master-Tool has to be adjusted. This scaling can be set with the parameters TOOL_Master_ScaleNum and TOOL_Master_ScaleDen. The difference of this Master-Tool-feedback must have exactly the same size as the real position difference in the internal feedback after scaling. Otherwise an ever increasing deviation between command position and actual position will arise. It is not possible to compensate this steady deviation.

A wrong scaling can lead to a misbehavior of the system. A special care has to be met with the setting of the Master-Tool.
The Master-Tool is working like a P-controller. The deviation between command position and Master-Tool position will be increased with the gain factor TOOL_Master_FilterKp and add up to the command position. This results in a deviation between the actual position and the command position. To compensate this deviation the controller has to adjust its command velocity. To avoid too intense overshoots this new command velocity can be limited. The maximum velocity increase for the compensation is set in the object TOOL_Master_MaxVel.

Too high values for the gain factor (TOOL_Master_FilterKp) and/or too high values in TOOL_Master_MaxVel can lead to oscillations and an instable system.

The deviation between the Master-Tool position feedback and the command position can be read in the object POS_ActualFollowingError. A deviation between internal feedback and the command position can occur without having a deviation of the Master-Tool position and the command position and vice versa. Therefore the highest actual following error (POS_Actual_FollowingErrorReg or POS_ActualFollowingError) will be used as criteria to generate a following error (POS_FollowingErrorWindow).

Due to its physical characteristics (slippage) the deviation between Master-Tool feedback and command position cannot be used as criteria for the quality of the control loop. To evaluate this quality based on the actual following error the object POS_ActualFollowingErrorReg has to be observed. This object displays the deviation between internal feedback an command-position.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3D14,0x10, 0x396A20)      # TOOL_Master_ParSource - Source fpr the external Position
d.SdoWr(0x3D14,0x12, 1)             # TOOL_Master_ScaleNum  - Numerator for the scaling
d.SdoWr(0x3D14,0x13, 1)             # TOOL_Master_ScaleDen  - Denominator fpr the scaling
d.SdoWr(0x3D14,0x14, 150)           # TOOL_Master_MaxVel    - Maximum velocity
d.SdoWr(0x3D14,0x31, 100)           # TOOL_Master_FilterKp  - COntrolparameter Kp
d.SdoWr(0x3D14,0x00, 1)             # TOOL_Master_Control   - Enable of the master tool


3D14.10h Master-Tool - feedback parameter

Name | TOOL_Master_ParSource
Designation | Master-Tool - feedback parameter
Data type | uint32
Access | read / write
Attributs | Save
Value range | {0, 3754496, 3762688, 3762720, 3766784, 3772576, 3772832}
Default value | 0
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_Control, TOOL_Master_ScaleNum, TOOL_Master_ScaleDen, TOOL_Master_MaxVel, TOOL_Master_FilterKp

Description

This parameter sets the source of the position value for the Master-Tool.

This source is written in the following format:
0xIIIISS

Whereas IIII is the index of the parameter and SS the subindex of the parameter for the Master-Tool feedback.

Possible sources:
Value | Name of the parameter
394A00h | MOT_HALL_ActualPosition
396A00h | MOT_ENC_INC_ActualPositon
396A20h | MOT_ENC_INC2_ActualPosition
397A00h | MOT_ENC_SSI_ActualPosition
3990A0h | MOT_ENC_VIRT0_ActualPosition
3991A0h | MOT_ENC_VIRT1_ActualPosition

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3D14,0x10, 0x396A20)      # TOOL_Master_ParSource - Source fpr the external Position
d.SdoWr(0x3D14,0x12, 1)             # TOOL_Master_ScaleNum  - Numerator for the scaling
d.SdoWr(0x3D14,0x13, 1)             # TOOL_Master_ScaleDen  - Denominator fpr the scaling
d.SdoWr(0x3D14,0x14, 150)           # TOOL_Master_MaxVel    - Maximum velocity
d.SdoWr(0x3D14,0x31, 100)           # TOOL_Master_FilterKp  - COntrolparameter Kp
d.SdoWr(0x3D14,0x00, 1)             # TOOL_Master_Control   - Enable of the master tool


3D14.12h Master-Tool - scale numerator

Name | TOOL_Master_ScaleNum
Designation | Master-Tool - scale numerator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-8388608 .. 8388607]
Default value | 1
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_Control, TOOL_Master_ParSource, TOOL_Master_ScaleDen, TOOL_Master_MaxVel, TOOL_Master_FilterKp

Description

With this parameter the scaling nominator of the Master-Tool is set.

The functionality of the Master-Tool and its dependence to other parameters is elucidated in TOOL_Master_Control.

A wrong scaling can lead to a misbehavior of the system. Special care has to be met with the setting of the Master-Tool.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3D14,0x10, 0x396A20)      # TOOL_Master_ParSource - Source fpr the external Position
d.SdoWr(0x3D14,0x12, 1)             # TOOL_Master_ScaleNum  - Numerator for the scaling
d.SdoWr(0x3D14,0x13, 1)             # TOOL_Master_ScaleDen  - Denominator fpr the scaling
d.SdoWr(0x3D14,0x14, 150)           # TOOL_Master_MaxVel    - Maximum velocity
d.SdoWr(0x3D14,0x31, 100)           # TOOL_Master_FilterKp  - COntrolparameter Kp
d.SdoWr(0x3D14,0x00, 1)             # TOOL_Master_Control   - Enable of the master tool


3D14.13h Master-Tool - scale denominator

Name | TOOL_Master_ScaleDen
Designation | Master-Tool - scale denominator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-8388608 .. 8388607]
Default value | 1
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_Control, TOOL_Master_ParSource, TOOL_Master_ScaleNum, TOOL_Master_MaxVel, TOOL_Master_FilterKp

Description

With this parameter the scaling denominator of the Master-Tool is set.

The functionality of the Master-Tool and its dependence to other parameters is elucidated in TOOL_Master_Control.

A wrong scaling can lead to a misbehavior of the system.. Special care has to be met with the setting of the Master-Tool.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3D14,0x10, 0x396A20)      # TOOL_Master_ParSource - Source fpr the external Position
d.SdoWr(0x3D14,0x12, 1)             # TOOL_Master_ScaleNum  - Numerator for the scaling
d.SdoWr(0x3D14,0x13, 1)             # TOOL_Master_ScaleDen  - Denominator fpr the scaling
d.SdoWr(0x3D14,0x14, 150)           # TOOL_Master_MaxVel    - Maximum velocity
d.SdoWr(0x3D14,0x31, 100)           # TOOL_Master_FilterKp  - COntrolparameter Kp
d.SdoWr(0x3D14,0x00, 1)             # TOOL_Master_Control   - Enable of the master tool


3D14.14h Master-Tool - maximum velocity

Name | TOOL_Master_MaxVel
Designation | Master-Tool - maximum velocity
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 100
Unit | [rpm] - revolutions per minute
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_Control, TOOL_Master_ParSource, TOOL_Master_ScaleNum, TOOL_Master_ScaleDen, TOOL_Master_FilterKp

Description

This parameter determines the maximum offset to which the command velocity can be increased or lowered to compensate a deviation between the Master-Tool feedback and the command position. Depending on the direction of the deviation this velocity is added or subtracted to the command velocity. E.g.: with a value of TOOL_Master_MaxVel = 100 the command velocity will be increased or lowered by a maximum of 100 [U/min] to compensate the deviation between Master-Tool feedback and command position.

It is possible that the velocity can exceed or fall below the limits VEL_LimitMaxPos and VEL_LimitMaxNeg while a compensation of the following error is done.
The functionality of the Master-Tool and its dependence to other parameters is elucidated in TOOL_Master_Control.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                          # NodeId = 1

d.SdoWr(0x3D14,0x10, 0x396A20)      # TOOL_Master_ParSource - Source fpr the external Position
d.SdoWr(0x3D14,0x12, 1)             # TOOL_Master_ScaleNum  - Numerator for the scaling
d.SdoWr(0x3D14,0x13, 1)             # TOOL_Master_ScaleDen  - Denominator fpr the scaling
d.SdoWr(0x3D14,0x14, 150)           # TOOL_Master_MaxVel    - Maximum velocity
d.SdoWr(0x3D14,0x31, 100)           # TOOL_Master_FilterKp  - COntrolparameter Kp
d.SdoWr(0x3D14,0x00, 1)             # TOOL_Master_Control   - Enable of the master tool


3D14.31h Master-Tool - filter gain factor

Name | TOOL_Master_FilterKp
Designation | Master-Tool - filter gain factor
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 100
Unit | -
Operating mode | Position
Available since | 1.93.00.EF
Devices | All
PLC Function | -
Cross reference | TOOL_Master_Control, TOOL_Master_ParSource, TOOL_Master_ScaleNum, TOOL_Master_ScaleDen, TOOL_Master_MaxVel

Description

This parameter sets the gain factor of the Master-Tool. The gain factor determines how much the velocity gets increased at a constant deviation between command-position and the position of the Master-Tool feedback.

The functionality of the Master-Tool and its dependence to other parameters is elucidated in TOOL_Master_Control.


Content - Parameters 6000h (DSP402)

6007.00h | DS402_AbortConnectionOptionCode | Abort Connection Option Code
6040.00h | DS402_ControlWord | Control word
6041.00h | DS402_StatusWord | Status word
6042.00h | DS402_VL_TargetVelocity | Target velocity
6046.00h | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported | Min/max velocity - highest sub-index supported
6046.01h | DS402_VL_VelocityMinMaxAmount_MinVelocity | Minimal velocity
6046.02h | DS402_VL_VelocityMinMaxAmount_MaxVelocity | Maximal velocity
6048.00h | DS402_VL_VelocityAcceleration_HighestSubindexSupported | Velocity acceleration - highest sub-index supported
6048.01h | DS402_VL_VelocityAcceleration_DeltaSpeed | Velocity acceleration - delta speed
6048.02h | DS402_VL_VelocityAcceleration_DeltaTime | Velocity acceleration - delta time
6049.00h | DS402_VL_VelocityDeceleration_HighestSubindexSupported | Velocity deceleration - highest sub-index supported
6049.01h | DS402_VL_VelocityDeceleration_DeltaSpeed | Velocity deceleration - delta speed
6049.02h | DS402_VL_VelocityDeceleration_DeltaTime | Velocity deceleration - delta time
604A.00h | DS402_VL_VelocityQuickstop_HighestSubindexSupported | Velocity quickstop - highest sub-index supported
604A.01h | DS402_VL_VelocityQuickstop_DeltaSpeed | Velocity quickstop - delta speed
604A.02h | DS402_VL_VelocityQuickstop_DeltaTime | Velocity quickstop - delta time
604C.00h | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported | Velocity dimension factor - highest sub-index supported
604C.01h | DS402_VL_VelocityDimensionFactor_Numerator | Velocity dimension factor - numerator
604C.02h | DS402_VL_VelocityDimensionFactor_Denominator | Velocity dimension factor - denominator
6060.00h | DS402_ModesOfOperation | Modes of operation
6061.00h | DS402_ModesOfOperationDisplay | Modes of operation display
6062.00h | DS402_PP_PositionDemandValue | Position - demand value
6063.00h | DS402_PP_PositionActualValueInCounts | Position - actual value in counts
6064.00h | DS402_PP_PositionActualValue | Position - actual value
6065.00h | DS402_PP_FollowingErrorWindow | Following error window
6067.00h | DS402_PP_PositionWindow | Position window
6068.00h | DS402_PP_PositionWindowTime | Position window time
6071.00h | DS402_TQ_TargetTorque | Target torque
6072.00h | DS402_TQ_MaxTorque | Maximal torque
6075.00h | DS402_TQ_MotorRatedCurrent | Motor rated current
6077.00h | DS402_TQ_TorqueActualValue | Torque - actual value
6078.00h | DS402_TQ_CurrentActualValue | Current - actual value
6079.00h | DS402_TQ_DCLinkCircuitVoltage | Power voltage
607A.00h | DS402_PP_TargetPosition | Target position
607C.00h | DS402_HM_HomeOffset | Homing offset
607D.00h | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported | Software limit position - highest sub-index supported
607D.01h | DS402_PP_SoftwareLimitPosition_MinPositionLimit | Software limit position - minimum
607D.02h | DS402_PP_SoftwareLimitPosition_MaxPositionLimit | Software limit position - maximum
607E.00h | DS402_FG_Polarity | Polarity
607F.00h | DS402_PP_MaxProfileVelocity | Velocity max. limit
6081.00h | DS402_PP_ProfileVelocity | Profile velocity
6083.00h | DS402_PP_ProfileAcceleration | Velocity acceleration
6084.00h | DS402_PP_ProfileDeceleration | Velocity deceleration
6085.00h | DS402_PP_QuickstopDeceleration | Velocity quickstop deceleration
6086.00h | DS402_PP_MotionProfileType | Velocity - ramp type
6087.00h | DS402_TQ_TorqueSlope | Torque slope
6088.00h | DS402_TQ_TorqueProfileType | Torque - ramp type
6089.00h | DS402_PP_PositionNotationIndex | Position notation index
608A.00h | DS402_PP_PositionDimensionIndex | Position dimension index
608B.00h | DS402_PP_VelocityNotationIndex | Velocity notation index
608C.00h | DS402_PP_VelocityDimensionIndex | Velocity dimension index
608D.00h | DS402_PP_AccelerationNotationIndex | Acceleration notation index
608E.00h | DS402_PP_AccelerationDimensionIndex | Acceleration dimension index
608F.00h | DS402_FG_PositionEncoderResolution_HighestSubindexSupported | Position encoder resolution - highest subindex supported
608F.01h | DS402_FG_PositionEncoderResolution_EncoderIncrements | Position encoder resolution - Encoder increment
608F.02h | DS402_FG_PositionEncoderResolution_MotorShaftRevolutions | Position encoder resolution - motor shaft revolutions
6090.00h | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported | Velocity encoder resolution - highest subindex supported
6090.01h | DS402_FG_VelocityEncoderResolution_EncoderIncrements | Velocity encoder resolution - Encoder increment
6090.02h | DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions | Velocity encoder resolution - motor shaft revolutions
6091.00h | DS402_FG_GearRatio_HighestSubindexSupported | Gear ratio - highest subindex supported
6091.01h | DS402_FG_GearRatio_MotorShaftRevolutions | Gear ratio - motor shaft revolutions
6091.02h | DS402_FG_GearRatio_DrivingShaftRevolutions | Gear ratio - driving shaft revolutions
6092.00h | DS402_FG_FeedConstant_HighestSubindexSupported | Feed constant - highest subindex supported
6092.01h | DS402_FG_FeedConstant_Feed | Feed constant - feed
6092.02h | DS402_FG_FeedConstant_DrivingShaftRevolutions | Feed constant - driving shaft revolutions
6098.00h | DS402_HM_HomingMethod | Homing - method
6099.00h | DS402_HM_HomingSpeeds_HighestSubindexSupported | Homing velocity - highest subindex supported
6099.01h | DS402_HM_HomingSpeeds_SpeedSwitch | Homing velocity for search of switch
6099.02h | DS402_HM_HomingSpeeds_SpeedZero | Homing velocity for search of zero point
609A.00h | DS402_HM_HomingAcceleration | Homing acceleration
60C0.00h | DS402_IP_InterpolationSubModeSelect | Interpolation - method
60C1.00h | DS402_IP_InterpolationDataRecord_HighestSubindexSupported | Interpolation data record - highest subindex supported
60C1.01h | DS402_IP_InterpolationDataRecord_1stSetPoint | Interpolation data record - 1st set-point
60C2.00h | DS402_IP_InterpolationTimePeriod_HighestSubindexSupported | Interpolation time period - highest subindex supported
60C2.01h | DS402_IP_InterpolationTimePeriod_Value | Interpolation time period - value
60C2.02h | DS402_IP_InterpolationTimePeriod_Index | Interpolation time period - index
60C4.00h | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported | Interpolation data configuration - highest subindex supported
60C4.01h | DS402_IP_InterpolationDataConfiguration_MaximumBufferSize | Interpolation data configuration - maximum buffer size
60C4.02h | DS402_IP_InterpolationDataConfiguration_ActualBufferSize | Interpolation data configuration - actual buffer size
60C4.03h | DS402_IP_InterpolationDataConfiguration_BufferOrganisation | Interpolation data configuration - buffer organization
60C4.04h | DS402_IP_InterpolationDataConfiguration_BufferPosition | Interpolation data configuration - buffer position
60C4.05h | DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord | Interpolation data configuration - size of data record
60C4.06h | DS402_IP_InterpolationDataConfiguration_BufferClear | Interpolation data configuration - buffer clear
60F4.00h | DS402_PP_FollowingErrorActualValue | Following error actual value
60FC.00h | DS402_PP_PositionDemandValueInCounts | Position demand value in counts
60FD.00h | DS402_DigitalInputs | Digital inputs
60FE.00h | DS402_DigitalOutputs_HighestSubindexSupported | Digital output - highest subindex supported
60FE.01h | DS402_DigitalOutputs_PhysicalOutput | Digital output - physical outputs
60FE.02h | DS402_DigitalOutputs_BitMask | Digital output - bit mask
6402.00h | DS402_MotorType | Motor type
6502.00h | DS402_SupportedDriveModes | Supported drive modes


6007.00h Abort Connection Option Code

Name | DS402_AbortConnectionOptionCode
Designation | Abort Connection Option Code
Data type | int16
Access | read / write
Attributs | Save
Value range | {0, 1, 2, 3}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This object indicates what action shall be performed when one of the following events occurres: bus-off, heartbeat and life guarding.

Parameter values:
Value | Description
0 | No action
1 | Fault signal
2 | Device command "Disable"
3 | Device command "Quickstop"
4 .. 32767 | Reserved


6040.00h Control word

Name | DS402_ControlWord
Designation | Control word
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The control word indicates the command controlling the DSA (digital servo amplifier).

Assignment of bits:
Bit | Description for bit = 1
0 | Switch on
1 | Enable voltage
2 | Quickstop
3 | Enable operation
4 | In profile position mode: - New setpoint (rising edge) In homing mode: - Homing operation start In interpolated position mode: - Enable ip mode In other modes: - Reserved
5 | In profile position mode: - Change set immediately 0 - Positioning must be completed before the next one gets started 1 - Next positioning will be started immediately In other modes: - Reserved
6 | In profile position mode: - Type of moving: 0 - Target position is an absolute value 1 - Target position is a relative value In other modes: - Reserved
7 | Fault reset
8 | Halt
9 .. 15 | Reserved, always 0

Command coding:
Command | Bits of the controlword
 | Bit 7 | Bit 3 | Bit 2 | Bit 1 | Bit 0
Shutdown | 0 | x | 1 | 1 | 0
Switch on | 0 | 0 | 1 | 1 | 1
Switch on + enable operation | 0 | 1 | 1 | 1 | 1
Disable voltage | 0 | x | x | 0 | x
Quickstop | 0 | x | 0 | 1 | x
Disable operation | 0 | 0 | 1 | 1 | 1
Enable operation | 0 | 1 | 1 | 1 | 1
Fault reset | ↑ | x | x | x | x


6041.00h Status word

Name | DS402_StatusWord
Designation | Status word
Data type | uint16
Access | read only
Attributs | Save
Value range | [0 .. 65535]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The statusword indicates the current state of the drive. No bits are latched.

Assignment of bits:
Bit | Description for bit = 1
0 | Ready to switch on
1 | Switched on
2 | Operation enabled
3 | Fault
4 | Voltage enabled - the voltage is applied to the drive
5 | Quickstop - the quickstop command has been executed
6 | Switch on disabled
7 | Warning
8 | Reserved
9 | Remote - always 1
10 | Target reached - the set-point has been reached.
11 | Internal limit active (e.g. position range limit)
12 | In profile position mode: - Set point acknowledge: - 0 - previous setpoint already processed, waiting for new setpoint - 1 - previous setpoint still in process, setpoint overwriting shall be accepted In homing mode: - Homing attained In interpolated position mode: - ip mode active In other modes: - Reserved
13 | In profile position mode: - Following error In homing mode: - Homing error In other modes: - Reserved
14 | Reserved
15 | Reserved

State coding:
Statusword (binary) | State
xxxx xxxx x0xx 0000 | Not ready to switch on
xxxx xxxx x1xx 0000 | Switched on disabled
xxxx xxxx x01x 0001 | Ready to switch on
xxxx xxxx x01x 0011 | Switched on
xxxx xxxx x01x 0111 | Operation enabled
xxxx xxxx x00x 0111 | Quickstop active
xxxx xxxx x0xx 1111 | Fault reaction active
xxxx xxxx x0xx 1000 | Fault


6042.00h Target velocity

Name | DS402_VL_TargetVelocity
Designation | Target velocity
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 0
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter sets the target velocity in velocity mode.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6046.00h Min/max velocity - highest sub-index supported

Name | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported
Designation | Min/max velocity - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityMinMaxAmount_MinVelocity, DS402_VL_VelocityMinMaxAmount_MaxVelocity

Description

This limit applies to the range of the desired value of the velocity controller. The parameter is composed of the velocity min and velocity max parameter.

The velocity max parameter is mapped internally to the velocity max pos and velocity max neg values.
The velocity min parameter is mapped internally to the velocity min pos and velocity min neg values.

Only the positive values are returned if the velocity min max amount parameter is read out.

  • Sub-index 01h contains the value of min. velocity
  • Sub-index 02h contains the value of max. velocity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6046.01h Minimal velocity

Name | DS402_VL_VelocityMinMaxAmount_MinVelocity
Designation | Minimal velocity
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 32767]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported, DS402_VL_VelocityMinMaxAmount_MaxVelocity

Description

This parameter defines the minimal value of the desired value of the velocity controller. The velocity min parameter is mapped internally to the velocity min pos and velocity min neg values. Only the positive values are returned if the velocity min max amount parameter is read out.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6046.02h Maximal velocity

Name | DS402_VL_VelocityMinMaxAmount_MaxVelocity
Designation | Maximal velocity
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 32767]
Default value | 32767
Unit | [rpm] - revolutions per minute
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported, DS402_VL_VelocityMinMaxAmount_MinVelocity

Description

This parameter defines the maximal value of the desired value of the velocity controller. The velocity max parameter is mapped internally to the velocity max pos and velocity max neg values. Only the positive values are returned if the velocity min max amount parameter is read out.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6048.00h Velocity acceleration - highest sub-index supported

Name | DS402_VL_VelocityAcceleration_HighestSubindexSupported
Designation | Velocity acceleration - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityAcceleration_DeltaSpeed, DS402_VL_VelocityAcceleration_DeltaTime

Description

The parameter specifies the slope of the acceleration ramp. It is generated as the quotient of the DS402_VL_VelocityAcceleration_DeltaSpeed and DS402_VL_VelocityAcceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity acceleration = DS402_VL_VelocityAcceleration_DeltaSpeed / DS402_VL_VelocityAcceleration_DeltaTime [rpm/s]

  • Sub-index 01h contains the delta speed of velocity acceleration
  • Sub-index 02h contains the delta time of velocity acceleration

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6048.01h Velocity acceleration - delta speed

Name | DS402_VL_VelocityAcceleration_DeltaSpeed
Designation | Velocity acceleration - delta speed
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityAcceleration_HighestSubindexSupported, DS402_VL_VelocityAcceleration_DeltaTime

Description

The parameter specifies the slope of the acceleration ramp. It is generated as the quotient of the DS402_VL_VelocityAcceleration_DeltaSpeed and DS402_VL_VelocityAcceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity acceleration = DS402_VL_VelocityAcceleration_DeltaSpeed / DS402_VL_VelocityAcceleration_DeltaTime [rpm/s]

This parameter is the numerator of this quotation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6048.02h Velocity acceleration - delta time

Name | DS402_VL_VelocityAcceleration_DeltaTime
Designation | Velocity acceleration - delta time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1
Unit | [s]
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityAcceleration_HighestSubindexSupported, DS402_VL_VelocityAcceleration_DeltaSpeed

Description

The parameter specifies the slope of the acceleration ramp. It is generated as the quotient of the DS402_VL_VelocityAcceleration_DeltaSpeed and DS402_VL_VelocityAcceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity acceleration = DS402_VL_VelocityAcceleration_DeltaSpeed / DS402_VL_VelocityAcceleration_DeltaTime [rpm/s]

This parameter is the denominator of this quotation.

vl velocity acceleration transfer characteristic

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6049.00h Velocity deceleration - highest sub-index supported

Name | DS402_VL_VelocityDeceleration_HighestSubindexSupported
Designation | Velocity deceleration - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDeceleration_DeltaSpeed, DS402_VL_VelocityDeceleration_DeltaTime

Description

The parameter specifies the slope of the deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityDeceleration_DeltaSpeed and DS402_VL_VelocityDeceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity deceleration = DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime [rpm/s]

  • Sub-index 01h contains the delta speed of velocity deceleration
  • Sub-index 02h contains the delta time of velocity deceleration

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6049.01h Velocity deceleration - delta speed

Name | DS402_VL_VelocityDeceleration_DeltaSpeed
Designation | Velocity deceleration - delta speed
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDeceleration_HighestSubindexSupported, DS402_VL_VelocityDeceleration_DeltaTime

Description

The parameter specifies the slope of the deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityDeceleration_DeltaSpeed and DS402_VL_VelocityDeceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity deceleration = DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime [rpm/s]

This parameter is the numerator of this quotation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6049.02h Velocity deceleration - delta time

Name | DS402_VL_VelocityDeceleration_DeltaTime
Designation | Velocity deceleration - delta time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1
Unit | [s]
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDeceleration_HighestSubindexSupported, DS402_VL_VelocityDeceleration_DeltaSpeed

Description

The parameter specifies the slope of the deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityDeceleration_DeltaSpeed and DS402_VL_VelocityDeceleration_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity deceleration = DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime [rpm/s]

This parameter is the denominator of this quotation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604A.00h Velocity quickstop - highest sub-index supported

Name | DS402_VL_VelocityQuickstop_HighestSubindexSupported
Designation | Velocity quickstop - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityQuickstop_DeltaSpeed, DS402_VL_VelocityQuickstop_DeltaTime

Description

The parameter specifies the slope of the quickstop deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityQuickstop_DeltaSpeed and DS402_VL_VelocityQuickstop_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity quickstop = DS402_VL_VelocityQuickstop_DeltaSpeed / DS402_VL_VelocityQuickstop_DeltaTime [rpm/s]

The following events leads into the Quickstop:
  • Command Quickstop with the help of DS402_ControlWord
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).
If the "general" deceleration (DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime) is quicker than the quickstop deceleration, the general one is taken.

  • Sub-index 01h contains the delta speed of velocity quickstop
  • Sub-index 02h contains the delta time of velocity quickstop

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604A.01h Velocity quickstop - delta speed

Name | DS402_VL_VelocityQuickstop_DeltaSpeed
Designation | Velocity quickstop - delta speed
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 10000
Unit | [rpm] - revolutions per minute
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityQuickstop_HighestSubindexSupported, DS402_VL_VelocityQuickstop_DeltaTime

Description

The parameter specifies the slope of the quickstop deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityQuickstop_DeltaSpeed and DS402_VL_VelocityQuickstop_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity quickstop = DS402_VL_VelocityQuickstop_DeltaSpeed / DS402_VL_VelocityQuickstop_DeltaTime [rpm/s]

This parameter is the numerator of this quotation.

The following events leads into the Quickstop:
  • Command Quickstop with the help of DS402_ControlWord
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).
If the "general" deceleration (DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime) is quicker than the quickstop deceleration, the general one is taken.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604A.02h Velocity quickstop - delta time

Name | DS402_VL_VelocityQuickstop_DeltaTime
Designation | Velocity quickstop - delta time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 1
Unit | [s]
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityQuickstop_HighestSubindexSupported, DS402_VL_VelocityQuickstop_DeltaSpeed

Description

The parameter specifies the slope of the quickstop deceleration ramp. It is generated as the quotient of the DS402_VL_VelocityQuickstop_DeltaSpeed and DS402_VL_VelocityQuickstop_DeltaTime parameter.

This function directly follows the set-point if the parameter 0 is defined for the delta time value.

velocity quickstop = DS402_VL_VelocityQuickstop_DeltaSpeed / DS402_VL_VelocityQuickstop_DeltaTime [rpm/s]

This parameter is the denominator of this quotation.

The following events leads into the Quickstop:
  • Command Quickstop with the help of DS402_ControlWord
  • Limit switch (if designed) was activated (see DEV_DinLimitPos, DEV_DinLimitNeg).
If the "general" deceleration (DS402_VL_VelocityDeceleration_DeltaSpeed / DS402_VL_VelocityDeceleration_DeltaTime) is quicker than the quickstop deceleration, the general one is taken.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604C.00h Velocity dimension factor - highest sub-index supported

Name | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported
Designation | Velocity dimension factor - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDimensionFactor_Numerator, DS402_VL_VelocityDimensionFactor_Denominator

Description

This parameter sets the numerator of the velocity dimension factor (Fvdim) .

This factor is calculated by the division of DS402_VL_VelocityDimensionFactor_Numerator by DS402_VL_VelocityDimensionFactor_Denominator. It can be used to convert different user units into each others.
It influences the target velocity, velocity demand, velocity actual value as well as the velocity limit function and the ramp function.

Fvdim = DS402_VL_VelocityDimensionFactor_Numerator / DS402_VL_VelocityDimensionFactor_Denominator

  • Sub-index 01h contains the numerator of velocity dimension factor
  • Sub-index 02h contains the delta time of velocity dimension factor

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604C.01h Velocity dimension factor - numerator

Name | DS402_VL_VelocityDimensionFactor_Numerator
Designation | Velocity dimension factor - numerator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 1
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported, DS402_VL_VelocityDimensionFactor_Denominator

Description

This parameter sets the numerator of the velocity dimension factor (Fvdim) .

This factor is calculated by the division of DS402_VL_VelocityDimensionFactor_Numerator by DS402_VL_VelocityDimensionFactor_Denominator. It can be used to convert different user units into each others.
It influences the target velocity, velocity demand, velocity actual value as well as the velocity limit function and the ramp function.

Fvdim = DS402_VL_VelocityDimensionFactor_Numerator / DS402_VL_VelocityDimensionFactor_Denominator

This parameter is the numerator of this quotation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


604C.02h Velocity dimension factor - denominator

Name | DS402_VL_VelocityDimensionFactor_Denominator
Designation | Velocity dimension factor - denominator
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] excluded {0}
Default value | 1
Unit | -
Operating mode | Velocity mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported, DS402_VL_VelocityDimensionFactor_Numerator

Description

This parameter sets the numerator of the velocity dimension factor (Fvdim) .

This factor is calculated by the division of DS402_VL_VelocityDimensionFactor_Numerator by DS402_VL_VelocityDimensionFactor_Denominator. It can be used to convert different user units into each others.
It influences the target velocity, velocity demand, velocity actual value as well as the velocity limit function and the ramp function.

Fvdim = DS402_VL_VelocityDimensionFactor_Numerator / DS402_VL_VelocityDimensionFactor_Denominator

This parameter is the denominator of this quotation.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 2)                  # Mode of operation - velocity mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x6046, 0x01, 0)                  # Min. velocity [rpm]
d.SdoWr(0x6046, 0x02, 32767)              # Max. velocity [rpm]

d.SdoWr(0x6048, 0x01, 1000)               # Velocity acceleration - delta speed [rpm]
d.SdoWr(0x6048, 0x02, 1)                  # Velocity acceleration - delta time [s]

d.SdoWr(0x6049, 0x01, 1000)               # Velocity deceleration - delta speed [rpm]
d.SdoWr(0x6049, 0x02, 1)                  # Velocity deceleration - delta time [s]

d.SdoWr(0x604A, 0x01, 10000)              # Velocity quickstop - delta speed [rpm]
d.SdoWr(0x604A, 0x02, 1)                  # Velocity quickstop - delta time [s]

d.SdoWr(0x604C, 0x01, 1)                  # Velocity dimension factor - numerator
d.SdoWr(0x604C, 0x02, 1)                  # Velocity dimension factor - denominator

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6042, 0x00, 500)                # Target velocity [rpm]


6060.00h Modes of operation

Name | DS402_ModesOfOperation
Designation | Modes of operation
Data type | int8
Access | read / write
Attributs | Save
Value range | {-1, 1, 2, 4, 6, 7, 8} Mode 8 (CSPM) is available since firmware version 1.93.00.F0
Default value | -1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_ModesOfOperationDisplay, DS402_SupportedDriveModes

Description

This parameter defines the operation mode of the device controller.

Parameter values:
Value | Description
-1 | Off mode - Power stage and controller are switched off.
1 | Profile position mode (pp)
2 | Velocity mode (vl)
4 | Torque profile mode (tq)
6 | Homing mode (hm)
7 | Interpolated position mode (ip) This mode is available starting with the firmware version 1.89.00.03.

Note
The actual mode of the drive is reflected in the object DS402_ModesOfOperationDisplay.


6061.00h Modes of operation display

Name | DS402_ModesOfOperationDisplay
Designation | Modes of operation display
Data type | int8
Access | read only
Attributs | Save
Value range | {-127, -3, 1, 2, 4, 6, 7}
Default value | -1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_ModesOfOperation, DS402_SupportedDriveModes

Description

The parameter returns the current mode of operation. The meaning of the returned value corresponds to value of the parameter DS402_ModesOfOperation.

Parameter values:
Value | Description
-127 | Inconsistent - the mode set in parameter DEV_Mode and DS402_ModesOfOperation is inconsistent
-2 | Sub Velocity mode
-1 | Off mode - Power stage and controller are switched off.
1 | Profile position mode (pp)
2 | Velocity mode (vl)
4 | Torque profile mode (tq)
6 | Homing mode (hm)
7 | Interpolated position mode (ip), This mode is available starting with the firmware version 1.89.00.03.


6062.00h Position - demand value

Name | DS402_PP_PositionDemandValue
Designation | Position - demand value
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter provides the demanded position value.
A target position is applied to the profile generator. It is generating a position demand value for the position control loop.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6063.00h Position - actual value in counts

Name | DS402_PP_PositionActualValueInCounts
Designation | Position - actual value in counts
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionActualValue

Description

The parameter provides the actual position in increments. Depending on the feedback the hall position or the encoder position is valid.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6064.00h Position - actual value

Name | DS402_PP_PositionActualValue
Designation | Position - actual value
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionActualValueInCounts

Description

The parameter provides the actual position. Depending on the feedback the hall position or the encoder position is valid.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6065.00h Following error window

Name | DS402_PP_FollowingErrorWindow
Designation | Following error window
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter indicates the configured range of tolerated position values symmetrically to the position demand value. If the position actual value is out of the following error window, a following error occurs. A following error may occur when a drive is blocked, unreachable profile velocity occurs, or at wrong closed-loop coefficients. If the value of the following error window is FFFFFFFFh (4294967295), the following control is switched off.

Parameter values:
Value | Description
= FFFFFFFFh | following control is switched off
< FFFFFFFFh | following control is activ

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6067.00h Position window

Name | DS402_PP_PositionWindow
Designation | Position window
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionWindowTime

Description

This parameter indicates the configured symmetrical range of positions relatively to the target position. If the actual value of the position encoder is within the position window, this target position is regarded as reached. If the value of the position window is FFFFFFFFh (4294967295), the position window control is switched off.

Parameter values:
Value | Description
<FFFFFFFFh | position window
=FFFFFFFh | position window control is switched off

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6068.00h Position window time

Name | DS402_PP_PositionWindowTime
Designation | Position window time
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionWindow

Description

The parameter indicates the configured time, during which the actual position within the position window is measured.
The actual position must be within the position window for a certain time, before the bit 10 (target reached) in DS402_StatusWord is set. The value is given in miliseconds (ms).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6071.00h Target torque

Name | DS402_TQ_TargetTorque
Designation | Target torque
Data type | int16
Access | read / write
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 0
Unit | [o/oo]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_TQ_MaxTorque, DS402_TQ_MotorRatedCurrent

Description

This parameter is the input value for the torque controller in profile torque mode and the value is given per thousand of rated torque.

motor torque = DS402_TQ_MotorRatedCurrent [mA] * DS402_TQ_TargetTorque [o/oo]

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6072.00h Maximal torque

Name | DS402_TQ_MaxTorque
Designation | Maximal torque
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [o/oo]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_TQ_TargetTorque, DS402_TQ_MotorRatedCurrent

Description

This value represents the maximum permissible torque in the motor and is given per thousand of rated torque.

max motor torque = DS402_TQ_MotorRatedCurrent [mA] * DS402_TQ_MaxTorque [o/oo]

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6075.00h Motor rated current

Name | DS402_TQ_MotorRatedCurrent
Designation | Motor rated current
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [mA]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_TQ_TargetTorque, DS402_TQ_MaxTorque

Description

This parameter defines the motor rated current in mA. It is taken from the motor's name-plate. All relative data refers to this value.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6077.00h Torque - actual value

Name | DS402_TQ_TorqueActualValue
Designation | Torque - actual value
Data type | int16
Access | read only
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 0
Unit | [o/oo]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_TQ_MotorRatedCurrent

Description

This parameter provides the actual current of the motor. The value is given per thousand of rated current (DS402_TQ_MotorRatedCurrent).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6078.00h Current - actual value

Name | DS402_TQ_CurrentActualValue
Designation | Current - actual value
Data type | int16
Access | read only
Attributs | Save
Value range | [-32768 .. 32767]
Default value | 0
Unit | [o/oo]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_TQ_MotorRatedCurrent

Description

This parameter provides the actual current of the motor. The value is given per thousand of rated current (DS402_TQ_MotorRatedCurrent).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6079.00h Power voltage

Name | DS402_TQ_DCLinkCircuitVoltage
Designation | Power voltage
Data type | uint32
Access | read only
Attributs | Save
Value range | [0 .. 4294967295]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

Provides the actual voltage of the power supply (power stage) in milivolts (mV).
The exact range of parameter value can be taken from the datasheet of the respective amplifier.


607A.00h Target position

Name | DS402_PP_TargetPosition
Designation | Target position
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter indicates the target position that the drive should move to in position profile mode using the current settings of motion control parameters such as velocity, acceleration, deceleration, motion profile type etc. The value of this object is interpreted as absolute or relative depending on the bit 6 in the controlword (DS402_ControlWord).

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


607C.00h Homing offset

Name | DS402_HM_HomeOffset
Designation | Homing offset
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | [rev]
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter indicates the configured difference between the zero position for the application and the machine home position (found during homing). During homing the machine home position is found and once the homing is completed the zero position is offset from the home position by adding the home offset to the home position.

All subsequent absolute moves are taken relative to this new zero position. This is illustrated in the following diagram.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.


607D.00h Software limit position - highest sub-index supported

Name | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported
Designation | Software limit position - highest sub-index supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_SoftwareLimitPosition_MinPositionLimit, DS402_PP_SoftwareLimitPosition_MaxPositionLimit

Description

This parameter indicates the configured maximal and minimal software position limits. These parameters define the absolute position limits for the position demand value (DS402_PP_PositionDemandValue) and the position actual value (DS402_PP_PositionActualValue). Every new target position is checked against these limits. The limit positions are always relative to the machine home position. Before being compared with the target position, they are corrected internally by the home offset as follows:

corrected min position limit = DS402_PP_SoftwareLimitPosition_MinPositionLimit - DS402_HM_HomeOffset
corrected max position limit = DS402_PP_SoftwareLimitPosition_MaxPositionLimit - DS402_HM_HomeOffset

This calculation needs only be performed when home offset or software position limit is changed.

  • Sub-index 01h contains the minimum position limit
  • Sub-index 02h contains the maximum position limit


607D.01h Software limit position - minimum

Name | DS402_PP_SoftwareLimitPosition_MinPositionLimit
Designation | Software limit position - minimum
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -2147483648
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported, DS402_PP_SoftwareLimitPosition_MaxPositionLimit

Description

This parameter indicates the configured minimal software position limits. This parameter defines the absolute minimal position limits for the position demand value (DS402_PP_PositionDemandValue) and the position actual value (DS402_PP_PositionActualValue). Every new target position is checked against this limit. The limit position is always relative to the machine home position. Before being compared with the target position, it is corrected internally by the home offset as follows:

corrected min position limit = DS402_PP_SoftwareLimitPosition_MinPositionLimit - DS402_HM_HomeOffset

This calculation needs only be performed when home offset or software position limit is changed.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.


607D.02h Software limit position - maximum

Name | DS402_PP_SoftwareLimitPosition_MaxPositionLimit
Designation | Software limit position - maximum
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 2147483647
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported, DS402_PP_SoftwareLimitPosition_MinPositionLimit

Description

This parameter indicates the configured maximal software position limits. This parameters defines the absolute maximal position limits for the position demand value (DS402_PP_PositionDemandValue) and the position actual value (DS402_PP_PositionActualValue). Every new target position is checked against this limit. The limit position is always relative to the machine home position. Before being compared with the target position, it is corrected internally by the home offset as follows:

corrected max position limit = DS402_PP_SoftwareLimitPosition_MaxPositionLimit - DS402_HM_HomeOffset

This calculation needs only be performed when home offset or software position limit is changed.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.


607E.00h Polarity

Name | DS402_FG_Polarity
Designation | Polarity
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 255]
Default value | 0
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The paremeter indicates if the position demand value shall be multiplied by 1 or by -1. The polarity flag has no influence to the homing mode.

The polarity bits are coded as follows:
0 = multiply by 1
1 = multiply by -1

Parameter values:
Bit | Description
0 .. 6 | Reserved
7 | Position polarity

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


607F.00h Velocity max. limit

Name | DS402_PP_MaxProfileVelocity
Designation | Velocity max. limit
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [rpm] - revolutions per minute
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter defines the maximal allowed velocity in either direction during a movement.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6081.00h Profile velocity

Name | DS402_PP_ProfileVelocity
Designation | Profile velocity
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The profile velocity is the velocity normally attained at the end of the acceleration ramp during a profiled move and is valid for both directions of motion.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6083.00h Velocity acceleration

Name | DS402_PP_ProfileAcceleration
Designation | Velocity acceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 60000
Unit | [rev/min²]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the slope of the positive ramp in rev/min².

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6084.00h Velocity deceleration

Name | DS402_PP_ProfileDeceleration
Designation | Velocity deceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 60000
Unit | [rev/min²]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the slope of the negative ramp in rev/min².

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6085.00h Velocity quickstop deceleration

Name | DS402_PP_QuickstopDeceleration
Designation | Velocity quickstop deceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 600000
Unit | [rev/min²]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the slope of the negative ramp for quickstop in rev/min².

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6086.00h Velocity - ramp type

Name | DS402_PP_MotionProfileType
Designation | Velocity - ramp type
Data type | int16
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter defines the type of the ramp in profile position mode.

Parameter values:
Value | Description
0 | Trapezium (linear ramp)
1 | S² Ramp

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 1)                  # Mode of operation - position mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index (increments)
d.SdoWr(0x6065, 0x00, 1000)               # Following error window [inc]

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6081, 0x00, 1000)               # Velocity [rpm]
d.SdoWr(0x607A, 0x00, 2000)               # Target position [inc]

d.SdoWr(0x6040, 0x00, 0x5F)               # Control word - Start relative moving


6087.00h Torque slope

Name | DS402_TQ_TorqueSlope
Designation | Torque slope
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [o/oo]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter describes the rate of change of torque in units of per thousand of rated torque per second.


6088.00h Torque - ramp type

Name | DS402_TQ_TorqueProfileType
Designation | Torque - ramp type
Data type | int16
Access | read / write
Attributs | Save
Value range | {-1}
Default value | -1
Unit | -
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The torque profile type is used to select the type of torque profile used to perform a torque change.

Parameter values:
Value | Description
-1 | No ramp - takes the quickest ramp possible by the device


6089.00h Position notation index

Name | DS402_PP_PositionNotationIndex
Designation | Position notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-18 .. 18]
Default value | 0
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionDimensionIndex

Description

This parameter defines the unit of the position parameters (target position and actual positions).

Position_Unit = 10DS402_PP_PositionNotationIndex * PhyUnit(DS402_PP_PositionDimensionIndex)


608A.00h Position dimension index

Name | DS402_PP_PositionDimensionIndex
Designation | Position dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {B4h, ACh}
Default value | B4h
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_PositionNotationIndex

Description

This parameter defines the physical unit of the position parameters (target position and actual positions).

Position_Unit = 10DS402_PP_PositionNotationIndex * PhyUnit(DS402_PP_PositionDimensionIndex)

Parameter values:
Value | Description
B4h | Revolutions (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)
ACh | Increments


608B.00h Velocity notation index

Name | DS402_PP_VelocityNotationIndex
Designation | Velocity notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-18 .. 18]
Default value | 0
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_VelocityDimensionIndex

Description

This parameter defines the unit of the velocity parameters (target velocity and actual velocities).

Velocity_Unit = 10DS402_PP_VelocityNotationIndex * PhyUnit(DS402_PP_VelocityDimensionIndex)


608C.00h Velocity dimension index

Name | DS402_PP_VelocityDimensionIndex
Designation | Velocity dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {A3h, A4h}
Default value | A4h
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_VelocityNotationIndex

Description

This parameter defines the physical unit of the velocity parameters (target velocity and actual velocities).

Velocity_Unit = 10DS402_PP_VelocityNotationIndex * PhyUnit(DS402_PP_VelocityDimensionIndex)

Parameter values:
Value | Description
A3h | [rps] - revolutions per second (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)
A4h | [rpm] - revolutions per minute Revolution (assuming the parameters MOTOR_ENC_Resolution and MOTOR_PolN were set correctly)


608D.00h Acceleration notation index

Name | DS402_PP_AccelerationNotationIndex
Designation | Acceleration notation index
Data type | int8
Access | read / write
Attributs | Save
Value range | [-18 .. 18]
Default value | 0
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_AccelerationDimensionIndex

Description

This parameter defines the unit of the acceleration and deceleration.

Acceleration_Unit = 10DS402_PP_AccelerationNotationIndex * PhyUnit(DS402_PP_AccelerationDimensionIndex)


608E.00h Acceleration dimension index

Name | DS402_PP_AccelerationDimensionIndex
Designation | Acceleration dimension index
Data type | uint8
Access | read / write
Attributs | Save
Value range | {AFh, B0h}
Default value | B0h
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_PP_AccelerationNotationIndex

Description

This parameter defines the physical unit of the acceleration and deceleration.

Acceleration_Unit = 10DS402_PP_AccelerationNotationIndex * PhyUnit(DS402_PP_AccelerationDimensionIndex)

Parameter values:
Value | Description
AFh | [r/s²] - revolutions per second squared
B0h | [r/min²] - revolutions per minute squared


608F.00h Position encoder resolution - highest subindex supported

Name | DS402_FG_PositionEncoderResolution_HighestSubindexSupported
Designation | Position encoder resolution - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_PositionEncoderResolution_EncoderIncrements, DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

Description

The position encoder resolution defines the ratio of encoder increments per motor revolution. The position encoder resolution is calculated by the following formula:
the motor with encoder feedback
positionen encoder resolution = MOTOR_ENC_Resolution * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

the motor with hall feedback
positionen encoder resolution = MOTOR_PolN * 3 * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

  • Sub-index 01h contains the encoder increments
  • Sub-index 02h contains motor shaft revoltutions


608F.01h Position encoder resolution - Encoder increment

Name | DS402_FG_PositionEncoderResolution_EncoderIncrements
Designation | Position encoder resolution - Encoder increment
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | [counts]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_PositionEncoderResolution_HighestSubindexSupported, DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

Description

The parameter defines the numerator of position encoder resolution. The position encoder resolution is calculated by the following formula:
the motor with encoder feedback
positionen encoder resolution = MOTOR_ENC_Resolution * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

the motor with hall feedback
positionen encoder resolution = MOTOR_PolN * 3 * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions


608F.02h Position encoder resolution - motor shaft revolutions

Name | DS402_FG_PositionEncoderResolution_MotorShaftRevolutions
Designation | Position encoder resolution - motor shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_PositionEncoderResolution_HighestSubindexSupported, DS402_FG_PositionEncoderResolution_EncoderIncrements

Description

The parameter defines the denominator of position encoder resolution. The position encoder resolution is calculated by the following formula:
the motor with encoder feedback
positionen encoder resolution = MOTOR_ENC_Resolution * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions

the motor with hall feedback
positionen encoder resolution = MOTOR_PolN * 3 * DS402_FG_PositionEncoderResolution_EncoderIncrements / DS402_FG_PositionEncoderResolution_MotorShaftRevolutions


6090.00h Velocity encoder resolution - highest subindex supported

Name | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported
Designation | Velocity encoder resolution - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_VelocityEncoderResolution_EncoderIncrements, DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions

Description

The velocity encoder resolution defines the ratio of encoder increments/sec. per motor revolutions/sec. The velocity encoder resolution is calculated by the following formula:
the motor with encoder feedback
velocity encoder resolution = MOTOR_ENC_Resolution * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions
the motor with hall feedback
velocity encoder resolution = MOTOR_PolN * 3 * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions

  • Sub-index 01h contains the encoder increments per second
  • Sub-index 02h contains motor shaft revoltutions per second


6090.01h Velocity encoder resolution - Encoder increment

Name | DS402_FG_VelocityEncoderResolution_EncoderIncrements
Designation | Velocity encoder resolution - Encoder increment
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported, DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions

Description

The parameter defines the numerator of velocity encoder resolution. The velocity encoder resolution is calculated by the following formula:
the motor with encoder feedback
velocity encoder resolution = MOTOR_ENC_Resolution * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions
the motor with hall feedback
velocity encoder resolution = MOTOR_PolN * 3 * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions


6090.02h Velocity encoder resolution - motor shaft revolutions

Name | DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions
Designation | Velocity encoder resolution - motor shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | [rps] - revolutions per second
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported, DS402_FG_VelocityEncoderResolution_EncoderIncrements

Description

The parameter defines the denominator of velocity encoder resolution. The velocity encoder resolution is calculated by the following formula:
the motor with encoder feedback
velocity encoder resolution = MOTOR_ENC_Resolution * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions
the motor with hall feedback
velocity encoder resolution = MOTOR_PolN * 3 * DS402_FG_VelocityEncoderResolution_EncoderIncrements / DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions


6091.00h Gear ratio - highest subindex supported

Name | DS402_FG_GearRatio_HighestSubindexSupported
Designation | Gear ratio - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_GearRatio_MotorShaftRevolutions, DS402_FG_GearRatio_DrivingShaftRevolutions

Description

The parameter indicates the configured number of motor shaft revolution and number of driving shaft revolutions. The gear ratio is calculated by the following formula:

gear ratio = DS402_FG_GearRatio_MotorShaftRevolutions / DS402_FG_GearRatio_DrivingShaftRevolutions

  • Sub-index 01h contains the motor shaft revolutions
  • Sub-index 02h contains the driving shaft revolutions


6091.01h Gear ratio - motor shaft revolutions

Name | DS402_FG_GearRatio_MotorShaftRevolutions
Designation | Gear ratio - motor shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_GearRatio_HighestSubindexSupported, DS402_FG_GearRatio_DrivingShaftRevolutions

Description

This parameter defines the numerator of the gear ratio.

The gear ratio is the relation between the revolutions at the motor shaft (DS402_FG_GearRatio_MotorShaftRevolutions) to the revolutions at the gear shaft (DS402_FG_GearRatio_DrivingShaftRevolutions).

gear ratio = DS402_FG_GearRatio_MotorShaftRevolutions / DS402_FG_GearRatio_DrivingShaftRevolutions


6091.02h Gear ratio - driving shaft revolutions

Name | DS402_FG_GearRatio_DrivingShaftRevolutions
Designation | Gear ratio - driving shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_GearRatio_HighestSubindexSupported, DS402_FG_GearRatio_MotorShaftRevolutions

Description

This parameter defines the denominator of the gear ratio.

The gear ratio is the relation between the revolutions at the motor shaft (DS402_FG_GearRatio_MotorShaftRevolutions) to the revolutions at the gear shaft (DS402_FG_GearRatio_DrivingShaftRevolutions).

gear ratio = DS402_FG_GearRatio_MotorShaftRevolutions / DS402_FG_GearRatio_DrivingShaftRevolutions


6092.00h Feed constant - highest subindex supported

Name | DS402_FG_FeedConstant_HighestSubindexSupported
Designation | Feed constant - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_FeedConstant_Feed, DS402_FG_FeedConstant_DrivingShaftRevolutions

Description

The parameter defines the configured feed constant. This is the measurement distance per one revolution of the output shaft of the gearbox. The feed constant is calculated by the following formula:

feed constant = DS402_FG_FeedConstant_Feed / DS402_FG_FeedConstant_DrivingShaftRevolutions

  • Sub-index 01h contains the feed
  • Sub-index 02h contains the shaft revolutions


6092.01h Feed constant - feed

Name | DS402_FG_FeedConstant_Feed
Designation | Feed constant - feed
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_FeedConstant_HighestSubindexSupported, DS402_FG_FeedConstant_DrivingShaftRevolutions

Description

This parameter defines the numerator of the feed constant.

The feed constant defines the way per revolution of the motor shaft or of the gear (if available).

feed constant = DS402_FG_FeedConstant_Feed / DS402_FG_FeedConstant_DrivingShaftRevolutions


6092.02h Feed constant - driving shaft revolutions

Name | DS402_FG_FeedConstant_DrivingShaftRevolutions
Designation | Feed constant - driving shaft revolutions
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295] excluded {0}
Default value | 1
Unit | -
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_FG_FeedConstant_HighestSubindexSupported, DS402_FG_FeedConstant_Feed

Description

This parameter defines the denominator of the feed constant.

The feed constant defines the way per revolution of the motor shaft or of the gear (if available).

feed constant = DS402_FG_FeedConstant_Feed / DS402_FG_FeedConstant_DrivingShaftRevolutions


6098.00h Homing - method

Name | DS402_HM_HomingMethod
Designation | Homing - method
Data type | int8
Access | read / write
Attributs | Save
Value range | [-128 .. 127]
Default value | 0
Unit | -
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_HM_HomingSpeeds_SpeedSwitch, DS402_HM_HomingSpeeds_SpeedZero, DS402_HM_HomingAcceleration

Description

This parameter defines the homing method.

The parameters DEV_DinLimitPos, DEV_DinLimitNeg and DEV_DinReference define the switches:
  • Which digital input is used for this switch.
  • Is it hi-active (normally opened contact) or low-active (normally closed contact)
  • Is it a limit/end switch (e.g. linear axes with limited ends) or a homing/reference switch (turn table without limits).

Method 0: No homing is needed.

Method 1: Homing using a negative limit switch and the index pulse

The motor starts running counter-clockwise (ccw), if the negative limit switch is not active (here, shown as a low signal). If limit switch is reached the direction changes to clockwise (cw). After the limit switch is left again, the motor will stop at the next index pulse.
This position is stored as homing position in the parameter POS_HomingRefToIndex and POS_HomingRefToIndex_cnt.

Method 2: Homing using the positive limit switch and the index pulse

The motor starts running clockwise (cw), if the positive limit switch is not active (here, shown as a low signal). If limit switch is reached the direction changes to counter-clockwise (ccw). After the limit switch is left again, the motor will stop at the next index pulse.
This position is stored as homing position in the parameter POS_HomingRefToIndex and POS_HomingRefToIndex_cnt.

Method 3 and 4: Homing using the positive reference and the index pulse

In this case the starting direction depends on the status of the reference switch.
The homing position is always at the index pulse. This position is left (method 3) or right (method 4) from the position where the reference switch changes its status.
If necessary, the rotation direction will change, when the status of the reference switch changes.

Method 5 and 6: Homing using the negative reference switch and the index pulse

In this case the starting direction depends on the status of the reference switch.
The homing position is always at the index pulse. This position is left (method 6) or right (method 5) from the position where the reference switch changes its status.
If necessary, the rotation direction will change, when the status of the reference switch changes.

Method 7 to 14: Homing using a reference switch and the index pulse

This methods use a reference switch which is active over a certain length.
Methods 7 to 10 start in right direction, methods 11 to 14 in left direction, if the reference switch is not active during the start.
In this case the starting direction depends on slope, the system is looking for.
The homing position is at the index pulse on both sides of the rising or falling slope of the reference switch. This is shown at the following diagrams.
If the starting direction runs away from the reference switch, the direction will change if the relevant limit switch is reached.

Method 15 and 16: Reserved

These methods are reserved for future extensions of the homing method.

Method 17 to 30: Homing without index pulse

These methods are similar to methods 1 to 14, except that the homing position depends not on the index pulse. It depends just on the according reference/limit switches.
E.g. method 19 and 20 are close to 3 and 4 as can be seen at the following diagram.

Method 31 and 32: Reserved

These methods are reserved for future extensions of the homing method.

Method 33 and 34: Homing using the index pulse only

At these methods the rotation direction is positive or negative. The homing position is at the first index pulse, which was found in the desired direction.

Method 35: Homing using the actual position

This method uses the actual position as the homing position.


6099.00h Homing velocity - highest subindex supported

Name | DS402_HM_HomingSpeeds_HighestSubindexSupported
Designation | Homing velocity - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_HM_HomingSpeeds_SpeedSwitch, DS402_HM_HomingSpeeds_SpeedZero, DS402_HM_HomingAcceleration

Description

This parameter defines speeds used during homing procedure.
  • Sub-index 01h contains the velocity for search of switch
  • Sub-index 02h contains the velocity for search of zero point


6099.01h Homing velocity for search of switch

Name | DS402_HM_HomingSpeeds_SpeedSwitch
Designation | Homing velocity for search of switch
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_HM_HomingSpeeds_HighestSubindexSupported, DS402_HM_HomingSpeeds_SpeedZero

Description

This parameter defines the velocity to search for the homing switch during the homing. This velocity is also called quick homing velocity. The use of this velocity is described in detail in the diagrams of the homing method (see parameter DS402_HM_HomingMethod).


6099.02h Homing velocity for search of zero point

Name | DS402_HM_HomingSpeeds_SpeedZero
Designation | Homing velocity for search of zero point
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [rpm] - revolutions per minute
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_HM_HomingSpeeds_HighestSubindexSupported, DS402_HM_HomingSpeeds_SpeedSwitch

Description

This parameter defines the velocity to search for the zero position during the homing. Since this velocity is normally less than the DS402_HM_HomingSpeeds_SpeedSwitch, this one is also called slow homing velocity. The use of this velocity is described in detail in the diagrams of the homing method (see parameter DS402_HM_HomingMethod).


609A.00h Homing acceleration

Name | DS402_HM_HomingAcceleration
Designation | Homing acceleration
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | -
Unit | -
Operating mode | Homing mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_HM_HomingMethod, DS402_HM_HomingSpeeds_SpeedSwitch, DS402_HM_HomingSpeeds_SpeedZero

Description

The parameter defines the acceleration and deceleration, that are used during homing operation.


60C0.00h Interpolation - method

Name | DS402_IP_InterpolationSubModeSelect
Designation | Interpolation - method
Data type | int16
Access | read / write
Attributs | Save
Value range | {0}
Default value | 0
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataRecord_HighestSubindexSupported, DS402_IP_InterpolationDataRecord_1stSetPoint, DS402_IP_InterpolationTimePeriod_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_Value, DS402_IP_InterpolationTimePeriod_Index

Description

The parameter defines the interpolation mode of the device controller.

Parameter values:
Value | Description
0 | Linear interpolation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C1.00h Interpolation data record - highest subindex supported

Name | DS402_IP_InterpolationDataRecord_HighestSubindexSupported
Designation | Interpolation data record - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {1}
Default value | 1
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationSubModeSelect, DS402_IP_InterpolationDataRecord_1stSetPoint, DS402_IP_InterpolationTimePeriod_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_Value, DS402_IP_InterpolationTimePeriod_Index

Description

The parameter indicates the number of data, which are necessary to perform the interpolation algorithm. The interpretation of the data in interpolation may vary with the different possible interpolation modes. For linear interpolation mode each interpolation data is regarded as a new position set-point.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C1.01h Interpolation data record - 1st set-point

Name | DS402_IP_InterpolationDataRecord_1stSetPoint
Designation | Interpolation data record - 1st set-point
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | 0
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationSubModeSelect, DS402_IP_InterpolationDataRecord_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_Value, DS402_IP_InterpolationTimePeriod_Index

Description

The parameter indicates data, which is necessary to perform the interpolation algorithm.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C2.00h Interpolation time period - highest subindex supported

Name | DS402_IP_InterpolationTimePeriod_HighestSubindexSupported
Designation | Interpolation time period - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | -
Default value | 2
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationSubModeSelect, DS402_IP_InterpolationDataRecord_HighestSubindexSupported, DS402_IP_InterpolationDataRecord_1stSetPoint, DS402_IP_InterpolationTimePeriod_Value, DS402_IP_InterpolationTimePeriod_Index

Description

The parameter defines the interpolation cycle time.

Interpolation_Time = 10DS402_IP_InterpolationTimePeriod_Index * DS402_IP_InterpolationTimePeriod_Value [s]

  • Sub-index 01h contains the interpolation time period
  • Sub-index 02h contains the interpolation time index

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C2.01h Interpolation time period - value

Name | DS402_IP_InterpolationTimePeriod_Value
Designation | Interpolation time period - value
Data type | uint8
Access | read / write
Attributs | Save
Value range | [0 .. 100]
Default value | 1
Unit | [s]
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationSubModeSelect, DS402_IP_InterpolationDataRecord_HighestSubindexSupported, DS402_IP_InterpolationDataRecord_1stSetPoint, DS402_IP_InterpolationTimePeriod_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_Index

Description

The parameter defines the interpolation time period. The value is given in 10DS402_IP_InterpolationTimePeriod_Index seconds.

Interpolation_Time = 10DS402_IP_InterpolationTimePeriod_Index * DS402_IP_InterpolationTimePeriod_Value [s]

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C2.02h Interpolation time period - index

Name | DS402_IP_InterpolationTimePeriod_Index
Designation | Interpolation time period - index
Data type | int8
Access | read / write
Attributs | Save
Value range | {-2, -3}
Default value | -3
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationSubModeSelect, DS402_IP_InterpolationDataRecord_HighestSubindexSupported, DS402_IP_InterpolationDataRecord_1stSetPoint, DS402_IP_InterpolationTimePeriod_HighestSubindexSupported, DS402_IP_InterpolationTimePeriod_Value

Description

The parameter defines the interpolation time index. The value is dimensionless.

Interpolation_Time = 10DS402_IP_InterpolationTimePeriod_Index * DS402_IP_InterpolationTimePeriod_Value [s]

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.00h Interpolation data configuration - highest subindex supported

Name | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported
Designation | Interpolation data configuration - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {6}
Default value | 6
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

The parameter provides the data configuration of interpolation mode.
  • Sub-index 01h contains the maximum buffer size
  • Sub-index 02h contains the actual buffer size
  • Sub-index 03h contains the buffer organisation
  • Sub-index 04h contains the buffer position
  • Sub-index 05h contains the size of data record
  • Sub-index 06h contains the access to the input buffer and clears the interpolation data records.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.01h Interpolation data configuration - maximum buffer size

Name | DS402_IP_InterpolationDataConfiguration_MaximumBufferSize
Designation | Interpolation data configuration - maximum buffer size
Data type | uint32
Access | read only
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 1
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

The parameter returns the maximum size of interpolation input buffer.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.02h Interpolation data configuration - actual buffer size

Name | DS402_IP_InterpolationDataConfiguration_ActualBufferSize
Designation | Interpolation data configuration - actual buffer size
Data type | uint32
Access | read / write
Attributs | Save
Value range | {0, 1}
Default value | 0
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

This object is not used.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.03h Interpolation data configuration - buffer organization

Name | DS402_IP_InterpolationDataConfiguration_BufferOrganisation
Designation | Interpolation data configuration - buffer organization
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0}
Default value | 0
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

The parameter defines the buffer organisation.

Parameter values:
Value | Description
0 | FIFO buffer organisation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.04h Interpolation data configuration - buffer position

Name | DS402_IP_InterpolationDataConfiguration_BufferPosition
Designation | Interpolation data configuration - buffer position
Data type | uint16
Access | read / write
Attributs | Save
Value range | {0}
Default value | 0
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

This object is not used and provides always 0.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.05h Interpolation data configuration - size of data record

Name | DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord
Designation | Interpolation data configuration - size of data record
Data type | uint8
Access | write only
Attributs | Save
Value range | [1 .. 254]
Default value | 4
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_BufferClear

Description

This object is not used.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60C4.06h Interpolation data configuration - buffer clear

Name | DS402_IP_InterpolationDataConfiguration_BufferClear
Designation | Interpolation data configuration - buffer clear
Data type | uint8
Access | write only
Attributs | Save
Value range | {0, 1}
Default value | -
Unit | -
Operating mode | Interpolated position mode
Available since | 1.89.00.03
Devices | All
PLC Function | -
Cross reference | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported, DS402_IP_InterpolationDataConfiguration_MaximumBufferSize, DS402_IP_InterpolationDataConfiguration_ActualBufferSize, DS402_IP_InterpolationDataConfiguration_BufferOrganisation, DS402_IP_InterpolationDataConfiguration_BufferPosition, DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord

Description

The parameter defines the access to the input buffer and clears the interpolation data records.

Parameter values:
Value | Description
0 | Clears the buffer inputs, disables the access and clears all interpolation data records
1 | Enables access to the input buffers

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
from math import *

d = Dsa(1)                                # NodeId

INTERPOLATION_TIME_MS = 100               # Interpolation time in ms

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC
d.SdoWr(0x3911, 0x00, 0)                  # Motor polarity

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL Feedback - Encoder
d.SdoWr(0x3962, 0x00, 2000)               # Encoder resolution in inc.

d.SdoWr(0x6060, 0x00, 7)                  # Mode of operation - interpolation mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

d.SdoWr(0x608A, 0x00, 0xAC)               # Position dimension index = counts
d.SdoWr(0x6065, 0x00, 2000)               # Following error window

d.SdoWr(0x60C2, 0x01, 100)                # Interpolation time period - value
d.SdoWr(0x60C2, 0x02, -3)                 # Interpolation time period - index

d.SdoWr(0x60C4, 0x06, 1)                  # Interpolation data configuration - buffer clear
                                          #  0 = clear and no access,
                                          #  1 = access to the buffer
                                          # IMPORTANT - otherwise no access to ip buffer

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
d.SdoWr(0x6040, 0x00, 0x1F)               # Control word - Enable ip mode
#------------------------------------------------------------------------------------------

StartPos  = d.SdoRd(0x6064, 0x00)         # Position - actual value
TargetPos = StartPos

d.SdoWr(0x60C1, 0x01, TargetPos)          # Interpolation data record - 1st set-point

ts  = d.SdoRd(0x3850, 0x00)               # System clock
ts += INTERPOLATION_TIME_MS/2             # 180° phase shift

angle = 0.0

while 1:
   angle += 0.4
   TargetPos = StartPos + int(sin(angle) * 2000 + 0.5)

   while (d.SdoRd(0x3850,0) < ts):        # System clock
      pass

   ts += INTERPOLATION_TIME_MS

   d.SdoWr(0x60C1, 0x01, TargetPos)       # Interpolation data record - 1st set-point


60F4.00h Following error actual value

Name | DS402_PP_FollowingErrorActualValue
Designation | Following error actual value
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [rev]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter provides the actual following error (deviation between command position and actual position).
In case of an error (see parameter DS402_PP_FollowingErrorWindow) the value is set to the following error which was valid when the error occurred.

HINT

The default unit of position for all modes is revolution of the motor shaft. The resolution of encoder is set in parameter 3962.00h (MOTOR_ENC_Resolution). The adjust of basis unit is possible, through the change of factor group parameter DS402_PP_PositionDimensionIndex.


60FC.00h Position demand value in counts

Name | DS402_PP_PositionDemandValueInCounts
Designation | Position demand value in counts
Data type | int32
Access | read only
Attributs | Save
Value range | [-2147483648 .. 2147483647]
Default value | -
Unit | [counts]
Operating mode | Profile position mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter provides the demanded position value in increments.
A target position is applied to the profile generator. It is generating a position demand value for the position control loop.


60FD.00h Digital inputs

Name | DS402_DigitalInputs
Designation | Digital inputs
Data type | uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | 8
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter provides the actual state of digital inputs.

The value 0 of bit means switched off, 1 switched on.

Assignment of bits:
Bit | Description
0 | Logical state of negative limit switch, if the input is not declared, this bit has value 0
1 | Logical state of positive limit switch, if the input is not declared, this bit has value 0
2 | Logical state of home switch, if the input is not declared, this bit has value 0
3 | Logical state of enable input, if the input is not declared, this bit has value 1
4 .. 15 | Reserved
16 | Dig. input 0
17 | Dig. input 1
18 | Dig. input 2
19 | Dig. input 3
20 | Dig. input 4
21 | Dig. input 5
22 | Dig. input 6
23 | Dig. input 7
24 .. 31 | Reserved


60FE.00h Digital output - highest subindex supported

Name | DS402_DigitalOutputs_HighestSubindexSupported
Designation | Digital output - highest subindex supported
Data type | uint8
Access | read only
Attributs | Save
Value range | {2}
Default value | 2
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_DigitalOutputs_PhysicalOutput, DS402_DigitalOutputs_BitMask

Description

The parameter commands simple digital outputs.
  • Sub-index 01h contains the physical outputs
  • Sub-index 02h contains the bit mask


60FE.01h Digital output - physical outputs

Name | DS402_DigitalOutputs_PhysicalOutput
Designation | Digital output - physical outputs
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0h .. FFFFFFFFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_DigitalOutputs_HighestSubindexSupported, DS402_DigitalOutputs_BitMask

Description

Using this parameter you can set and reset the digital outputs of the controller.

The numbers of digital outputs can vary according to the device (see technical data sheet).

Assignment of bits:
Bit | Description
0 .. 15 | Reserved
16 | Dig. output 0
17 | Dig. output 1
18 | Dig. output 2
19 | Dig. output 3
20 | Dig. output 4
21 | Dig. output 5
22 | Dig. output 6
23 | Dig. output 7
24 .. 31 | Reserved


60FE.02h Digital output - bit mask

Name | DS402_DigitalOutputs_BitMask
Designation | Digital output - bit mask
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0h .. FFFFFFFFh]
Default value | 0h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_DigitalOutputs_HighestSubindexSupported, DS402_DigitalOutputs_PhysicalOutput

Description

With the aid of parameter digital outputs can be enabled. Each bit of this parameter corresponds with the appropriate bit in object DS402_DigitalOutputs_PhysicalOutput.

Assignment of bits:
Bit | Description
0 .. 15 | Reserved
16 | Enable dig. output 0
17 | Enable dig. output 1
18 | Enable dig. output 2
19 | Enable dig. output 3
20 | Enable dig. output 4
21 | Enable dig. output 5
22 | Enable dig. output 6
23 | Enable dig. output 7
24 .. 31 | Reserved


6402.00h Motor type

Name | DS402_MotorType
Designation | Motor type
Data type | uint16
Access | read / write
Attributs | -
Value range | {8000h, 8001h}
Default value | 8000h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter defines the motor type.

Parameter values:
Value [hex] | Description
8000h | Brush type motor (DC) (The motor is connected to the Ma and Mb signals)
8001h | Brushless motor (BLDC)


6502.00h Supported drive modes

Name | DS402_SupportedDriveModes
Designation | Supported drive modes
Data type | uint32
Access | read only
Attributs | -
Value range | [0h .. FFFFFFFFh]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_ModesOfOperation, DS402_ModesOfOperationDisplay

Description

The parameter provides information on the supported drive modes.
The value "1" of bit means, that the mode is supported, "0" not supported.

Parameter values:
Bit | Description
0 | Profile position mode (pp)
1 | Velocity mode (vl)
2 | Profile velocity mode (pv)
3 | Torque profile mode (tq)
4 | Reserved
5 | Homing mode (hm)
6 | Interpolated position mode (ip)
7 | Cyclic sync position mode (csp)
8 | Cyclic sync velocity mode (csv)
9 | Cyclic sync torque mode (cst)
10 .. 15 | Reserved
16 .. 31 | Manufacturer specific


Content - EDC-Fxx

Parameters 1000h (DS301)

Parameters 2000h

Parameters 3000h (DSA)

Parameters 5000h (MPU)

Parameters 6000h (DSP402)


Content - Parameters 3000h (DSA)

3000.00h | DEV_Cmd | Device command
3000.01h | DEV_Cmd_ExecOnChange | Device command - execute on change
3000.02h | DEV_Cmd2 | Device command 2
3000.08h | DEV_Cmd_SetError | Device command - set error
3000.10h | DEV_CmdData0 | Device command - data 0
3000.11h | DEV_CmdData1 | Device command - data 1
3000.12h | DEV_CmdData2 | Device command - data 2
3000.20h | DEV_CmdData0_i16 | Device command - data 0 (int16)
3000.21h | DEV_CmdData1_i16 | Device command - data 1 (int16)
3000.22h | DEV_CmdData2_i16 | Device command - data 2 (int16)
3000.70h | DEV_CmdResult | Device command - result
3000.81h | DEV_CmdError | Device command - Error
3000.83h | DEV_CmdCounter | Device command - counter
3001.00h | DEV_ErrorReg | Error register
3002.00h | DEV_Status | Status register
3003.00h | DEV_Mode | Device mode
3004.00h | DEV_Enable | Power enable
3008.00h | DEV_ConfigErrors | Error configuration
3010.11h | DEV_Event_Cmd1OnError | Event command 1 on errors
3010.12h | DEV_Event_Cmd2OnError | Event command 2 on errors
3010.13h | DEV_Event_Cmd3OnError | Event command 3 on errors
3010.14h | DEV_Event_Cmd4OnError | Event command 4 on errors
3010.31h | DEV_Event_Cmd1OnCommError | Event command 1 on communication errors
3010.32h | DEV_Event_Cmd2OnCommError | Event command 2 on communication errors
3010.33h | DEV_Event_Cmd3OnCommError | Event command 3 on communication errors
3010.34h | DEV_Event_Cmd4OnCommError | Event command 4 on communication errors
3012.10h | DEV_Event_CmdOnSpecificError1 | Event commands on specific error 1
3012.11h | DEV_Event_Cmd1OnSpecificError1 | Event command 1 on specific error 1
3012.12h | DEV_Event_Cmd2OnSpecificError1 | Event command 2 on specific error 1
3012.13h | DEV_Event_Cmd3OnSpecificError1 | Event command 3 on specific error 1
3012.14h | DEV_Event_Cmd4OnSpecificError1 | Event command 4 on specific error 1
3012.20h | DEV_Event_CmdOnSpecificError2 | Event commands on specific error 2
3012.21h | DEV_Event_Cmd1OnSpecificError2 | Event command 1 on specific error 2
3012.22h | DEV_Event_Cmd2OnSpecificError2 | Event command 2 on specific error 2
3012.23h | DEV_Event_Cmd3OnSpecificError2 | Event command 3 on specific error 2
3012.24h | DEV_Event_Cmd4OnSpecificError2 | Event command 4 on specific error 2
3012.30h | DEV_Event_CmdOnSpecificError3 | Event commands on specific error 3
3012.31h | DEV_Event_Cmd1OnSpecificError3 | Event command 1 on specific error 3
3012.32h | DEV_Event_Cmd2OnSpecificError3 | Event command 2 on specific error 3
3012.33h | DEV_Event_Cmd3OnSpecificError3 | Event command 3 on specific error 3
3012.34h | DEV_Event_Cmd4OnSpecificError3 | Event command 4 on specific error 3
3012.40h | DEV_Event_CmdOnSpecificError4 | Event commands on specific error 4
3012.41h | DEV_Event_Cmd1OnSpecificError4 | Event command 1 on specific error 4
3012.42h | DEV_Event_Cmd2OnSpecificError4 | Event command 2 on specific error 4
3012.43h | DEV_Event_Cmd3OnSpecificError4 | Event command 3 on specific error 4
3012.44h | DEV_Event_Cmd4OnSpecificError4 | Event command 4 on specific error 4
3014.11h | DEV_Event1_OnUserCmd1 | Command 1 on usercommand 1
3014.12h | DEV_Event2_OnUserCmd1 | Command 2 on usercommand 1
3014.13h | DEV_Event3_OnUserCmd1 | Command 3 on usercommand 1
3014.14h | DEV_Event4_OnUserCmd1 | Command 4 on usercommand 1
3014.21h | DEV_Event1_OnUserCmd2 | Command 1 on usercommand 2
3014.22h | DEV_Event2_OnUserCmd2 | Command 2 on usercommand 2
3014.23h | DEV_Event3_OnUserCmd2 | Command 3 on usercommand 2
3014.24h | DEV_Event4_OnUserCmd2 | Command 4 on usercommand 2
3014.31h | DEV_Event1_OnUserCmd3 | Command 1 on usercommand 3
3014.32h | DEV_Event2_OnUserCmd3 | Command 2 on usercommand 3
3014.33h | DEV_Event3_OnUserCmd3 | Command 3 on usercommand 3
3014.34h | DEV_Event4_OnUserCmd3 | Command 4 on usercommand 3
3014.41h | DEV_Event1_OnUserCmd4 | Command 1 on usercommand 4
3014.42h | DEV_Event2_OnUserCmd4 | Command 2 on usercommand 4
3014.43h | DEV_Event3_OnUserCmd4 | Command 3 on usercommand 4
3014.44h | DEV_Event4_OnUserCmd4 | Command 4 on usercommand 4
3014.51h | DEV_Event1_OnUserCmd5 | Command 1 on usercommand 5
3014.52h | DEV_Event2_OnUserCmd5 | Command 2 on usercommand 5
3014.53h | DEV_Event3_OnUserCmd5 | Command 3 on usercommand 5
3014.54h | DEV_Event4_OnUserCmd5 | Command 4 on usercommand 5
3014.61h | DEV_Event1_OnUserCmd6 | Command 1 on usercommand 6
3014.62h | DEV_Event2_OnUserCmd6 | Command 2 on usercommand 6
3014.63h | DEV_Event3_OnUserCmd6 | Command 3 on usercommand 6
3014.64h | DEV_Event4_OnUserCmd6 | Command 4 on usercommand 6
3014.71h | DEV_Event1_OnUserCmd7 | Command 1 on usercommand 7
3014.72h | DEV_Event2_OnUserCmd7 | Command 2 on usercommand 7
3014.73h | DEV_Event3_OnUserCmd7 | Command 3 on usercommand 7
3014.74h | DEV_Event4_OnUserCmd7 | Command 4 on usercommand 7
3014.81h | DEV_Event1_OnUserCmd8 | Command 1 on usercommand 8
3014.82h | DEV_Event2_OnUserCmd8 | Command 2 on usercommand 8
3014.83h | DEV_Event3_OnUserCmd8 | Command 3 on usercommand 8
3014.84h | DEV_Event4_OnUserCmd8 | Command 4 on usercommand 8
301A.00h | DEV_ValueEvent1_Config | Value event 1 - configuration
301A.01h | DEV_ValueEvent1_Status | Value event 1 - status
301A.02h | DEV_ValueEvent1_ParNr | Value event 1 - parameter
301A.03h | DEV_ValueEvent1_PollingTime | Value event 1 - polling time
301A.04h | DEV_ValueEvent1_ScaleNum | Value event 1 - scaling numerator
301A.05h | DEV_ValueEvent1_ScaleDen | Value event 1 - scaling denominator
301A.06h | DEV_ValueEvent1_ScaledValue | Value event 1 - scaled value
301A.08h | DEV_ValueEvent1_Treshold1 | Value event 1 - threshold 1
301A.09h | DEV_ValueEvent1_Hysteresis1 | Value event 1 - hysteresis 1
301A.0Ah | DEV_ValueEvent1_Mask1 | Value event 1 - mask 1
301A.0Bh | DEV_ValueEvent1_Cmd1 | Value event 1 - command 1
301A.0Ch | DEV_ValueEvent1_Cmd1_Data0 | Value event 1 - command 1 data 0
301A.0Dh | DEV_ValueEvent1_Cmd1_Data1 | Value event 1 - command 1 data 1
301A.0Eh | DEV_ValueEvent1_Treshold2 | Value event 1 - threshold 2
301A.0Fh | DEV_ValueEvent1_Hysteresis2 | Value event 1 - hysteresis 2
301A.10h | DEV_ValueEvent1_Mask2 | Value event 1 - mask 2
301A.11h | DEV_ValueEvent1_Cmd2 | Value event 1 - command 2
301A.12h | DEV_ValueEvent1_Cmd2_Data0 | Value event 1 - command 2 data 0
301A.13h | DEV_ValueEvent1_Cmd2_Data1 | Value event 1 - command 2 data 1
301D.00h | DEV_LatchEvent0_Control | Latch event 1 - control
301D.01h | DEV_LatchEvent0_Status | Latch event 1 - status
301D.03h | DEV_LatchEvent0_Mode | Latch event 1 - mode
301D.08h | DEV_LatchEvent0_ParTrigger | Latch event 1 - trigger parameter
301D.09h | DEV_LatchEvent0_ParToLatch | Latch event 1 - parameter to latch
301D.10h | DEV_LatchEvent0_LhCount | Latch event 1 - low-high edge counter
301D.11h | DEV_LatchEvent0_LhVal | Latch event 1 - low-high edge latched value
301D.12h | DEV_LatchEvent0_LhDiff | Latch event 1 - difference low-high - high-low
301D.13h | DEV_LatchEvent0_HlCount | Latch event 1 - high-low edge counter
301D.14h | DEV_LatchEvent0_HlVal | Latch event 1 - high-low edge latched value
301D.15h | DEV_LatchEvent0_HlDiff | Latch event 1 - difference high-low - low-high
301D.20h | DEV_LatchEvent1_Control | Latch event 2 - control
301D.21h | DEV_LatchEvent1_Status | Latch event 2 - status
301D.23h | DEV_LatchEvent1_Mode | Latch event 2 - mode
301D.28h | DEV_LatchEvent1_ParTrigger | Latch event 2 - trigger parameter
301D.29h | DEV_LatchEvent1_ParToLatch | Latch event 2 - parameter to latch
301D.30h | DEV_LatchEvent1_LhCount | Latch event 2 - low-high edge counter
301D.31h | DEV_LatchEvent1_LhVal | Latch event 2 - low-high edge latched value
301D.32h | DEV_LatchEvent1_LhDiff | Latch event 2 - difference low-high - high-low
301D.33h | DEV_LatchEvent1_HlCount | Latch event 2 - high-low edge counter
301D.34h | DEV_LatchEvent1_HlVal | Latch event 2 - high-low edge latched value
301D.35h | DEV_LatchEvent1_HlDiff | Latch event 2 - difference high-low - low-high
3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number
302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9
302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3
3031.00h | DEV_MaxUp | Max. power voltage
3032.00h | DEV_MaxIm | Max. motor current
3050.00h | DEV_DinEnable | Input assignment - enable
3051.00h | DEV_DinClearError | Input assignment - error quitting
3052.00h | DEV_DinStartStop | Input assignment - start/stop
3053.00h | DEV_DinDir | Input assignment - Change of rotation direction
3055.00h | DEV_DinLimitPos | Input assignment - positive limit switch
3056.00h | DEV_DinLimitNeg | Input assignment - negative limit switch
3057.00h | DEV_DinReference | Input assignment - reference switch
3060.00h | DEV_DoutError | Output assignment - error
3080.00h | DEV_ContinueMode | Continue - mode
3090.00h | DEV_MinUp_Error | Minimum Up - error
3090.04h | DEV_UpOff_Stotterbremse | Up - disable cadence braking
3090.05h | DEV_UpOn_Stotterbremse | Up - enable cadence
3090.07h | DEV_Chopper_UpOn | Ballast on - threshold
3091.01h | DEV_HeatSink_Temp_Warning | Temperature - threshold heatsink warning
3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
310A.00h | IO_AIN0_DeadBand | Analog input 0 - dead band
310A.01h | IO_AIN1_DeadBand | Analog input 1 - dead band
3110.00h | IO_AIN_Voltage_Ue | Electronic voltage - Ue
3111.00h | IO_AIN_Voltage_Up | Power voltage - Up
3112.00h | IO_AIN_Voltage_Um | Motor voltage - Um
3113.00h | IO_AIN_Current_Im | Motor current - Im
3114.00h | IO_AIN_Temperature_Power | Temperature of power amplifier
3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3128.00h | IO_DIN_Hall | Digital inputs - hall sensors
3128.01h | IO_DIN_Enc | Digital inputs - encoder
3129.01h | IO_DIN_NodeIdSwitch | NodeId-Switch - state
3150.00h | IO_DOUT_P0 | Digital outputs - Port0
3154.00h | IO_DOUT_Enable | Enable digital outputs
3158.00h | IO_DOUT_LedsEnable | LED - enable user control
3158.01h | IO_DOUT_LedsState | LED - state
3200.00h | CURR_DesiredValue | Current - desired value
3204.00h | CURR_DesiredValue_Source | Source of current desired value
3205.00h | CURR_DesiredValue_Reference | Current reference of analog input
3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator
3221.00h | CURR_LimitMaxPos | Current limit - max. positiv
3223.00h | CURR_LimitMaxNeg | Current limit - max. negativ
3224.00h | CURR_DynLimitMode | Dynamic current limit - mode
3224.01h | CURR_DynLimitPeak | Dynamic current limit - peak current
3224.02h | CURR_DynLimitCont | Dynamic current limit - continues current
3224.03h | CURR_DynLimitTime | Dynamic current limit - time
3224.12h | CURR_ActDynLimitCurrent | Dynamic current limit I*t - actual limit
3240.00h | CURR_Acc_dI | Current acceleration - delta I
3241.00h | CURR_Acc_dT | Current acceleration - delta T
3242.00h | CURR_Dec_dI | Current deceleration - delta I
3243.00h | CURR_Dec_dT | Current deceleration - delta T
3244.00h | CURR_Dec_QuickStop_dI | Current quick-stop deleleration - delta I
3245.00h | CURR_Dec_QuickStop_dT | Current quick-stop deleleration - delta T
324C.00h | CURR_RampType | Current ramp type
324D.00h | CURR_RampState | Current ramp generator - state
3250.00h | CURR_Feedback | Current controller - feedback
3250.03h | CURR_Feedback_Reference | Current controller - feedback reference
3260.00h | CURR_ActualTargetCurrent | Current - target value
3261.00h | CURR_ActualCommandCurrent | Current - command value
3262.00h | CURR_ActualCurrent | Current - actual value
3262.01h | CURR_ActualAvgCurrent | Current - actual filtred value
3262.04h | CURR_ActualPosMaxCurr | Maximal positive motor current
3262.05h | CURR_ActualNegMaxCurr | Minimal negative motor current
3263.00h | CURR_ActualFollowingError | Current - following error
32A0.00h | CURR_SampleTime | Current controller - sample time
32A0.08h | CURR_SamplePoint | Current controller - sample point correction
32A0.09h | CURR_SampleRlCorr | Current controller - R/L correction
32A0.10h | CURR_ActAvgCurrFilterLevel | Filter level for actual filtred current
3300.00h | VEL_DesiredValue | Velocity - desired value
3302.00h | VEL_ScaleNum | Velocity scale factor - numerator
3303.00h | VEL_ScaleDen | Velocity scale factor - denominator
3304.00h | VEL_DesiredValue_Source | Velocity source
3305.00h | VEL_DesiredValue_Reference | Velocity reference value
330A.00h | VEL_DimensionNum | Velocity dimension factor - numerator
330B.00h | VEL_DimensionDen | Velocity dimension factor - denominator
3310.00h | VEL_Kp | PID-Controller - gain
3311.00h | VEL_Ki | PID-Controller - integral factor
3312.00h | VEL_Kd | PID-Controller - differential factor
3313.00h | VEL_ILimit | PID-Controller - integral limit
3314.00h | VEL_Kvff | PID-Controller - velocity feed forward
3315.00h | VEL_Kaff | PID-Controller - acceleration feed forward
3317.00h | VEL_KIxR | IxR factor
3318.00h | VEL_KdSampleTime | PID-Controller - differential sample time
3321.00h | VEL_LimitMaxPos | Velocity max. limit - positiv direction
3323.00h | VEL_LimitMaxNeg | Velocity max. limit - negativ direction
3340.00h | VEL_Acc_dV | Velocity acceleration - delta V
3341.00h | VEL_Acc_dT | Velocity acceleration - delta T
3342.00h | VEL_Dec_dV | Velocity deceleration - delta V
3343.00h | VEL_Dec_dT | Velocity deceleration - delta T
3344.00h | VEL_Dec_QuickStop_dV | Velocity quick stop deceleration - delta V
3345.00h | VEL_Dec_QuickStop_dT | Velocity quick stop deceleration - delta T
334C.00h | VEL_RampType | Ramp generator - ramp type
334D.00h | VEL_RampState | Ramp generator - state
3350.00h | VEL_Feedback | Velocity feedback
3350.03h | VEL_Feedback_Reference | Velocity feedback - reference
3360.00h | VEL_ActualTargetVel | Velocity - target value
3361.00h | VEL_ActualCommandVel | Velocity - command value
3362.00h | VEL_ActualVel | Unfiltered velocity - actual value
3380.00h | VEL_Acc | Velocity acceleration in [rev/min²]
3381.00h | VEL_Dec | Velocity deceleration in [rev/min²]
3382.00h | VEL_Dec_QuickStop | Velocity quick-stop deceleration in [rev/min²]
33A0.00h | VEL_SampleTime | Velocity/position controller - sample time
33C0.00h | VEL_BlockageGuarding_ConfigFlags | Blockage guarding - config flags
33C0.01h | VEL_BlockageGuarding_VelLow | Blockage guarding - low velocity
33C0.02h | VEL_BlockageGuarding_VelHigh | Blockage guarding - high velocity
33C0.03h | VEL_BlockageGuarding_Time | Blockage guarding - time
33C0.04h | VEL_BlockageGuarding_Status | Blockage guarding - status
3500.00h | SVEL_DesiredValue | SVel desired value
3502.00h | SVEL_ScaleNum | SVel scale factor - numerator
3503.00h | SVEL_ScaleDen | SVel scale factor - denominator
3504.00h | SVEL_DesiredValue_Source | SVel source of desired value
3505.00h | SVEL_DesiredValue_Reference | SVel reference value
3510.00h | SVEL_Kp | SVel PI-Controller - gain
3511.00h | SVEL_Ki | SVel PI-Controller - integral factor
3517.00h | SVEL_KIxR | SVel IxR factor
3521.00h | SVEL_LimitMaxPos | SVelocity max. limit - positive direction
3523.00h | SVEL_LimitMaxNeg | SVelocity max. limit - negative direction
3550.00h | SVEL_Feedback | SVel feedback
3560.00h | SVEL_ActualTargetVel | SVel - velocity target value
3561.00h | SVEL_ActualCommandVel | SVel - velocity command value
35A1.00h | SVEL_MaxVelRange | SVel max. velocity range
3708.00h | POS_Mode | Position mode
3709.00h | POS_ConfigFlags | Pos config
3720.00h | POS_PositionLimitMin | Position limit - minimum
3720.01h | POS_PositionLimitMax | Position limit - maximum
3732.00h | POS_FollowingErrorWindow | Position following error - window
3732.01h | POS_FollowingErrorWindowDyn | Position following error - window, dynamic
3733.00h | POS_FollowingErrorTime | Position following error - time
3733.01h | POS_FollowingErrorTimeDyn | Position following error - time, dynamic
3734.00h | POS_FollowingErrorLimit | Position following error limit
373A.00h | POS_PositionWindow | Position window
373B.00h | POS_PositionWindowTime | Position window - time
373B.01h | POS_PositionWindowTimeout | Position window - timeout
373C.00h | POS_ReachedConfigFlags | Position reached - config bits
373D.00h | POS_DeadWindowOff | Position window - disable amplifier
373D.01h | POS_DeadWindowOn | Position window - enable amplifier
373E.00h | POS_DeadTimeOff | Position window time - disable amplifier
373E.01h | POS_DeadTimeOn | Position window time - enable amplifier
373F.00h | POS_DeadVel | Position window - velocity
374C.00h | POS_RampType | Pos. ramp generator - ramp type
374C.11h | POS_Ramp_JerkFactorAcc | Jerk acceleration
374C.12h | POS_Ramp_JerkFactorDec | Jerk deceleration
374D.00h | POS_RampState | Position ramp generator - state
3760.00h | POS_ActualTargetPosition | Actual target position
3761.00h | POS_ActualCommandPosition | Actual command position
3761.01h | POS_ActualCommandPositionReg | Actual internal command position
3762.00h | POS_ActualPosition | Actual position
3762.01h | POS_ActualPositionReg | Actual internal position
3763.00h | POS_ActualFollowingError | Actual position following error
3763.01h | POS_ActualFollowingErrorReg | Actual internal position following error
3764.00h | POS_ActualIndexPosition | Actual position of index
3765.00h | POS_ActualOrigin | Position origin
3770.00h | POS_ActualTargetPosition_cnt | Actual target position in increments
3771.00h | POS_ActualCommandPosition_cnt | Actual command positin in increments
3772.00h | POS_ActualPosition_cnt | Actual positin in increments
3773.00h | POS_ActualFollowingError_cnt | Actual following error in increments
3774.00h | POS_ActualIndexPosition_cnt | Actual index positin in increments
3775.00h | POS_ActualOrigin_cnt | Position origin in inc
3790.00h | POS_Mova | Absolute moving
3791.00h | POS_Movr | Relative moving
37A4.01h | POS_GearBacklashComp_Path | Gear backlash compensation - path
37A4.02h | POS_GearBacklashComp_Vel | Gear backlash compensation - velocity
37B0.00h | POS_HomingCmd | Homing - command
37B1.00h | POS_HomingStatus | Homing - status
37B1.01h | POS_HomingError | Homing - error
37B1.02h | POS_HomingState | Homing - state
37B1.03h | POS_HomingRefToIndex | Homing - path of reference switch to index
37B1.04h | POS_HomingRefToIndex_cnt | Homing - path of reference switch to index in counts
37B2.00h | POS_HomingMethod | Homing - method
37B3.00h | POS_HomingOffset | Homing - offset
37B4.00h | POS_HomingVelSwitch | Homing - velocity for search of switch
37B4.01h | POS_HomingVelZero | Homing - Velocity for search of zero point
37B5.00h | POS_HomingAcc | Homing - acceleration
37B5.01h | POS_HomingDec | Homing - deceleration
37B6.00h | POS_HomingMaxIndexPath | Homing - max. path for search of index
37B6.01h | POS_HomingIndexOffset | Homing - index offset
37B7.00h | POS_HomingBlock_ConfigFlags | Homing blockage - config
37B7.01h | POS_HomingBlock_VelLow | Homing blockage - low velocity
37B7.02h | POS_HomingBlock_VelHigh | Homing blockage - high velocity
37B7.03h | POS_HomingBlock_Time | Homing blockage - time
37B7.04h | POS_HomingBlock_FollowingErrorWindow | Homing blockage - position following error window
37C1.00h | POS_InterpStatus | Interpolation - status
37C2.00h | POS_InterpMethod | Interpolation - method
37C2.01h | POS_InterpTime | Interpolation - time
37C2.02h | POS_InterpReference | Interpolation - reference
37C5.00h | POS_InterpBufConfig | Interpolation - buffer configuration
37C6.00h | POS_InterpData | Interpolation - data
37C7.00h | POS_InterpActualTargetPosition | Interpolation - actual target position
37C7.01h | POS_InterpActualCommandPosition | Interpolation - actual command position
37C7.02h | POS_InterpActualPosition | Interpolation - actual position
37C8.00h | POS_ModuloMethod | Modulo method
37C9.00h | POS_ModuloValue | Modulo value
3830.00h | PWM_Frequency | PWM frequency
3830.01h | PWM_Mode | PWM mode
3830.62h | PWM_ActualPwm_oo | Actual PWM of the device
3850.00h | SYS_Clock | System clock
3850.02h | SYS_Timer_2ms | System timer 2ms
3900.00h | MOTOR_Type | Motor type
3901.00h | MOTOR_Nn | Motor rated revolutions
3902.00h | MOTOR_Un | Motor rated voltage
3910.00h | MOTOR_PolN | Motor pole number
3911.00h | MOTOR_Polarity | Motor polarity
3913.00h | MOTOR_CommutationType | Motor commutation type
3913.07h | MOTOR_Commutation_Polarity | Motor commutation polarity
3913.10h | MOTOR_Commutation_Referencing | Encoder commutation referencing
3913.11h | MOTOR_Commutation_ReferencingMode | Encoder commutation referencing mode
3913.20h | PreCommutationConfig | Precommutation
3913.21h | PreCommutationVel | Precommutation reference velocity
3913.23h | PreCommutationAngle | Precommutation angle
3940.00h | MOTOR_HALL_Type | Hall sensor type
3944.01h | MOTOR_HALL_Diag_ErrCnt1 | Hall diagnostics - wrong pulses
3944.02h | MOTOR_HALL_Diag_ErrCnt2 | Hall diagnostics - wrong order
3946.00h | MOTOR_HALL_Tuning_Sector0 | Halltuning - sector 0
3946.01h | MOTOR_HALL_Tuning_Sector1 | Halltuning - sector 1
3946.02h | MOTOR_HALL_Tuning_Sector2 | Halltuning - sector 2
3946.03h | MOTOR_HALL_Tuning_Sector3 | Halltuning - sector 3
3946.04h | MOTOR_HALL_Tuning_Sector4 | Halltuning - sector 4
3946.05h | MOTOR_HALL_Tuning_Sector5 | Halltuning - sector 5
3946.08h | MOTOR_HALL_Tuning_WrEnable | Halltuning - write enable
3949.00h | MOTOR_HALL_DoutPulses_Mode | Hall pulses - config flags
3949.01h | MOTOR_HALL_DoutPulses_PosDirMask | Hall pulses - bit mask for positive direction
3949.02h | MOTOR_HALL_DoutPulses_NegDirMask | Hall pulses - bit mask for negative direction
3949.03h | MOTOR_HALL_DoutPulses_ModuloValue | Hall pulses - modulo value
394A.00h | MOTOR_HALL_ActualPosition | Actual hall position
3961.22h | MOTOR_ENC_INC2_Config_McSpiAddr | mcSPI-IC2 encoder configuration - SPI address
3962.00h | MOTOR_ENC_Resolution | Encoder resolution in counts
3962.20h | MOTOR_ENC_INC2_Resolution_Cnt | mcSPI-IC2 encoder resolution in counts
3963.00h | MOTOR_ENC_Resolution_lines | Encoder resolution in lines
3964.00h | MOTOR_ENC_Diag_Enable | Encoder diagnostics - enable
3964.01h | MOTOR_ENC_Diag_Status | Encoder diagnostics - status
396A.00h | MOTOR_ENC_ActualPosition | Actual encoder position
396A.20h | MOTOR_ENC_INC2_ActualPosition | Actual mcSPI-IC2 encoder position
396B.00h | MOTOR_ENC_ActualIndexPosition | Actual encoder index position
396C.00h | MOTOR_ENC_ActualIndexCount | Count of encoder index pulses
3970.00h | MOTOR_ENC_SSI_Enable | SSI absolute encoder - enable
3970.01h | MOTOR_ENC_SSI_Status | SSI absolute encoder - status
3970.08h | MOTOR_ENC_SSI_Save | SSI absolute encoder - save
3971.00h | MOTOR_ENC_SSI_Code | SSI absolute encoder - code
3971.01h | MOTOR_ENC_SSI_SignificantBits | SSI absolute encoder - significant bits
3971.02h | MOTOR_ENC_SSI_Bits | SSI absolute encoder - bits
3972.00h | MOTOR_ENC_SSI_Resolution | SSI absolute encoder - single turn resolution in counts
397A.00h | MOTOR_ENC_SSI_ActualPosition | SSI absolute encoder - actual position (extended on 32 bits)
397A.02h | MOTOR_ENC_SSI_ActualSsiDirectPosition | SSI absolute encoder - direct position
398F.00h | HENC_Cmd | HALL encoder - command
398F.08h | HENC_ReferencePos | HALL encoder - reference position
398F.0Ah | HENC_Hysteresis | HALL encoder - hysteresis
3990.08h | MOTOR_ENC_VIRT0_RawPosBits | Virtual encoder 0 - bits
3990.10h | MOTOR_ENC_VIRT0_RawPos | Virtual encoder 0 - raw position
3990.11h | MOTOR_ENC_VIRT0_RawIndexPos | Virtual encoder 0 - raw index position
3990.20h | MOTOR_ENC_VIRT0_Resolution_Cnt | Virtual encoder 0 - resolution in counts
3990.A0h | MOTOR_ENC_VIRT0_ActualPosition | Virtual encoder 0 - actual position
3990.B0h | MOTOR_ENC_VIRT0_ActualIndexPosition | Virtual encoder 0 - actual index position
3990.C0h | MOTOR_ENC_VIRT0_ActualIndexCount | Virtual encoder 0 - index counter
3991.08h | MOTOR_ENC_VIRT1_RawPosBits | Virtual encoder 1 - bits
3991.10h | MOTOR_ENC_VIRT1_RawPos | Virtual encoder 1 - raw position
3991.11h | MOTOR_ENC_VIRT1_RawIndexPos | Virtual encoder 1 - raw index position
3991.20h | MOTOR_ENC_VIRT1_Resolution_Cnt | Virtual encoder 1 - resolution in counts
3991.A0h | MOTOR_ENC_VIRT1_ActualPosition | Virtual encoder 1 - actual position
3991.B0h | MOTOR_ENC_VIRT1_ActualIndexPosition | Virtual encoder 1 - actual index position
3991.C0h | MOTOR_ENC_VIRT1_ActualIndexCount | Virtual encoder 1 - index counter
39A0.00h | MOTOR_BrakeManagement_Config | Brake management - configuration
39A0.01h | MOTOR_BrakeManagement_Status | Brake management - status
39A0.06h | MOTOR_BrakeManagement_VelMin | Brake management - threshold velocity
39A0.07h | MOTOR_BrakeManagement_Din | Brake management - brake input
39A0.08h | MOTOR_BrakeManagement_Dout | Brake management - brake output
39A0.09h | MOTOR_BrakeManagement_UpBrakeOff | Brake management - threshold voltage OFF
39A0.0Ah | MOTOR_BrakeManagement_UpBrakeOn | Brake management - threshold voltage ON
39A0.10h | MOTOR_BrakeManagement_OffDelay1 | Brake management - OFF-Delay1
39A0.11h | MOTOR_BrakeManagement_OffDelay2 | Brake management - OFF-Delay2
39A0.12h | MOTOR_BrakeManagement_OnDelay1 | Brake management - ON-Delay1
39A0.13h | MOTOR_BrakeManagement_OnDelay2 | Brake management - ON-Delay2
39A0.18h | MOTOR_BrakeManagement_OffOrConditionFlags | Brake management - OFF-OR-Condition
39A0.19h | MOTOR_BrakeManagement_OffAndConditionFlags | Brake management - OFF-AND-Condition
39A0.1Ah | MOTOR_BrakeManagement_OnOrConditionFlags | Brake management - ON-OR-Condition
39A0.1Bh | MOTOR_BrakeManagement_OnAndConditionFlags | Brake management - ON-AND-Condition
39A0.40h | MOTOR_BrakeManagement_CurrentControl_PWM | Brakemanagement - Pwm-brake current reduction
39A0.42h | MOTOR_BrakeManagement_CurrentControl_Time_ms | Brakemanagement - Pwm-brake Time
39A2.00h | MOTOR_QuasiAbsEncoder_ConfigFlags | Quasi Absolute Encoder - config flags
39A2.01h | MOTOR_QuasiAbsEncoder_Status | Quasi Absolute Encoder - status
39A2.02h | MOTOR_QuasiAbsEncoder_Error | Quasi Absolute Encoder - error
39A2.07h | MOTOR_QuasiAbsEncoder_Tolerance_cnt | Quasi Absolute Encoder - tolerance
39A2.08h | MOTOR_QuasiAbsEncoder_Action | Quasi Absolute Encoder - command
39A2.10h | MOTOR_QuasiAbsEncoder_DeltaPos | Quasi Absolute Encoder - corrected position
39A2.20h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe | Quasi Absolute Encoder - minimum voltage to position save
39A2.21h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe | Quasi Absolute Encoder - maximum voltage to position save
39A2.31h | MOTOR_QuasiAbsEncoder_SavedPosition | Quasi Absolute Encoder - saved position
39A2.32h | MOTOR_QuasiAbsEncoder_SavedIndexPosition | Quasi Absolute Encoder - saved index position
39A2.33h | MOTOR_QuasiAbsEncoder_SavesCounter | Quasi Absolute Encoder - saves counter
3A02.00h | MEASUREMENT_VelTime_ms | Velocity measurement - gate time
3A04.00h | MEASUREMENT_Vel_cnt | Measured velocity in increments
3A04.01h | MEASUREMENT_Vel_rpm | Measured velocity in [rpm]
3B00.00h | FCT_Control | Factor group - control
3B00.01h | FCT_Precision | Factor group - precision
3B10.00h | FCT_Polarity | Factor group - polarity
3B11.00h | FCT_PosNotationIndex | Factor group - position notation index
3B12.00h | FCT_PosDimIndex | Factor group - position dimension index
3B13.00h | FCT_VelNotationIndex | Factor group - velocity notation index
3B14.00h | FCT_VelDimIndex | Factor group - velocity dimension index
3B15.00h | FCT_AccNotationIndex | Factor group - acceleration notation index
3B16.00h | FCT_AccDimIndex | Factor group - acceleration dimension index
3B16.01h | FCT_AccFactorNum | Factor group - acceleration scale - numinator
3B16.02h | FCT_AccFactorDen | Factor group - acceleration scale - denuminator
3B17.00h | FCT_PosScaleNum | Factor group - position scale - numerator
3B17.01h | FCT_PosScaleDen | Factor group - position scale - denominator
3B18.00h | FCT_VelScaleNum | Factor group - velocity scale - numerator
3B18.01h | FCT_VelScaleDen | Factor group - velocity scale - denominator
3B19.00h | FCT_GearRatio_MotorRev | Factor group - gear ratio - motor shaft revolutions
3B19.01h | FCT_GearRatio_ShaftRev | Factor group - gear ratio - driving shaft revolutions
3B1A.00h | FCT_FeedConstant_Feed | Factor group - feed constant - feed
3B1A.01h | FCT_FeedConstant_ShaftRev | Factor group - feed constant - driving shaft revolutions
3CE0.00h | COM_ASI_Cmd | ASI command
3CE0.06h | COM_ASI_Baudrate | ASI baud rate
3D14.00h | TOOL_Master_Control | Master-Tool - config
3D14.10h | TOOL_Master_ParSource | Master-Tool - feedback parameter
3D14.12h | TOOL_Master_ScaleNum | Master-Tool - scale numerator
3D14.13h | TOOL_Master_ScaleDen | Master-Tool - scale denominator
3D14.14h | TOOL_Master_MaxVel | Master-Tool - maximum velocity
3D14.31h | TOOL_Master_FilterKp | Master-Tool - filter gain factor
3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


3090.07h Ballast on - threshold

Name | DEV_Chopper_UpOn
Designation | Ballast on - threshold
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 655350]
Default value | 52000
Unit | [mV]
Operating mode | All
Available since | 1.93.00.D3
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter defines the threshold of the ballast circuit in [mV]. The hysteresis is approximately 1V.
The value 0 deactivates the brake chopper.
Further threshold value are defined in the value range. Is a value written that is not represented in the value range, the next lower value will be set automatically.
If the value is set above 60000mV the treshold will be set to 60000mV.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                     # NodeId = 1

d.SdoWr(0x3090, 0x07, 31200)                   # Threshold of Ballast = 31,2 V


3091.01h Temperature - threshold heatsink warning

Name | DEV_HeatSink_Temp_Warning
Designation | Temperature - threshold heatsink warning
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [0.1°C]
Operating mode | All
Available since | 1.93.00.D3
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter sets a limit temperature of the power stage. If the temperature rises above this value, the controller will generate a Warning and set the bit STAT_Warning in the status register DEV_Status.
You can set the value in steps of 0,1 [C].


3830.00h PWM frequency

Name | PWM_Frequency
Designation | PWM frequency
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {32000}
Default value | 32000
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | PwmFreq(value)
Cross reference | -

Description

Using this parameter you can set the PWM frequency.

A PWM-frequency of 200 kHz is only possible for the device EDC-E65 and EDC-E65-M.

Attention
The lower the PWM-frequency and the inductance of the motor, the warmer (higher losses) becomes the motor in still stand.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency
   d.SdoWr(0x3830, 0x01, 1)                        # PWM_Mode


3830.01h PWM mode

Name | PWM_Mode
Designation | PWM mode
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter defines the mode of the PWM signal.

Parameter value
Value | Name | Description
0 | PWM_Symetric | If the motor is in still stand without a load, the PWM signal is 50%. That equals an average voltage of 0V.
1 | PWM_Asymetric | If the motor is in still stand without a load, the PWM signal is 0%. Therefore the relative PWM signal is "positive" or "negative" depending on the direction. Since this mode has very low losses in still stand, it is particularly suitable for motors with low inductances.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency
   d.SdoWr(0x3830, 0x01, 1)                        # PWM_Mode


3913.00h Motor commutation type

Name | MOTOR_CommutationType
Designation | Motor commutation type
Data type | uint8
Access | read only
Attributs | Save; Changeable only in disabled state
Value range | {00h, 10h}
Default value | 00h
Unit | -
Operating mode | All
Available since | 1.91.00.27
Devices | All
PLC Function | -
Cross reference | MOTOR_Commutation_Referencing, MOTOR_Commutation_Polarity

Description

The parameter defines the type of the motor commutation.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Information about the commutation scheme can be found in the application note AN_CommutationScheme.
Parameter values:
Value | Description
0 | Block commutation
0x10 | Encoder block commutation

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Disable
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Clear error
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Default parameter

d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3911, 0x00, (1<<3))             # MOTOR_Polarity

d.SdoWr(0x3910, 0x00, 8)                  # MOTOR_PolN
d.SdoWr(0x3962, 0x00, 2000)               # MOTOR_ENC_Resolution [inc]

d.SdoWr(0x3350, 0x00, 0x96A)              # VEL_Feedback - Ink. encoder
d.SdoWr(0x3550, 0x00, 0x96A)              # SVEL_Feedback - Ink. encoder

d.SdoWr(0x3221, 0x00, 10000)              # CURR_LimitMaxPos [mA]
d.SdoWr(0x3223, 0x00, 10000)              # CURR_LimitMaxNeg [mA]

if d.VersionSw() >= 0x1910027:
   d.SdoWr(0x3913, 0x00, 0x10)            # MOTOR_CommutationType - BlockEnc

if d.VersionSw() >= 0x1910034:            # since V1.91.00.34 MOTOR_Commutation_Polarity is available
   d.SdoWr(0x3913, 0x07, 1)               # MOTOR_Commutation_Polarity => set to 1 if motor doesn't move and is humming

d.SdoWr(0x3913, 0x10, 4000, timeout=3500) # MOTOR_Commutation_Referencing
                                          # Referencing with current 4000mA

d.SdoWr(0x3003, 0x00, 3)                  # DEV_Mode - Velocity mode
d.SdoWr(0x3004, 0x00, 1)                  # DEV_Enable - Enable
d.SdoWr(0x3300, 0x00, 1000)               # VEL_DesiredValue [rpm]


Content - Parameters 3000h (DSA) - Brake management

39A0.00h | MOTOR_BrakeManagement_Config | Brake management - configuration
39A0.01h | MOTOR_BrakeManagement_Status | Brake management - status
39A0.06h | MOTOR_BrakeManagement_VelMin | Brake management - threshold velocity
39A0.07h | MOTOR_BrakeManagement_Din | Brake management - brake input
39A0.08h | MOTOR_BrakeManagement_Dout | Brake management - brake output
39A0.09h | MOTOR_BrakeManagement_UpBrakeOff | Brake management - threshold voltage OFF
39A0.0Ah | MOTOR_BrakeManagement_UpBrakeOn | Brake management - threshold voltage ON
39A0.10h | MOTOR_BrakeManagement_OffDelay1 | Brake management - OFF-Delay1
39A0.11h | MOTOR_BrakeManagement_OffDelay2 | Brake management - OFF-Delay2
39A0.12h | MOTOR_BrakeManagement_OnDelay1 | Brake management - ON-Delay1
39A0.13h | MOTOR_BrakeManagement_OnDelay2 | Brake management - ON-Delay2
39A0.18h | MOTOR_BrakeManagement_OffOrConditionFlags | Brake management - OFF-OR-Condition
39A0.19h | MOTOR_BrakeManagement_OffAndConditionFlags | Brake management - OFF-AND-Condition
39A0.1Ah | MOTOR_BrakeManagement_OnOrConditionFlags | Brake management - ON-OR-Condition
39A0.1Bh | MOTOR_BrakeManagement_OnAndConditionFlags | Brake management - ON-AND-Condition
39A0.40h | MOTOR_BrakeManagement_CurrentControl_PWM | Brakemanagement - Pwm-brake current reduction
39A0.42h | MOTOR_BrakeManagement_CurrentControl_Time_ms | Brakemanagement - Pwm-brake Time


39A0.40h Brakemanagement - Pwm-brake current reduction

Name | MOTOR_BrakeManagement_CurrentControl_PWM
Designation | Brakemanagement - Pwm-brake current reduction
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 100]
Default value | 100
Unit | [%]
Operating mode | All
Available since | 1.93.00.EE
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_CurrentControl_Time_ms

Description

This parameter is used to configure a clocked signal to control the brake. Using a clocked signal to control the brake reduces the current in the brake and therefore minimizes the power dissipation.
The value of this parameter determines the current in % that is used to control the brake. In order to work properly a flyback diode has to be connected to the brake output. If there is no flyback diode integrated in the device, it has to be connected externally.

Before the current reduction starts, the brake output is set for a defined time (MOTOR_BrakeManagement_CurrentControl_Time_ms), to ensure that the brake generates enough force to open up.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x39A0,0x40, 60)            # MOTOR_BrakeManagement_CurrentControl_PWM
d.SdoWr(0x39A0,0x42, 150)           # MOTOR_BrakeManagement_CurrentControl_Time_ms


39A0.42h Brakemanagement - Pwm-brake Time

Name | MOTOR_BrakeManagement_CurrentControl_Time_ms
Designation | Brakemanagement - Pwm-brake Time
Data type | uint16
Access | read / write
Attributs | -
Value range | [0 .. 65535]
Default value | 200
Unit | [ms]
Operating mode | All
Available since | 1.93.00.EE
Devices | All
PLC Function | -
Cross reference | MOTOR_BrakeManagement_CurrentControl_PWM

Description

This parameter is used to determine the time that the brake output is set, before the current reduction is activated. This ensures, that the brake can generate enough force to open up.
When the current, that is used to control the brake (MOTOR_BrakeManagement_CurrentControl_PWM) is set to 100%, this parameter has no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                 # NodeId = 1

d.SdoWr(0x39A0,0x40, 60)            # MOTOR_BrakeManagement_CurrentControl_PWM
d.SdoWr(0x39A0,0x42, 150)           # MOTOR_BrakeManagement_CurrentControl_Time_ms


Content - Parameters 6000h (DSP402)

6007.00h | DS402_AbortConnectionOptionCode | Abort Connection Option Code
6040.00h | DS402_ControlWord | Control word
6041.00h | DS402_StatusWord | Status word
6042.00h | DS402_VL_TargetVelocity | Target velocity
6046.00h | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported | Min/max velocity - highest sub-index supported
6046.01h | DS402_VL_VelocityMinMaxAmount_MinVelocity | Minimal velocity
6046.02h | DS402_VL_VelocityMinMaxAmount_MaxVelocity | Maximal velocity
6048.00h | DS402_VL_VelocityAcceleration_HighestSubindexSupported | Velocity acceleration - highest sub-index supported
6048.01h | DS402_VL_VelocityAcceleration_DeltaSpeed | Velocity acceleration - delta speed
6048.02h | DS402_VL_VelocityAcceleration_DeltaTime | Velocity acceleration - delta time
6049.00h | DS402_VL_VelocityDeceleration_HighestSubindexSupported | Velocity deceleration - highest sub-index supported
6049.01h | DS402_VL_VelocityDeceleration_DeltaSpeed | Velocity deceleration - delta speed
6049.02h | DS402_VL_VelocityDeceleration_DeltaTime | Velocity deceleration - delta time
604A.00h | DS402_VL_VelocityQuickstop_HighestSubindexSupported | Velocity quickstop - highest sub-index supported
604A.01h | DS402_VL_VelocityQuickstop_DeltaSpeed | Velocity quickstop - delta speed
604A.02h | DS402_VL_VelocityQuickstop_DeltaTime | Velocity quickstop - delta time
604C.00h | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported | Velocity dimension factor - highest sub-index supported
604C.01h | DS402_VL_VelocityDimensionFactor_Numerator | Velocity dimension factor - numerator
604C.02h | DS402_VL_VelocityDimensionFactor_Denominator | Velocity dimension factor - denominator
6060.00h | DS402_ModesOfOperation | Modes of operation
6061.00h | DS402_ModesOfOperationDisplay | Modes of operation display
6062.00h | DS402_PP_PositionDemandValue | Position - demand value
6063.00h | DS402_PP_PositionActualValueInCounts | Position - actual value in counts
6064.00h | DS402_PP_PositionActualValue | Position - actual value
6065.00h | DS402_PP_FollowingErrorWindow | Following error window
6067.00h | DS402_PP_PositionWindow | Position window
6068.00h | DS402_PP_PositionWindowTime | Position window time
6071.00h | DS402_TQ_TargetTorque | Target torque
6072.00h | DS402_TQ_MaxTorque | Maximal torque
6075.00h | DS402_TQ_MotorRatedCurrent | Motor rated current
6077.00h | DS402_TQ_TorqueActualValue | Torque - actual value
6078.00h | DS402_TQ_CurrentActualValue | Current - actual value
6079.00h | DS402_TQ_DCLinkCircuitVoltage | Power voltage
607A.00h | DS402_PP_TargetPosition | Target position
607C.00h | DS402_HM_HomeOffset | Homing offset
607D.00h | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported | Software limit position - highest sub-index supported
607D.01h | DS402_PP_SoftwareLimitPosition_MinPositionLimit | Software limit position - minimum
607D.02h | DS402_PP_SoftwareLimitPosition_MaxPositionLimit | Software limit position - maximum
607E.00h | DS402_FG_Polarity | Polarity
607F.00h | DS402_PP_MaxProfileVelocity | Velocity max. limit
6081.00h | DS402_PP_ProfileVelocity | Profile velocity
6083.00h | DS402_PP_ProfileAcceleration | Velocity acceleration
6084.00h | DS402_PP_ProfileDeceleration | Velocity deceleration
6085.00h | DS402_PP_QuickstopDeceleration | Velocity quickstop deceleration
6086.00h | DS402_PP_MotionProfileType | Velocity - ramp type
6087.00h | DS402_TQ_TorqueSlope | Torque slope
6088.00h | DS402_TQ_TorqueProfileType | Torque - ramp type
6089.00h | DS402_PP_PositionNotationIndex | Position notation index
608A.00h | DS402_PP_PositionDimensionIndex | Position dimension index
608B.00h | DS402_PP_VelocityNotationIndex | Velocity notation index
608C.00h | DS402_PP_VelocityDimensionIndex | Velocity dimension index
608D.00h | DS402_PP_AccelerationNotationIndex | Acceleration notation index
608E.00h | DS402_PP_AccelerationDimensionIndex | Acceleration dimension index
608F.00h | DS402_FG_PositionEncoderResolution_HighestSubindexSupported | Position encoder resolution - highest subindex supported
608F.01h | DS402_FG_PositionEncoderResolution_EncoderIncrements | Position encoder resolution - Encoder increment
608F.02h | DS402_FG_PositionEncoderResolution_MotorShaftRevolutions | Position encoder resolution - motor shaft revolutions
6090.00h | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported | Velocity encoder resolution - highest subindex supported
6090.01h | DS402_FG_VelocityEncoderResolution_EncoderIncrements | Velocity encoder resolution - Encoder increment
6090.02h | DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions | Velocity encoder resolution - motor shaft revolutions
6091.00h | DS402_FG_GearRatio_HighestSubindexSupported | Gear ratio - highest subindex supported
6091.01h | DS402_FG_GearRatio_MotorShaftRevolutions | Gear ratio - motor shaft revolutions
6091.02h | DS402_FG_GearRatio_DrivingShaftRevolutions | Gear ratio - driving shaft revolutions
6092.00h | DS402_FG_FeedConstant_HighestSubindexSupported | Feed constant - highest subindex supported
6092.01h | DS402_FG_FeedConstant_Feed | Feed constant - feed
6092.02h | DS402_FG_FeedConstant_DrivingShaftRevolutions | Feed constant - driving shaft revolutions
6098.00h | DS402_HM_HomingMethod | Homing - method
6099.00h | DS402_HM_HomingSpeeds_HighestSubindexSupported | Homing velocity - highest subindex supported
6099.01h | DS402_HM_HomingSpeeds_SpeedSwitch | Homing velocity for search of switch
6099.02h | DS402_HM_HomingSpeeds_SpeedZero | Homing velocity for search of zero point
609A.00h | DS402_HM_HomingAcceleration | Homing acceleration
60C0.00h | DS402_IP_InterpolationSubModeSelect | Interpolation - method
60C1.00h | DS402_IP_InterpolationDataRecord_HighestSubindexSupported | Interpolation data record - highest subindex supported
60C1.01h | DS402_IP_InterpolationDataRecord_1stSetPoint | Interpolation data record - 1st set-point
60C2.00h | DS402_IP_InterpolationTimePeriod_HighestSubindexSupported | Interpolation time period - highest subindex supported
60C2.01h | DS402_IP_InterpolationTimePeriod_Value | Interpolation time period - value
60C2.02h | DS402_IP_InterpolationTimePeriod_Index | Interpolation time period - index
60C4.00h | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported | Interpolation data configuration - highest subindex supported
60C4.01h | DS402_IP_InterpolationDataConfiguration_MaximumBufferSize | Interpolation data configuration - maximum buffer size
60C4.02h | DS402_IP_InterpolationDataConfiguration_ActualBufferSize | Interpolation data configuration - actual buffer size
60C4.03h | DS402_IP_InterpolationDataConfiguration_BufferOrganisation | Interpolation data configuration - buffer organization
60C4.04h | DS402_IP_InterpolationDataConfiguration_BufferPosition | Interpolation data configuration - buffer position
60C4.05h | DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord | Interpolation data configuration - size of data record
60C4.06h | DS402_IP_InterpolationDataConfiguration_BufferClear | Interpolation data configuration - buffer clear
60F4.00h | DS402_PP_FollowingErrorActualValue | Following error actual value
60FC.00h | DS402_PP_PositionDemandValueInCounts | Position demand value in counts
60FD.00h | DS402_DigitalInputs | Digital inputs
60FE.00h | DS402_DigitalOutputs_HighestSubindexSupported | Digital output - highest subindex supported
60FE.01h | DS402_DigitalOutputs_PhysicalOutput | Digital output - physical outputs
60FE.02h | DS402_DigitalOutputs_BitMask | Digital output - bit mask
6402.00h | DS402_MotorType | Motor type
6404.00h | DS402_MotorManufacturer | Motor manufacturer
6405.00h | DS402_HttpMotorCatalogueAddress | Http motor catalogue address
6502.00h | DS402_SupportedDriveModes | Supported drive modes
6503.00h | DS402_DriveCatalogueNumber | Drive catalogue number


6404.00h Motor manufacturer

Name | DS402_MotorManufacturer
Designation | Motor manufacturer
Data type | visible string
Access | read / write
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | FF.FF.FF.FF
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the name of the motor manufacturer. If the name is not assigned yet, the parameter will return an empty string.


6405.00h Http motor catalogue address

Name | DS402_HttpMotorCatalogueAddress
Designation | Http motor catalogue address
Data type | visible string
Access | read / write
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | FF.FF.FF.FF
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the assigned web-address of the motor catalogue. If the address is not assigned yet, the parameter will return an empty string.


6503.00h Drive catalogue number

Name | DS402_DriveCatalogueNumber
Designation | Drive catalogue number
Data type | visible string
Access | read / write
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | FF.FF.FF.FF
Devices | All
PLC Function | -
Cross reference | -

Description

The parameter indicates the assigned manufacturer's drive catalogue number (nameplate number).


Content - Parameters 3000h (DSA)

3000.00h | DEV_Cmd | Device command
3000.01h | DEV_Cmd_ExecOnChange | Device command - execute on change
3000.02h | DEV_Cmd2 | Device command 2
3000.08h | DEV_Cmd_SetError | Device command - set error
3000.10h | DEV_CmdData0 | Device command - data 0
3000.11h | DEV_CmdData1 | Device command - data 1
3000.12h | DEV_CmdData2 | Device command - data 2
3000.20h | DEV_CmdData0_i16 | Device command - data 0 (int16)
3000.21h | DEV_CmdData1_i16 | Device command - data 1 (int16)
3000.22h | DEV_CmdData2_i16 | Device command - data 2 (int16)
3000.70h | DEV_CmdResult | Device command - result
3000.81h | DEV_CmdError | Device command - Error
3000.83h | DEV_CmdCounter | Device command - counter
3001.00h | DEV_ErrorReg | Error register
3002.00h | DEV_Status | Status register
3003.00h | DEV_Mode | Device mode
3004.00h | DEV_Enable | Power enable
3008.00h | DEV_ConfigErrors | Error configuration
3010.11h | DEV_Event_Cmd1OnError | Event command 1 on errors
3010.12h | DEV_Event_Cmd2OnError | Event command 2 on errors
3010.13h | DEV_Event_Cmd3OnError | Event command 3 on errors
3010.14h | DEV_Event_Cmd4OnError | Event command 4 on errors
3010.31h | DEV_Event_Cmd1OnCommError | Event command 1 on communication errors
3010.32h | DEV_Event_Cmd2OnCommError | Event command 2 on communication errors
3010.33h | DEV_Event_Cmd3OnCommError | Event command 3 on communication errors
3010.34h | DEV_Event_Cmd4OnCommError | Event command 4 on communication errors
3012.10h | DEV_Event_CmdOnSpecificError1 | Event commands on specific error 1
3012.11h | DEV_Event_Cmd1OnSpecificError1 | Event command 1 on specific error 1
3012.12h | DEV_Event_Cmd2OnSpecificError1 | Event command 2 on specific error 1
3012.13h | DEV_Event_Cmd3OnSpecificError1 | Event command 3 on specific error 1
3012.14h | DEV_Event_Cmd4OnSpecificError1 | Event command 4 on specific error 1
3012.20h | DEV_Event_CmdOnSpecificError2 | Event commands on specific error 2
3012.21h | DEV_Event_Cmd1OnSpecificError2 | Event command 1 on specific error 2
3012.22h | DEV_Event_Cmd2OnSpecificError2 | Event command 2 on specific error 2
3012.23h | DEV_Event_Cmd3OnSpecificError2 | Event command 3 on specific error 2
3012.24h | DEV_Event_Cmd4OnSpecificError2 | Event command 4 on specific error 2
3012.30h | DEV_Event_CmdOnSpecificError3 | Event commands on specific error 3
3012.31h | DEV_Event_Cmd1OnSpecificError3 | Event command 1 on specific error 3
3012.32h | DEV_Event_Cmd2OnSpecificError3 | Event command 2 on specific error 3
3012.33h | DEV_Event_Cmd3OnSpecificError3 | Event command 3 on specific error 3
3012.34h | DEV_Event_Cmd4OnSpecificError3 | Event command 4 on specific error 3
3012.40h | DEV_Event_CmdOnSpecificError4 | Event commands on specific error 4
3012.41h | DEV_Event_Cmd1OnSpecificError4 | Event command 1 on specific error 4
3012.42h | DEV_Event_Cmd2OnSpecificError4 | Event command 2 on specific error 4
3012.43h | DEV_Event_Cmd3OnSpecificError4 | Event command 3 on specific error 4
3012.44h | DEV_Event_Cmd4OnSpecificError4 | Event command 4 on specific error 4
3014.11h | DEV_Event1_OnUserCmd1 | Command 1 on usercommand 1
3014.12h | DEV_Event2_OnUserCmd1 | Command 2 on usercommand 1
3014.13h | DEV_Event3_OnUserCmd1 | Command 3 on usercommand 1
3014.14h | DEV_Event4_OnUserCmd1 | Command 4 on usercommand 1
3014.21h | DEV_Event1_OnUserCmd2 | Command 1 on usercommand 2
3014.22h | DEV_Event2_OnUserCmd2 | Command 2 on usercommand 2
3014.23h | DEV_Event3_OnUserCmd2 | Command 3 on usercommand 2
3014.24h | DEV_Event4_OnUserCmd2 | Command 4 on usercommand 2
3014.31h | DEV_Event1_OnUserCmd3 | Command 1 on usercommand 3
3014.32h | DEV_Event2_OnUserCmd3 | Command 2 on usercommand 3
3014.33h | DEV_Event3_OnUserCmd3 | Command 3 on usercommand 3
3014.34h | DEV_Event4_OnUserCmd3 | Command 4 on usercommand 3
3014.41h | DEV_Event1_OnUserCmd4 | Command 1 on usercommand 4
3014.42h | DEV_Event2_OnUserCmd4 | Command 2 on usercommand 4
3014.43h | DEV_Event3_OnUserCmd4 | Command 3 on usercommand 4
3014.44h | DEV_Event4_OnUserCmd4 | Command 4 on usercommand 4
3014.51h | DEV_Event1_OnUserCmd5 | Command 1 on usercommand 5
3014.52h | DEV_Event2_OnUserCmd5 | Command 2 on usercommand 5
3014.53h | DEV_Event3_OnUserCmd5 | Command 3 on usercommand 5
3014.54h | DEV_Event4_OnUserCmd5 | Command 4 on usercommand 5
3014.61h | DEV_Event1_OnUserCmd6 | Command 1 on usercommand 6
3014.62h | DEV_Event2_OnUserCmd6 | Command 2 on usercommand 6
3014.63h | DEV_Event3_OnUserCmd6 | Command 3 on usercommand 6
3014.64h | DEV_Event4_OnUserCmd6 | Command 4 on usercommand 6
3014.71h | DEV_Event1_OnUserCmd7 | Command 1 on usercommand 7
3014.72h | DEV_Event2_OnUserCmd7 | Command 2 on usercommand 7
3014.73h | DEV_Event3_OnUserCmd7 | Command 3 on usercommand 7
3014.74h | DEV_Event4_OnUserCmd7 | Command 4 on usercommand 7
3014.81h | DEV_Event1_OnUserCmd8 | Command 1 on usercommand 8
3014.82h | DEV_Event2_OnUserCmd8 | Command 2 on usercommand 8
3014.83h | DEV_Event3_OnUserCmd8 | Command 3 on usercommand 8
3014.84h | DEV_Event4_OnUserCmd8 | Command 4 on usercommand 8
301A.00h | DEV_ValueEvent1_Config | Value event 1 - configuration
301A.01h | DEV_ValueEvent1_Status | Value event 1 - status
301A.02h | DEV_ValueEvent1_ParNr | Value event 1 - parameter
301A.03h | DEV_ValueEvent1_PollingTime | Value event 1 - polling time
301A.04h | DEV_ValueEvent1_ScaleNum | Value event 1 - scaling numerator
301A.05h | DEV_ValueEvent1_ScaleDen | Value event 1 - scaling denominator
301A.06h | DEV_ValueEvent1_ScaledValue | Value event 1 - scaled value
301A.08h | DEV_ValueEvent1_Treshold1 | Value event 1 - threshold 1
301A.09h | DEV_ValueEvent1_Hysteresis1 | Value event 1 - hysteresis 1
301A.0Ah | DEV_ValueEvent1_Mask1 | Value event 1 - mask 1
301A.0Bh | DEV_ValueEvent1_Cmd1 | Value event 1 - command 1
301A.0Ch | DEV_ValueEvent1_Cmd1_Data0 | Value event 1 - command 1 data 0
301A.0Dh | DEV_ValueEvent1_Cmd1_Data1 | Value event 1 - command 1 data 1
301A.0Eh | DEV_ValueEvent1_Treshold2 | Value event 1 - threshold 2
301A.0Fh | DEV_ValueEvent1_Hysteresis2 | Value event 1 - hysteresis 2
301A.10h | DEV_ValueEvent1_Mask2 | Value event 1 - mask 2
301A.11h | DEV_ValueEvent1_Cmd2 | Value event 1 - command 2
301A.12h | DEV_ValueEvent1_Cmd2_Data0 | Value event 1 - command 2 data 0
301A.13h | DEV_ValueEvent1_Cmd2_Data1 | Value event 1 - command 2 data 1
301D.00h | DEV_LatchEvent0_Control | Latch event 1 - control
301D.01h | DEV_LatchEvent0_Status | Latch event 1 - status
301D.03h | DEV_LatchEvent0_Mode | Latch event 1 - mode
301D.08h | DEV_LatchEvent0_ParTrigger | Latch event 1 - trigger parameter
301D.09h | DEV_LatchEvent0_ParToLatch | Latch event 1 - parameter to latch
301D.10h | DEV_LatchEvent0_LhCount | Latch event 1 - low-high edge counter
301D.11h | DEV_LatchEvent0_LhVal | Latch event 1 - low-high edge latched value
301D.12h | DEV_LatchEvent0_LhDiff | Latch event 1 - difference low-high - high-low
301D.13h | DEV_LatchEvent0_HlCount | Latch event 1 - high-low edge counter
301D.14h | DEV_LatchEvent0_HlVal | Latch event 1 - high-low edge latched value
301D.15h | DEV_LatchEvent0_HlDiff | Latch event 1 - difference high-low - low-high
301D.20h | DEV_LatchEvent1_Control | Latch event 2 - control
301D.21h | DEV_LatchEvent1_Status | Latch event 2 - status
301D.23h | DEV_LatchEvent1_Mode | Latch event 2 - mode
301D.28h | DEV_LatchEvent1_ParTrigger | Latch event 2 - trigger parameter
301D.29h | DEV_LatchEvent1_ParToLatch | Latch event 2 - parameter to latch
301D.30h | DEV_LatchEvent1_LhCount | Latch event 2 - low-high edge counter
301D.31h | DEV_LatchEvent1_LhVal | Latch event 2 - low-high edge latched value
301D.32h | DEV_LatchEvent1_LhDiff | Latch event 2 - difference low-high - high-low
301D.33h | DEV_LatchEvent1_HlCount | Latch event 2 - high-low edge counter
301D.34h | DEV_LatchEvent1_HlVal | Latch event 2 - high-low edge latched value
301D.35h | DEV_LatchEvent1_HlDiff | Latch event 2 - difference high-low - low-high
3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number
302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9
302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3
3031.00h | DEV_MaxUp | Max. power voltage
3032.00h | DEV_MaxIm | Max. motor current
3050.00h | DEV_DinEnable | Input assignment - enable
3051.00h | DEV_DinClearError | Input assignment - error quitting
3052.00h | DEV_DinStartStop | Input assignment - start/stop
3053.00h | DEV_DinDir | Input assignment - Change of rotation direction
3055.00h | DEV_DinLimitPos | Input assignment - positive limit switch
3056.00h | DEV_DinLimitNeg | Input assignment - negative limit switch
3057.00h | DEV_DinReference | Input assignment - reference switch
3060.00h | DEV_DoutError | Output assignment - error
3080.00h | DEV_ContinueMode | Continue - mode
3090.00h | DEV_MinUp_Error | Minimum Up - error
3090.04h | DEV_UpOff_Stotterbremse | Up - disable cadence braking
3090.05h | DEV_UpOn_Stotterbremse | Up - enable cadence
3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
310A.00h | IO_AIN0_DeadBand | Analog input 0 - dead band
310A.01h | IO_AIN1_DeadBand | Analog input 1 - dead band
3110.00h | IO_AIN_Voltage_Ue | Electronic voltage - Ue
3111.00h | IO_AIN_Voltage_Up | Power voltage - Up
3112.00h | IO_AIN_Voltage_Um | Motor voltage - Um
3113.00h | IO_AIN_Current_Im | Motor current - Im
3114.00h | IO_AIN_Temperature_Power | Temperature of power amplifier
3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3129.01h | IO_DIN_NodeIdSwitch | NodeId-Switch - state
3150.00h | IO_DOUT_P0 | Digital outputs - Port0
3154.00h | IO_DOUT_Enable | Enable digital outputs
3158.00h | IO_DOUT_LedsEnable | LED - enable user control
3158.01h | IO_DOUT_LedsState | LED - state
3200.00h | CURR_DesiredValue | Current - desired value
3200.01h | CURR_DesiredValue_Stop | Current - desired value - stop
3200.02h | CURR_DesiredValue_AccPos | Current - desired value - positive acceleration
3200.03h | CURR_DesiredValue_ConstPos | Current - desired value - constant velocity in positive direction
3200.04h | CURR_DesiredValue_DecPos | Current - desired value - decceleration in positive direction
3200.05h | CURR_DesiredValue_AccNeg | Current - desired value - acceleration in negative direction
3200.06h | CURR_DesiredValue_ConstNeg | Current - desired value - constant velocity in negative direction
3200.07h | CURR_DesiredValue_DecNeg | Current - desired value - decceleration in negative direction
3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3214.00h | CURR_Kvff | PI-Current controller - velocity feed forward
3215.00h | CURR_Kaff | PI-Current controller - acceleration feed forward
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator
3221.00h | CURR_LimitMaxPos | Current limit - max. positiv
3223.00h | CURR_LimitMaxNeg | Current limit - max. negativ
3224.00h | CURR_DynLimitMode | Dynamic current limit - mode
3224.01h | CURR_DynLimitPeak | Dynamic current limit - peak current
3224.02h | CURR_DynLimitCont | Dynamic current limit - continues current
3224.03h | CURR_DynLimitTime | Dynamic current limit - time
3224.12h | CURR_ActDynLimitCurrent | Dynamic current limit I*t - actual limit
3260.00h | CURR_ActualTargetCurrent | Current - target value
3261.00h | CURR_ActualCommandCurrent | Current - command value
3262.00h | CURR_ActualCurrent | Current - actual value
3262.01h | CURR_ActualAvgCurrent | Current - actual filtred value
3262.04h | CURR_ActualPosMaxCurr | Maximal positive motor current
3262.05h | CURR_ActualNegMaxCurr | Minimal negative motor current
3263.00h | CURR_ActualFollowingError | Current - following error
32A0.00h | CURR_SampleTime | Current controller - sample time
32A0.08h | CURR_SamplePoint | Current controller - sample point correction
32A0.09h | CURR_SampleRlCorr | Current controller - R/L correction
32A0.10h | CURR_ActAvgCurrFilterLevel | Filter level for actual filtred current
3300.00h | VEL_DesiredValue | Velocity - desired value
3302.00h | VEL_ScaleNum | Velocity scale factor - numerator
3303.00h | VEL_ScaleDen | Velocity scale factor - denominator
3304.00h | VEL_DesiredValue_Source | Velocity source
3305.00h | VEL_DesiredValue_Reference | Velocity reference value
330A.00h | VEL_DimensionNum | Velocity dimension factor - numerator
330B.00h | VEL_DimensionDen | Velocity dimension factor - denominator
3310.00h | VEL_Kp | PID-Controller - gain
3311.00h | VEL_Ki | PID-Controller - integral factor
3312.00h | VEL_Kd | PID-Controller - differential factor
3313.00h | VEL_ILimit | PID-Controller - integral limit
3314.00h | VEL_Kvff | PID-Controller - velocity feed forward
3315.00h | VEL_Kaff | PID-Controller - acceleration feed forward
3317.00h | VEL_KIxR | IxR factor
3318.00h | VEL_KdSampleTime | PID-Controller - differential sample time
3321.00h | VEL_LimitMaxPos | Velocity max. limit - positiv direction
3323.00h | VEL_LimitMaxNeg | Velocity max. limit - negativ direction
3340.00h | VEL_Acc_dV | Velocity acceleration - delta V
3341.00h | VEL_Acc_dT | Velocity acceleration - delta T
3342.00h | VEL_Dec_dV | Velocity deceleration - delta V
3343.00h | VEL_Dec_dT | Velocity deceleration - delta T
3344.00h | VEL_Dec_QuickStop_dV | Velocity quick stop deceleration - delta V
3345.00h | VEL_Dec_QuickStop_dT | Velocity quick stop deceleration - delta T
334C.00h | VEL_RampType | Ramp generator - ramp type
334D.00h | VEL_RampState | Ramp generator - state
3350.00h | VEL_Feedback | Velocity feedback
3350.03h | VEL_Feedback_Reference | Velocity feedback - reference
3360.00h | VEL_ActualTargetVel | Velocity - target value
3361.00h | VEL_ActualCommandVel | Velocity - command value
3362.00h | VEL_ActualVel | Unfiltered velocity - actual value
3380.00h | VEL_Acc | Velocity acceleration in [rev/min²]
3381.00h | VEL_Dec | Velocity deceleration in [rev/min²]
3382.00h | VEL_Dec_QuickStop | Velocity quick-stop deceleration in [rev/min²]
33A0.00h | VEL_SampleTime | Velocity/position controller - sample time
3708.00h | POS_Mode | Position mode
3709.00h | POS_ConfigFlags | Pos config
3720.00h | POS_PositionLimitMin | Position limit - minimum
3720.01h | POS_PositionLimitMax | Position limit - maximum
3732.00h | POS_FollowingErrorWindow | Position following error - window
3732.01h | POS_FollowingErrorWindowDyn | Position following error - window, dynamic
3733.00h | POS_FollowingErrorTime | Position following error - time
3733.01h | POS_FollowingErrorTimeDyn | Position following error - time, dynamic
3734.00h | POS_FollowingErrorLimit | Position following error limit
373A.00h | POS_PositionWindow | Position window
373B.00h | POS_PositionWindowTime | Position window - time
373B.01h | POS_PositionWindowTimeout | Position window - timeout
373C.00h | POS_ReachedConfigFlags | Position reached - config bits
373D.00h | POS_DeadWindowOff | Position window - disable amplifier
373D.01h | POS_DeadWindowOn | Position window - enable amplifier
373E.00h | POS_DeadTimeOff | Position window time - disable amplifier
373E.01h | POS_DeadTimeOn | Position window time - enable amplifier
373F.00h | POS_DeadVel | Position window - velocity
374C.00h | POS_RampType | Pos. ramp generator - ramp type
374C.11h | POS_Ramp_JerkFactorAcc | Jerk acceleration
374C.12h | POS_Ramp_JerkFactorDec | Jerk deceleration
374D.00h | POS_RampState | Position ramp generator - state
3760.00h | POS_ActualTargetPosition | Actual target position
3761.00h | POS_ActualCommandPosition | Actual command position
3761.01h | POS_ActualCommandPositionReg | Actual internal command position
3762.00h | POS_ActualPosition | Actual position
3762.01h | POS_ActualPositionReg | Actual internal position
3763.00h | POS_ActualFollowingError | Actual position following error
3763.01h | POS_ActualFollowingErrorReg | Actual internal position following error
3764.00h | POS_ActualIndexPosition | Actual position of index
3765.00h | POS_ActualOrigin | Position origin
3770.00h | POS_ActualTargetPosition_cnt | Actual target position in increments
3771.00h | POS_ActualCommandPosition_cnt | Actual command positin in increments
3772.00h | POS_ActualPosition_cnt | Actual positin in increments
3773.00h | POS_ActualFollowingError_cnt | Actual following error in increments
3774.00h | POS_ActualIndexPosition_cnt | Actual index positin in increments
3775.00h | POS_ActualOrigin_cnt | Position origin in inc
3790.00h | POS_Mova | Absolute moving
3791.00h | POS_Movr | Relative moving
37A4.01h | POS_GearBacklashComp_Path | Gear backlash compensation - path
37A4.02h | POS_GearBacklashComp_Vel | Gear backlash compensation - velocity
37B0.00h | POS_HomingCmd | Homing - command
37B1.00h | POS_HomingStatus | Homing - status
37B1.01h | POS_HomingError | Homing - error
37B1.02h | POS_HomingState | Homing - state
37B1.03h | POS_HomingRefToIndex | Homing - path of reference switch to index
37B1.04h | POS_HomingRefToIndex_cnt | Homing - path of reference switch to index in counts
37B2.00h | POS_HomingMethod | Homing - method
37B3.00h | POS_HomingOffset | Homing - offset
37B4.00h | POS_HomingVelSwitch | Homing - velocity for search of switch
37B4.01h | POS_HomingVelZero | Homing - Velocity for search of zero point
37B5.00h | POS_HomingAcc | Homing - acceleration
37B5.01h | POS_HomingDec | Homing - deceleration
37B6.00h | POS_HomingMaxIndexPath | Homing - max. path for search of index
37B6.01h | POS_HomingIndexOffset | Homing - index offset
37B7.00h | POS_HomingBlock_ConfigFlags | Homing blockage - config
37B7.01h | POS_HomingBlock_VelLow | Homing blockage - low velocity
37B7.02h | POS_HomingBlock_VelHigh | Homing blockage - high velocity
37B7.03h | POS_HomingBlock_Time | Homing blockage - time
37B7.04h | POS_HomingBlock_FollowingErrorWindow | Homing blockage - position following error window
37C1.00h | POS_InterpStatus | Interpolation - status
37C2.00h | POS_InterpMethod | Interpolation - method
37C2.01h | POS_InterpTime | Interpolation - time
37C2.02h | POS_InterpReference | Interpolation - reference
37C5.00h | POS_InterpBufConfig | Interpolation - buffer configuration
37C6.00h | POS_InterpData | Interpolation - data
37C7.00h | POS_InterpActualTargetPosition | Interpolation - actual target position
37C7.01h | POS_InterpActualCommandPosition | Interpolation - actual command position
37C7.02h | POS_InterpActualPosition | Interpolation - actual position
37C8.00h | POS_ModuloMethod | Modulo method
37C9.00h | POS_ModuloValue | Modulo value
3830.00h | PWM_Frequency | PWM frequency
3830.62h | PWM_ActualPwm_oo | Actual PWM of the device
3850.00h | SYS_Clock | System clock
3850.02h | SYS_Timer_2ms | System timer 2ms
3900.00h | MOTOR_Type | Motor type
3910.00h | MOTOR_PolN | Motor pole number
3910.01h | MOTOR_Microsteps | Microsteps
3911.00h | MOTOR_Polarity | Motor polarity
3913.00h | MOTOR_CommutationType | Motor commutation type
3913.07h | MOTOR_Commutation_Polarity | Motor commutation polarity
3913.20h | PreCommutationConfig | Precommutation
3913.21h | PreCommutationVel | Precommutation reference velocity
3913.23h | PreCommutationAngle | Precommutation angle
3961.22h | MOTOR_ENC_INC2_Config_McSpiAddr | mcSPI-IC2 encoder configuration - SPI address
3962.00h | MOTOR_ENC_Resolution | Encoder resolution in counts
3962.20h | MOTOR_ENC_INC2_Resolution_Cnt | mcSPI-IC2 encoder resolution in counts
3963.00h | MOTOR_ENC_Resolution_lines | Encoder resolution in lines
396A.00h | MOTOR_ENC_ActualPosition | Actual encoder position
396A.20h | MOTOR_ENC_INC2_ActualPosition | Actual mcSPI-IC2 encoder position
396B.00h | MOTOR_ENC_ActualIndexPosition | Actual encoder index position
396C.00h | MOTOR_ENC_ActualIndexCount | Count of encoder index pulses
3970.00h | MOTOR_ENC_SSI_Enable | SSI absolute encoder - enable
3970.01h | MOTOR_ENC_SSI_Status | SSI absolute encoder - status
3970.08h | MOTOR_ENC_SSI_Save | SSI absolute encoder - save
3971.00h | MOTOR_ENC_SSI_Code | SSI absolute encoder - code
3971.01h | MOTOR_ENC_SSI_SignificantBits | SSI absolute encoder - significant bits
3971.02h | MOTOR_ENC_SSI_Bits | SSI absolute encoder - bits
3972.00h | MOTOR_ENC_SSI_Resolution | SSI absolute encoder - single turn resolution in counts
397A.00h | MOTOR_ENC_SSI_ActualPosition | SSI absolute encoder - actual position (extended on 32 bits)
397A.02h | MOTOR_ENC_SSI_ActualSsiDirectPosition | SSI absolute encoder - direct position
3990.08h | MOTOR_ENC_VIRT0_RawPosBits | Virtual encoder 0 - bits
3990.10h | MOTOR_ENC_VIRT0_RawPos | Virtual encoder 0 - raw position
3990.11h | MOTOR_ENC_VIRT0_RawIndexPos | Virtual encoder 0 - raw index position
3990.20h | MOTOR_ENC_VIRT0_Resolution_Cnt | Virtual encoder 0 - resolution in counts
3990.A0h | MOTOR_ENC_VIRT0_ActualPosition | Virtual encoder 0 - actual position
3990.B0h | MOTOR_ENC_VIRT0_ActualIndexPosition | Virtual encoder 0 - actual index position
3990.C0h | MOTOR_ENC_VIRT0_ActualIndexCount | Virtual encoder 0 - index counter
3991.08h | MOTOR_ENC_VIRT1_RawPosBits | Virtual encoder 1 - bits
3991.10h | MOTOR_ENC_VIRT1_RawPos | Virtual encoder 1 - raw position
3991.11h | MOTOR_ENC_VIRT1_RawIndexPos | Virtual encoder 1 - raw index position
3991.20h | MOTOR_ENC_VIRT1_Resolution_Cnt | Virtual encoder 1 - resolution in counts
3991.A0h | MOTOR_ENC_VIRT1_ActualPosition | Virtual encoder 1 - actual position
3991.B0h | MOTOR_ENC_VIRT1_ActualIndexPosition | Virtual encoder 1 - actual index position
3991.C0h | MOTOR_ENC_VIRT1_ActualIndexCount | Virtual encoder 1 - index counter
39A0.00h | MOTOR_BrakeManagement_Config | Brake management - configuration
39A0.01h | MOTOR_BrakeManagement_Status | Brake management - status
39A0.06h | MOTOR_BrakeManagement_VelMin | Brake management - threshold velocity
39A0.07h | MOTOR_BrakeManagement_Din | Brake management - brake input
39A0.08h | MOTOR_BrakeManagement_Dout | Brake management - brake output
39A0.09h | MOTOR_BrakeManagement_UpBrakeOff | Brake management - threshold voltage OFF
39A0.0Ah | MOTOR_BrakeManagement_UpBrakeOn | Brake management - threshold voltage ON
39A0.10h | MOTOR_BrakeManagement_OffDelay1 | Brake management - OFF-Delay1
39A0.11h | MOTOR_BrakeManagement_OffDelay2 | Brake management - OFF-Delay2
39A0.12h | MOTOR_BrakeManagement_OnDelay1 | Brake management - ON-Delay1
39A0.13h | MOTOR_BrakeManagement_OnDelay2 | Brake management - ON-Delay2
39A0.18h | MOTOR_BrakeManagement_OffOrConditionFlags | Brake management - OFF-OR-Condition
39A0.19h | MOTOR_BrakeManagement_OffAndConditionFlags | Brake management - OFF-AND-Condition
39A0.1Ah | MOTOR_BrakeManagement_OnOrConditionFlags | Brake management - ON-OR-Condition
39A0.1Bh | MOTOR_BrakeManagement_OnAndConditionFlags | Brake management - ON-AND-Condition
39A2.00h | MOTOR_QuasiAbsEncoder_ConfigFlags | Quasi Absolute Encoder - config flags
39A2.01h | MOTOR_QuasiAbsEncoder_Status | Quasi Absolute Encoder - status
39A2.02h | MOTOR_QuasiAbsEncoder_Error | Quasi Absolute Encoder - error
39A2.07h | MOTOR_QuasiAbsEncoder_Tolerance_cnt | Quasi Absolute Encoder - tolerance
39A2.08h | MOTOR_QuasiAbsEncoder_Action | Quasi Absolute Encoder - command
39A2.10h | MOTOR_QuasiAbsEncoder_DeltaPos | Quasi Absolute Encoder - corrected position
39A2.20h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MinUe | Quasi Absolute Encoder - minimum voltage to position save
39A2.21h | MOTOR_QuasiAbsEncoder_SaveOnPowerOff_MaxUe | Quasi Absolute Encoder - maximum voltage to position save
39A2.31h | MOTOR_QuasiAbsEncoder_SavedPosition | Quasi Absolute Encoder - saved position
39A2.32h | MOTOR_QuasiAbsEncoder_SavedIndexPosition | Quasi Absolute Encoder - saved index position
39A2.33h | MOTOR_QuasiAbsEncoder_SavesCounter | Quasi Absolute Encoder - saves counter
3A02.00h | MEASUREMENT_VelTime_ms | Velocity measurement - gate time
3A04.00h | MEASUREMENT_Vel_cnt | Measured velocity in increments
3A04.01h | MEASUREMENT_Vel_rpm | Measured velocity in [rpm]
3B00.00h | FCT_Control | Factor group - control
3B00.01h | FCT_Precision | Factor group - precision
3B10.00h | FCT_Polarity | Factor group - polarity
3B11.00h | FCT_PosNotationIndex | Factor group - position notation index
3B12.00h | FCT_PosDimIndex | Factor group - position dimension index
3B13.00h | FCT_VelNotationIndex | Factor group - velocity notation index
3B14.00h | FCT_VelDimIndex | Factor group - velocity dimension index
3B15.00h | FCT_AccNotationIndex | Factor group - acceleration notation index
3B16.00h | FCT_AccDimIndex | Factor group - acceleration dimension index
3B16.01h | FCT_AccFactorNum | Factor group - acceleration scale - numinator
3B16.02h | FCT_AccFactorDen | Factor group - acceleration scale - denuminator
3B17.00h | FCT_PosScaleNum | Factor group - position scale - numerator
3B17.01h | FCT_PosScaleDen | Factor group - position scale - denominator
3B18.00h | FCT_VelScaleNum | Factor group - velocity scale - numerator
3B18.01h | FCT_VelScaleDen | Factor group - velocity scale - denominator
3B19.00h | FCT_GearRatio_MotorRev | Factor group - gear ratio - motor shaft revolutions
3B19.01h | FCT_GearRatio_ShaftRev | Factor group - gear ratio - driving shaft revolutions
3B1A.00h | FCT_FeedConstant_Feed | Factor group - feed constant - feed
3B1A.01h | FCT_FeedConstant_ShaftRev | Factor group - feed constant - driving shaft revolutions
3CE0.00h | COM_ASI_Cmd | ASI command
3CE0.06h | COM_ASI_Baudrate | ASI baud rate
3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


3000.01h Device command - execute on change

Name | DEV_Cmd_ExecOnChange
Designation | Device command - execute on change
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h, 4h, 5h, 8h, 10h, 13h, 17h, 1Ah, 20h, 21h, 28h, 29h, 2Ah, 2Eh, 2Fh, 30h, 31h, 33h, 34h, 36h, 2Ah, 3Bh, 40h, 41h, 42h, 48h, 50h, 51h, 52h, 53h, 54h, 58h, 71h, 72h, 74h, 76h, 77h, 78h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.85.00.95
Devices | All
PLC Function | CmdExecOnChange(cmd)
Cross reference | DEV_CmdResult, DEV_CmdData0, DEV_CmdData1, DEV_CmdData2, DEV_Status, DEV_CmdCounter, DEV_Event1_OnUserCmd1

Description

Writing to this parameter executes a device command.

The command is recognized, if its value was changed. For example.: If you want to position relative twice (one after another), you have to send two the same commands (CMD_Movr)., but the most significant bit (Bit 7) in the second command should be toggled. That means that you should send first 34h (relative positioning) and as a second command B4h (also relative positioning).

With the aid of Status register (DEV_Status, 3002,00h) it is possible to control if a command has been recognized (DEV_Status, Bit 9 - STAT_CmdToggle) and accepted (DEV_Status, Bit 10 - STAT_CmdError).

Change of parameters Command device - data 0 and 1 (DEV_CmdData0 and / or DEV_CmdData1) causes that the actual Command device is marked as changed , that means that if you set new Command device, it will be executed with the new value.

Device command:
Hex | Dec | Name | Description
00h | 0 | CMD_Nop | No operation
01h | 1 | CMD_ClearError | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
04h | 4 | CMD_Continue | Continues the movement after QuickStop or Halt. Attention: You must run this command after QuickStop or Halt, if you want to continue the movement. Otherwise, the MCU will not accept new set values -> The motor remains in the Stop-Mode.
05h | 5 | CMD_Update | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) with command 31h - take over new parameters for the movement (Vel, Acc, Dec) with command 05h

Operation mode of the device controller:
Hex | Dec | Name | Description
10h | 16 | CMD_ModeOff | Power stage and controller are switched off.
13h | 19 | CMD_ModeVel | Velocity mode
17h | 23 | CMD_ModePos | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)

Power enable:
Hex | Dec | Name | Description
20h | 32 | CMD_Disable | Disables power stage and controller
21h | 33 | CMD_Enable | Enables power stage and controller

SDO communication and QuickCommand-Mapping:
Hex Dec Name Description
28h 40 CMD_Sp Sets the value of any parameter in the device. Command data 0 defines index, command data 2 subindex and command data 1 the value of parameter. In case of any error, the parameter DEV_CmdResult contains the error code.

This command is available starting with the firmware version 1.89.00.44.
29h 41 CMD_Gp Reads the actual value of any parameter from the device. Command data 0 defines index and command data 2 subindex of parameter. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code.

This command is available starting with the firmware version 1.89.00.44.
2Ah 42 CMD_SetQcMapping Sets the "Quick Command" Mapping. At the same time the RxPDO1 and TxPDO1 are reconfigured.

Mapping for "Quick Command":
RxPDO1 (8 Byte):
- 1600.1h = 30002010h -> Object: 3000.20h (DEV_CmdData0_i16) 16 bits
- 1600.2h = 30001208h -> Object: 3000.12h (DEV_CmdData2) 8 bits
- 1600.3h = 30001120h -> Object: 3000.11h (DEV_CmdData1) 32 bits
- 1600.4h = 30000108h -> Object: 3000.01h (DEV_Cmd_ExecOnChange) 8 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits        8Bits                 32Bits                 8Bits MSB

TxPDO1 (8 Byte):
- 1A00.1h = 30020010h -> Object: 3002.00h (DEV_Status) 16 bits
- 1A00.2h = 30010010h -> Object: 3001.00h (DEV_ErrorReg) 16 bits
- 1A00.3h = 30007020h -> Object: 3000.70h (DEV_CmdResult) 32 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits            16Bits                     32Bits              MSB

This command is available starting with the firmware version 1.89.00.44.

Desired value (Device command - data 0 and data 1):
First desired values have to be written in parameters Device command - data 0 and 1 (DEV_CmdData0, 3000.10h/ DEV_CmdData1, 3000.11h)
Use one of the following commands causes that data (0 and / or 1) are taken over to the appropriate parameter.
Hex | Dec | Name | Description
30h | 48 | CMD_Curr | Command device - data 0 is taken over as desired value in current control mode; CURR_DesiredValue
31h | 49 | CMD_Vel | Command device - data 0 is taken over as velocity desired value in velocity mode and position mode; VEL_DesiredValue
33h | 51 | CMD_Mova | Command device - data 1 is taken over as absolute target position. It starts the movement to an absolute position.; POS_Mova Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate thehoming method (unequal to zero) a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control statusbit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Command device - data 1 is taken over as relative target position. It starts the movement to an relative position (relative to actual command position).; POS_Movr You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) in parameter Command device - data 0 - take over new parameters for the movement (Vel, Acc, Dec) with command 36h

Ramp commands:
Hex | Dec | Name | Description
40h | 64 | CMD_Acc | In current mode: - command device - data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) - command device - data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode: - command device - data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) - command device - data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode: - command device - data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) - command device - data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode: - command device - data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) - command device - data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode: - command device - data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) - command device - data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode: - command device - data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) - command device - data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Homing commands:
To execute a homing, the controller has to be in positioning mode.
Hex | Dec | Name | Description
50h | 80 | CMD_HOME_None | No operation
51h | 81 | CMD_HOME_Start | Starts the homing. The bit STAT_HomingDone (DEV_Status) is reseted. The method for the homing is defined in parameter POS_HomingMethod.
52h | 82 | CMD_HOME_Break | Cancels an active homing.
53h | 83 | CMD_HOME_Halt | Interrupts an active homing.
54h | 84 | CMD_HOME_Restart | Restarts a homing after break.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.

Composite comands:
Using these commands it is possible to initiate the sequence of commands with the aid of one command.
The sequence of commands can be parametrized in parameter 3014.xxh (EventOnUserCmd).
Hex | Dec | Name | Description
71h | 113 | CMD_UserCmd1 | Parameter 3014.11h - 3014.14h; Default value: CMD_Quickstop, CMD_Disable, 0, 0
72h | 114 | CMD_UserCmd2 | Parameter 3014.21h - 3014.24h; Default value: CMD_Halt, CMD_Disable, 0, 0
74h | 116 | CMD_UserCmd4 | Parameter 3014.41h - 3014.44h; Default value: CMD_ModeVel, CMD_Enable, CMD_Vel, 0
76h | 118 | CMD_UserCmd6 | Parameter 3014.61h - 3014.64h; Default value: CMD_ModePos, CMD_Enable, CMD_Mova, 0
77h | 119 | CMD_UserCmd7 | Parameter 3014.71h - 3014.74h; Default value: CMD_ModePos, CMD_Enable, CMD_Movr, 0
78h | 120 | CMD_UserCmd8 | Parameter 3014.81h - 3014.84h; Default value: CMD_ModePos, CMD_Enable, CMD_HOME_Start, 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                               # NodeId = 1

#----------------------------------------------------------------------------------------------------
# init
d.SdoWr(0x3000, 0x01, 0)                                 # DEV_Cmd_ExecOnChange - no operation (toggelcommand)
d.SdoWr(0x3000, 0x01, 1)                                 # DEV_Cmd_ExecOnChange - clear error

#----------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                 # IO_DOUT_P0 - open brake (just in case)
d.SdoWr(0x3000, 0x11, 0)                                 # DEV_CmdData1 - command data 1 = 0
d.SdoWr(0x3000, 0x01, 0x58)                              # DEV_Cmd_ExecOnChange - set position

for i in range(5):                                       # 5 times
   d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0 - command data 0 = 1000 r/min
   d.SdoWr(0x3000, 0x11, 1000)                           # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x01, 0x77)                           # DEV_Cmd_ExecOnChange - relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

   #d.SdoWr(0x3000, 0x10, 1000)                          # DEV_CmdData0 - command data 0 = 1000 r/min
   #d.SdoWr(0x3000, 0x11, 1000)                          # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x01, 0xF7)                           # DEV_Cmd_ExecOnChange - new relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

d.SdoWr(0x3150, 0x00, 0)                                 # IO_DOUT_P0 - close brake (just in case)

d.SdoWr(0x3000, 0x01, 0x20)                              # DEV_Cmd_ExecOnChange - disable


3000.02h Device command 2

Name | DEV_Cmd2
Designation | Device command 2
Data type | uint8
Access | read / write
Attributs | -
Value range | {0h, 1h, 2h, 3h, 4h, 5h, 10h, 13h, 17h, 20h, 21h, 28h, 29h, 2Ah, 30h, 31h, 33h, 34h, 36h, 40h, 41h, 42h, 50h, 51h, 52h, 53h, 54h, 58h, 71h, 72h, 74h, 76h, 77h, 78h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.89.00.BD
Devices | All
PLC Function | -
Cross reference | DEV_CmdResult, DEV_CmdData0, DEV_CmdData1, DEV_CmdData2, DEV_Status, DEV_CmdCounter, DEV_Event1_OnUserCmd1

Description

A device command is always executed if a value is written in this parameter.

This parameter behaves like DEV_Cmd_ExecOnChange, with the difference that no Change is needed to exxecute the command. Therefore use this parameter with caution. Unwanted behavior could be possible if i.e. PDOs execute a command more than once in a short periode of time.

Device command:
Hex | Dec | Name | Description
00h | 0 | CMD_Nop | No operation
01h | 1 | CMD_ClearError | Potential errors in the error register (DEV_ErrorReg) are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist).
02h | 2 | CMD_QuickStop | Executes a QuickStop. The motor stops using the QuickStop-Deceleration (VEL_Dec_QuickStop_dV / VEL_Dec_QuickStop_dT).
03h | 3 | CMD_Halt | Executes a Halt. The motor stops using the general deceleration (VEL_Dec_dV / VEL_Dec_dT).
04h | 4 | CMD_Continue | Continues the movement after QuickStop or Halt. Attention: You must run this command after QuickStop or Halt, if you want to continue the movement. Otherwise, the MCU will not accept new set values -> The motor remains in the Stop-Mode.
05h | 5 | CMD_Update | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. This can be done with the following commands: - set new velocity (desired value) with command 31h - take over new parameters for the movement (Vel, Acc, Dec) with command 05h

Operation mode of the device controller:
Hex | Dec | Name | Description
10h | 16 | CMD_ModeOff | Power stage and controller are switched off.
13h | 19 | CMD_ModeVel | Velocity mode
17h | 23 | CMD_ModePos | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)

Power enable:
Hex | Dec | Name | Description
20h | 32 | CMD_Disable | Disables power stage and controller
21h | 33 | CMD_Enable | Enables power stage and controller

SDO communication and QuickCommand-Mapping:
Hex Dec Name Description
28h 40 CMD_Sp Sets the value of any parameter in the device. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be set
- Command data 1 (DEV_CmdData1) - Contains the value of the parameter which will be set
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be set
- Command result (DEV_CmdResult) - Contains the error code in case of an error

This command is available starting with the firmware version 1.89.00.44.
29h 41 CMD_Gp Reads the actual value of any parameter from the device. The value is returned in the parameter DEV_CmdResult. In case of any error, the parameter DEV_CmdResult contains the error code.

Command data:
- Command data 0 (DEV_CmdData0) - Contains the index of the parameter which will be read
- Command data 2 (DEV_CmdData2) - Contains the subindex of the parameter which will be read
- Command result (DEV_CmdResult) - Contains the value of the read parameter or in case of an error the error code

This command is available starting with the firmware version 1.89.00.44.
2Ah 42 CMD_SetQcMapping Sets the "Quick Command" Mapping. At the same time the RxPDO1 and TxPDO1 are reconfigured.

Mapping for "Quick Command":
RxPDO1 (8 Byte):
- 1600.1h = 30002010h -> Object: 3000.20h (DEV_CmdData0_i16) 16 bits
- 1600.2h = 30001208h -> Object: 3000.12h (DEV_CmdData2) 8 bits
- 1600.3h = 30001120h -> Object: 3000.11h (DEV_CmdData1) 32 bits
- 1600.4h = 30000108h -> Object: 3000.01h (DEV_Cmd_ExecOnChange) 8 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |    CmdData0     |CmdData2|             CmdData1              | Dev.Cmd|  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits        8Bits                 32Bits                 8Bits MSB

TxPDO1 (8 Byte):
- 1A00.1h = 30020010h -> Object: 3002.00h (DEV_Status) 16 bits
- 1A00.2h = 30010010h -> Object: 3001.00h (DEV_ErrorReg) 16 bits
- 1A00.3h = 30007020h -> Object: 3000.70h (DEV_CmdResult) 32 bits

  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   B0   |   B1   |   B2   |   B3   |   B4   |   B5   |   B6   |   B7   |  <- Byte number of PDO
  +--------+--------+--------+--------+--------+--------+--------+--------+
  |   Status reg.   |    Error reg.   |            CmdResult0             |  <- Contents
  +--------+--------+--------+--------+--------+--------+--------+--------+
 LSB    16Bits            16Bits                     32Bits              MSB

This command is available starting with the firmware version 1.89.00.44.

Desired value (Device command - data 0 and data 1):
First desired values have to be written in parameters Device command - data 0 and 1 (DEV_CmdData0, 3000.10h/ DEV_CmdData1, 3000.11h)
Use one of the following commands causes that data (0 and / or 1) are taken over to the appropriate parameter.
Hex | Dec | Name | Description
30h | 48 | CMD_Curr | Sets the desired current (CURR_DesiredValue) for the current control mode. Command data: - Command data 0 (DEV_CmdData0) - desired current (CURR_DesiredValue)
31h | 49 | CMD_Vel | Sets the desired velocity value (VEL_DesiredValue) for the velocity control mode and position mode. Command data: - Command data 0 (DEV_CmdData0) - velocity desired value (VEL_DesiredValue)
33h | 51 | CMD_Mova | Starts the movement to an absolute position (POS_Mova). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Mova) Attention: Demand velocity has to be set in parameter Command device - data 0 If you activate the homing method (unequal to zero), a homing has to be done successfully before a positioning command CMD_Mova is accepted.(command 51h CMD_Homing_Start); control status bit 7 STAT_HomingDone (DEV_Status, 3002.00h)
34h | 52 | CMD_Movr | Starts the movement to an relative position (POS_Movr, relative to actual command position). You can set the parameter to a new position during movement (bit 7 toggle - see above). This is called "on-the-fly" change of a movement. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) - Command data 1 (DEV_CmdData1) - absolute target position (POS_Movr, relative to actual command position) Attention: Demand velocity has to be set in parameter Command device - data 0 If you want to update demand velocity, use command 36h.
36h | 54 | CMD_MovUpdate | Updates set values. This command is needed e.g. in the following case: Within the position mode there was a relative movement selected. Before reaching the target position, a new velocity is desired. Command data: - Command data 0 (DEV_CmdData0) - desired velocity value (VEL_DesiredValue) Attention: The difference to Command 05h (CMD_Update) is, that Command 36h (CMD_MovUpdate) overwrites the desired velocity value with the value from Command data 0.

Ramp commands:
Hex | Dec | Name | Description
40h | 64 | CMD_Acc | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current acceleration - delta I (CURR_Acc_dI) - Command data 1 (DEV_CmdData1) is taken over as current acceleration - delta T (CURR_Acc_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity acceleration - delta V (VEL_Acc_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity acceleration - delta T VEL_Acc_dT) This command is available starting with the firmware version 1.85.03.32.
41h | 65 | CMD_Dec | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current deceleration - delta I (CURR_Dec_dI) - Command data 1 (DEV_CmdData1) is taken over as current deceleration - delta T (CURR_Dec_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity deceleration - delta V (VEL_Dec_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity deceleration - delta T (VEL_Dec_dT) This command is available starting with the firmware version 1.85.03.32.
42h | 66 | CMD_Dec_QuickStop | In current mode: - Command data 0 (DEV_CmdData0) is taken over as current quick-stop deceleration - delta I (CURR_Dec_QuickStop_dI) - Command data 1 (DEV_CmdData1) is taken over as current quick-stop deceleration - delta T (CURR_Dec_QuickStop_dT) In velocity and position mode: - Command data 0 (DEV_CmdData0) is taken over as velocity quick stop deceleration - delta V (VEL_Dec_QuickStop_dV) - Command data 1 (DEV_CmdData1) is taken over as velocity quick stop deceleration - delta T (VEL_Dec_QuickStop_dT) This command is available starting with the firmware version 1.85.03.32.

Homing commands:
To execute a homing, the controller has to be in positioning mode.
Hex | Dec | Name | Description
50h | 80 | CMD_HOME_None | No operation
51h | 81 | CMD_HOME_Start | Starts the homing. The bit STAT_HomingDone (DEV_Status) is reseted. The method for the homing is defined in parameter POS_HomingMethod.
52h | 82 | CMD_HOME_Break | Cancels an active homing.
53h | 83 | CMD_HOME_Halt | Interrupts an active homing.
54h | 84 | CMD_HOME_Restart | Restarts a homing after break.
58h | 88 | CMD_HOME_SetPos | Sets current position as device command - data 1 (DEV_CmdData1, 3000.11h). At the same time Statusbit 7 / STAT_HomingDone (DEV_Status, 3002.00h) is set.

Composite comands:
Using these commands it is possible to initiate the sequence of commands with the aid of one command.
The sequence of commands can be parametrized in parameter 3014.xxh (EventOnUserCmd).
Hex | Dec | Name | Description
71h | 113 | CMD_UserCmd1 | Parameter 3014.11h - 3014.14h; Default value: CMD_Quickstop, CMD_Disable, 0, 0
72h | 114 | CMD_UserCmd2 | Parameter 3014.21h - 3014.24h; Default value: CMD_Halt, CMD_Disable, 0, 0
73h | 115 | CMD_UserCmd3 | Parameter 3014.31h - 3014.34h; Default value: CMD_ModeCurr, CMD_Enable, CMD_Curr, 0
74h | 116 | CMD_UserCmd4 | Parameter 3014.41h - 3014.44h; Default value: CMD_ModeVel, CMD_Enable, CMD_Vel, 0
75h | 117 | CMD_UserCmd5 | Parameter 3014.51h - 3014.54h; Default value: CMD_ModeSVel, CMD_Enable, CMD_SVel, 0
76h | 118 | CMD_UserCmd6 | Parameter 3014.61h - 3014.64h; Default value: CMD_ModePos, CMD_Enable, CMD_Mova, 0
77h | 119 | CMD_UserCmd7 | Parameter 3014.71h - 3014.74h; Default value: CMD_ModePos, CMD_Enable, CMD_Movr, 0
78h | 120 | CMD_UserCmd8 | Parameter 3014.81h - 3014.84h; Default value: CMD_ModePos, CMD_Enable, CMD_HOME_Start, 0

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                                               # NodeId = 1

#----------------------------------------------------------------------------------------------------
# init
d.SdoWr(0x3000, 0x02, 1)                                 # DEV_Cmd2 - clear error

#----------------------------------------------------------------------------------------------------
# Start of testprogram

d.SdoWr(0x3150, 0x00, 1)                                 # IO_DOUT_P0 - open brake (just in case)
d.SdoWr(0x3000, 0x11, 0)                                 # DEV_CmdData1 - command data 1 = 0
d.SdoWr(0x3000, 0x02, 0x58)                              # DEV_Cmd2 - set position

for i in range(5):                                       # 5 times
   d.SdoWr(0x3000, 0x10, 1000)                           # DEV_CmdData0 - command data 0 = 1000 r/min
   d.SdoWr(0x3000, 0x11, 1000)                           # DEV_CmdData1 - command data 1 = 1000 counts
   d.SdoWr(0x3000, 0x02, 0x77)                           # DEV_Cmd2 - relative positioning

   while (d.SdoRd(0x3002, 0x00) & 0x10==0):              # DEV_Status - wait for STAT_Reached
      time.sleep(0.1)                                    # every 100 ms

   print i,"actual position =", d.SdoRd(0x3762, 0x00)    # POS_ActualPosition - read actual position

d.SdoWr(0x3150, 0x00, 0)                                 # IO_DOUT_P0 - close brake (just in case)

d.SdoWr(0x3000, 0x02, 0x20)                              # DEV_Cmd22 - disable


3003.00h Device mode

Name | DEV_Mode
Designation | Device mode
Data type | uint8
Access | read / write
Attributs | Save
Value range | {0, 3, 7}
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Mode(value)
Cross reference | -

Description

This parameter defines the operation mode of the device controller.

Parameter values:
Value | Name | PLC Function | Description
0 | MODE_OFF | ModeOff() | Power stage and controller are switched off.
3 | MODE_Vel | ModeVel() | Velocity mode
7 | MODE_Pos | ModePos() | Position mode This mode uses partially the parameter of the velocity controller. (Parameter range 3300h-33FFh)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3003, 0x00, 7)      # Device mode = position controller
print d.SdoRd(0x3003, 0x00)   # Show the actual device mode


Content - Parameters 3000h (DSA) - Digital inputs

3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1


3154.00h Enable digital outputs

Name | IO_DOUT_Enable
Designation | Enable digital outputs
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.85.00.08
Devices | All
PLC Function | -
Cross reference | DEV_DoutError, IO_DOUT_P0, MOTOR_BrakeManagement_Config

Description

With the help of this parameter digital outputs can be locked or unlocked.

This is only valid for the parameter 3150.00h (IO_DOUT_P0), the firmware itself can set the outputs
furthermore.

The lock prevents that the state of the digital output is changed accidentally or unjustified, when the output is already used by internal functions of the firmware (e.g. brake management, error output, etc.).

The amount of digital outputs, which are available, depends on the device (see technical data of the device).

Bit assignment:
Bit-Nr. | Meaning
0 | digital output 0 (=1 enable, =0 disable)
1 | digital output 1 (=1 enable, =0 disable)
2 | digital output 2 (=1 enable, =0 disable)
3 | digital output 3 (=1 enable, =0 disable)
4 | digital output 4 (=1 enable, =0 disable)
5 | digital output 5 (=1 enable, =0 disable)
6 | digital output 6 (=1 enable, =0 disable)
7 | digital output 7 (=1 enable, =0 disable)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# enable digital output of Port0 with bitmask
set_dout = 0x02             # set only bit 1 (dout1)
d_out = (d.SdoRd(0x3154, 0x00) | set_dout)
d.SdoWr(0x3154, 0x00, d_out)

# disable digital output of Port0 with bitmask
reset_dout = 0x01          # reset only bit 0 (dout0)
d_out = (d.SdoRd(0x3154, 0x00) & ~reset_dout)
d.SdoWr(0x3154, 0x00, d_out)

# print the digital output of Port0
print "enable_Dout =", hex(d.SdoRd(0x3154, 0x00))


Content - Parameters 3000h (DSA) - Stromsollwert

3200.00h | CURR_DesiredValue | Current - desired value
3200.01h | CURR_DesiredValue_Stop | Current - desired value - stop
3200.02h | CURR_DesiredValue_AccPos | Current - desired value - positive acceleration
3200.03h | CURR_DesiredValue_ConstPos | Current - desired value - constant velocity in positive direction
3200.04h | CURR_DesiredValue_DecPos | Current - desired value - decceleration in positive direction
3200.05h | CURR_DesiredValue_AccNeg | Current - desired value - acceleration in negative direction
3200.06h | CURR_DesiredValue_ConstNeg | Current - desired value - constant velocity in negative direction
3200.07h | CURR_DesiredValue_DecNeg | Current - desired value - decceleration in negative direction


3200.00h Current - desired value

Name | CURR_DesiredValue
Designation | Current - desired value
Data type | int32
Access | read / write
Attributs | Save
Value range | [-2147483648 .. 2147483647] The peak Value depends on the device (see technical data)
Default value | 0
Unit | [mA]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Curr(value)
Cross reference | CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

This parameter sets the digital desired value of the current.

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

This function is maybe helpful to optimize following applications:
  • vertical axes
  • palettisation with different loads per transport direction
  • ....

Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]


3200.01h Current - desired value - stop

Name | CURR_DesiredValue_Stop
Designation | Current - desired value - stop
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.02h Current - desired value - positive acceleration

Name | CURR_DesiredValue_AccPos
Designation | Current - desired value - positive acceleration
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_ConstPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.03h Current - desired value - constant velocity in positive direction

Name | CURR_DesiredValue_ConstPos
Designation | Current - desired value - constant velocity in positive direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.04h Current - desired value - decceleration in positive direction

Name | CURR_DesiredValue_DecPos
Designation | Current - desired value - decceleration in positive direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.05h Current - desired value - acceleration in negative direction

Name | CURR_DesiredValue_AccNeg
Designation | Current - desired value - acceleration in negative direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.06h Current - desired value - constant velocity in negative direction

Name | CURR_DesiredValue_ConstNeg
Designation | Current - desired value - constant velocity in negative direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstPos, CURR_DesiredValue_DecNeg

Description

Using the subindices 1...7 the desired value of the current can be set for each section of a movement (stop, acceleration, constant velocity, deceleration) differently. The values CURR_DesiredValue_Xxxx (subindex 1..7) are specified in [%] (percent) of the CURR_DesiredValue (subindex 0).

The value is only active, if parameter CURR_DesiredValue_Source was set to 3200h (CURR_DesiredValue) . Otherwise, this parameter has no effect.

The desired current value can be influenced at the following states:
Subindex | Name | Unit | Description
0 | CURR_DesiredValue | [A] | Desired value of the current - basis
1 | CURR_DesiredValue_Stop | [%] | Desired value of the current - stop
2 | CURR_DesiredValue_AccPos | [%] | Desired value of the current - acceleration in positive direction
3 | CURR_DesiredValue_ConstPos | [%] | Desired value of the current - constant velocity in positive direction
4 | CURR_DesiredValue_DecPos | [%] | Desired value of the current - deceleration in positive direction
5 | CURR_DesiredValue_AccNeg | [%] | Desired value of the current - acceleration in negative direction
6 | CURR_DesiredValue_ConstNeg | [%] | Desired value of the current - constant velocity in negative direction
7 | CURR_DesiredValue_DecNeg | [%] | Desired value of the current - deceleration in negative direction
Velocity profil for the different sections

The following rules apply to the parameters:

Using CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_ConstPos, CURR_DesiredValue _DecPos:

Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue
Using CURR_DesiredValue_AccNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_AccPos
Using CURR_DesiredValue_ConstNeg:
Parameter value | Result
x = 0..1000 | CURR_DesiredValue * x / 100
0xFFFF | CURR_DesiredValue_ConstPos
Using CURR_DesiredValue_DecNeg:
Parameter value | Result
x = 0..1000 | VEL_Kp * x / 100
0xFFFF | VEL_Kp_DecPos

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


3200.07h Current - desired value - decceleration in negative direction

Name | CURR_DesiredValue_DecNeg
Designation | Current - desired value - decceleration in negative direction
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 65535
Unit | [%]
Operating mode | All
Available since | 1.89.00.D6
Devices | All
PLC Function | -
Cross reference | CURR_DesiredValue, CURR_DesiredValue_Stop, CURR_DesiredValue_AccPos, CURR_DesiredValue_DecPos, CURR_DesiredValue_AccNeg, CURR_DesiredValue_ConstNeg, CURR_DesiredValue_ConstPos

Description

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

print "Curr =", d.SdoRd(0x3200, 0x00), "[mA]"   # print the actual current desired value
d.SdoWr(0x3200, 0x00, 100)                      # Current desired value = 100 [mA]
d.SdoWr(0x3200, 0x01, 50)                       # Set Current desired value to 50% in standstill


Content - Parameters 3000h (DSA) - PI CURR controller

3210.00h | CURR_Kp | PI-Current controller - proportional factor
3211.00h | CURR_Ki | PI-Current controller - integral factor
3214.00h | CURR_Kvff | PI-Current controller - velocity feed forward
3215.00h | CURR_Kaff | PI-Current controller - acceleration feed forward
3219.00h | CURR_Pid_FactorNum | PI-Current controller - factor numerator
3219.01h | CURR_Pid_FactorDen | PI-Current controller - factor denominator


3214.00h PI-Current controller - velocity feed forward

Name | CURR_Kvff
Designation | PI-Current controller - velocity feed forward
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 2000]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.87.00.15
Devices | All
PLC Function | -
Cross reference | CURR_Kp, CURR_Ki, CURR_Kaff

Description

The parameter CURR_Kvff defines the velocity feed-forward of the current controller.
It compensates the EMF of the motor.

In general a controller alone only generates an output value if the error ( = desired value - actual value) is unequal 0.
That means, if no feed forward is set, the error is almost never zero.
It is possible to adjust the dynamic properties of a controller with the help of an integral factor, but:
  • the integral factor leads to over-regulation (instability of the system)
  • since an error is necessary, the system reacts with a delay.
Only if the feed forward is set correctly, the error can be minimized in each phase of movement.
Using a feed forward, no error is required to get a constant movement.
In this case the controller only corrects differences that occur because of non-ideal behavior of the system.

This parameter is available starting with the firmware version 1.87.00.15
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

print "CurrKvff =", d.SdoRd(0x3214, 0x00) # CURR_Kvff - print Current controller-Kvff
print "CurrKaff =", d.SdoRd(0x3215, 0x00) # CURR_Kaff - print Current controller-Kaff

d.SdoWr(0x3214, 0x00, 100)                # CURR_Kvff - set Current controller-Kvff
d.SdoWr(0x3215, 0x00, 10)                 # CURR_Kaff - set Current controller-Kaff


3215.00h PI-Current controller - acceleration feed forward

Name | CURR_Kaff
Designation | PI-Current controller - acceleration feed forward
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 100000]
Default value | 0
Unit | -
Operating mode | All
Available since | 1.87.00.15
Devices | All
PLC Function | -
Cross reference | CURR_Kp, CURR_Ki, CURR_Kvff

Description

The parameter CURR_Kaff defines the acceleration feed-forward of the current controller.
It compensates the resistance of the motor winding.

In general a controller alone only generates an output value if the error ( = desired value - actual value) is unequal 0.
That means, if no feed forward is set, the error is almost never zero.
It is possible to adjust the dynamic properties of a controller with the help of an integral factor, but:
  • the integral factor leads to over-regulation (instability of the system)
  • since an error is necessary, the system reacts with a delay.
Only if the feed forward is set correctly, the error can be minimized in each phase of movement.
Using a feed forward, no error is required to get a constant movement.
In this case the controller only corrects differences that occur because of non-ideal behavior of the system.

This parameter is available starting with the firmware version 1.87.00.15
ATTENTION

 You must be very careful changing this parameter. If the control is instable (most of time when the PI-parameter are too large) the current can rise without control and jerkily. This can become dangerous for people. Also, it is possible that the motor and/or the mechanics can be destroyed!

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                              # NodeId = 1

print "CurrKvff =", d.SdoRd(0x3214, 0x00) # CURR_Kvff - print Current controller-Kvff
print "CurrKaff =", d.SdoRd(0x3215, 0x00) # CURR_Kaff - print Current controller-Kaff

d.SdoWr(0x3214, 0x00, 100)                # CURR_Kvff - set Current controller-Kvff
d.SdoWr(0x3215, 0x00, 10)                 # CURR_Kaff - set Current controller-Kaff


3350.00h Velocity feedback

Name | VEL_Feedback
Designation | Velocity feedback
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {0h, 100h, 112h, 94Ah, 96Ah, 97Ah, 990h, 991h, 96A20h}
Default value | 0h
Unit | -
Operating mode | Velocity
Available since | 1.00.00.00
Devices | All
PLC Function | VelFeedback(value), VelFeedbackAuto(), VelFeedbackEnc()
Cross reference | MOTOR_ENC_Resolution

Description

This parameter defines the source of the feedback of the velocity and the positioning controller.
Not every feedback can be used for every type of motor. The hall feedback can only be applied to brushless motors. If you have a controller with encoder input you can use the encoder feedback for both motor types.

Remarks:
  • If you want to change this parameter the controller has to be disabled (DEV_Enable = 0). Otherwise the changes are not accepted or they have no effect.
  • This parameter defines the feedback for the positioning controller, also. Therefore, in positioning mode you have to set this parameter to 0x96A (MOTOR_ENC_ActualPosition) if you have a brush type motor with encoder.
Parameter values:
Values (Hex) | Name | Description
0 | Default | Brush type motors - emf feedback Brushless motors - hall feedback
0100h | IO_AIN0 | Feedback through the analogue input 0 (DC-motors only)
0112h | IO_AIN_VOLTAGE_Um | EMF feedback
094Ah | MOTOR_HALL_ActualPosition | Hall feedback (brushless motors only)
096Ah | MOTOR_ENC_ActualPosition | Encoder feedback
096A20h | MOTOR_ENC_INC2_ActualPosition | SPI Encoder feedback Caution: Only drive controllers with SPI-Interface
097Ah | MOTOR_ENC_SSI_ActualPosition | Absolute encoder feedback Caution: Only drive controllers with SSI-Interface
0990h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 0 feedback
0991h | MOTOR_ENC_VIRT_ActualPosition | Virtual Encoder 1 feedback

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                       # NodeId = 1

d.Disable()                      # DEV_Enable - disable

print "VelFeedback =", hex(d.SdoRd(0x3350, 0x00)) # VEL_Feedback

d.SdoWr(0x3350, 0x00, 0x096A)    # VEL_Feedback - encoder feedback
d.SdoWr(0x3003, 0x00, 3)         # DEV_Mode - velocity mode
d.SdoWr(0x3300, 0x00, 0)         # VEL_DesiredValue - velocity = 0


373C.00h Position reached - config bits

Name | POS_ReachedConfigFlags
Designation | Position reached - config bits
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0h .. FFFFh]
Default value | 0h
Unit | -
Operating mode | Position
Available since | 1.71.01.11
Devices | All
PLC Function | PosReachedConfigFlags(value)
Cross reference | DEV_Status

Description

With these bits you can configure the behavior of the bit "STAT_Reached" (a bit of the DEV_Status) in position mode.

Terms:
    TrgPos - target position
    CmdPos - command position (position after the ramp generator)

Functioning of the bit "STAT_Reached":

If all bits in this parameter are set to 0, and POS_PositionWindow and POS_PositionWindowTime are not activated, then the bit "STAT_Reached" is set when the ramp generator (VEL_RampState) is in IDLE state (standstill).
A different behavior can be achieved with the following parameter values:

Parameter values:
Bit | Name | Description
0 | FLAG_SetOnlyIfTargetPosValid | If this bit == 1, the bit "STAT_Reached" will only be set after an enable-command, if a valid positioning command was executed.
1 | FLAG_SetOnlyIfTargetPosReached | If this bit == 1, the bit "STAT_Reached" will only be set if the command position is equal to the target position. This bit is only important, if the bit "STAT_Reached" is set by the ramp generator. That means, POS_PositionWindow and POS_PositionWindowTime are not activated.
2 | FLAG_NotSetTrgPosAfterHalt | If this bit == 1, the target position will not be set to the command position after a Halt-command. Hint: If the bit "STAT_Reached" should not be set after a Halt-command, the bits "FLAG_SetOnlyIfTargetPosReached" and "FLAG_NotSetTrgPosAfterHalt" must be set.
3 | FLAG_NotSetTrgPosAfterQuickStop | If this bit == 1, the target position will not be set to the command position after a QuickStop-command. Hint: If the bit "STAT_Reached" should not be set after a QuickStop-command, the bits "FLAG_SetOnlyIfTargetPosReached" and "FLAG_NotSetTrgPosAfterQuickStop" must be set.
4 | FLAG_SetTrgPosOnEnable | If this bit == 1, the target position will be set to the command position after an enable-command.
5 | FLAG_CheckTargetPosReachedTimeoutAfterEnable | If this bit == 1, the time guarding (POS_PositionWindowTimeout), whether the target position was reached or not, is started right after an enable-command. Otherwise it starts after the first positioning command.
6-15 | Reserved | Reserved for functions in future. These bits must be set to 0.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                         # NodeId = 1

# read actual parameters
print "POS_ReachedConfigFlag =", hex(d.SdoRd(0x373C, 0x00))  # POS_ReachedConfigFlags

# set new parameters
d.SdoWr(0x373C, 0x00, 0x0)                                   # POS_ReachedConfigFlags


373D.00h Position window - disable amplifier

Name | POS_DeadWindowOff
Designation | Position window - disable amplifier
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [counts]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOn

Description

This parameter can disable the amplifier when it reaches the target and stays for a defined time in a defined window around the target. This can save energy and reduces thermal strain of the amplifier and the motor.

The position windows is symmetrically around the position target. As soon as the bit STAT_Reached (desired value was reached) in the status register (DEV_Status) is set and the actual position is within the defined window (POS_DeadWindowOff) the timer (POS_DeadTimeOff) starts running. If the timer has expired the amplifier will automatically disable the motor.

Parameter values:
Value | Description
<FFFFFFFFh | Window width
=FFFFFFFh | Function deactivated.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373D.01h Position window - enable amplifier

Name | POS_DeadWindowOn
Designation | Position window - enable amplifier
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 4294967295
Unit | [counts]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadWindowOff

Description

This parameter can enable the amplifier, if it unintentionally leaves a defined window around the target position for a certain time and move it back to the target position.

The position windows is symmetrically around the position target. When the actual position is outside the defined window (POS_DeadWindowOn) the timer (POS_DeadTimeOn) starts running. As soon as the timer expires the amplifier will be automatically enabled and the motor moves to the last target position.

Parameter values:
Value | Description
<FFFFFFFFh | Window width
=FFFFFFFh | Function deactivated.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373E.00h Position window time - disable amplifier

Name | POS_DeadTimeOff
Designation | Position window time - disable amplifier
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadTimeOn

Description

When the timer (POS_DeadTimeOff) expires the amplifier will be automatically disabled. The timer starts running as soon as the bit STAT_Reached of the status register (DEV_Status) is set and the motor is inside the window POS_DeadWindowOff.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


373E.01h Position window time - enable amplifier

Name | POS_DeadTimeOn
Designation | Position window time - enable amplifier
Data type | uint16
Access | read / write
Attributs | Save
Value range | [0 .. 65535]
Default value | 0
Unit | [ms]
Operating mode | Position
Available since | 1.87.00.18
Devices | All
PLC Function | -
Cross reference | POS_DeadTimeOff

Description

When the timer (POS_DeadTimeOn) expires the amplifier will be automatically enabled and the motor moves to the last target position. The timer starts running when the actual position is outside the defined window (POS_DeadWindowOn).

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                         # NodeId = 1

d.SdoWr(0x3004, 0x00, 0)           # DEV_Enable - disable
d.SdoWr(0x3003, 0x00, 7)           # Betriebsart = POS Mode

d.SdoWr(0x373A, 0x00, 200)         # POS_PositionWindow - 200 inc
d.SdoWr(0x373B, 0x00, 150)         # POS_PositionWindowTime - 150 ms
# --> after 150 ms in targetarea(+- 200 inc) -> STAT_Reached = 1

d.SdoWr(0x373D, 0x00, 1000)        # POS_DeadWindowOff - 1000 inc
d.SdoWr(0x373E, 0x00, 100)         # POS_DeadTimeOff - 100 ms
# --> after 100 ms, if STAT_Reached = 1
#     and in DeadWindowOff -> disable

d.SdoWr(0x373D, 0x01, 2000)        # POS_DeadWindowOn  - 2000 inc
d.SdoWr(0x373E, 0x01, 200)         # POS_DeadTimeOn - 200 ms
# --> after 200 ms outside DeadWindowOn -> enable

d.SdoWr(0x373F, 0x00, 10)          # POS_DeadVel - 10 rpm
# --> moves with 10 rpm to target position if DeadWindowOn get enabled

d.SdoWr(0x3762, 0x00, 0)           # POS_ActualPosition - 0
d.SdoWr(0x3004, 0x00, 1)           # DEV_Enable - enable

d.SdoWr(0x3000, 0x10, 100)         # DEV_CmdData0 - 100 rpm
d.SdoWr(0x3000, 0x11, 6000)        # DEV_CmdData1 - 6000 ink
d.SdoWr(0x3000, 0x01, 0)           # DEV_Cmd_ExecOnChange - Toggle command
d.SdoWr(0x3000, 0x01, 0x33)        # DEV_Cmd_ExecOnChange - MovA

while 1:
   Status = d.SdoRd(0x3002, 0x00)  # DEV_Status
   if (Status & 0x10) == 0x10:     # STAT_Reached == 1
      print "target reached"       # target reached
      break                        # end loop


3830.00h PWM frequency

Name | PWM_Frequency
Designation | PWM frequency
Data type | uint32
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {12500, 25000, 32000, 50000}
Default value | 25000
Unit | -
Operating mode | All
Available since | 1.71.01.07
Devices | All
PLC Function | PwmFreq(value)
Cross reference | -

Description

Using this parameter you can set the PWM frequency.

A PWM-frequency of 200 kHz is only possible for the device EDC-E65 and EDC-E65-M.

Attention
The lower the PWM-frequency and the inductance of the motor, the warmer (higher losses) becomes the motor in still stand.

Example

# -*- coding: iso-8859-1 -*-
   from mc.dsa import *

   d = Dsa(1)

   # read actual parameters
   print "PWM frequency: ", d.SdoRd(0x3830, 0x00)  # PWM_Frequency
   print "PWM mode: ", d.SdoRd(0x3830, 0x01)       # PWM_Mode

   # write new parameters
   d.SdoWr(0x3830, 0x00, 25000)                    # PWM_Frequency
   d.SdoWr(0x3830, 0x01, 1)                        # PWM_Mode


3900.00h Motor type

Name | MOTOR_Type
Designation | Motor type
Data type | uint8
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {2}
Default value | 2
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | MotorType(value)
Cross reference | DEV_Enable

Description

Using this parameter you can get and set the motor type.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.
  • If the controller is integrated in the motor the parameter can not be changed.

Value (Hex) | Description
2 | Stepper motor

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3910.00h Motor pole number

Name | MOTOR_PolN
Designation | Motor pole number
Data type | uint16
Access | read / write
Attributs | Save
Value range | [1 .. 1000]
Default value | 200
Unit | -
Operating mode | Velocity,Position
Available since | 1.00.00.00
Devices | All
PLC Function | MotorPolN(value)
Cross reference | MOTOR_Type

Description

The parameter defines the effective number of poles of the motor. The value determines the number of pulses per one revolution of the motor shaft.

This parameter corresponds to the number of full steps per revolution of a motor shaft.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


3910.01h Microsteps

Name | MOTOR_Microsteps
Designation | Microsteps
Data type | uint16
Access | read / write
Attributs | Save; Changeable only in disabled state
Value range | {1, 2, 4, 8, 16, 32, 64, 128, 256}
Default value | 256
Unit | -
Operating mode | All
Available since | 1.85.03.48
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter determines the number of microsteps for the operation of the stepper motor.

The unit of position (target position, actual position) is microstep.
E.g. The parameters MOTOR_Microsteps=256 and MOTOR_PolN=200 result 51200 microsteps (increments) pro one revolution of motor shaft.

Remarks:
  • You can change this parameter only if the controller is disabled (DEV_Enable = 0) otherwise the changes will not be accepted, respectively they have no effect.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId = 1

# init
d.SdoWr(0x3004, 0x00, 0)                  # DEV_Enable - Sperren
d.SdoWr(0x3000, 0x00, 1)                  # DEV_Cmd - Fehler löschen
d.SdoWr(0x3000, 0x00, 0x82)               # DEV_Cmd - Defaultparameter

# write new parameters
d.SdoWr(0x3900, 0x00, 1)                  # MOTOR_Type - BLDC
d.SdoWr(0x3901, 0x00, 3000)               # MOTOR_Nn
d.SdoWr(0x3902, 0x00, 24000)              # MOTOR_Un

d.SdoWr(0x3911, 0x00, 0)                  # MOTOR_Polarity
d.SdoWr(0x3910, 0x00, 10)                 # MOTOR_PolN


Content - Parameters 6000h (DSP402)

6007.00h | DS402_AbortConnectionOptionCode | Abort Connection Option Code
6040.00h | DS402_ControlWord | Control word
6041.00h | DS402_StatusWord | Status word
6042.00h | DS402_VL_TargetVelocity | Target velocity
6046.00h | DS402_VL_VelocityMinMaxAmount_HighestSubindexSupported | Min/max velocity - highest sub-index supported
6046.01h | DS402_VL_VelocityMinMaxAmount_MinVelocity | Minimal velocity
6046.02h | DS402_VL_VelocityMinMaxAmount_MaxVelocity | Maximal velocity
6048.00h | DS402_VL_VelocityAcceleration_HighestSubindexSupported | Velocity acceleration - highest sub-index supported
6048.01h | DS402_VL_VelocityAcceleration_DeltaSpeed | Velocity acceleration - delta speed
6048.02h | DS402_VL_VelocityAcceleration_DeltaTime | Velocity acceleration - delta time
6049.00h | DS402_VL_VelocityDeceleration_HighestSubindexSupported | Velocity deceleration - highest sub-index supported
6049.01h | DS402_VL_VelocityDeceleration_DeltaSpeed | Velocity deceleration - delta speed
6049.02h | DS402_VL_VelocityDeceleration_DeltaTime | Velocity deceleration - delta time
604A.00h | DS402_VL_VelocityQuickstop_HighestSubindexSupported | Velocity quickstop - highest sub-index supported
604A.01h | DS402_VL_VelocityQuickstop_DeltaSpeed | Velocity quickstop - delta speed
604A.02h | DS402_VL_VelocityQuickstop_DeltaTime | Velocity quickstop - delta time
604C.00h | DS402_VL_VelocityDimensionFactor_HighestSubindexSupported | Velocity dimension factor - highest sub-index supported
604C.01h | DS402_VL_VelocityDimensionFactor_Numerator | Velocity dimension factor - numerator
604C.02h | DS402_VL_VelocityDimensionFactor_Denominator | Velocity dimension factor - denominator
6060.00h | DS402_ModesOfOperation | Modes of operation
6061.00h | DS402_ModesOfOperationDisplay | Modes of operation display
6062.00h | DS402_PP_PositionDemandValue | Position - demand value
6063.00h | DS402_PP_PositionActualValueInCounts | Position - actual value in counts
6064.00h | DS402_PP_PositionActualValue | Position - actual value
6065.00h | DS402_PP_FollowingErrorWindow | Following error window
6067.00h | DS402_PP_PositionWindow | Position window
6068.00h | DS402_PP_PositionWindowTime | Position window time
6075.00h | DS402_TQ_MotorRatedCurrent | Motor rated current
6077.00h | DS402_TQ_TorqueActualValue | Torque - actual value
6078.00h | DS402_TQ_CurrentActualValue | Current - actual value
6079.00h | DS402_TQ_DCLinkCircuitVoltage | Power voltage
607A.00h | DS402_PP_TargetPosition | Target position
607C.00h | DS402_HM_HomeOffset | Homing offset
607D.00h | DS402_PP_SoftwareLimitPosition_HighestSubindexSupported | Software limit position - highest sub-index supported
607D.01h | DS402_PP_SoftwareLimitPosition_MinPositionLimit | Software limit position - minimum
607D.02h | DS402_PP_SoftwareLimitPosition_MaxPositionLimit | Software limit position - maximum
607E.00h | DS402_FG_Polarity | Polarity
607F.00h | DS402_PP_MaxProfileVelocity | Velocity max. limit
6081.00h | DS402_PP_ProfileVelocity | Profile velocity
6083.00h | DS402_PP_ProfileAcceleration | Velocity acceleration
6084.00h | DS402_PP_ProfileDeceleration | Velocity deceleration
6085.00h | DS402_PP_QuickstopDeceleration | Velocity quickstop deceleration
6086.00h | DS402_PP_MotionProfileType | Velocity - ramp type
6089.00h | DS402_PP_PositionNotationIndex | Position notation index
608A.00h | DS402_PP_PositionDimensionIndex | Position dimension index
608B.00h | DS402_PP_VelocityNotationIndex | Velocity notation index
608C.00h | DS402_PP_VelocityDimensionIndex | Velocity dimension index
608D.00h | DS402_PP_AccelerationNotationIndex | Acceleration notation index
608E.00h | DS402_PP_AccelerationDimensionIndex | Acceleration dimension index
608F.00h | DS402_FG_PositionEncoderResolution_HighestSubindexSupported | Position encoder resolution - highest subindex supported
608F.01h | DS402_FG_PositionEncoderResolution_EncoderIncrements | Position encoder resolution - Encoder increment
608F.02h | DS402_FG_PositionEncoderResolution_MotorShaftRevolutions | Position encoder resolution - motor shaft revolutions
6090.00h | DS402_FG_VelocityEncoderResolution_HighestSubindexSupported | Velocity encoder resolution - highest subindex supported
6090.01h | DS402_FG_VelocityEncoderResolution_EncoderIncrements | Velocity encoder resolution - Encoder increment
6090.02h | DS402_FG_VelocityEncoderResolution_MotorShaftRevolutions | Velocity encoder resolution - motor shaft revolutions
6091.00h | DS402_FG_GearRatio_HighestSubindexSupported | Gear ratio - highest subindex supported
6091.01h | DS402_FG_GearRatio_MotorShaftRevolutions | Gear ratio - motor shaft revolutions
6091.02h | DS402_FG_GearRatio_DrivingShaftRevolutions | Gear ratio - driving shaft revolutions
6092.00h | DS402_FG_FeedConstant_HighestSubindexSupported | Feed constant - highest subindex supported
6092.01h | DS402_FG_FeedConstant_Feed | Feed constant - feed
6092.02h | DS402_FG_FeedConstant_DrivingShaftRevolutions | Feed constant - driving shaft revolutions
6098.00h | DS402_HM_HomingMethod | Homing - method
6099.00h | DS402_HM_HomingSpeeds_HighestSubindexSupported | Homing velocity - highest subindex supported
6099.01h | DS402_HM_HomingSpeeds_SpeedSwitch | Homing velocity for search of switch
6099.02h | DS402_HM_HomingSpeeds_SpeedZero | Homing velocity for search of zero point
609A.00h | DS402_HM_HomingAcceleration | Homing acceleration
60C0.00h | DS402_IP_InterpolationSubModeSelect | Interpolation - method
60C1.00h | DS402_IP_InterpolationDataRecord_HighestSubindexSupported | Interpolation data record - highest subindex supported
60C1.01h | DS402_IP_InterpolationDataRecord_1stSetPoint | Interpolation data record - 1st set-point
60C2.00h | DS402_IP_InterpolationTimePeriod_HighestSubindexSupported | Interpolation time period - highest subindex supported
60C2.01h | DS402_IP_InterpolationTimePeriod_Value | Interpolation time period - value
60C2.02h | DS402_IP_InterpolationTimePeriod_Index | Interpolation time period - index
60C4.00h | DS402_IP_InterpolationDataConfiguration_HighestSubindexSupported | Interpolation data configuration - highest subindex supported
60C4.01h | DS402_IP_InterpolationDataConfiguration_MaximumBufferSize | Interpolation data configuration - maximum buffer size
60C4.02h | DS402_IP_InterpolationDataConfiguration_ActualBufferSize | Interpolation data configuration - actual buffer size
60C4.03h | DS402_IP_InterpolationDataConfiguration_BufferOrganisation | Interpolation data configuration - buffer organization
60C4.04h | DS402_IP_InterpolationDataConfiguration_BufferPosition | Interpolation data configuration - buffer position
60C4.05h | DS402_IP_InterpolationDataConfiguration_SizeOfDataRecord | Interpolation data configuration - size of data record
60C4.06h | DS402_IP_InterpolationDataConfiguration_BufferClear | Interpolation data configuration - buffer clear
60F4.00h | DS402_PP_FollowingErrorActualValue | Following error actual value
60FC.00h | DS402_PP_PositionDemandValueInCounts | Position demand value in counts
60FD.00h | DS402_DigitalInputs | Digital inputs
60FE.00h | DS402_DigitalOutputs_HighestSubindexSupported | Digital output - highest subindex supported
60FE.01h | DS402_DigitalOutputs_PhysicalOutput | Digital output - physical outputs
60FE.02h | DS402_DigitalOutputs_BitMask | Digital output - bit mask
6402.00h | DS402_MotorType | Motor type
6502.00h | DS402_SupportedDriveModes | Supported drive modes


6060.00h Modes of operation

Name | DS402_ModesOfOperation
Designation | Modes of operation
Data type | int8
Access | read / write
Attributs | Save
Value range | {-1, 1, 2, 6, 7}
Default value | -1
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS402_ModesOfOperationDisplay, DS402_SupportedDriveModes

Description

This parameter defines the operation mode of the device controller.

Parameter values:
Value | Description
-1 | Off mode - Power stage and controller are switched off.
1 | Profile position mode (pp)
2 | Velocity mode (vl)
6 | Homing mode (hm)
7 | Interpolated position mode (ip) This mode is available starting with the firmware version 1.89.00.03.

Note
The actual mode of the drive is reflected in the object DS402_ModesOfOperationDisplay.


6075.00h Motor rated current

Name | DS402_TQ_MotorRatedCurrent
Designation | Motor rated current
Data type | uint32
Access | read / write
Attributs | Save
Value range | [0 .. 4294967295]
Default value | 0
Unit | [mA]
Operating mode | Torque profile mode
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | ,

Description

This parameter defines the motor rated current in mA. It is taken from the motor's name-plate. All relative data refers to this value.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                # NodeId

d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x8F)               # Clear error

d.SdoWr(0x2011, 0x03, 0x64616F6C)         # Set default parameter 0x6000
d.SdoWr(0x2011, 0x06, 0x64616F6C)         # Set default parameter 0x3000

d.SdoWr(0x6402, 0x00, 0x8000)             # Motor type = DC

d.SdoWr(0x6060, 0x00, 4)                  # Mode of operation - torque mode

#------------------------------------------------------------------------------------------
# IMPORTANT - to ensure the compatibility of future firmware, we recommend always to set
#             this parameter, because of differences in the specification of CiA DS402 V2.0
#             (default value "0") and DS402 V2.1 (default value "1")
#------------------------------------------------------------------------------------------
d.SdoWr(0x6007, 0x00, 1)                  # Abort Connection Option Code - Fault signal
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------
# IMPORTANT - only for simulation, normally StatusWord should be checked
#------------------------------------------------------------------------------------------
d.SdoWr(0x6040, 0x00, 0x07)               # Control word - Disable operation
d.SdoWr(0x6040, 0x00, 0x06)               # Control word - Shutdown
d.SdoWr(0x6040, 0x00, 0x0F)               # Control word - Enable operation
#------------------------------------------------------------------------------------------

d.SdoWr(0x6075, 0x00, 800)                # Motor rated current [mA]
d.SdoWr(0x6072, 0x00, 1000)               # Max torque [o/oo]

d.SdoWr(0x6071, 0x00, 500)                # Target torque [o/oo]


6402.00h Motor type

Name | DS402_MotorType
Designation | Motor type
Data type | uint16
Access | read / write
Attributs | -
Value range | {8002h}
Default value | 8002h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | -

Description

This parameter defines the motor type.

Parameter values:
Value [hex] | Description
8002h | Stepper motor


Content - mcIO

Parameters 1000h (DS301)

Parameters 2000h

Parameters 3000h (DSA)

Parameters 5000h (MPU)


Content - Parameters 1000h (DS301)

1000.00h | COP_DeviceType | Device type
1001.00h | COP_ErrorRegister | Error register
1002.00h | COP_ManufacturerStatusRegister | Manufacturer status register
1003.00h | COP_PredefinedErrorField_NumberOfErrors | Predefined error field - Number of errors
1003.01h | COP_PredefinedErrorField_StandardErrorField1 | Predefined error field - Standard error field 1
1003.02h | COP_PredefinedErrorField_StandardErrorField2 | Predefined error field - Standard error field 2
1003.03h | COP_PredefinedErrorField_StandardErrorField3 | Predefined error field - Standard error field 3
1003.04h | COP_PredefinedErrorField_StandardErrorField4 | Predefined error field - Standard error field 4
1003.05h | COP_PredefinedErrorField_StandardErrorField5 | Predefined error field - Standard error field 5
1003.06h | COP_PredefinedErrorField_StandardErrorField6 | Predefined error field - Standard error field 6
1003.07h | COP_PredefinedErrorField_StandardErrorField7 | Predefined error field - Standard error field 7
1003.08h | COP_PredefinedErrorField_StandardErrorField8 | Predefined error field - Standard error field 8
1005.00h | COP_CobId_Sync | COB-ID SYNC
1006.00h | COP_CommunicationCyclePeriod | Communication cycle period
1008.00h | COP_ManufacturerDeviceName | Manufacturer device name
1009.00h | COP_ManufacturerHardwareVersion | Manufacturer hardware version
100A.00h | COP_ManufacturerSoftwareVersion | Manufacturer software version
100C.00h | COP_GuardTime | Guard time
100D.00h | COP_LifeTimeFactor | Life time factor
100E.00h | COP_CobId_Guarding | COB-ID node and life Guarding
1010.00h | COP_StoreParameters_HighestSubindexSupported | Store parameters - highest sub-index supported
1010.01h | COP_StoreParameters_All | Store parameters - save all parameters
1010.02h | COP_StoreParameters_Communication | Store parameters - save communication parameters
1010.03h | COP_StoreParameters_Application | Store parameters - save application parameters
1011.00h | COP_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
1011.01h | COP_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
1011.02h | COP_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
1011.03h | COP_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
1012.00h | COP_CobId_TimeStampMessage | COB-ID time stamp message
1014.00h | COP_CobId_EmergencyMessage | COB-ID emergency message
1016.00h | COP_ConsumerHeartbeatTime_HighestSubindexSupported | Consumer heartbeat time - Highest sub-index supported
1016.01h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime1 | Consumer 1 heartbeat time - Consumer heartbeat time
1016.02h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime2 | Consumer 2 heartbeat time - Consumer heartbeat time
1016.03h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime3 | Consumer 3 heartbeat time - Consumer heartbeat time
1016.04h | COP_ConsumerHeartbeatTime_ConsumerHeartbeatTime4 | Consumer 4 heartbeat time - Consumer heartbeat time
1017.00h | COP_ProducerHeartbeatTime | Producer heartbeat time
1018.00h | COP_IdentityObject_HighestSubindexSupported | Identity object - Highest sub-index supported
1018.01h | COP_IdentityObject_VendorID | Identity object - Vendor-ID
1018.02h | COP_IdentityObject_ProductCode | Identity object - Product code
1018.03h | COP_IdentityObject_RevisionNumber | Identity object - Revision number
1029.00h | COP_ErrorBehavior_HighestSubindexSupported | Error behavior - Highest sub-index supported
1029.01h | COP_ErrorBehavior_CommunicationError | Error behavior - Communication error
1200.00h | COP_SDO_ServerParameter_HighestSubindexSupported | SDO server parameter - Highest sub-index supported
1200.01h | COP_SDO_ServerParameter_CobIdClientServer_Rx | SDO server parameter - COB-ID client -> server (rx)
1200.02h | COP_SDO_ServerParameter_CobIdServerClient_Tx | SDO server parameter - COB-ID server -> client (tx)
1400.00h | COP_RxPDO1_CommunicationParameter_HighestSubindexSupported | RxPDO1 communication parameter - highest sub-index supported
1400.01h | COP_RxPDO1_CommunicationParameter_CobId | RxPDO1 communication parameter - COB-ID used by RxPDO 1
1400.02h | COP_RxPDO1_CommunicationParameter_TransmissionType | RxPDO1 communication parameter - transmission type
1400.03h | COP_RxPDO1_CommunicationParameter_InhibitTime | RxPDO1 communication parameter - inhibit time
1401.00h | COP_RxPDO2_CommunicationParameter_HighestSubindexSupported | RxPDO2 communication parameter - highest sub-index supported
1401.01h | COP_RxPDO2_CommunicationParameter_CobId | RxPDO2 communication parameter - COB-ID used by RxPDO 2
1401.02h | COP_RxPDO2_CommunicationParameter_TransmissionType | RxPDO2 communication parameter - transmission type
1401.03h | COP_RxPDO2_CommunicationParameter_InhibitTime | RxPDO2 communication parameter - inhibit time
1402.00h | COP_RxPDO3_CommunicationParameter_HighestSubindexSupported | RxPDO3 communication parameter - highest sub-index supported
1402.01h | COP_RxPDO3_CommunicationParameter_CobId | RxPDO3 communication parameter - COB-ID used by RxPDO 3
1402.02h | COP_RxPDO3_CommunicationParameter_TransmissionType | RxPDO3 communication parameter - transmission type
1402.03h | COP_RxPDO3_CommunicationParameter_InhibitTime | RxPDO3 communication parameter - inhibit time
1403.00h | COP_RxPDO4_CommunicationParameter_HighestSubindexSupported | RxPDO4 communication parameter - highest sub-index supported
1403.01h | COP_RxPDO4_CommunicationParameter_CobId | RxPDO4 communication parameter - COB-ID used by RxPDO 4
1403.02h | COP_RxPDO4_CommunicationParameter_TransmissionType | RxPDO4 communication parameter - transmission type
1403.03h | COP_RxPDO4_CommunicationParameter_InhibitTime | RxPDO4 communication parameter - inhibit time
1404.00h | COP_RxPDO5_CommunicationParameter_HighestSubindexSupported | RxPDO5 communication parameter - highest sub-index supported
1404.01h | COP_RxPDO5_CommunicationParameter_CobId | RxPDO5 communication parameter - COB-ID used by RxPDO 5
1404.02h | COP_RxPDO5_CommunicationParameter_TransmissionType | RxPDO5 communication parameter - transmission type
1404.03h | COP_RxPDO5_CommunicationParameter_InhibitTime | RxPDO5 communication parameter - inhibit time
1405.00h | COP_RxPDO6_CommunicationParameter_HighestSubindexSupported | RxPDO6 communication parameter - highest sub-index supported
1405.01h | COP_RxPDO6_CommunicationParameter_CobId | RxPDO6 communication parameter - COB-ID used by RxPDO 6
1405.02h | COP_RxPDO6_CommunicationParameter_TransmissionType | RxPDO6 communication parameter - transmission type
1405.03h | COP_RxPDO6_CommunicationParameter_InhibitTime | RxPDO6 communication parameter - inhibit time
1406.00h | COP_RxPDO7_CommunicationParameter_HighestSubindexSupported | RxPDO7 communication parameter - highest sub-index supported
1406.01h | COP_RxPDO7_CommunicationParameter_CobId | RxPDO7 communication parameter - COB-ID used by RxPDO 7
1406.02h | COP_RxPDO7_CommunicationParameter_TransmissionType | RxPDO7 communication parameter - transmission type
1406.03h | COP_RxPDO7_CommunicationParameter_InhibitTime | RxPDO7 communication parameter - inhibit time
1414.00h | COP_RxPDO21_CommunicationParameter_HighestSubindexSupported | RxPDO21 communication parameter - highest sub-index supported
1414.01h | COP_RxPDO21_CommunicationParameter_CobId | RxPDO21 communication parameter - COB-ID used by RxPDO 21
1414.02h | COP_RxPDO21_CommunicationParameter_TransmissionType | RxPDO21 communication parameter - transmission type
1414.03h | COP_RxPDO21_CommunicationParameter_InhibitTime | RxPDO21 communication parameter - inhibit time
1600.00h | COP_RxPDO1_Mapping_NumberOfMappedApplicationObjects | RxPDO1 mapping - number of mapped application objects in RxPDO 1
1600.01h | COP_RxPDO1_Mapping_1ApplicationObject | RxPDO1 mapping - 1st application object
1600.02h | COP_RxPDO1_Mapping_2ApplicationObject | RxPDO1 mapping - 2nd application object
1600.03h | COP_RxPDO1_Mapping_3ApplicationObject | RxPDO1 mapping - 3rd application object
1600.04h | COP_RxPDO1_Mapping_4ApplicationObject | RxPDO1 mapping - 4th application object
1600.05h | COP_RxPDO1_Mapping_5ApplicationObject | RxPDO1 mapping - 5th application object
1600.06h | COP_RxPDO1_Mapping_6ApplicationObject | RxPDO1 mapping - 6th application object
1600.07h | COP_RxPDO1_Mapping_7ApplicationObject | RxPDO1 mapping - 7th application object
1600.08h | COP_RxPDO1_Mapping_8ApplicationObject | RxPDO1 mapping - 8th application object
1601.00h | COP_RxPDO2_Mapping_NumberOfMappedApplicationObjects | RxPDO2 mapping - number of mapped application objects in RxPDO 2
1601.01h | COP_RxPDO2_Mapping_1ApplicationObject | RxPDO2 mapping - 1st application object
1601.02h | COP_RxPDO2_Mapping_2ApplicationObject | RxPDO2 mapping - 2nd application object
1601.03h | COP_RxPDO2_Mapping_3ApplicationObject | RxPDO2 mapping - 3rd application object
1601.04h | COP_RxPDO2_Mapping_4ApplicationObject | RxPDO2 mapping - 4th application object
1601.05h | COP_RxPDO2_Mapping_5ApplicationObject | RxPDO2 mapping - 5th application object
1601.06h | COP_RxPDO2_Mapping_6ApplicationObject | RxPDO2 mapping - 6th application object
1601.07h | COP_RxPDO2_Mapping_7ApplicationObject | RxPDO2 mapping - 7th application object
1601.08h | COP_RxPDO2_Mapping_8ApplicationObject | RxPDO2 mapping - 8th application object
1602.00h | COP_RxPDO3_Mapping_NumberOfMappedApplicationObjects | RxPDO3 mapping - number of mapped application objects in RxPDO 3
1602.01h | COP_RxPDO3_Mapping_1ApplicationObject | RxPDO3 mapping - 1st application object
1602.02h | COP_RxPDO3_Mapping_2ApplicationObject | RxPDO3 mapping - 2nd application object
1602.03h | COP_RxPDO3_Mapping_3ApplicationObject | RxPDO3 mapping - 3rd application object
1602.04h | COP_RxPDO3_Mapping_4ApplicationObject | RxPDO3 mapping - 4th application object
1602.05h | COP_RxPDO3_Mapping_5ApplicationObject | RxPDO3 mapping - 5th application object
1602.06h | COP_RxPDO3_Mapping_6ApplicationObject | RxPDO3 mapping - 6th application object
1602.07h | COP_RxPDO3_Mapping_7ApplicationObject | RxPDO3 mapping - 7th application object
1602.08h | COP_RxPDO3_Mapping_8ApplicationObject | RxPDO3 mapping - 8th application object
1603.00h | COP_RxPDO4_Mapping_NumberOfMappedApplicationObjects | RxPDO4 mapping - number of mapped application objects in RxPDO 4
1603.01h | COP_RxPDO4_Mapping_1ApplicationObject | RxPDO4 mapping - 1st application object
1603.02h | COP_RxPDO4_Mapping_2ApplicationObject | RxPDO4 mapping - 2nd application object
1603.03h | COP_RxPDO4_Mapping_3ApplicationObject | RxPDO4 mapping - 3rd application object
1603.04h | COP_RxPDO4_Mapping_4ApplicationObject | RxPDO4 mapping - 4th application object
1603.05h | COP_RxPDO4_Mapping_5ApplicationObject | RxPDO4 mapping - 5th application object
1603.06h | COP_RxPDO4_Mapping_6ApplicationObject | RxPDO4 mapping - 6th application object
1603.07h | COP_RxPDO4_Mapping_7ApplicationObject | RxPDO4 mapping - 7th application object
1603.08h | COP_RxPDO4_Mapping_8ApplicationObject | RxPDO4 mapping - 8th application object
1604.00h | COP_RxPDO5_Mapping_NumberOfMappedApplicationObjects | RxPDO5 mapping - number of mapped application objects in RxPDO 5
1604.01h | COP_RxPDO5_Mapping_1ApplicationObject | RxPDO5 mapping - 1st application object
1604.02h | COP_RxPDO5_Mapping_2ApplicationObject | RxPDO5 mapping - 2nd application object
1604.03h | COP_RxPDO5_Mapping_3ApplicationObject | RxPDO5 mapping - 3rd application object
1604.04h | COP_RxPDO5_Mapping_4ApplicationObject | RxPDO5 mapping - 4th application object
1604.05h | COP_RxPDO5_Mapping_5ApplicationObject | RxPDO5 mapping - 5th application object
1604.06h | COP_RxPDO5_Mapping_6ApplicationObject | RxPDO5 mapping - 6th application object
1604.07h | COP_RxPDO5_Mapping_7ApplicationObject | RxPDO5 mapping - 7th application object
1604.08h | COP_RxPDO5_Mapping_8ApplicationObject | RxPDO5 mapping - 8th application object
1605.00h | COP_RxPDO6_Mapping_NumberOfMappedApplicationObjects | RxPDO6 mapping - number of mapped application objects in RxPDO 6
1605.01h | COP_RxPDO6_Mapping_1ApplicationObject | RxPDO6 mapping - 1st application object
1605.02h | COP_RxPDO6_Mapping_2ApplicationObject | RxPDO6 mapping - 2nd application object
1605.03h | COP_RxPDO6_Mapping_3ApplicationObject | RxPDO6 mapping - 3rd application object
1605.04h | COP_RxPDO6_Mapping_4ApplicationObject | RxPDO6 mapping - 4th application object
1605.05h | COP_RxPDO6_Mapping_5ApplicationObject | RxPDO6 mapping - 5th application object
1605.06h | COP_RxPDO6_Mapping_6ApplicationObject | RxPDO6 mapping - 6th application object
1605.07h | COP_RxPDO6_Mapping_7ApplicationObject | RxPDO6 mapping - 7th application object
1605.08h | COP_RxPDO6_Mapping_8ApplicationObject | RxPDO6 mapping - 8th application object
1606.00h | COP_RxPDO7_Mapping_NumberOfMappedApplicationObjects | RxPDO7 mapping - number of mapped application objects in RxPDO 7
1606.01h | COP_RxPDO7_Mapping_1ApplicationObject | RxPDO7 mapping - 1st application object
1606.02h | COP_RxPDO7_Mapping_2ApplicationObject | RxPDO7 mapping - 2nd application object
1606.03h | COP_RxPDO7_Mapping_3ApplicationObject | RxPDO7 mapping - 3rd application object
1606.04h | COP_RxPDO7_Mapping_4ApplicationObject | RxPDO7 mapping - 4th application object
1606.05h | COP_RxPDO7_Mapping_5ApplicationObject | RxPDO7 mapping - 5th application object
1606.06h | COP_RxPDO7_Mapping_6ApplicationObject | RxPDO7 mapping - 6th application object
1606.07h | COP_RxPDO7_Mapping_7ApplicationObject | RxPDO7 mapping - 7th application object
1606.08h | COP_RxPDO7_Mapping_8ApplicationObject | RxPDO7 mapping - 8th application object
1614.00h | COP_RxPDO21_Mapping_NumberOfMappedApplicationObjects | RxPDO21 mapping - number of mapped application objects in RxPDO 21
1614.01h | COP_RxPDO21_Mapping_1ApplicationObject | RxPDO21 mapping - 1st application object
1614.02h | COP_RxPDO21_Mapping_2ApplicationObject | RxPDO21 mapping - 2nd application object
1614.03h | COP_RxPDO21_Mapping_3ApplicationObject | RxPDO21 mapping - 3rd application object
1614.04h | COP_RxPDO21_Mapping_4ApplicationObject | RxPDO21 mapping - 4th application object
1614.05h | COP_RxPDO21_Mapping_5ApplicationObject | RxPDO21 mapping - 5th application object
1614.06h | COP_RxPDO21_Mapping_6ApplicationObject | RxPDO21 mapping - 6th application object
1614.07h | COP_RxPDO21_Mapping_7ApplicationObject | RxPDO21 mapping - 7th application object
1614.08h | COP_RxPDO21_Mapping_8ApplicationObject | RxPDO21 mapping - 8th application object
1800.00h | COP_TxPDO1_CommunicationParameter_HighestSubindexSupported | TxPDO1 communication parameter - highest sub-index supported
1800.01h | COP_TxPDO1_CommunicationParameter_CobId | TxPDO1 communication parameter - COB-ID used by TxPDO
1800.02h | COP_TxPDO1_CommunicationParameter_TransmissionType | TxPDO1 communication parameter - transmission type
1800.03h | COP_TxPDO1_CommunicationParameter_InhibitTime | TxPDO1 communication parameter - inhibit time
1801.00h | COP_TxPDO2_CommunicationParameter_HighestSubindexSupported | TxPDO2 communication parameter - highest sub-index supported
1801.01h | COP_TxPDO2_CommunicationParameter_CobId | TxPDO2 communication parameter - COB-ID used by TxPDO
1801.02h | COP_TxPDO2_CommunicationParameter_TransmissionType | TxPDO2 communication parameter - transmission type
1801.03h | COP_TxPDO2_CommunicationParameter_InhibitTime | TxPDO2 communication parameter - inhibit time
1802.00h | COP_TxPDO3_CommunicationParameter_HighestSubindexSupported | TxPDO3 communication parameter - highest sub-index supported
1802.01h | COP_TxPDO3_CommunicationParameter_CobId | TxPDO3 communication parameter - COB-ID used by TxPDO
1802.02h | COP_TxPDO3_CommunicationParameter_TransmissionType | TxPDO3 communication parameter - transmission type
1802.03h | COP_TxPDO3_CommunicationParameter_InhibitTime | TxPDO3 communication parameter - inhibit time
1803.00h | COP_TxPDO4_CommunicationParameter_HighestSubindexSupported | TxPDO4 communication parameter - highest sub-index supported
1803.01h | COP_TxPDO4_CommunicationParameter_CobId | TxPDO4 communication parameter - COB-ID used by TxPDO
1803.02h | COP_TxPDO4_CommunicationParameter_TransmissionType | TxPDO4 communication parameter - transmission type
1803.03h | COP_TxPDO4_CommunicationParameter_InhibitTime | TxPDO4 communication parameter - inhibit time
1804.00h | COP_TxPDO5_CommunicationParameter_HighestSubindexSupported | TxPDO5 communication parameter - highest sub-index supported
1804.01h | COP_TxPDO5_CommunicationParameter_CobId | TxPDO5 communication parameter - COB-ID used by TxPDO
1804.02h | COP_TxPDO5_CommunicationParameter_TransmissionType | TxPDO5 communication parameter - transmission type
1804.03h | COP_TxPDO5_CommunicationParameter_InhibitTime | TxPDO5 communication parameter - inhibit time
1805.00h | COP_TxPDO6_CommunicationParameter_HighestSubindexSupported | TxPDO6 communication parameter - highest sub-index supported
1805.01h | COP_TxPDO6_CommunicationParameter_CobId | TxPDO6 communication parameter - COB-ID used by TxPDO
1805.02h | COP_TxPDO6_CommunicationParameter_TransmissionType | TxPDO6 communication parameter - transmission type
1805.03h | COP_TxPDO6_CommunicationParameter_InhibitTime | TxPDO6 communication parameter - inhibit time
1806.00h | COP_TxPDO7_CommunicationParameter_HighestSubindexSupported | TxPDO7 communication parameter - highest sub-index supported
1806.01h | COP_TxPDO7_CommunicationParameter_CobId | TxPDO7 communication parameter - COB-ID used by TxPDO
1806.02h | COP_TxPDO7_CommunicationParameter_TransmissionType | TxPDO7 communication parameter - transmission type
1806.03h | COP_TxPDO7_CommunicationParameter_InhibitTime | TxPDO7 communication parameter - inhibit time
1814.00h | COP_TxPDO21_CommunicationParameter_HighestSubindexSupported | TxPDO21 communication parameter - highest sub-index supported
1814.01h | COP_TxPDO21_CommunicationParameter_CobId | TxPDO21 communication parameter - COB-ID used by TxPDO
1814.02h | COP_TxPDO21_CommunicationParameter_TransmissionType | TxPDO21 communication parameter - transmission type
1814.03h | COP_TxPDO21_CommunicationParameter_InhibitTime | TxPDO21 communication parameter - inhibit time
1A00.00h | COP_TxPDO1_Mapping_NumberOfMappedApplicationObjects | TxPDO1 mapping - number of mapped application objects in TxPDO 1
1A00.01h | COP_TxPDO1_Mapping_1ApplicationObject | TxPDO1 mapping - 1st application object
1A00.02h | COP_TxPDO1_Mapping_2ApplicationObject | TxPDO1 mapping - 2nd application object
1A00.03h | COP_TxPDO1_Mapping_3ApplicationObject | TxPDO1 mapping - 3rd application object
1A00.04h | COP_TxPDO1_Mapping_4ApplicationObject | TxPDO1 mapping - 4th application object
1A00.05h | COP_TxPDO1_Mapping_5ApplicationObject | TxPDO1 mapping - 5th application object
1A00.06h | COP_TxPDO1_Mapping_6ApplicationObject | TxPDO1 mapping - 6th application object
1A00.07h | COP_TxPDO1_Mapping_7ApplicationObject | TxPDO1 mapping - 7th application object
1A00.08h | COP_TxPDO1_Mapping_8ApplicationObject | TxPDO1 mapping - 8th application object
1A01.00h | COP_TxPDO2_Mapping_NumberOfMappedApplicationObjects | TxPDO2 mapping - number of mapped application objects in TxPDO 2
1A01.01h | COP_TxPDO2_Mapping_1ApplicationObject | TxPDO2 mapping - 1st application object
1A01.02h | COP_TxPDO2_Mapping_2ApplicationObject | TxPDO2 mapping - 2nd application object
1A01.03h | COP_TxPDO2_Mapping_3ApplicationObject | TxPDO2 mapping - 3rd application object
1A01.04h | COP_TxPDO2_Mapping_4ApplicationObject | TxPDO2 mapping - 4th application object
1A01.05h | COP_TxPDO2_Mapping_5ApplicationObject | TxPDO2 mapping - 5th application object
1A01.06h | COP_TxPDO2_Mapping_6ApplicationObject | TxPDO2 mapping - 6th application object
1A01.07h | COP_TxPDO2_Mapping_7ApplicationObject | TxPDO2 mapping - 7th application object
1A01.08h | COP_TxPDO2_Mapping_8ApplicationObject | TxPDO2 mapping - 8th application object
1A02.00h | COP_TxPDO3_Mapping_NumberOfMappedApplicationObjects | TxPDO3 mapping - number of mapped application objects in TxPDO 3
1A02.01h | COP_TxPDO3_Mapping_1ApplicationObject | TxPDO3 mapping - 1st application object
1A02.02h | COP_TxPDO3_Mapping_2ApplicationObject | TxPDO3 mapping - 2nd application object
1A02.03h | COP_TxPDO3_Mapping_3ApplicationObject | TxPDO3 mapping - 3rd application object
1A02.04h | COP_TxPDO3_Mapping_4ApplicationObject | TxPDO3 mapping - 4th application object
1A02.05h | COP_TxPDO3_Mapping_5ApplicationObject | TxPDO3 mapping - 5th application object
1A02.06h | COP_TxPDO3_Mapping_6ApplicationObject | TxPDO3 mapping - 6th application object
1A02.07h | COP_TxPDO3_Mapping_7ApplicationObject | TxPDO3 mapping - 7th application object
1A02.08h | COP_TxPDO3_Mapping_8ApplicationObject | TxPDO3 mapping - 8th application object
1A03.00h | COP_TxPDO4_Mapping_NumberOfMappedApplicationObjects | TxPDO4 mapping - number of mapped application objects in TxPDO 4
1A03.01h | COP_TxPDO4_Mapping_1ApplicationObject | TxPDO4 mapping - 1st application object
1A03.02h | COP_TxPDO4_Mapping_2ApplicationObject | TxPDO4 mapping - 2nd application object
1A03.03h | COP_TxPDO4_Mapping_3ApplicationObject | TxPDO4 mapping - 3rd application object
1A03.04h | COP_TxPDO4_Mapping_4ApplicationObject | TxPDO4 mapping - 4th application object
1A03.05h | COP_TxPDO4_Mapping_5ApplicationObject | TxPDO4 mapping - 5th application object
1A03.06h | COP_TxPDO4_Mapping_6ApplicationObject | TxPDO4 mapping - 6th application object
1A03.07h | COP_TxPDO4_Mapping_7ApplicationObject | TxPDO4 mapping - 7th application object
1A03.08h | COP_TxPDO4_Mapping_8ApplicationObject | TxPDO4 mapping - 8th application object
1A04.00h | COP_TxPDO5_Mapping_NumberOfMappedApplicationObjects | TxPDO5 mapping - number of mapped application objects in TxPDO 5
1A04.01h | COP_TxPDO5_Mapping_1ApplicationObject | TxPDO5 mapping - 1st application object
1A04.02h | COP_TxPDO5_Mapping_2ApplicationObject | TxPDO5 mapping - 2nd application object
1A04.03h | COP_TxPDO5_Mapping_3ApplicationObject | TxPDO5 mapping - 3rd application object
1A04.04h | COP_TxPDO5_Mapping_4ApplicationObject | TxPDO5 mapping - 4th application object
1A04.05h | COP_TxPDO5_Mapping_5ApplicationObject | TxPDO5 mapping - 5th application object
1A04.06h | COP_TxPDO5_Mapping_6ApplicationObject | TxPDO5 mapping - 6th application object
1A04.07h | COP_TxPDO5_Mapping_7ApplicationObject | TxPDO5 mapping - 7th application object
1A04.08h | COP_TxPDO5_Mapping_8ApplicationObject | TxPDO5 mapping - 8th application object
1A05.00h | COP_TxPDO6_Mapping_NumberOfMappedApplicationObjects | TxPDO6 mapping - number of mapped application objects in TxPDO 6
1A05.01h | COP_TxPDO6_Mapping_1ApplicationObject | TxPDO6 mapping - 1st application object
1A05.02h | COP_TxPDO6_Mapping_2ApplicationObject | TxPDO6 mapping - 2nd application object
1A05.03h | COP_TxPDO6_Mapping_3ApplicationObject | TxPDO6 mapping - 3rd application object
1A05.04h | COP_TxPDO6_Mapping_4ApplicationObject | TxPDO6 mapping - 4th application object
1A05.05h | COP_TxPDO6_Mapping_5ApplicationObject | TxPDO6 mapping - 5th application object
1A05.06h | COP_TxPDO6_Mapping_6ApplicationObject | TxPDO6 mapping - 6th application object
1A05.07h | COP_TxPDO6_Mapping_7ApplicationObject | TxPDO6 mapping - 7th application object
1A05.08h | COP_TxPDO6_Mapping_8ApplicationObject | TxPDO6 mapping - 8th application object
1A06.00h | COP_TxPDO7_Mapping_NumberOfMappedApplicationObjects | TxPDO7 mapping - number of mapped application objects in TxPDO 7
1A06.01h | COP_TxPDO7_Mapping_1ApplicationObject | TxPDO7 mapping - 1st application object
1A06.02h | COP_TxPDO7_Mapping_2ApplicationObject | TxPDO7 mapping - 2nd application object
1A06.03h | COP_TxPDO7_Mapping_3ApplicationObject | TxPDO7 mapping - 3rd application object
1A06.04h | COP_TxPDO7_Mapping_4ApplicationObject | TxPDO7 mapping - 4th application object
1A06.05h | COP_TxPDO7_Mapping_5ApplicationObject | TxPDO7 mapping - 5th application object
1A06.06h | COP_TxPDO7_Mapping_6ApplicationObject | TxPDO7 mapping - 6th application object
1A06.07h | COP_TxPDO7_Mapping_7ApplicationObject | TxPDO7 mapping - 7th application object
1A06.08h | COP_TxPDO7_Mapping_8ApplicationObject | TxPDO7 mapping - 8th application object
1A14.00h | COP_TxPDO21_Mapping_NumberOfMappedApplicationObjects | TxPDO21 mapping - number of mapped application objects in TxPDO 21
1A14.01h | COP_TxPDO21_Mapping_1ApplicationObject | TxPDO21 mapping - 1st application object
1A14.02h | COP_TxPDO21_Mapping_2ApplicationObject | TxPDO21 mapping - 2nd application object
1A14.03h | COP_TxPDO21_Mapping_3ApplicationObject | TxPDO21 mapping - 3rd application object
1A14.04h | COP_TxPDO21_Mapping_4ApplicationObject | TxPDO21 mapping - 4th application object
1A14.05h | COP_TxPDO21_Mapping_5ApplicationObject | TxPDO21 mapping - 5th application object
1A14.06h | COP_TxPDO21_Mapping_6ApplicationObject | TxPDO21 mapping - 6th application object
1A14.07h | COP_TxPDO21_Mapping_7ApplicationObject | TxPDO21 mapping - 7th application object
1A14.08h | COP_TxPDO21_Mapping_8ApplicationObject | TxPDO21 mapping - 8th application object


Content - Parameters 1000h (DS301) - Store parameters

1010.00h | COP_StoreParameters_HighestSubindexSupported | Store parameters - highest sub-index supported
1010.01h | COP_StoreParameters_All | Store parameters - save all parameters
1010.02h | COP_StoreParameters_Communication | Store parameters - save communication parameters
1010.03h | COP_StoreParameters_Application | Store parameters - save application parameters


1010.00h Store parameters - highest sub-index supported

Name | COP_StoreParameters_HighestSubindexSupported
Designation | Store parameters - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 06h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_StoreParameters_All, COP_StoreParameters_Communication, COP_StoreParameters_Application, ,

Description

This object controls the saving of parameters in non-volatile memory.

By read access the CANopen device provides information about its saving capabilities.
Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index 01h refers to all parameters that may be stored on the CANopen device.
  • Sub-index 02h refers to communication related parameters (index from 1000h to 1FFFh).
  • Sub-index 03h refers to application related parameters (index from 6000h to 9FFFh).
  • Sub-index 05h refers to manufacturer defined parameters (index from 2000h to 2FFFh)
  • Sub-index 06h refers to manufacturer defined parameters (index from 3000h to 3FFFh)
In order to avoid storage of parameters by mistake, storage is only executed when a specific signature is written to the appropriate sub-index. The signature that shall be written is "save":

Storage write access signature

On reception of the correct signature in the appropriate sub-index the CANopen device stores the parameter and then it confirms the SDO transmission (SDO download initiate response). If the storing failed, the CANopen device responds with the SDO abort transfer service (abort code: 0606 0000h).
If a wrong signature is written, the CANopen device refuses to store and it responds with the SDO abort transfer service (abort code: 0800 002xh).
On read access to the appropriate sub-index the CANopen device provides information about its storage functionality with the following format:

Storage read access structure

Structure of read access:

Bit | Value | Description
auto | 0b 1b | CANopen device does not save parameters autonomously CANopen device saves parameters autonomously
cmd | 0b 1b | CANopen device does not save parameters on command CANopen device saves parameters on command
Autonomous saving means that a CANopen device stores the storable parameters in a nonvolatile manner without user request.


1010.01h Store parameters - save all parameters

Name | COP_StoreParameters_All
Designation | Store parameters - save all parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_All()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_Communication, COP_StoreParameters_Application, ,

Description

This object controls the saving of all parameters in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x01,0x65766173,timeout=21000)   # save all parameters


1010.02h Store parameters - save communication parameters

Name | COP_StoreParameters_Communication
Designation | Store parameters - save communication parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_Comm()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Application, ,

Description

This object controls the saving of communication related parameters (index from 1000h to 1FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x02,0x65766173,timeout=21000)   # save parameters


1010.03h Store parameters - save application parameters

Name | COP_StoreParameters_Application
Designation | Store parameters - save application parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | SaveParam_App()
Cross reference | COP_StoreParameters_HighestSubindexSupported, COP_StoreParameters_All, COP_StoreParameters_Communication, ,

Description

This object controls the saving of application related parameters (index from 6000h to 9FFFh) in non-volatile memory.

See also parameter COP_StoreParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1010,0x03,0x65766173,timeout=21000)   # save parameters


Content - Parameters 1000h (DS301) - Restore default parameters

1011.00h | COP_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
1011.01h | COP_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
1011.02h | COP_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
1011.03h | COP_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters


1011.00h Restore default parameters - highest sub-index supported

Name | COP_RestoreDefaultParameters_HighestSubindexSupported
Designation | Restore default parameters - highest sub-index supported
Data type | uint8
Access | read only
Attributs | -
Value range | [01h .. 7Fh]
Default value | 06h
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, ,

Description

With this object the default values of parameters according to the communication profile, device profile, and application profile are restored.

By read access the CANopen device provides information about its capabilities to restore these values.
Several parameter groups are distinguished:
  • Sub-index 00h contains the highest sub-index that is supported.
  • Sub-index 01h refers to all parameters that may be restored.
  • Sub-index 02h refers to communication related parameters (Index from 1000h to 1FFFh).
  • Sub-index 03h refers to application related parameters (Index from 6000h to 9FFFh).
  • Sub-index 05h refers to manufacturer defined parameters (index from 2000h to 2FFFh).
  • Sub-index 06h refers to manufacturer defined parameters (index from 3000h to 3FFFh).
In order to avoid the restoring of default parameters by mistake, restoring is only executed when a specific signature is written to the appropriate sub-index.
The signature that shall be written is "load":

Restore default write access signature

On reception of the correct signature in the appropriate sub-index the CANopen device restores the default parameters and then it confirms the SDO transmission (SDO download initiate response). If the restoring failed, the CANopen device responds with the SDO abort transfer service (abort code: 0606 0000h). If a wrong signature is written, the CANopen device refuses to restore the defaults and responds with the SDO abort transfer service (abort code: 0800 002xh).

The default values are set valid after the CANopen device is reset (NMT service reset node for sub-index from 01h, 03h, 05h, 06h, NMT service reset communication for sub-index 02h) or power cycled.

On read access to the appropriate sub-index the CANopen device provides information about its default parameter restoring capability with the following format:

Restore default read access structure

Structure of restore read access:

Bit | Value | Description
cmd | 0b 1b | CANopen device does not restore default parameters CANopen device restores parameters


1011.01h Restore default parameters - restore all default parameters

Name | COP_RestoreDefaultParameters_All
Designation | Restore default parameters - restore all default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_All()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_Communication, COP_RestoreDefaultParameters_Application, ,

Description

With this object the default values of all parameters are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x01,0x64616F6C)                 # load all default parameter


1011.02h Restore default parameters - restore communication default parameters

Name | COP_RestoreDefaultParameters_Communication
Designation | Restore default parameters - restore communication default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_Comm()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Application, ,

Description

With this object the default values of communication related parameters (Index from 1000h to 1FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x02,0x64616F6C)                 # load default parameter


1011.03h Restore default parameters - restore application default parameters

Name | COP_RestoreDefaultParameters_Application
Designation | Restore default parameters - restore application default parameters
Data type | uint32
Access | read / write
Attributs | -
Value range | -
Default value | 0
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | LoadParam_App()
Cross reference | COP_RestoreDefaultParameters_HighestSubindexSupported, COP_RestoreDefaultParameters_All, COP_RestoreDefaultParameters_Communication, ,

Description

With this object the default values of application related parameters (Index from 6000h to 9FFFh) are restored.

See also parameter COP_RestoreDefaultParameters_HighestSubindexSupported

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

d.SdoWr(0x1011,0x03,0x64616F6C)                 # load default parameter


Content - Parameters 2000h

2000.00h | DS2000_CopConfigParam_HighestSubindexSupported | CANopen configuration - highest sub-index supported
2000.01h | DS2000_CopConfigParam_WriteEnable | CANopen configuration - write enable
2000.02h | DS2000_CopConfigParam_UserNodeId | CANopen configuration - user node id
2000.03h | DS2000_CopConfigParam_UserBaudrate | CANopen configuration - user baud rate
2000.04h | DS2000_CopConfigParam_AutoOperational | CANopen configuration - auto operational
2000.05h | DS2000_CopConfigParam_MessageOnBootup | CANopen configuration - message on bootup
2009.00h | DS2000_CpuCommand_HighestSubindexSupported | CPU command - highest sub-index supported
2009.01h | DS2000_CpuCommand_WriteEnable | CPU command - write enable
2009.03h | DS2000_CpuCommand_DelayTime | CPU command - delay time
2011.00h | DS2000_RestoreDefaultParameters_HighestSubindexSupported | Restore default parameters - highest sub-index supported
2011.01h | DS2000_RestoreDefaultParameters_All | Restore default parameters - restore all default parameters
2011.02h | DS2000_RestoreDefaultParameters_Communication | Restore default parameters - restore communication default parameters
2011.03h | DS2000_RestoreDefaultParameters_Application | Restore default parameters - restore application default parameters
2011.05h | DS2000_RestoreDefaultParameters_Manufacturer_0x2000 | Restore default parameters - restore manufacturer defined default parameters (range 0x2000-0x2FFF)
2011.06h | DS2000_RestoreDefaultParameters_Manufacturer_0x3000 | Restore default parameters - restore manufacturer defined default parameters (range 0x3000-0x3FFF)
2021.00h | DS2000_SyncProducer_HighestSubindexSupported | Sync Producer - highest sub-index supported
2021.01h | DS2000_SyncProducer_Enable | Sync Producer - Enable


Content - Parameters 2000h - CPU command

2009.00h | DS2000_CpuCommand_HighestSubindexSupported | CPU command - highest sub-index supported
2009.01h | DS2000_CpuCommand_WriteEnable | CPU command - write enable
2009.03h | DS2000_CpuCommand_DelayTime | CPU command - delay time


2009.03h CPU command - delay time

Name | DS2000_CpuCommand_DelayTime
Designation | CPU command - delay time
Data type | uint16
Access | read / write
Attributs | -
Value range | {0, 65535}
Default value | 100
Unit | [ms]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | -
Cross reference | DS2000_CpuCommand_WriteEnable,

Description

The parameter defines the delay time of the CPU command.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId

d.SdoWr(0x2009, 0x03, 100)                      # delay time of the command in ms
d.SdoWr(0x2009, 0x01, 0x6E657277)               # write enable
try:
   d.SdoWr(0x2009, 0x02, 0x9999, timeout=50)    # CPU reset
except:
   pass


Content - Parameters 3000h (DSA)

3000.00h | DEV_Cmd | Device command
3000.08h | DEV_Cmd_SetError | Device command - set error
3001.00h | DEV_ErrorReg | Error register
3002.00h | DEV_Status | Status register
3020.00h | DEV_Code | Device code
3020.01h | DEV_SubCode | Device subcode
3020.02h | DEV_Revision | Revision code
3020.06h | DEV_McCpuId | CPU identity code
3023.00h | DEV_VersionSw | Software version
3023.01h | DEV_SubVersionSw | Software subversion
3023.02h | DEV_RelVersionSw | Softwarerelease
3024.00h | DEV_VersionHw | Hardware version
3025.00h | DEV_CustomerCode | Customer code
3025.01h | DEV_CustomerSwOption | Customer software code
3025.02h | DEV_CustomerHwOption | Customer hardware code
302C.00h | DEV_FreeData | Free data
302D.01h | DEV_Article_Nr | Device article number
302D.02h | DEV_Serial_Nr | Device serial number
302E.00h | DEV_OemData_Cmd | OEM data - command
302E.01h | DEV_OemData_D0 | OEM data - D0
302E.02h | DEV_OemData_D1 | OEM data - D1
302E.03h | DEV_OemData_D2 | OEM data - D2
302E.04h | DEV_OemData_D3 | OEM data - D3
302E.05h | DEV_OemData_D4 | OEM data - D4
302E.06h | DEV_OemData_D5 | OEM data - D5
302E.07h | DEV_OemData_D6 | OEM data - D6
302E.08h | DEV_OemData_D7 | OEM data - D7
302E.09h | DEV_OemData_D8 | OEM data - D8
302E.0Ah | DEV_OemData_D9 | OEM data - D9
302F.00h | DEV_UserData_Cmd | User data - command
302F.01h | DEV_UserData_D0 | User data - D0
302F.02h | DEV_UserData_D1 | User data - D1
302F.03h | DEV_UserData_D2 | User data - D2
302F.04h | DEV_UserData_D3 | User data - D3
3031.00h | DEV_MaxUp | Max. I/O supply voltage
3060.00h | DEV_DoutError | Output assignment - error
3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset
3110.00h | IO_AIN_Voltage_Ue | Electronic voltage - Ue
3114.00h | IO_AIN_Temperature_Power | Temperature - electronics
3120.00h | IO_DIN_P0 | Digital inputs - Port0
3120.01h | IO_DIN_P1 | Digital inputs - Port1
3150.00h | IO_DOUT_P0 | Digital outputs - Port0
3154.00h | IO_DOUT_Enable | Enable digital outputs
3158.00h | IO_DOUT_LedsEnable | LED - enable user control
3158.01h | IO_DOUT_LedsState | LED - state
3850.00h | SYS_Clock | System clock
3850.02h | SYS_Timer_2ms | System timer 2ms
3CE0.00h | COM_ASI_Cmd | ASI command
3CE0.06h | COM_ASI_Baudrate | ASI baud rate
3F00.00h | DIAG_Enable | Diagnostic - write enable
3FA0.00h | DIAG_SIM_Control | Diagnostic - enable simulation of I/O's
3FA1.00h | DIAG_SIM_AIN_Mask | Diagnostic - ain simulation - mask
3FA2.00h | DIAG_SIM_AIN_ValueAin0 | Diagnostic - ain simulation - value of ain0
3FA2.01h | DIAG_SIM_AIN_ValueAin1 | Diagnostic - ain simulation - value of ain1
3FA3.00h | DIAG_SIM_DIN_Mask | Diagnostic - din simulation - mask
3FA4.00h | DIAG_SIM_DIN_Value | Diagnostic - ain simulation - value of digital inputs


Content - Parameters 3000h (DSA) - Device commands

3000.00h | DEV_Cmd | Device command
3000.08h | DEV_Cmd_SetError | Device command - set error


3000.00h Device command

Name | DEV_Cmd
Designation | Device command
Data type | uint8
Access | write only
Attributs | -
Value range | {0h, 1h, 80h, 81h, 82h, 83h}
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.01.20
Devices | All
PLC Function | Cmd(value)
Cross reference | -

Description

Writing to this parameter executes a device command.

Parameter values:
Hex | Dec | Name | PLC function | Description
00h | 0 | CMD_Nop | - | No operation
01h | 1 | CMD_ClearError | ClearError() | Potential errors are cleared. If the drive was enabled before an error occurred, the drive will be enabled (Only if the problem is solved and no more errors exist) .
80h | 128 | CMD_StoreParam | StoreParam() | Stores actual parameters of the 3000 range in the internal EEPROM (non-volatile memory).
81h | 129 | CMD_RestoreParam | RestoreParam() | Restores and activates the parameters from the EEPROM. Also, this is done automatically during the initialisation of the device. The restoring is verified by a checksum (CRC32). If the checksum is not correct, default values are used and the device shows an error.
82h | 130 | CMD_DefaultParam | DefaultParam() | All parameters are set to default values. (They are not stored in the EEPROM).
83h | 131 | CMD_ClearParam | ClearParam() | Runs the commands CMD_DefaultParam and CMD_StoreParam successively.
Attention
The execution time of CMD_StoreParam, CMD_RestoreParam, CMD_DefaultParam and CMD_ClearParam can be a couple of seconds.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                    # NodeId = 1

d.SdoWr(0x3000, 0x00, 0x01)   # clear error
d.SdoWr(0x3000, 0x00, 0x82)   # set default parameter


3000.08h Device command - set error

Name | DEV_Cmd_SetError
Designation | Device command - set error
Data type | int16
Access | write only
Attributs | -
Value range | [-32768 .. 32767]
Default value | -
Unit | -
Operating mode | All
Available since | 1.71.01.11
Devices | All
PLC Function | SetError(value)
Cross reference | DEV_Cmd

Description

Via this parameter the user can set individual errors e.g. to simulate an error.
Setting this parameter runs a general internal error procedure with the assigned value. Thereby, the parameter DEV_ErrorReg will be set to this value.

Attention !
The device will switch to an error status, when this parameter is set to value unequal 0.

Error values <= -30000 can't be cleared by a "ClearError" command, because they are fatal errors. To clear these errors, restart the device.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                            # NodeId = 1

d.SdoWr(0x3000, 0x08, -20001)         # set own error


3002.00h Status register

Name | DEV_Status
Designation | Status register
Data type | uint32
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | GetStatus()
Cross reference | DEV_Cmd

Description

Provides the value of the status register. Every bit of this register has got its own meaning (see table).

Assignment of the bits:
Bit | Name | Description for bit = 1
1 | STAT_Error | An error has occurred. You can find the error code in DEV_ErrorReg.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d      = Dsa(1)                     # NodeId = 1

status = d.SdoRd(0x3002, 0x00)      # status read

if status & 0x0002:                 # check the bit 1
   print "An error has occured"
else:
   print "No error"


3031.00h Max. I/O supply voltage

Name | DEV_MaxUp
Designation | Max. I/O supply voltage
Data type | const uint32
Access | read only
Attributs | -
Value range | [0 .. 4294967295]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DevMaxUp()
Cross reference | -

Description

Provides the maximum permissible voltage of I/O power supply.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                                      # NodeId = 1

# DEV_MaxUp - print max.power voltage
print "Up_max =", d.SdoRd(0x3031, 0x00), "[mV]"


Content - Parameters 3000h (DSA) - IO assignment

3060.00h

DEV_DoutError

 Output assignment - error


Content - Parameters 3000h (DSA) - Analog inputs

3100.00h | IO_AIN0 | Analog input 0
3101.00h | IO_AIN1 | Analog input 1
3108.00h | IO_AIN0_Offset | Analog input 0 - offset
3108.01h | IO_AIN1_Offset | Analog input 1 - offset


3100.00h Analog input 0

Name | IO_AIN0
Designation | Analog input 0
Data type | int16
Access | read only
Attributs | -
Value range | [-10000 .. 10000]
Default value | -
Unit | [mV]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Ain(nr)
Cross reference | IO_AIN0_Offset,

Description

Provides the voltage in [mV] of the analogue input 0.

The value of parameter is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

for i in range(0,10):
   print d.SdoRd(0x3100, 0x00), "mV" # print voltage at analog input 0
   time.sleep(1)                     # wait for 1s


3108.00h Analog input 0 - offset

Name | IO_AIN0_Offset
Designation | Analog input 0 - offset
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.76
Devices | All
PLC Function | AinOffset(nr, value)
Cross reference | IO_AIN0,

Description

Using this parameter you can set the offset of analogue input 0.

The value of the parameter IO_AIN0 is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN0
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN0_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x00, -3000)         # IO_AIN0_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x00, i*1000)     # IO_AIN0_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3100, 0x00), "mV" # IO_AIN0 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


3108.01h Analog input 1 - offset

Name | IO_AIN1_Offset
Designation | Analog input 1 - offset
Data type | int16
Access | read / write
Attributs | Save
Value range | [-10000 .. 10000]
Default value | 0
Unit | [mV]
Operating mode | All
Available since | 1.85.00.76
Devices | All
PLC Function | AinOffset(nr, value)
Cross reference | IO_AIN1,

Description

Using this parameter you can set the offset of analogue input 1.

The value of the parameter IO_AIN1 is calculated as follows:

Uain = Uad - Uoffset

where:
    Uain     - value of parameter IO_AIN1
    Uad      - value of A/D converter (A/D = Analog/Digital)
    Uoffset  - value of parameter IO_AIN1_Offset

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                           # NodeId = 1

d.SdoWr(0x310A, 0x01, 3000)          # IO_AIN1_DeadBand - 3000 mV

for i in range(0,10):
   d.SdoWr(0x3108, 0x01, i*1000)     # IO_AIN1_Offset - 1000 mV, 2000 mV, 3000 mV ... 9000 mV
   print d.SdoRd(0x3101, 0x00), "mV" # IO_AIN1 - get voltage at anaologe input 0
   time.sleep(1)                     # wait 1 sec


3114.00h Temperature - electronics

Name | IO_AIN_Temperature_Power
Designation | Temperature - electronics
Data type | int16
Access | read only
Attributs | -
Value range | -
Default value | -
Unit | [0.1°C]
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | AinTemp()
Cross reference | -

Description

Provides the actual temperature of electronics.

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                 # NodeId = 1

# print actual temperature
for i in range(0,10):
   print "T =", d.SdoRd(0x3114, 0x00)/10.0, "°C"
   time.sleep(1)           # wait 1 seconds


3120.00h Digital inputs - Port0

Name | IO_DIN_P0
Designation | Digital inputs - Port0
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | DinP0(), Din(nr)
Cross reference | -

Description

Provides the actual status of the digital inputs of the device.

The numbers of digital inputs can vary according to the device (see technical data).

Bit assignment:
Bit-no. | Meaning
0 | Digital input 0
1 | Digital input 1
2 | Digital input 2
3 | Digital input 3
4 | Digital input 4
5 | Digital input 5
6 | Digital input 6
7 | Digital input 7

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                             # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3120, 0x00))    # Print the state of dig. inputs
   time.sleep(1)                       # wait 1 seconds


3120.01h Digital inputs - Port1

Name | IO_DIN_P1
Designation | Digital inputs - Port1
Data type | uint8
Access | read only
Attributs | -
Value range | [0 .. 255]
Default value | -
Unit | -
Operating mode | All
Available since | 1.00.00.00
Devices | All
PLC Function | Din(nr)
Cross reference | -

Description

Provides the actual status of the digital inputs of the device.

The numbers of digital inputs can vary according to the device (see technical data).

Bit assignment:
Bit-no. | Meaning
0 | Digital input 8
1 | Digital input 9
2 | Digital input 10
3 | Digital input 11
4 | Digital input 12
5 | Digital input 13
6 | Digital input 14
7 | Digital input 15

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *
import time

d = Dsa(1)                             # NodeId = 1

for i in range(0,10):
   print hex(d.SdoRd(0x3120, 0x01))    # Print the state of dig. inputs
   time.sleep(1)                       # wait 1 seconds


3154.00h Enable digital outputs

Name | IO_DOUT_Enable
Designation | Enable digital outputs
Data type | uint8
Access | read / write
Attributs | -
Value range | [0h .. FFh]
Default value | FFh
Unit | -
Operating mode | All
Available since | 1.85.00.08
Devices | All
PLC Function | -
Cross reference | DEV_DoutError, IO_DOUT_P0, ,

Description

With the help of this parameter digital outputs can be locked or unlocked.

This is only valid for the parameter 3150.00h (IO_DOUT_P0), the firmware itself can set the outputs
furthermore.

The lock prevents that the state of the digital output is changed accidentally or unjustified, when the output is already used by internal functions of the firmware (e.g. brake management, error output, etc.).

The amount of digital outputs, which are available, depends on the device (see technical data of the device).

Bit assignment:
Bit-Nr. | Meaning
0 | digital output 0 (=1 enable, =0 disable)
1 | digital output 1 (=1 enable, =0 disable)
2 | digital output 2 (=1 enable, =0 disable)
3 | digital output 3 (=1 enable, =0 disable)
4 | digital output 4 (=1 enable, =0 disable)
5 | digital output 5 (=1 enable, =0 disable)
6 | digital output 6 (=1 enable, =0 disable)
7 | digital output 7 (=1 enable, =0 disable)

Example

# -*- coding: iso-8859-1 -*-
from mc.dsa import *

d = Dsa(1)                  # NodeId = 1

# enable digital output of Port0 with bitmask
set_dout = 0x02             # set only bit 1 (dout1)
d_out = (d.SdoRd(0x3154, 0x00) | set_dout)
d.SdoWr(0x3154, 0x00, d_out)

# disable digital output of Port0 with bitmask
reset_dout = 0x01          # reset only bit 0 (dout0)
d_out = (d.SdoRd(0x3154, 0x00) & ~reset_dout)
d.SdoWr(0x3154, 0x00, d_out)

# print the digital output of Port0
print "enable_Dout =", hex(d.SdoRd(0x3154, 0x00))


Content - MPU2

Introduction

Language elements

Built-in functions

How can I create a new MPU2 program?

How can I execute the MPU2 program on the device?

Remote control of a MPU program

Compiler

Execution time

Diagnosis / simulation mode

Examples


Introduction

What is "MPU2"?

The devices from ENGEL are versatile. To adapt the existing functionality optimally to the realities in the application, the user has the opportunity to write small application-specific programs. MPU stands for "Motion Process Unit". This unit for programming of logic functions and processes (PLC functionality) was developed by ENGEL. The first version of the MPU was based on an assembler similar syntax. To enable faster development, MPU2 was developed. The second version of the MPU is based on the programming language "Python".

What is "Python"?

Excerpt from Wikipedia:

"Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Its syntax is said to be clear and expressive. Python has a large and comprehensive standard library. Python supports multiple programming paradigms, including object-oriented, imperative and functional programming styles. It features a fully dynamic type system and automatic memory management, similar to that of Scheme, Ruby, Perl and Tcl. Like other dynamic languages, Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts. Using third-party tools, Python code can be packaged into standalone executable programs. Python interpreters are available for many operating systems. CPython, the reference implementation of Python, is free and open source software and has a community-based development model, as do nearly all of its alternative implementations. CPython is managed by the non-profit Python Software Foundation."

Why is "MPU2" inspired by "Python"?

The Python programming language has significant advantages, which contribute to MPU2:
  • simple syntax
  • easy to learn
  • easy to read
  • widespread

Differences between "MPU2" and "Python"

MPU2 has only a subset of the Python functionality.

There are the following restrictions:
  • No classes
  • No real numbers (real constants are mathematically transformed into Integer32)
  • No lists
  • No tuples
  • No strings
  • A maximum of one return value in functions
  • "import" only in the following form: from my_modul import *
Other differences:
  • The source code is compiled instead of being interpreted

Differences between "MPU2" and "MPU"

The main differences between the two MPU generations:
  • MPU was based on an assembler similar syntax. MPU2 is based on the Python syntax.
  • The programmer does not have to work with the "akku" or the registers "0x5050 1... 7". The compiler uses them automatically.


Language elements

Line indent

Instruction lines which have the same indentation in a row, form a block of statements. It corresponds to the bracket {/ * statements * /} from the C language.

# Python / MPU2:
if a == 100:
   b = 1
   c = 2
   d = 3

# Basic:
if a=100 then
   b = 1
   c = 2
   d = 3
endif

# 'C':
if (a==100)
{
   b = 1;
   c = 2;
   d = 3;
}

Comments

Comments in the source code are useful to give hints about complex instructions in the program. This facilitates maintenance of the source code.

#              <---- A hash sign starts a comment line

'''            <---- Signs (3 x ') for the beginning and the end of a block comment
Comment
'''

Variables

It is possible to assign a number to a name. Write the name of the variable on the left side and the corresponding literal on the right side of the equal sign.

my_var = 12                         # Assignment of a variable

my_var1 = my_var2 = my_var3 = 222   # Assignment of multiple variables with the same value
These variables can be used after the assignment within the program by using the specified name instead of the desired value.

my_result = my_var + 20             # Assignment of a variable
The result of this operation was directly assigned to another variable name ("my_result"). "my_result" has now the value 32.

The name of a variable, also known as identifier, can consist of all the letters of the english alphabet, an underscore "_" and all digits. The leading character has to be a letter or an underscore. Digits are not allowed as the leading character. The variable names are treated case sensitive. "my_result" does not comply with "my_Result".

The following identifiers are known as keywords and may not be used as variable names:

and
assert
break
class
continue
def
del
elif
else
except
exec
finally
for
from
global
if
import
in
is
lambda
not
or
pass
print
raise
return
try
while
yield
All variables and constants in MPU2 are of data type Int32!

Constants

Constants are binary numbers, which do not change during the runtime of the program. They are optimized by the compiler during the compiling of the MPU2 program and replaced by the corresponding numbers at all points in the program. In the compiled program, the constants are therefore no longer available.

The following identifiers are interpreted as constants:

FACTOR = 123               # All capitals
ERR_VelocityLow = -50      # All capitals before the first "_"
During compilation, the constants are optimized. The compiler calculates expressions with constants and replaces them with the results of the calculation.

a = FACTOR + 5*6           # The compiler calculates the expression "FACTOR + 5 * 6" and replaces it with 153

All variables and constants in MPU2 are of data type Int32!

Note: Constants are rounded at the end of the calculation!

Operations

Arithmetic operations

An arithmetic operator is applied to two binary numbers.

x = 11 ** 2    # x = 121     Power (11²)

x = 11 * 2     # x = 22      Multiplication of two values
x = 11 / 2     # x = 5       Integer division of two values
x = 11 % 2     # x = 1       Modulo (remainder of a division)

x = 11 + 1     # x = 12      Addition of two values
x = 11 - 1     # x = 10      Subtraction of two values

# Shortened notations
x *= 2         # corresponds to: x = x * 2
x /= 2         # corresponds to: x = x / 2
x %= 2         # corresponds to: x = x % 2

x += 1         # corresponds to: x = x + 1
x -= 1         # corresponds to: x = x - 1

Logical operations

A logical operator is a function that returns a boolean value. FALSE equals the value 0. All values ​​other than 0 correspond to TRUE.

a = b < c      # a is TRUE if b is smaller than c
a = b <= c     # a is TRUE if b is equal or smaller than c
a = b > c      # a is TRUE if b is bigger than c
a = b >= c     # a is TRUE if b is equal or bigger than c
a = b <> c     # a is TRUE if b is not equal to c
a = b != c     # a is TRUE if b is not equal to c
a = b == c     # a is TRUE if b is equal to c

a = b is c     # a is TRUE if b is equal to c
a = b is not c # a is TRUE if b is not equal to c

a = not b      # a is TRUE if b is 0

a = b and c    # a is TRUE if b and c are not 0

a = b or c     # a is TRUE if at least one value of the variables b or c is not 0

Bitwise operations

A bitwise operator is applied to bit strings or binary numbers at the level of individual bits.

# NOT
~x             # One's complement => logical negation of each bit (each 1 becomes 0, and vice versa)
               # ~ 0111
               # = 1000

# LEFT SHIFT
x << y         # The bits are shifted y-positions to the left. Thereby it is filled up with zeros from the right.
               #    00111100
               # <<        2
               # =  11110000
# RIGHT SHIFT
x >> y         # The bits are shifted y-positions to the right. Thereby it is filled up with the sign bit from the left.
               #    11110000           01110000
               # >>        2        >>        2
               # =  11111100        =  00011100

# AND
x & y          # Two bit strings of equal length are linked by an AND, by combining the bits of the same location with a logical conjunction.
               # For each pair, the result bit is 1 if both bits are 1, otherwise the result bit is 0.
               #   0101
               # & 0011
               # = 0001

# XOR
x ^ y          # Two bit strings of equal length are linked by an XOR, by combining the bits of the same location with a logical XOR operation.
               # For each pair, the result bit is 1 if the two bits are different, otherwise the result bit is 0.
               #   0010
               # ^ 1010
               # = 1000

# OR
x | y          # Two bit strings of equal length are linked by an OR, by combining the bits of the same location with a logical disjunction.
               # For each pair, the result bit is 1 if at least one of the bits is 1, otherwise the result bit is 0.
               #   0101
               # | 0011
               # = 0111

# Shortened notations
x <<= y        # corresponds to: x = x << y
x >>= y        # corresponds to: x = x >> y

x  &= y        # corresponds to: x = x  & y

x  ^= y        # corresponds to: x = x  ^ y

x  |= y        # corresponds to: x = x  | y

Operator precedence

If there are several operators in one expression, they are performed in a specific order. The first operator in the table binds most compared to the others.

x ** y | y power of x
~x | Bitwise complement of x
+x, -x | Positive or negative sign
x * y x / y x % y x // y | Product of x and y Quotient of x and y (integer division because MPU2 calculates only with Int32) Remainder of integer division of x by y Integer division of x by y
x + y x – y | Sum of x and y Difference of x and y
x << n x >> n | Bitwise shift by n positions to the left Bitwise shift by n positions to the right
x & y | Bitwise AND between x and y
x ^ y | Bitwise XOR between x and y
x | y | Bitwise OR between x and y
x < y x <= y x > y x >= y x <> y x != y x == y | Is x smaller than y? Is x equal or smaller than y? Is x bigger than y? Is x equal or bigger than y? Is x not equal to y? Is x not equal to y? Is x equal to y?
x is y x is not y | Is x equal to y? Is x not equal to y?
not x | Logical negation
x and y | Logical AND
x or y | Logical OR

Functions

In MPU2 own functions can be defined. The functions can be implemented without a return value or with a maximum one return value.

#=================================================================
# Own function without return value
def SetError(error_code):
   Sp(0x3000, 0x08, error_code)           # Device command - set error

# Call of the function
SetError(-1000)

#=================================================================
# Own function with return value
def GetPosition():
   position = Gp(0x3762, 0x00)            # Current position
   return position

# Call of the function
my_position = GetPosition()

#=================================================================
# Own function with return value and several parameters
def GetScaledPosition(scaling_numerator, scaling_denominator):
   position = Gp(0x3762, 0x00)            # Current position
   return ScaleDbl(position, scaling_numerator, scaling_denominator) # position * (scaling_numerator/scaling_denominator)

# Call of the function
my_position = GetScaledPosition(2, 3)     # Scales the current position by a factor of 2/3

Conditional statements

Conditional statements link a code block to a condition, so that it is only executed if the condition is met.

if, elif, else

An if statement consists of an instruction head, which includes a condition, and a code block as an instruction body.

If the logical condition is true, the code block is executed. (see logical operations)

# Simple 'if'-statement
condition = 1
if condition:
   DoSomething()                                # Code block is executed if the condition is TRUE
else:
   DoSomethingDifferent()                       # Code block is executed if the condition is FALSE

# 'if'-statement with multiple queries
var = 3
if var == 1:
   DoSomething()                                # Code block is executed if the condition 'var == 1' is TRUE
elif var == 2:
   DoSomethingTest()                            # Code block is executed if all previous conditions are FALSE and the condition 'var == 2' is TRUE
else:
   DoSomethingDifferent()                       # Code block is executed if all previous conditions are FALSE

Loops

while

A while loop is used to execute a block of code continuously as long as a certain condition is met.
Basically a while loop consists of a loop head with the loop condition, and a loop body with the code block to be executed.

# Simple 'while'-loop
condition = 1
while condition:
   condition = DoSomething(i)                   # Checks the condition of the 'while'-loop
   DoSomethingDifferent()

# Infinite 'while'-loop
while 1:
   pass                                         # Empty statement

Similar to an if statement, a while loop can be expanded by an else branch.

# 'while'-loop with 'else'-branch
condition = 1
while condition:
   condition = DoSomething(i)                   # Checks the condition of the 'while'-loop
   another_condition = DoSomethingDifferent(i)  # Checks another condition
   if another_condition:                        # If the second condition is true, the 'while'-loop will be canceled by the 'break'
      break
else:
   DoSomethingDifferent()                       # The 'else'-branch is executed if the 'while'-loop is not canceled by a 'break'

for

A for loop is used to execute a block of code a certain number of cycles.
Basically a for loop consists of a loop head with the loop condition, and a loop body with the code block to be executed.

# Simple 'for'-loop with stop value
for i in xrange(10):       # corresponds to: for i in xrange(0, 10):
   DoSomething(i)          # Iterates through the loop and increments i by 1 every time
                           # In this case i assumes the values 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9.

# 'for'-loop with defined start value, stop value and step size
for i in xrange(2, 20, 5):
   DoSomething(i)          # Iterates through the loop and increments i by 5 every time
                           # In this case i assumes the values 2, 7, 12, and 17.

# Backwards running 'for'-loop with defined start value, stop value and step size
for i in xrange(10, 0, -1):
   DoSomething(i)          # Iterates through the loop and decrements i by 1 every time
                           # In this case i assumes the values 10, 9, 8, 7, 6, 5, 4, 3, 2 and 1.

# Simple 'for'-loop with 'continue'
for i in xrange(10):
   condition = DoSomething(i)    # Checks a condition
   if condition:                 # If the condition is TRUE, the 'for'-loop will go on with the next iteration without executing the 'DoSomethingDifferent()'
      continue
   DoSomethingDifferent()

Similar to an if statement, a for loop can be expanded by an else branch.

# Simple 'for'-loop with 'else'-branch
for i in xrange(10):
   condition = DoSomething(i)    # Checks a condition
   if condition:                 # If the condition is TRUE, the 'for' loop is canceled by the 'break'
      break
else:
   DoSomethingDifferent()        # The 'else'-branch is executed, if the 'for'-loop is not canceled by a 'break'


Built-in functions

The following functions are available in MPU2

Function call
 Descripption
 Example

Sp(index, subindex, value)

Set local parameter

index = Index of the parameter
subindex = Subindex of the Parameter
value = value which is set

Sp(0x3000, 0x10, 1500)

Gp(index, subindex)

Read local parameter

index = Index of the parameter
subindex = Subindex of the Parameter

Result = Gp(0x3002, 0x00)

Spx(index, subindex, value)

Set parameter of external device

index = Index of the parameter
subindex = Subindex of the Parameter
value = value which is set

Spx(0x3000, 0x10, 1500)

Spx(node_id, index, subindex, value)

Set parameter of external device

node_id = Node id of the external device
index = Index of the parameter
subindex = Subindex of the parameter
value = value which is set

Spx(15, 0x3000, 0x10, 1500)

Gpx(index, subindex)

Read parameter of external device

index = Index of the parameter
subindex = Subindex of the parameter

Result = Gpx(0x3002, 0x00)

Gpx(node_id, index, subindex)

Read parameter of external device

node_id = Node id of the external device
index = Index of the parameter
subindex = Subindex of the Parameter

Result = Gpx(7, 0x3002, 0x00)

SpxGpx_NodeId(node_id)

Set CANopen node id for Spx and Gpx

node_id = Node id of the external device

SpxGpx_NodeId(7)

SpxGpx_Timeout(time_ms)

Set timeout in [ms] for Spx and Gpx

time_ms = Timeout in milliseconds

SpxGpx_Timeout(500)

SpxGpx_TxCobId(tx_cob_id)

Set TxCobId for Spx and Gpx

tx_cob_id = COB-ID of the TxSDO

SpxGpx_TxCobId(0x600)

SpxGpx_RxCobId(rx_cob_id)

Set RxCobId for Spx and Gpx

rx_cob_id = COB-ID of the RxSDO

SpxGpx_RxCobId(0x580)

abs(value)

Returns the absolute value of a number

value = base value which is converted to an absolute value

Result = abs(-34599)

Delay(time_ms)

MPU program waits active the specified time in [ms] => use with care!

time_ms = Waiting time in milliseconds

Delay(1000)

Clock()

Returns the current system time in [ms]

timestamp = Clock()

DiffClock(timestamp)

Returns the difference between the current system time and the given time stamp in [ms]. Overflow protected.

timestamp = time stamp, which gets subtracted from the actual time

Result = DiffClock(timestamp)

Scale(value, nominator, denominator)

Returns a scaled value. Calculation is done in float, afterwards rounded and casted as Int32. value * (nominator/denominator)

value = base value which is scaled
nominator = nominator of the scaling factor
denominator = denominator of the scaling factor

Result = Scale(1900, 17, 32)

ScaleDbl(value, nominator, denominator)

Returns a scaled value. Calculation is done in double, afterwards rounded and casted as Int32. value * (nominator/denominator)

value = base value which is scaled
nominator = nominator of the scaling factor
denominator = denominator of the scaling factor

Result = ScaleDbl(2000, 5, 7)

Boost(value)

Weight of the allocated CPU time for the MPU is changed (at the cost of communication)

value = Extent of the change in allocated CPU time

Boost(10)

Boostshot(steps)

One-time increase of the allocated CPU time for the next number of steps(steps) of the MPU and starting these steps in a new computing cycle. After these steps have been done the allocated CPU time switches back to the prior allocated CPU time.

steps = Number of steps in a cycle which get increased allocated CPU time

Boostshot(4)

MpuSet(nr, value)

Set internal MPU parameter

nr = Number of the internal MPU parameter
value = value which is set

MpuSet(0x100, 0x0101 )

MpuGet(nr)

Read internal MPU parameter

nr = Number of the internal MPU parameter

Result = MpuGet(0x100)

Addr(variable)

Returns the address of the called variable as 4 bytes value (0x00IIIISS), where IIII=index and SS=subindex.

variable = Name of the variable, which address is returned

Address = Addr(meine_variable)

DefUserVar(name, value, descr, min_value, max_value)

Defines a global user variable, which gets an unchangeable address.. DefUserVar variable will always get the top address, even if they are defined below other variables. The value of DefUserVar variables can also be stored in the EEPROM with the command "store" ( MPU_Cmd - MPU_CMD_Store). That way they are not initialized when the controller is restarted.

name = Name of the variable
value = Value with which the variable gets initialized
descr = Description of the variable (information for external application, not used in the program)
min_value = smallest permitted value of the variable (information for external application, not used in the program)
max_value = largest permitted value of the variable (information for external application, not used in the program)

DefUserVar(name = "my_variable", value = 10, descr = "Example variable", min_value = 0x0, max_value = 0xFFFF)


How can I create a new MPU2 program?

There are several ways to create a new MPU2 program. Decide for yourself which option better suits your needs.

1. Create a new program with edcTools

If you want to configure the device via edcTools, you can export the completed configuration as a MPU2 program.
This creates a template with an initialization routine to load your configuration at the start of the MPU2 program.

Procedure

  1. Open edcTools and connect your device to the computer, or click "Add virtual device (offline)".

  2. Now click "DSA Config".

  3. Perform the configuration of the device.
  4. Once you have configured all the parameters according to your needs, click on the tab "Export".
  5. Choose the export format "MPU2 program" on the right side.
  6. Select directly below the desired export filter.
    "only changed parameters" is recommended in order to preserve the clarity of your program.
  7. Click "Save as..." and select an appropriate file name for your MPU2 program.
  8. Now close edcTools and open the created file in "PLC - Python Script".
  9. Insert your desired logic in the main loop of the program (just below "while 1:").

2. Create a new program with the MPU2-template

If you do not need an initialization of the device or you know already what parameters need to be changed, you can simply suit the following template to your needs.

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : mpu2_template.py                                               *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 04.05.2015                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : MPU2 template                                                  *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
DefUserVar(name="AppId",      value=0x00000001, descr="App Identicikation Number",  min_value=0,   max_value=0xFFFFFFFF)   # Unique identifier of the application
DefUserVar(name="AppVersion", value=0x01000102, descr="App Version Number",         min_value=0,   max_value=0xFFFFFFFF)   # Version of the application e.g. 01.00.01.02

# Global variables for user interface -----------------------------------------
DefUserVar(name="Cmd",  value=0, descr="Commando",    min_value=0,   max_value=0xFF)   # Command
DefUserVar(name="Mode", value=7, descr="Device Mode", min_value=0,   max_value=0xFF)   # Device mode

# Constants -------------------------------------------------------------------
# Compiler interprets the following symbols as constants:
#     FACTOR = 123                     # All capitals
#     ERR_VelocityLow = -50            # All capitals before the first "_"
BOOSTLEVEL  = 10                       # MPU boost level (to speed up the execution)
CONST_OTHER = 0x10

# Global helper variables -----------------------------------------------------
LoopCnt = 0
LastCmd = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
def Func1 (par1):
   return par1

# Initialization - controller -------------------------------------------------
def InitPars ():
   # Example configuration of a controller => must be customized to fit your application

   Sp(0x3004,0, 0)                     # Disable power stage

   Sp(0x3000,0, 0x01)                  # Clear error
   Sp(0x3000,0, 0x82)                  # Load default parameters

   Sp(0x3900,0, 1)                     # Motor type = brushless

   Sp(0x3350,0, 0x096A)                # Vel/Pos feedback from incremental encoder
   Sp(0x3550,0, 0x096A)                # SVel feedback from incremental encoder

   Sp(0x3962,0, 2000)                  # Encoder resolution

   Sp(0x3732,0, 1000)                  # Position following error - window

   Sp(0x3210,0, 100)                   # Current controller Kp
   Sp(0x3211,0, 100)                   # Current controller Ki

   Sp(0x3310,0, 100)                   # Vel/Pos controller Kp
   Sp(0x3311,0, 0)                     # Vel/Pos controller Ki
   Sp(0x3312,0, 0)                     # Vel/Pos controller Kd
   Sp(0x3314,0, 1000)                  # Vel/Pos controller Kvff

   Sp(0x3510,0, 100)                   # SVel controller Kp
   Sp(0x3511,0, 100)                   # SVel controller Ki

   Sp(0x3003,0, Mode)                  # Mode = positioning mode

# Main program ================================================================
Boost(BOOSTLEVEL)                      # Set MPU boost level
InitPars()                             # Perform initialization

# Main loop -------------------------------------------------------------------
while 1:
   LoopCnt += 1

   #- Command evaluation ------------------------------------------------------
   # Code is only executed if a new command was sent
   if Cmd != LastCmd:
      if Cmd == 0:
         pass     # Do nothing => e.g. to reset the last command

      elif Cmd == 1:
         Func1(0)

      else:
         Sp(0x3000, 0x08, 0xFF06)      # Set error "unknown command"
      LastCmd = Cmd

Explanation of the template

The template has been designed to simplify the overview of a MPU2 program. If you stick to the template, this will facilitate maintenance of the program enormously.

Header

Start with the header and enter all the available information about your program here.

Global variables for program identification

Assign an identifier for your program and a version number. This facilitates the diagnosis in the field, because you can directly read the version of your program that is used on the devices.

Use the function DefUserVar() to define global variables with a unchangeable address. The first variable will get the address 5101.01h, the seconde 5101.02h, the third 5102.01h, the forth 5102.02h and so on.

Global variables for user interface

Create here all the variables that you want to read from external source.

Use the function DefUserVar() to define global variables with a unchangeable address. The first variable will get the address 5101.01h, the seconde 5101.02h, the third 5102.01h, the forth 5102.02h and so on.

Constants

Create all the constants of the program here. The compiler interprets variables as constants if they are fully capitalized, or all the characters in front of a "_" are capitalized.

FACTOR = 123 # All capitals
ERR_VelocityLow = -50 # All capitals before the first "_"
In the constants, you can change the execution time of the program. To do so, modify the constant "BOOSTLEVEL" to an appropriate value.

Initialization - simulation

If you want to simulate the program on the PC, enter the correct CANopen node address of your device in SpGp_NodeId().

Initialization - controller

Enter your desired configuration of the device here. This configuration is loaded each time the MPU2 program starts.

Helper functions

In this section, you can put all the necessary helper functions.

Global helper variables

In this section, you can define global variables that are important for program execution, but of no interest to external requests from e.g. an user interface.

Main loop

Program your desired logic within the main loop. The template has already an example how to evaluate a command from an external source.


How can I execute the MPU2 program on the device?

To run a MPU2 program directly on the device, the program has to be compiled before and then transmitted to the device.
There are two different ways to realize this function.

1. edcTools - MPU2 Tool

With the MPU2 tool MPU programs can be compiled, loaded to the device and controlled. Also status information, such as the size of the program or MPU error codes are shown.

Choose the Programm file by pressing the button Open and selecting the according file. Then you can select if you want to compile only, start the programm after downloading it and if you want to store the programm in the EEPROM of the device. When you have made all options click on Compile and Load to trasmit the program to the device.

Description of buttons:
  • Clear Error - clears MPU error.
  • Start - starts the MPU program if it is not start automatically or if it was stopped.
  • Break - stops the MPU program and holds it.
  • Continue - continues the MPU program at the point were it was stopped manually by pressing the Break button.
  • Delete - deletes the MPU program.

2. The Run() function.

Procedure

  1. Create for every MPU2 program a separate file that has the same file name as your MPU2 program plus an additional "_run".

    Example:     Your MPU2 program has the file name "my_program.py". The corresponding run-file should be called "my_program_run.py".

  2. Copy and modify the following source code to meet your requirements in the newly created file.

    # -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "my_program.py",              # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed

  3. Run the run-file in PLC.

Parameter explanation

The behavior of the Run() function can be changed by the following transfer parameters.

  • node_id:
    Here, the CANopen node id of the device has to be entered onto which the MPU2 program should be transferred.

  • prg_filename:
    Here, the relative path to your MPU2 source file is specified from which the program is loaded and compiled.

  • mpu_filename:
    Here, the relative path to an already compiled MPU2 program is specified (if prg_filename not specified).
    This allows you to create pre-built programs and transfer them to the device, without the source code being visible for others.

  • store:
    The MPU2 program is stored on the device and is also available after a power reset.

  • start:
    The MPU2 program will start automatically after the transfer to the device.

  • dump:
    This affects the output of the compiler.

    Bit 0 = Compiled code of the MPU2 program is displayed
    Bit 1 = Global variables are displayed
    Bit 2 = Internal program labels are displayed

    Example: dump = 3 Code and global variables are displayed (bits 1 and 0 are 1 => 3)


Remote control of a MPU program

There are generally two different ways to remote control a MPU programm

1 edcTools - MPU2 Tool

With the MPU2 tool MPU programs can be controlled. In the MPU informations and status window basic information about the actual programm on the device can be read

To control the MPU programm use the following buttons:
  • Clear Error - clears MPU error.
  • Start - starts the MPU program if it is not start automatically or if it was stopped.
  • Break - stops the MPU program and holds it.
  • Continue - continues the MPU program at the point were it was stopped manually by pressing the Break button.
  • Delete - deletes the MPU program.

2. PLC with scripts

Start MPU

The MPU program on the device can be started by an external source.

# -*- coding: iso-8859-1 -*-
from mc.dsa  import *      # Imports the necessary libraries
from mc.mpu2 import *

d = Dsa(1)                 # Creates an instance of the class' dsa 'with CANopen node address '1'
m = Mpu(d)                 # Creates an instance of the class 'Mpu'

print "Starts the MPU program on the device..."
m.Prg.Start()              # Starts the MPU program on the device - corresponds to 'd.Sp(0x5000, 0, 2)'
print "...done."

Stop MPU

The MPU program on the device can be stopped by an external source.

# -*- coding: iso-8859-1 -*-
from mc.dsa  import *      # Imports the necessary libraries
from mc.mpu2 import *

d = Dsa(1)                 # Creates an instance of the class' dsa 'with CANopen node address '1'
m = Mpu(d)                 # Creates an instance of the class 'Mpu'

print "Stops the MPU program on the device..."
m.Prg.Break()              # Stops the MPU program on the device - corresponds to 'd.Sp(0x5000, 0, 3)'
print "...done."

Continue MPU

The MPU program on the device can be continued, after it was stopped by an external source.

# -*- coding: iso-8859-1 -*-
from mc.dsa  import *      # Imports the necessary libraries
from mc.mpu2 import *

d = Dsa(1)                 # Creates an instance of the class' dsa 'with CANopen node address '1'
m = Mpu(d)                 # Creates an instance of the class 'Mpu'

print "Continue MPU program on the device..."
m.Prg.Continue()           # Continues the MPU program on the device - corresponds to 'd.Sp(0x5000, 0, 4)'
print "...done."

Clear MPU

The MPU program on the device can be cleared by an external source.

# -*- coding: iso-8859-1 -*-
from mc.dsa  import *      # Imports the necessary libraries
from mc.mpu2 import *

d = Dsa(1)                 # Creates an instance of the class' dsa 'with CANopen node address '1'
m = Mpu(d)                 # Creates an instance of the class 'Mpu'

print "Clear MPU program on the device..."
m.Prg.Break()              # Stops the MPU program on the device        - corresponds to 'd.Sp(0x5000, 0, 3)'
d.Sp(0x3004, 0, 0)         # Disables the power stage of the controller - Command only available on controllers => Uncomment this line for other devices!
m.Prg.Clear()              # Clears the MPU program on the device       - corresponds to 'd.Sp(0x5000, 0, 0x83, timeout=500)'
print "...done."


Compiler

To run a MPU2 program on a device of the company ENGEL, the compiler has to translate it into machine language at first. Afterwards the program is transferred to the device. All this is performed by the Run() function.

Constants

Constants are binary numbers, which do not change during the runtime of the program. These are optimized by the compiler during the compiling of the MPU2 program and they are replaced by the corresponding numbers at all points in the program. In the compiled program, the constants are therefore no longer available.

The following identifiers are interpreted as constants:

FACTOR = 123               # All capitals
ERR_VelocityLow = -50      # All capitals before the first "_"

Optimizations of the compiler

Optimizations are done during the compilation of program to save memory of the controller and to speed up the execution.

The following instructions are optimized in the source code:

# The following line is ignored by the compiler.
from mc._pymc_builtins_ import *    # ignored

# If the condition of an 'if' statement is a constant and is not TRUE, the statement body is ignored.
if 0:
   a = 100                       # ignored
   b = a + 1                     # ignored

# If the condition of a 'while' loop is a constant and is not TRUE, the loop body is ignored.
while 0:
   a = 100                       # ignored
   b = a + 1                     # ignored

# The following code block will be ignored by the compiler as the compiler sets the constant 'PYMC' to TRUE, and thus the condition is not true.
if not PYMC:
   SpGp_NodeId(1)                # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)               # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Expressions with constants are optimized at compile time.
a = 1 + 5*6                      # The compiler calculates the expression "1 + 5 * 6" and replaces it with 31.

# It should be noted that the constants are rounded at the end of the calculation (during compile time).
a = (100 / 3) * 3                # a corresponds to 99, because "100 / 3 = 33" (integer division, since all constants are Int32) => "33 * 3 = 99"
# but
a = (100.0 / 3) * 3              # a corresponds to 100, because "100.0 / 3 = 33.333333..." (float division) => "33.333333... * 3 = 100"

# In contrast, variables at run time are always divided by an integer division.
a = 100.0
b = 3
c = (a / b) * b                  # c corresponds to  99, beacuse "100 / 3 = 33" (integer division, since all constants are Int32) => "33 * 3 = 99"

Built-in compiler constants

The built-in compiler constants can be evaluated within the MPU2 program at compile time.
The following constants are available:

  • PYMC_VERSION
    Version of the compiler

  • PYMC
    Version of the compiler

  • MPU_VERSION
    Minimum required version of MPU2 in the device firmware

  • MPU
    Minimum required version of MPU2 in the device firmware


Execution time

The firmware of the device has several responsibilities. The MPU is one of these responsibilities. The firmware jumps cyclically to MPU and processes commands of the program. Since other functions are more important for the correct function of the controller (control, communication, etc.), the MPU has a lower priority.
The workload of the more important responsibilities affects the execution time of the MPU. For example, if the sampling rate of the position controller is set smaller, less computing time remains for the MPU. By the command "Boost" the weighting of the computation time can be changed to the benefit of the MPU program and to the cost of the communication.

Note: Avoid the usage of the Delay() function in your program, because the MPU waits active at this point. This slows down your program considerably. Instead, use DiffClock(), and a state machine as shown in the example "waiting for an event".

Measurement of the execution time

There are 2 different ways to measure the execution time of the MPU2 program. The difference between the ways is the resolution and accuracy of the measured values​​, and the workload required to prepare the measurement.

1. DiffClock (effort: low, resolution: 1 ms)

Prior to the measured code section, add the line

TimeStampStart = Clock() # Measurement of the start time

After the code section to be measured, add the line

ElapsedTime = DiffClock(TimeStampStart) # Elapsed time in ms

Now you can read the variable ElapsedTime.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : benchmark_diffclock.py                                         *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 28.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Benchmark via DiffClock - Example                              *#
#* History  :                                                                *#
#*===========================================================================*#

# Global variables for user interface -----------------------------------------
BoostLevel     = 0                              # MPU boost level (to speed up the execution)
Loops          = 1000                           # Loop amount for the benchmark
ElapsedTime    = 0                              # Elapsed time in ms

# Global helper variables -----------------------------------------------------
TimeStampStart = 0                              # Start time of the program

# Initialization - simulation -------------------------------------------------
if not PYMC:
   Sp(0x5000,0, 3)                              # Stop MPU program
   raise Exception("The benchmark can't be executed in simulation mode. Start only via the Run-file!")

# Main program ================================================================
Boost(BoostLevel)                               # Set MPU boost level

# Main loop -------------------------------------------------------------------
while 1:
   TimeStampStart = Clock()                     # Measurement of the start time

   # Insert your source code to be measured here ( may correspond to the content of the MainLoop )
   a = 0                                        # This line is an example
   for i in xrange(0, Loops):
      a += 1                                    # This line is an example

   ElapsedTime = DiffClock(TimeStampStart)      # Elapsed time in ms

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "benchmark_diffclock.py",     # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed

# Request or change of the variables of the MPU2 program.
# m.GlobalVars contains all variables of the MPU2 program.
if m:
   import time

   d = m.Dev                                             # d = Dsa instance

   print "Starting MPU2 benchmark via Diffclock..."

   device_code = (d.SdoRd(0x3020,0)<<16) | d.SdoRd(0x3020,1)
   version     = (d.SdoRd(0x3023,0)<<16) | d.SdoRd(0x3023,1)

   print "DeviceCode                   = %04X.%04X" % (((device_code>>16) & 0xFFFF), (device_code & 0xFFFF))
   print "Firmware version             = %X.%02X.%02X.%02X" % ((version>>24)&0xFF, (version>>16)&0xFF, (version>>8)&0xFF, (version>>0)&0xFF)
   print "Boost level                  = %d"          % d.SdoRd(m.GlobalVars.BoostLevel)
   print ''

   while 1:
      time.sleep(0.5)                                    # Wait 500ms until next request, to prevent distortion of the result.
      elapsed_time = d.SdoRd(m.GlobalVars.ElapsedTime)   # Read the elapsed time
      print "Time for loop cycle: %s ms" % (elapsed_time)

2. Benchmark (effort: higher, resolution: up to 1µs)

If you need an accurate measurement of the time behavior, please use the following sample code.
Your program is executed only once and the execution time of the relevant code sections is measured.
If you need more measurement points, you can create more variables like "Time01" from the example.
Note that your program must be finite for the measurement, in explanation it should not be done in a while loop.
Copy the code section to be measured to the appropriate place in the example (without "while 1:").

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : benchmark.py                                                   *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 28.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Benchmark - Example                                            *#
#* History  :                                                                *#
#*===========================================================================*#

# Global variables for user interface -----------------------------------------
BoostLevel = 0                                  # MPU boost level (to speed up the execution)
Loops      = 1000                               # Loop amount for the benchmark
TimeLoop   = 0                                  # Time for a complete cycle of the loop (empty)
Time01     = 0                                  # Time for the first code section
TimeAll    = 0                                  # Time for the complete code
Done       = 1                                  # Initialization of the Done variable => do not change!

# Initialization - simulation -------------------------------------------------
if not PYMC:
   Sp(0x5000,0, 3)                              # Stop MPU program
   raise Exception("The benchmark can't be executed in simulation mode. Start only via the Run-file!")

# Main program ================================================================
Boost(BoostLevel)                               # Set MPU boost level

# Time measurement for a complete cycle of the loop (empty) --------------------
time_loop_start = Clock()
for i in xrange(0, Loops):
   pass
TimeLoop = DiffClock(time_loop_start)

a = 0                                           # This line is an example
time_start = Clock()                            # Measurement of the start time

for i in xrange(0,Loops):
   # Insert your source code to be measured here ( may correspond to the content of the MainLoop, but without while 1 )
   a += 1                                       # This line is an example

time_end = Clock()
Time01 = time_end - time_start - TimeLoop

TimeAll = DiffClock(time_start)                 # Measurement of the complete execution time
Done    = 2                                     # Program done!

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "benchmark.py",               # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed

# Request or change of the variables of the MPU2 program.
# m.GlobalVars contains all variables of the MPU2 program.
if m:
   import time

   d = m.Dev                                 # d = Dsa instance

   print "Starting MPU2 benchmark..."

   while 1:
      time.sleep(1.0)                        # Wait a second until next request, to prevent distortion of the result.
      if d.SdoRd(m.GlobalVars.Done) == 2:    # Termination condition => program is completed
         break

   print "...MPU2 program has passed through all loop cycles. Done!"

   Loops = d.SdoRd(m.GlobalVars.Loops)       # Reads the amount of the processed loops

   # Function to calculate the execution time in µs
   def GetExecTime (var):
      return float(d.SdoRd(var))/Loops * 1000

   device_code = (d.SdoRd(0x3020,0)<<16) | d.SdoRd(0x3020,1)
   version     = (d.SdoRd(0x3023,0)<<16) | d.SdoRd(0x3023,1)

   print "DeviceCode                   = %04X.%04X" % (((device_code>>16) & 0xFFFF), (device_code & 0xFFFF))
   print "Firmware version             = %X.%02X.%02X.%02X" % ((version>>24)&0xFF, (version>>16)&0xFF, (version>>8)&0xFF, (version>>0)&0xFF)
   print "Boost level                  = %d"          % d.SdoRd(m.GlobalVars.BoostLevel)
   print ''
   print "Execution time for loop      = %10.1f [µs]" % GetExecTime(m.GlobalVars.TimeLoop)
   print "Execution time Time01        = %10.1f [µs]" % GetExecTime(m.GlobalVars.Time01)
   print ''

   # Enter the execution time of the last benchmark here, to calculate changes!
   TimeLast = 10000
   TimeAll  = d.SdoRd(m.GlobalVars.TimeAll)

   print "Complete execution time      = %d [ms] (Delta = %.3f [%%])" % (TimeAll, (float(TimeAll)-float(TimeLast))/TimeLast * 100.0)


Diagnosis / simulation mode

There are various methods to analyze the behavior of a MPU program.

General information in edcTools

You can display the most important information about the device and the MPU in edcTools. To do so, choose the module "DSA Status."

You see at a glance the current setpoints, actual values​​, limitations, the status register of the device and information about the MPU.
This can be very helpful in the initial diagnosis.

Simulation mode

In the development of a more complex MPU2 program, it is recommended to use the simulation mode. In this mode the MPU program is directly executed on the computer. Meanwhile the Motion Process Unit on the device is stopped. The computer reads and writes variables to the device through the CAN bus.
This has the advantage because you can view messages and variable values ​​with the "print" command directly within PLC. It should be noted, that the maximum program size can be exceeded during development, without being noticed at an early stage. Also the time behaviour of the MPU2 program is different, because the execution is delayed by the communication via CAN bus.

To start a program in simulation mode, launch the program directly (without a run-file).

Conditions

To start the simulation mode, the following conditions must necessarily be fulfilled:

# 1. The following 'import' must be present
from mc._pymc_builtins_ import *    # Import for simulation on PC

# 2. The following 3 lines must necessarily be present
if not PYMC:
   SpGp_NodeId(1)                # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)               # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# 3. All objects must be read exclusively via the Gp() and set via the Sp() function.
position = Gp(0x3762, 0x00)      # Read actual position
Sp(0x3762, 0x00, 1000)           # Set actual position to 1000

# 4. In case of accessing global variables within a function, the variables must be declared as 'global' at the beginning of the function.
MyTestVar = 10

def IncrementMyTestVar():
   global MyTestVar              # absolutely necessary, otherwise the simulation mode doesn't know this variable
   MyTestVar += 1
   return MyTestVar

test_var = IncrementMyTestVar()
print "Test_var = %s" % (test_var)  # Output of the variable

Output of messages and variable values with the "print" command

Use the print command to analyze the behavior of your program.

from mc._pymc_builtins_ import *

if not PYMC:
   SpGp_NodeId(1)
   Sp(0x5000,0, 3)

while 1:
   system_clock = Gp(0x3850, 0x00)
   print "Actual position: %s  Actual system time: %s" % (Gp(0x3762, 0x00), system_clock)    # Print values of variables

   if system_clock > 10000:
      print "System time is bigger than 10000 ms"                                            # Print message

Reading of variable via edcTools - MPU2 Tool

With this tool all global variables of the MPU program can be read. The name, address (Index and Subindex) as well as the value of the variables is shown. It can also write values in the variables. The variables can be polled automatically or read manually.

Reading of variables via script

You can read and use the CAN objects of a device by using a Python script. For example, you can write a script that stores data into a file at a certain event.

Python script

Create a Python script like in this example in order to read the objects and variables. You must know the object index and subindex of each MPU2 variable. These are displayed while compiling the MPU2 program (if you have it enabled in "dump").

from mc.dsa import Dsa
import time

d = Dsa(1)                    # d = Dsa instance with the CANopen node id of the device

# Read variables
var1 = d.SdoRd(0x5101, 0x01)  # 0x5101.01 is the first variable in the MPU program
var2 = d.SdoRd(0x5101, 0x02)  # 0x5101.02 is the second variable in the MPU program

# Write variables
d.SdoWr(0x5101, 0x01, 5)      # Set 0x5101.01 to 5
d.SdoWr(0x5101, 0x02, 10)     # Set 0x5101.02 to 10

# Cyclically read and "print" variables
while True:
   time.sleep(0.5)                                    # Wait 500ms before each query to not to overload the bus
   print "Variable 1: %s   Variable 2: %s" % (d.SdoRd(0x5101, 0x01), d.SdoRd(0x5101, 0x02))
   print "Position: %s" % (d.SdoRd(0x3762, 0x00))     # Read object 0x3762.00

Run-file

You can access the objects and variables in a run-file of a MPU2 program in the following way:

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run
import time

m = Run(node_id       = 1,                                     # CANopen node address of the device
        prg_filename  = "mein_programm.py",                    # File name of the MPU2 program
        mpu_filename  = None,                                  # Optional file name of a compiled MPU2 program
        store         = False,                                 # True = MPU2 program is stored in the device after transmission
        start         = True,                                  # True = MPU2 program is started in the device after transmission
        dump          = 2)                                     # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                               #      Bit 1 = Global variables are displayed
                                                               #      Bit 2 = Internal program labels are displayed

# Request or change of the variables of the MPU2 program.
# m.GlobalVars contains all variables of the MPU2 program.
if m:
   d = m.Dev                                             # d = Dsa instance

   # Read variables
   var1 = d.SdoRd(m.GlobalVars.MyVariable1)              # MyVariable1 is an example variable of the MPU program
   var2 = d.SdoRd(m.GlobalVars.MyVariable2)              # MyVariable2 is an example variable of the MPU program

   # Write variables
   d.SdoWr(m.GlobalVars.MyVariable1, 5)                  # Set MyVariable1 to 5
   d.SdoWr(m.GlobalVars.MyVariable2, 10)                 # Set MyVariable1 to 10

   # Cyclically read and "print" variables
   while True:
      time.sleep(0.5)                                    # Wait 500ms before each query to not to overload the bus
      print "Variable 1: %s   Variable 2: %s" % (d.SdoRd(m.GlobalVars.MyVariable1), d.SdoRd(m.GlobalVars.MyVariable2))
      print "Position: %s" % (d.SdoRd(0x3762, 0x00))     # Read object 0x3762.00

Reading of variables via PLC CAN Monitor

A CAN monitor is included in the program PLC. With this monitor it is possible to read and change the CAN objects of a device.

Perform the following steps in order to read a CAN object:
  1. Open PLC
  2. Open the CAN monitor in PLC

3. Follow the steps in the first image
    1. Click "New CAN Object"
    2. Enter a name for the CAN Object
    3. Select "SDO"
    4. Enter the node id of your device
    5. Click "OK"

4. Follow the steps in the second image
    1. Select the newly created object
    2. Click "New CAN-Variabel"
    3. Enter a name for the CAN variable
    4. Enter the index of the variable
    5. Enter the sub-index of the variable
    6. Click "OK"

5. Select the newly created object and press "CTRL + R" for reading or "CTRL + T" for writing the variable.


Content - Examples

Switch LEDs

Mask and shift

Read digital inputs

State machine

Wait for an event

Control via digital inputs

Rel. positioning via analog input

Start homing

Communication within MPU2

Display

mcSPI-V2


Switch LEDs

It is possible to change the state of the LED's of the device within the MPU.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_leds.py                                                   *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 30.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for control of the LEDs                                *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3158,0, 1)                     # Activate LED - user control

# Main program ================================================================
InitPars()                             # Perform initialization

# Main loop -------------------------------------------------------------------
while 1:
   for i in xrange(0,3):
      Sp(0x3158,1, 1<<i)               # Set LED state (Bit0 = Power, Bit1 = Status, Bit2 = Error)
      Delay(300)                       # Wait 300ms

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_leds.py",               # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


Mask and shift

Since a variable within the MPU consists of 4 bytes (Integer32), it would be inefficient to use the full 4 bytes of memory for any information that requires only one bit (boolean-values​​). By masking the individual bits, up to 32 different boolean values ​ can be stored in one single variable.

Such a mask can be created for example by bit-shifting.

MASK_1 = 1 << 4      # corresponds to the following mask: 0000 0000 0000 0000 0000 0000 0001 0000
MASK_2 = 1 << 31     # corresponds to the following mask: 1000 0000 0000 0000 0000 0000 0000 0000
MASK_3 = 0xFFFF      # corresponds to the following mask: 0000 0000 0000 0000 1111 1111 1111 1111
MASK_4 = 0xEF00FFFF  # corresponds to the following mask: 1110 1111 0000 0000 1111 1111 1111 1111

Useful functions

With the following functions, states of bits and edge changes can be detected and bits can be deleted, set and inverted. To do so, call the appropriate function with the desired mask.

#----------------------------------------------------------
# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

#----------------------------------------------------------
# Edge detection 1->0 of Bit "mask"
def IsBitEdgeChangeToLow(last, new, mask):
   return ((new ^ last) & last) & mask

#----------------------------------------------------------
# Detects whether certain bits are set
def IsBitHigh(value, mask):
   return (value & mask)

#----------------------------------------------------------
# Detects whether certain bits are not set
def IsBitLow(value, mask):
   return (value ^ mask) & mask

#----------------------------------------------------------
# Sets the certain bits that are set in the mask to high
def SetBitsToHigh(value, mask):
   return (value | mask)

#----------------------------------------------------------
# Resets the certain bits that are set in the mask to low
def SetBitsToLow(value, mask):
   return (value & (~mask))

#----------------------------------------------------------
# Inverts the certain bits that are set in the mask
def InvertBits(value, mask):
   return (value ^ mask)


Read digital inputs

Since the state of the digital inputs can change at any time, you should read the state of the inputs only once per cycle at a central location in your program.
Otherwise it may cause unpredictable conditions.

Since many switches or relays can bounce, you should use a filter function to read the state of the digital inputs, which detects the bounce. The following example shows such a function.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_read_digital_inputs.py                                    *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 30.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for reading of the digital inputs                      *#
#*                                                                           *#
#*    This application is controlled via digital inputs.                     *#
#*    The digital inputs are interpreted as the following:                   *#
#*                                                                           *#
#*     din3..0  = Command                                                    *#
#*     din4     = Command trigger                                            *#
#*                                                                           *#
#*    If a rising edge is detected at din4 (command trigger),                *#
#*    then the command (din3..0) is executed. So it is possible              *#
#*    to define up to 16 different commands. In this example the following   *#
#*    commands have been implemented:                                        *#
#*                                                                           *#
#*     0     Clear error               (din3..0 = Low)                       *#
#*     1     Disable power stage       (din1 = high)                         *#
#*     2     Enable power stage        (din2 = high)                         *#
#*                                                                           *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms

# Constants -------------------------------------------------------------------
DIN_BIT_TRIGGER = 0x10
DIN_MASK_CMD    = 0x0F

# Global helper variables -----------------------------------------------------
LastDin = 0
LastCmd = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)               # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Main program ================================================================
# Main loop -------------------------------------------------------------------
while 1:
   # Evaluation of the digital inputs -----------------------------------------
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      if IsBitEdgeChangeToHigh(LastDin, din, DIN_BIT_TRIGGER):
         Cmd = din & DIN_MASK_CMD
      LastDin = din

   # Command evaluation --------------------------------------------------------
   if Cmd != LastCmd:
      if Cmd == 0:
         Sp(0x3000,0, 1)                              # Clear error
      elif Cmd == 1:
         Sp(0x3004,0, 0)                              # Disable power stage
      elif Cmd == 2:
         Sp(0x3004,0, 1)                              # Enable power stage
      LastCmd = Cmd

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_read_digital_inputs.py",# File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


State machine

It is recommended to provide the main loop of a MPU2 program with a state machine.

This is a control concept, which assumes an abstract machine as a model that has an internal state. This state contains all the information about the operation of the machine. The machine works by passing from one state to another state and at such state transitions it performs actions. The current state and an event, e.g. pressing a button, result in the next state.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_statemachine.py                                           *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 30.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for the state machine in MPU2                          *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms

# Constants -------------------------------------------------------------------
STATE_Init                    = 0
STATE_Idle                    = 1
STATE_StartHoming             = 2
STATE_Wait4HomingDone         = 3
STATE_Move2Pos                = 4
STATE_Wait4Pos                = 5
STATE_Error                   = 6

CMD_BIT_StartPos              = (1<<2)
CMD_BIT_StartHoming           = (1<<1)
CMD_BIT_ClearError            = (1<<0)

DIN_BIT_TRIGGER               = 0x10
DIN_MASK_CMD                  = 0x0F

# Global helper variables -----------------------------------------------------
State                         = STATE_Init
LastState                     = STATE_Init
LastCmd                       = 0
LastDin                       = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Stores the current state in LastState and sets the next state
def NextState(state):
   global State, LastState
   LastState = State
   State     = state

# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Checks if there is an error and starts the error handling if necessary
def CheckError():
   if Gp(0x3001,0):
      NextState(STATE_Error)

# Evaluation of the digital inputs --------------------------------------------
def CheckInputs():
   global din, LastDin, Cmd
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      if IsBitEdgeChangeToHigh(LastDin, din, DIN_BIT_TRIGGER):
         Cmd = din & DIN_MASK_CMD
      LastDin = din

# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3004, 0x00, 0)                 # DEV_Enable - Disable
   Sp(0x3000, 0x00, 1)                 # DEV_Cmd - Clear error
   Sp(0x3000, 0x00, 0x82)              # DEV_Cmd - Default parameter

   Sp(0x3900, 0x00, 1)                 # MOTOR_Type
   Sp(0x3911, 0x00, 2)                 # MOTOR_Polarity

   Sp(0x3910, 0x00, 10)                # MOTOR_PolN
   Sp(0x3962, 0x00, 2000)              # MOTOR_ENC_Resolution

   Sp(0x3901, 0x00, 3000)              # MOTOR_Nn
   Sp(0x3902, 0x00, 24000)             # MOTOR_Un

   Sp(0x3350, 0x00, 2410)              # VEL_Feedback
   Sp(0x3550, 0x00, 2410)              # SVEL_Feedback

   Sp(0x3221, 0x00, 15000)             # CURR_LimitMaxPos
   Sp(0x3223, 0x00, 15000)             # CURR_LimitMaxNeg

   Sp(0x3003,0,7)                      # PosMode

# Main program ================================================================
# Main loop -------------------------------------------------------------------
while 1:
   CheckError()                              # Error check at each loop cycle
   CheckInputs()                             # Check of the digital inputs at each loop cycle

   #---------------------------------------------------------------------------
   if State == STATE_Init:
      InitPars()
      NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Idle:
      # Command evaluation -----------------------------------------------------
      if Cmd != LastCmd:
         if Cmd == CMD_BIT_StartHoming:
            NextState(STATE_StartHoming)     # Start homing
            LastCmd = Cmd
         elif Cmd == CMD_BIT_StartPos:
            NextState(STATE_Move2Pos)        # Start positioning
            LastCmd = Cmd

   #---------------------------------------------------------------------------
   elif State == STATE_StartHoming:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x37B2,0, 35)                       # Homing method => homing with actual position
      Sp(0x37B0,0, 1)                        # Start homing
      NextState(STATE_Wait4HomingDone)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4HomingDone:
      if Gp(0x37B1,0x00) & (1<<4):           # Homing was done successfully
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Move2Pos:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x3000,1,0)                         # Device command - exec on change - toggle command
      Sp(0x3000,0x10, 2000)                  # Device command - data0 - velocity
      Sp(0x3000,0x11, 10000)                 # Device command - data1 - target position
      Sp(0x3000,1,0x34)                      # Device command - exec on change - CMD_Movr
      NextState(STATE_Wait4Pos)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4Pos:
      if Gp(0x3002,0) & (1<<4):              # Target reached
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Error:
      error = Gp(0x3001,0)
      if error == 0:
         NextState(STATE_Idle)
      # Command evaluation -----------------------------------------------------
      else:
         Sp(0x3004,0, 0)                     # Disable power stage
         if (Cmd != LastCmd) and (Cmd == CMD_BIT_ClearError):
            Sp(0x3000,0,1)                   # Clear error
            LastCmd = Cmd

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_statemachine.py",       # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


Wait for an event

If you want to wait for a certain event, such as an edge change of a digital input or toggling of a status, follow the steps in the following example.
You can see how to do this in the best way at the states STATE_Wait4HomingDone and STATE_Wait4Pos.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_statemachine.py                                           *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 30.01.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for the state machine in MPU2                          *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms

# Constants -------------------------------------------------------------------
STATE_Init                    = 0
STATE_Idle                    = 1
STATE_StartHoming             = 2
STATE_Wait4HomingDone         = 3
STATE_Move2Pos                = 4
STATE_Wait4Pos                = 5
STATE_Error                   = 6

CMD_BIT_StartPos              = (1<<2)
CMD_BIT_StartHoming           = (1<<1)
CMD_BIT_ClearError            = (1<<0)

DIN_BIT_TRIGGER               = 0x10
DIN_MASK_CMD                  = 0x0F

# Global helper variables -----------------------------------------------------
State                         = STATE_Init
LastState                     = STATE_Init
LastCmd                       = 0
LastDin                       = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Stores the current state in LastState and sets the next state
def NextState(state):
   global State, LastState
   LastState = State
   State     = state

# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Checks if there is an error and starts the error handling if necessary
def CheckError():
   if Gp(0x3001,0):
      NextState(STATE_Error)

# Evaluation of the digital inputs --------------------------------------------
def CheckInputs():
   global din, LastDin, Cmd
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      if IsBitEdgeChangeToHigh(LastDin, din, DIN_BIT_TRIGGER):
         Cmd = din & DIN_MASK_CMD
      LastDin = din

# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3004, 0x00, 0)                 # DEV_Enable - Disable
   Sp(0x3000, 0x00, 1)                 # DEV_Cmd - Clear error
   Sp(0x3000, 0x00, 0x82)              # DEV_Cmd - Default parameter

   Sp(0x3900, 0x00, 1)                 # MOTOR_Type
   Sp(0x3911, 0x00, 2)                 # MOTOR_Polarity

   Sp(0x3910, 0x00, 10)                # MOTOR_PolN
   Sp(0x3962, 0x00, 2000)              # MOTOR_ENC_Resolution

   Sp(0x3901, 0x00, 3000)              # MOTOR_Nn
   Sp(0x3902, 0x00, 24000)             # MOTOR_Un

   Sp(0x3350, 0x00, 2410)              # VEL_Feedback
   Sp(0x3550, 0x00, 2410)              # SVEL_Feedback

   Sp(0x3221, 0x00, 15000)             # CURR_LimitMaxPos
   Sp(0x3223, 0x00, 15000)             # CURR_LimitMaxNeg

   Sp(0x3003,0,7)                      # PosMode

# Main program ================================================================
# Main loop -------------------------------------------------------------------
while 1:
   CheckError()                              # Error check at each loop cycle
   CheckInputs()                             # Check of the digital inputs at each loop cycle

   #---------------------------------------------------------------------------
   if State == STATE_Init:
      InitPars()
      NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Idle:
      # Command evaluation -----------------------------------------------------
      if Cmd != LastCmd:
         if Cmd == CMD_BIT_StartHoming:
            NextState(STATE_StartHoming)     # Start homing
            LastCmd = Cmd
         elif Cmd == CMD_BIT_StartPos:
            NextState(STATE_Move2Pos)        # Start positioning
            LastCmd = Cmd

   #---------------------------------------------------------------------------
   elif State == STATE_StartHoming:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x37B2,0, 35)                       # Homing method => homing with actual position
      Sp(0x37B0,0, 1)                        # Start homing
      NextState(STATE_Wait4HomingDone)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4HomingDone:
      if Gp(0x37B1,0x00) & (1<<4):           # Homing was done successfully
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Move2Pos:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x3000,1,0)                         # Device command - exec on change - toggle command
      Sp(0x3000,0x10, 2000)                  # Device command - data0 - velocity
      Sp(0x3000,0x11, 10000)                 # Device command - data1 - target position
      Sp(0x3000,1,0x34)                      # Device command - exec on change - CMD_Movr
      NextState(STATE_Wait4Pos)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4Pos:
      if Gp(0x3002,0) & (1<<4):              # Target reached
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Error:
      error = Gp(0x3001,0)
      if error == 0:
         NextState(STATE_Idle)
      # Command evaluation -----------------------------------------------------
      else:
         Sp(0x3004,0, 0)                     # Disable power stage
         if (Cmd != LastCmd) and (Cmd == CMD_BIT_ClearError):
            Sp(0x3000,0,1)                   # Clear error
            LastCmd = Cmd

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_statemachine.py",       # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


Control via digital inputs

The following example shows how to control an application via digital inputs.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_cmd_via_digital_inputs.py                                 *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 19.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for commands via digital inputs                        *#
#*                                                                           *#
#*    This application is controlled via digital inputs.                     *#
#*    The digital inputs are interpreted as the following:                   *#
#*                                                                           *#
#*     din0     => 0 = power stage disabled     / 1 = power stage enabled    *#
#*     din1     => 0 = stop with holding torque / 1 = movement active        *#
#*     din2     => direction reversal                                        *#
#*     ain0     => velocity setpoint                                         *#
#*                                                                           *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms

# Constants -------------------------------------------------------------------
DIN_MASK_CMD            = 0x07
DIN_MASK_CMD_PowerStage = 0x01
DIN_MASK_CMD_StartStop  = 0x02
DIN_MASK_CMD_MovingDir  = 0x04

# Global helper variables -----------------------------------------------------
LastDin        = 0
LastCmd        = 0
LastPowerStage = 0
LastStartStop  = 0
LastMovingDir  = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 on Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Detects whether certain bits are set
def IsBitHigh(value, mask):
   return (value & mask)

# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3004, 0x00, 0)                 # DEV_Enable - Disable
   Sp(0x3000, 0x00, 1)                 # DEV_Cmd - Clear error
   Sp(0x3000, 0x00, 0x82)              # DEV_Cmd - Default parameters

   Sp(0x3900, 0x00, 1)                 # MOTOR_Type
   Sp(0x3911, 0x00, 2)                 # MOTOR_Polarity

   Sp(0x3910, 0x00, 10)                # MOTOR_PolN
   Sp(0x3962, 0x00, 2000)              # MOTOR_ENC_Resolution

   Sp(0x3901, 0x00, 3000)              # MOTOR_Nn
   Sp(0x3902, 0x00, 24000)             # MOTOR_Un

   Sp(0x3350, 0x00, 2410)              # VEL_Feedback
   Sp(0x3550, 0x00, 2410)              # SVEL_Feedback

   Sp(0x3221, 0x00, 15000)             # CURR_LimitMaxPos
   Sp(0x3223, 0x00, 15000)             # CURR_LimitMaxNeg

   Sp(0x3003, 0x00, 3)                 # DEV_Mode

   Sp(0x310a, 0x00, 50)                # IO_AIN0_DeadBand

   Sp(0x3304, 0x00, 256)               # VEL_DesiredValue_Source
   Sp(0x3305, 0x00, 2000)              # VEL_DesiredValue_Reference

   Sp(0x3341, 0x00, 20)                # VEL_Acc_dT
   Sp(0x3343, 0x00, 20)                # VEL_Dec_dT
   Sp(0x3345, 0x00, 1)                 # VEL_Dec_QuickStop_dT

   Sp(0x3004, 0x00, 0)                 # DEV_Enable

# Main program ================================================================
InitPars()

# Main loop -------------------------------------------------------------------
while 1:
   # Evaluation of the digital inputs -----------------------------------------
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      Cmd = din & DIN_MASK_CMD
      LastDin = din

   # Command evaluation -------------------------------------------------------
   if Cmd != LastCmd:
      power_stage = IsBitHigh(Cmd, DIN_MASK_CMD_PowerStage)
      was_enabled = False
      if power_stage != LastPowerStage:
         if power_stage:
            Sp(0x3004,0, 1)                     # Power stage enable
            was_enabled = True
         else:
            Sp(0x3004,0, 0)                     # Power stage disable
         LastPowerStage = power_stage

      start_stop = IsBitHigh(Cmd, DIN_MASK_CMD_StartStop)
      if (start_stop != LastStartStop) or was_enabled:
         if start_stop:
            Sp(0x3000, 0x00, 0x04)              # Continue movement
         else:
            Sp(0x3000, 0x00, 0x02)              # QuickStop movement
         LastStartStop = start_stop

      moving_dir = IsBitHigh(Cmd, DIN_MASK_CMD_MovingDir)
      if moving_dir != LastMovingDir:
         abs_vel_ref = abs(Gp(0x3305, 0x00))
         # Direction reversal
         if moving_dir:
            Sp(0x3305, 0x00, -abs_vel_ref)      # Negative direction of rotation
         else:
            Sp(0x3305, 0x00, abs_vel_ref)       # Positive direction of rotation
         LastMovingDir = moving_dir

      LastCmd = Cmd

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                                  # CANopen node address of the device
        prg_filename  = "demo_cmd_via_digital_inputs.py",   # File name of the MPU2 program
        mpu_filename  = None,                               # Optional file name of a compiled MPU2 program
        store         = False,                              # True = MPU2 program is stored in the device after transmission
        start         = True,                               # True = MPU2 program is started in the device after transmission
        dump          = 2)                                  # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                            #      Bit 1 = Global variables are displayed
                                                            #      Bit 2 = Internal program labels are displayed


Rel. positioning via analog input

This example shows how to do a relative movement via analog input.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_position_analog_relative.py                               *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 23.10.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for relative positioning via analog input              *#
#*                                                                           *#
#*    This application is controlled via a digital input and an analog input.*#
#*                                                                           *#
#*    At a rising edge of the din0, the actual position is set to zero and   *#
#*    an absolute positioning to the calculated position is done as long as  *#
#*    din0 is set to HIGH.                                                   *#
#*                                                                           *#
#*    The digital inputs are interpreted as the following:                   *#
#*                                                                           *#
#*     din0     => 0 = Positioning to actual command position                *#
#*              => 1 = Absolute Positioning to calculated position           *#
#*     ain0     => Target position for absolute Positioning                  *#
#*                                                                           *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms
Velocity          = 500                # Velocity of the movement
PositionMax       = 5000               # Maximum relative position for 10V at the analog input
SampleTime        = 10                 # Time in ms until the next calculation of the position is done

# Constants -------------------------------------------------------------------
DIN_MASK_CMD            = 0x01
DIN_MASK_CMD_DoAbsPos   = 0x01
MASK_CMD_ToggleBit      = 0x80
CMD_HOME_SetPos         = 0x58
CMD_Mova                = 0x33
CMD_Movr                = 0x34

# Global helper variables -----------------------------------------------------
LastDin           = 0
LastCmd           = 0
LastToggleBit     = 0
LastSamplePoint   = 0
WasHomed          = False

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Edge detection 1->0 of Bit "mask"
def IsBitEdgeChangeToLow(last, new, mask):
   return ((new ^ last) & last) & mask

# Detects whether certain bits are set
def IsBitHigh(value, mask):
   return (value & mask)

# Inverts the certain bits that are set in the mask
def InvertBits(value, mask):
   return (value ^ mask)

# Executes a device command, with toggle bit
def ExecDevCommand(cmd, data0, data1, data2):
   global LastToggleBit
   LastToggleBit = InvertBits(LastToggleBit, MASK_CMD_ToggleBit)
   Sp(0x3000, 0x10, data0)
   Sp(0x3000, 0x11, data1)
   Sp(0x3000, 0x12, data2)
   Sp(0x3000, 0x01, cmd | LastToggleBit)

# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3003, 0x00, 7)                 # DEV_Mode

   Sp(0x310a, 0x00, 50)                # IO_AIN0_DeadBand

   Sp(0x3050, 0x00, 305)               # DEV_DinEnable          Power stage enabled on rising edge of din1
   Sp(0x3051, 0x00, -305)              # DEV_DinClearError      Clear error on falling edge of din1

   Sp(0x3004, 0x00, 1)                 # DEV_Enable

# Main program ================================================================
InitPars()

LastDin  = DigitalInputFilter(LastDin) # Initialization with start values => for edge detection
Cmd      = LastDin & DIN_MASK_CMD
LastCmd  = Cmd

# Main loop -------------------------------------------------------------------
while 1:
   # Evaluation of the digital inputs -----------------------------------------
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      Cmd = din & DIN_MASK_CMD
      LastDin = din

   # Command evaluation -------------------------------------------------------
   if Cmd != LastCmd:
      if IsBitEdgeChangeToHigh(LastCmd, Cmd, DIN_MASK_CMD_DoAbsPos):
         # Rising edge of the 'start positioning' input detected => set actual position to zero
         ExecDevCommand(CMD_HOME_SetPos, 0, 0, 0)
         WasHomed = True
      elif IsBitEdgeChangeToLow(LastCmd, Cmd, DIN_MASK_CMD_DoAbsPos):
         # Falling edge of the 'start positioning' input detected => start relative movement to actual command position
         ExecDevCommand(CMD_Movr, Velocity, 0, 0)
      LastCmd = Cmd

   if WasHomed and IsBitHigh(Cmd, DIN_MASK_CMD_DoAbsPos):
      if DiffClock(LastSamplePoint) > SampleTime:
         # Positioning is active => analog input is sampled and position is calculated => absolute positioning to calculated position
         LastSamplePoint = Clock()
         ain0_value = Gp(0x3100, 0x00)

         abs_pos = ((ain0_value/10) * PositionMax) / 1000
         if abs_pos > PositionMax:
            abs_pos = PositionMax
         elif abs_pos < -PositionMax:
            abs_pos = -PositionMax

         ExecDevCommand(CMD_Mova, Velocity, abs_pos, 0)

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                                  # CANopen node address of the device
        prg_filename  = "demo_position_analog_relative.py", # File name of the MPU2 program
        mpu_filename  = None,                               # Optional file name of a compiled MPU2 program
        store         = False,                              # True = MPU2 program is stored in the device after transmission
        start         = True,                               # True = MPU2 program is started in the device after transmission
        dump          = 2)                                  # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                            #      Bit 1 = Global variables are displayed
                                                            #      Bit 2 = Internal program labels are displayed


Start homing

To perform a homing, proceed as in the following example.
The initialization of the homing is performed once at the beginning of the program and is started by a state of the state machine (STATE_StartHoming). Afterwards it waits for a successful homing in the next state (STATE_Wait4HomingDone).

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_start_homing.py                                           *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 19.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for homing in MPU2                                     *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
Cmd               = 0                  # Command
InputFilterTime   = 10                 # Input filter time in ms

# Constants -------------------------------------------------------------------
STATE_Init                    = 0
STATE_Idle                    = 1
STATE_StartHoming             = 2
STATE_Wait4HomingDone         = 3
STATE_Move2Pos                = 4
STATE_Wait4Pos                = 5
STATE_Error                   = 6

CMD_BIT_StartPos              = (1<<2)
CMD_BIT_StartHoming           = (1<<1)
CMD_BIT_ClearError            = (1<<0)

DIN_BIT_TRIGGER               = 0x10
DIN_MASK_CMD                  = 0x0F

# Global helper variables -----------------------------------------------------
State                         = STATE_Init
LastState                     = STATE_Init
LastCmd                       = 0
LastDin                       = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Stores the current state in LastState and sets the next state
def NextState(state):
   global State, LastState
   LastState = State
   State     = state

# Reads the state of the digital inputs with a filter (prevents bouncing)
def DigitalInputFilter(last_din):
   din = Gp(0x3120,0)                                 # Read the state of the digital inputs
   if din != last_din:                                # Check if the input has changed
      time_start = Clock()                            # Read start time for filter
      while DiffClock(time_start) < InputFilterTime:  # Read state of the digital inputs during InputFilterTime in ms
         new_din = Gp(0x3120,0)                       # Read the state of the digital inputs
         if din != new_din:                           # Digital inputs have changed => bouncing? => do not apply a new value for the input!
            break
      else:                                           # Loop has been passed completely, without a change of the digital inputs
         last_din = din                               # Accept the new value of the digital inputs
   return last_din

# Edge detection 0->1 of Bit "mask"
def IsBitEdgeChangeToHigh(last, new, mask):
   return ((new ^ last) & new) & mask

# Checks if there is an error and starts the error handling if necessary
def CheckError():
   if Gp(0x3001,0):
      NextState(STATE_Error)

# Evaluation of the digital inputs --------------------------------------------
def CheckInputs():
   global din, LastDin, Cmd
   din = DigitalInputFilter(LastDin)
   if din != LastDin:
      if IsBitEdgeChangeToHigh(LastDin, din, DIN_BIT_TRIGGER):
         Cmd = din & DIN_MASK_CMD
      LastDin = din

# Initialization - controller -------------------------------------------------
def InitPars ():
   Sp(0x3004, 0x00, 0)                 # DEV_Enable - Disable
   Sp(0x3000, 0x00, 1)                 # DEV_Cmd - Clear error
   Sp(0x3000, 0x00, 0x82)              # DEV_Cmd - Default parameter

   Sp(0x3900, 0x00, 1)                 # MOTOR_Type
   Sp(0x3911, 0x00, 2)                 # MOTOR_Polarity

   Sp(0x3910, 0x00, 10)                # MOTOR_PolN
   Sp(0x3962, 0x00, 2000)              # MOTOR_ENC_Resolution

   Sp(0x3901, 0x00, 3000)              # MOTOR_Nn
   Sp(0x3902, 0x00, 24000)             # MOTOR_Un

   Sp(0x3350, 0x00, 2410)              # VEL_Feedback
   Sp(0x3550, 0x00, 2410)              # SVEL_Feedback

   Sp(0x3221, 0x00, 15000)             # CURR_LimitMaxPos
   Sp(0x3223, 0x00, 15000)             # CURR_LimitMaxNeg

   Sp(0x3003,0,7)                      # PosMode

   Sp(0x3055, 0x00, 304)               # DEV_DinLimitPos     - digital input 0 as limit input, high active

   Sp(0x37B2, 0x00, 18)                # POS_HomingMethod    - Homing with positive limit switch
   Sp(0x37B4, 0x00, 100)               # POS_HomingVelSwitch - Speed for switch detection
   Sp(0x37B4, 0x01, 50)                # POS_HomingVelZero   - Speed for zero point movement

# Main program ================================================================
# Main loop -------------------------------------------------------------------
while 1:
   CheckError()                              # Error check at each loop cycle
   CheckInputs()                             # Check of the digital inputs at each loop cycle

   #---------------------------------------------------------------------------
   if State == STATE_Init:
      InitPars()
      NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Idle:
      # Command evaluation -----------------------------------------------------
      if Cmd != LastCmd:
         if Cmd == CMD_BIT_StartHoming:
            NextState(STATE_StartHoming)     # Start homing
            LastCmd = Cmd
         elif Cmd == CMD_BIT_StartPos:
            NextState(STATE_Move2Pos)        # Start positioning
            LastCmd = Cmd

   #---------------------------------------------------------------------------
   elif State == STATE_StartHoming:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x37B0,0, 1)                        # Start homing
      NextState(STATE_Wait4HomingDone)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4HomingDone:
      if Gp(0x37B1,0x00) & (1<<4):           # Homing was done successfully
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Move2Pos:
      Sp(0x3004,0, 1)                        # Enable power stage
      Sp(0x3000,1,0)                         # Device command - exec on change - toggle command
      Sp(0x3000,0x10, 2000)                  # Device command - data0 - velocity
      Sp(0x3000,0x11, 10000)                 # Device command - data1 - target position
      Sp(0x3000,1,0x34)                      # Device command - exec on change - CMD_Movr
      NextState(STATE_Wait4Pos)

   #---------------------------------------------------------------------------
   elif State == STATE_Wait4Pos:
      if Gp(0x3002,0) & (1<<4):              # Target reached
         Cmd = 0                             # Reset Cmd to receive new commands
         LastCmd = 0                         # Reset LastCmd to receive new commands
         NextState(STATE_Idle)

   #---------------------------------------------------------------------------
   elif State == STATE_Error:
      error = Gp(0x3001,0)
      if error == 0:
         NextState(STATE_Idle)
      # Command evaluation -----------------------------------------------------
      else:
         Sp(0x3004,0, 0)                     # Disable power stage
         if (Cmd != LastCmd) and (Cmd == CMD_BIT_ClearError):
            Sp(0x3000,0,1)                   # Clear error
            LastCmd = Cmd

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_start_homing.py",       # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


Communication within MPU2

It is possible to communicate with other devices within the MPU.

In MPU2 there are two different ways. Either to configure a PDO mapping for both devices (example 1) or to communicate via SDO requests (example 2).

1. PDO mapping

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_communication_from_mpu_pdo.py                             *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 05.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for communication via PDO in MPU2                      *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Global variables for user interface -----------------------------------------
# The name of the variables must not be changed
SendVar1       = 0
SendVar2       = 0
ReceiveVar1    = 0
ReceiveVar2    = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Main program ================================================================
old_receive1 = 0
old_receive2 = 0

# Main loop -------------------------------------------------------------------
while 1:
   # Example: Counts the state changes of the RxPDOs
   if ReceiveVar1 != old_receive1:
      old_receive1 = ReceiveVar1
      SendVar1 += 1

   if ReceiveVar2 != old_receive2:
      old_receive2 = ReceiveVar2
      SendVar2 += 1

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                                     # CANopen node address of the device
        prg_filename  = "demo_communication_from_mpu_pdo.py",  # File name of the MPU2 program
        mpu_filename  = None,                                  # Optional file name of a compiled MPU2 program
        store         = False,                                 # True = MPU2 program is stored in the device after transmission
        start         = True,                                  # True = MPU2 program is started in the device after transmission
        dump          = 2)                                     # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                               #      Bit 1 = Global variables are displayed
                                                               #      Bit 2 = Internal program labels are displayed

# Request or change of the variables of the MPU2 program.
# m.GlobalVars contains all variables of the MPU2 program.
if m:
   d = m.Dev                                    # d = Dsa instance

   print "Parameterize PDOs..."

   # Parameterize Tx-PDO-Mapping
   #  +----+----+----+----+----+----+----+----+
   #  | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 |    Bytes of the Tx-PDO
   #  +----+----+----+----+----+----+----+----+
   #  |lsb            msb |lsb            msb |
   #  +---- SendVar1 -----+---- SendVar2 -----+    Assigned variables
   d.TxPdo_Mapping(1, [m.GlobalVars.SendVar1+[32], m.GlobalVars.SendVar2+[32]])
   #                                          ^                           ^
   #                                          +-- Data length in Bits     +-- Data length in Bits
   #                                              Possible data length: 8, 16, 32

   d.TxPdo_InhibitTime(1, 100)                  # TxPDO 1: Inhibit time in [100 µs]
   d.TxPdo_CobId(1, 0x180+d.NodeId)             # TxPDO 1: CobId of the PDO

   # Parameterize Rx-PDO-Mapping
   #  +----+----+----+----+----+----+----+----+
   #  | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 |    Bytes of the Rx-PDO
   #  +----+----+----+----+----+----+----+----+
   #  |lsb            msb |lsb            msb |
   #  +--- ReceiveVar1 ---+--- ReceiveVar2 ---+    Assigned variables
   d.RxPdo_Mapping(1, [m.GlobalVars.ReceiveVar1+[32], m.GlobalVars.ReceiveVar2+[32]])
   #                                             ^                              ^
   #                                             +-- Data length in Bits        +-- Data length in Bits
   #                                                 Possible data length: 8, 16, 32

   d.RxPdo_CobId(1, 0x200+d.NodeId)             # RxPDO 1: CobId of the PDO

   # In error case, the PDOs should not be disabled (CANopen remains in operational state).
   d.ErrorBehaviour(1, 1)                       # At Communication Error
   d.ErrorBehaviour(2, 1)                       # At Output Error
   d.ErrorBehaviour(3, 1)                       # At Input Error

   d.StartNode()                                # Activate PDOs now
   #d.AutoOperational(100)                       # After turning on the device, the PDOs are activated after 100ms.
   #d.SaveParam_Comm()                           # Store communication parameters

   print "...done."

2. SDO functions

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_communication_from_mpu_sdo.py                             *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 05.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for communication via SDO in MPU2                      *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Constants -------------------------------------------------------------------
CONST_NodeId_OtherDevice = 2           # CANopen node id of a controller

# Global helper variables -----------------------------------------------------
Position      = 0
PositionValid = 0
Another       = 0
AnotherValid  = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Checks if the last SDO request was successful
def CheckForCommunicationError():
   comm_error = Gp(0x3001, 0x20)             # Error register for SDO from MPU
   return comm_error != 0                    # Returns TRUE if an error occured

# Initialization - controller -------------------------------------------------
def InitPars ():
   SpxGpx_NodeId(CONST_NodeId_OtherDevice)   # Set CANopen node id for external communication

   if 1:
      # Activate "extended cob ids" for SDO communication
      SpxGpx_TxCobId(0x20000600)
      SpxGpx_RxCobId(0x20000580)
   else:
      # Activate "standard cob ids" for SDO communication
      SpxGpx_TxCobId(0x600)                  # Default
      SpxGpx_RxCobId(0x580)                  # Default

   Spx(0x3158,0, 1)                          # Activate LED - user control on 'OtherDevice'

# Main program ================================================================
InitPars()                                   # Perform initialization

# Main loop -------------------------------------------------------------------
while 1:
   Position = Gpx(0x3762, 0x00)              # Get actual position from 'OtherDevice'
   if not CheckForCommunicationError():
      PositionValid = Position

   Another  = Gpx(127, 0x3762, 0x00)         # Get actual position from node id 127
   if not CheckForCommunicationError():
      AnotherValid = Another

   for i in xrange(0,3):
      Spx(0x3158,1, 1<<i)                    # Set LED state on 'OtherDevice' (Bit0 = Power, Bit1 = Status, Bit2 = Error)
      Delay(300)                             # Wait 300ms

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                                     # CANopen node address of the device
        prg_filename  = "demo_communication_from_mpu_sdo.py",  # File name of the MPU2 program
        mpu_filename  = None,                                  # Optional file name of a compiled MPU2 program
        store         = False,                                 # True = MPU2 program is stored in the device after transmission
        start         = True,                                  # True = MPU2 program is started in the device after transmission
        dump          = 2)                                     # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                               #      Bit 1 = Global variables are displayed
                                                               #      Bit 2 = Internal program labels are displayed


Display

To display different custom texts on a terminal (e.g. mcPL-T1, mcPL-P4), proceed as in the following example.

MPU2-source code

It is recommended to create the functions DispClear() and DispPrintTxt(column, line, txt_nr) in the MPU2 source code.
DispClear() deletes the entire content of the display and DispPrintTxt(column, line, txt_nr) displays a predefined text (see "Run-file") in a desired row and column.

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_display.py                                                *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.00                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 05.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for displaying texts on the terminal                   *#
#* History  :                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Constants -------------------------------------------------------------------
CONST_NodeId_OtherDevice = 1           # CANopen node id of a controller

# Global helper variables -----------------------------------------------------
Counter     = 0                        # Initialize counter with 0
ActEncPos   = 0
Buttons     = 0

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions -----------------------------------------------------------
# Show predefined text in column, line
def DispPrintTxt (column, line, txt_nr):
   column &= 0xFF
   line   &= 0xFF
   Sp(0x3860,4, (column<<24) | (line<<16) | (txt_nr & 0xFFFF))

# Clear the content of the display
def DispClear ():
   Sp(0x3860,0, (0x0002<<16))

# Clear the content of one line
def DispClearLine (line):
   Sp(0x3860,0, (0x0002<<16) | (line & 0xFF))

# Initialization - controller -------------------------------------------------
def InitPars ():
   SpxGpx_NodeId(CONST_NodeId_OtherDevice)   # Set CANopen node id for external communication
   DispClear()                               # Clear the content of the display
   DispPrintTxt(4,1, 0)                      # Show header in column 4, line 1

# Main program ================================================================
InitPars()                                   # Perform initialization

# Main loop -------------------------------------------------------------------
while 1:
   Counter   += 1                            # Increment counter
   Integer    = Counter/100
   Fraction   = Counter%100

   ActEncPos  = Gpx(1, 0x396A,0)             # Read actual position from external device
   Buttons    = Gp(0x3861,4)                 # Read actual pushed buttons from the terminal

   DispPrintTxt(1,3, 1)                      # Show text 1 in column 1, line 3
   DispPrintTxt(1,4, 2)                      # Show text 2 in column 1, line 4
   DispPrintTxt(1,5, 3)                      # Show text 3 in column 1, line 5
   DispPrintTxt(1,6, 4)                      # Show text 4 in column 1, line 6
   Delay(100)                                # Wait 100ms

Run-file

The texts of the display can be defined in the "Run-file". You can directly access the global variables of the MPU2 program.

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run
from mc.display import *

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_display.py",            # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = False,                        # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed

# Request or change of the variables of the MPU2 program.
# m.GlobalVars contains all variables of the MPU2 program.
if m:
   d = m.Dev                                       # d = Dsa instance
   t = Display(d)

   # Prepare texts and store them in the device                                              # txt_nr for DispPrintTxt
   # In the MPU program, these texts are called via DispPrintTxt.
   t.AddText( "ENGEL - DEMO" )                                                           # 0
   t.AddText(("Counter  = %-6ld",  m.GlobalVars.Counter))      # (Text, [Output parameter])  # 1
   t.AddText(("Counter2 = %ld.%ld", m.GlobalVars.Integer, m.GlobalVars.Fraction))            # 2
   t.AddText(("Position = %-6ld",  m.GlobalVars.ActEncPos))                                  # 3
   t.AddText(("Buttons  = %-6ld",  m.GlobalVars.Buttons))                                    # 4

   t.StoreTexts()                                  # Stores the predefined texts in the device
   m.Prg.Start()                                   # Starts the MPU program


mcSPI-V2

The controllers of the EDC-Exx series of ENGEL have a SPI interface (mcSPI-V2) for connection to bus interfaces or expansion modules. Especially for the module variants there is a demand for customer specific extension functions. Therefore, an IC based on an ALTERA CPLD MAX3000A has been designed to realize these functions in supplementary or support boards. The mcSPI-IC1 is a module for expansion by 8 digital inputs and 8 digital outputs. In addition, a slave SPI interface can be used for the connection of AD / DA converters, real-time clock, LCD displays and EEPROMs. With the special addressing, up to 8 IC mcSPI-IC1 can be connected to a single controller. Because of the compact TQFP44 package, various additional functions can be implemented on small circuit boards.

It is possible to communicate with the SPI interface of the controller (if available) within the MPU via the mcSPI-V2 protocol. The following example shows the communication with the EEPROM AT25320 via mcSPI-V2 on the mcSPI-IC1-EVB Evaluation Board.

MPU2-source code

# -*- coding: iso-8859-1 -*-
#*===========================================================================*#
#*        Copyright (c) 1997-2013 by ENGEL. All rights reserved.         *#
#*                                                                           *#
#* File     : demo_mcSPI-V2_AT25320.py                                       *#
#*                                                                           *#
#* Project  : PLC                                                           *#
#* System   : MPU2                                                           *#
#* Version  : 1.02                                                           *#
#* Company  : ENGEL                                                      *#
#*                                                                           *#
#* Author   : ENGEL             mailto:                                  *#
#* Date     : 18.02.2013                                                     *#
#*---------------------------------------------------------------------------*#
#* Customer : ENGEL                                                      *#
#* Name     : Support                                                        *#
#* OrderNr. :                                                                *#
#* Descr.   : Example for communication with EEPROM AT25320 via mcSPI-V2     *#
#* History  :                                                                *#
#* 03.07.14 : ~SetBlockAddress() replaced by SetAddress()                    *#
#*(V1.01 MH):                                                                *#
#* 16.02.15 : ~SetAddress() => (block_address & 0x83) instead of 0x0F        *#
#*(V1.02 MH):                                                                *#
#*===========================================================================*#
from mc._pymc_builtins_ import *          # Import for simulation on PC

# Global variables for program identification ---------------------------------
AppId       = 0x00000001               # Unique identifier of the application
AppVersion  = 0x01000000               # Version of the application e.g. 01.00.00.00

# Constants -------------------------------------------------------------------
BLOCK_ADDR_IO     = 0x81               # Allows to use the I/Os on the chip
BLOCK_ADDR_SPI2   = 0x82               # Allows to transfer data to the slaves on the SPI2 channel (tunnels the SPI data through the chip to the slave)

# AT25320 instruction set
INST_WREN   = 0x06                     # 0000 X110 - EEPROM Write Enable Instruction
INST_WRDI   = 0x04                     # 0000 X100 - EEPROM Write Disable Instruction
INST_RDSR   = 0x0500                   # 0000 X101 - EEPROM Read Status Register
INST_WRSR   = 0x0100                   # 0000 X101 - EEPROM Write Status Register
INST_READ   = 0x03000000               # 0000 X011 - EEPROM Read Data Instruction
INST_WRITE  = 0x02000000               # 0000 X010 - EEPROM Write Data Instruction

# Global helper variables -----------------------------------------------------
ChipAddress = 0x00                     # mcSPI-IC1 Chip address
Status      = 0                        # Status register of the EEPROM
MemAddr     = 0x00AA                   # Memory address
MemData     = 0x00                     # Memory data

# Initialization - simulation -------------------------------------------------
if not PYMC:
   '''
   This section is executed when the program is launched directly in PLC.
   The MPU2 program is simulated on the PC (in combination with the device).
   This allows a simplified diagnosis because "print" commands are possible.
   NOTE: The timing of the program changes since the execution of the Sp()/Gp() functions
   is delayed by the communication between the PC and the device.

   If you don't want to use simulation mode, start the program using the Run() function.
   '''
   SpGp_NodeId(1)                      # Set the node id of the device for Sp()/Gp() functions (for simulation mode)
   Sp(0x5000,0, 3)                     # Stop possibly existing MPU2 program on the device (otherwise it may disturb the simulation)

# Helper functions ------------------------------------------------------------
# Sets address and mode of the chip
def SetAddress(chip_address, block_address):
   Sp(0x386D,0x10,(((chip_address&0x0F)<<4) | (block_address & 0x83)))

# data = 8 Bits for exchange
def Exchange8Bit(data):
   Sp(0x386D,0x11, data)
   return Gp(0x386D,0x11)

# data = 16 Bits for exchange
def Exchange16Bit(data):
   Sp(0x386D,0x12, data)
   return Gp(0x386D,0x12)

# data = 24 Bits for exchange
def Exchange24Bit(data):
   Sp(0x386D,0x13, data)
   return Gp(0x386D,0x13)

# data = 32 Bits for exchange
def Exchange32Bit(data):
   Sp(0x386D,0x14, data)
   return Gp(0x386D,0x14)

# Main program ================================================================
SetAddress(ChipAddress, BLOCK_ADDR_SPI2)           # Selects desired chip in SPI2 mode (BLOCK_ADDR_SPI2)

# Main loop -------------------------------------------------------------------
while 1:
   Status = Exchange16Bit(INST_RDSR) & 0x00FF      # Read status register
   if (Status & 0x0003) == 0:                      # Check /RDY and WEN Bit
      # Read data
      MemData = Exchange32Bit(INST_READ | (MemAddr << 8)) & 0x000000FF

      MemData += 1                                 # Increment value
      if MemData >= 0xFF:
         MemData = 0

      # Write data
      Exchange8Bit(INST_WREN)                                  # Set "Write Enable"
      Exchange32Bit((INST_WRITE | (MemAddr << 8)) | MemData)   # Write data to EEPROM

Run-file

# -*- coding: iso-8859-1 -*-
from mc.pymc import Run

m = Run(node_id       = 1,                            # CANopen node address of the device
        prg_filename  = "demo_mcSPI-V2_AT25320.py",   # File name of the MPU2 program
        mpu_filename  = None,                         # Optional file name of a compiled MPU2 program
        store         = False,                        # True = MPU2 program is stored in the device after transmission
        start         = True,                         # True = MPU2 program is started in the device after transmission
        dump          = 2)                            # dump Bit 0 = Compiled code of the MPU2 program is displayed
                                                      #      Bit 1 = Global variables are displayed
                                                      #      Bit 2 = Internal program labels are displayed


Content - Service

Info

Warranty

Storage

Transport

Disposal

Copyright


Info

ENGEL ElektroMotoren AG
Am Klingenweg 7
D-65396 Walluf

Tel.: +49 (0) 6123 994 400
Fax.: +49 (0) 6123 994 410
Email: kontakt@engel-elektromotoren.de
Web: www.engel-elektromotoren.de


Warranty

The warranty expires with the opening of the module housing or operation the device outside its specifications.

ENGEL does not give any warranty for damage on the module which result from incorrect wiring.


Storage

Please store the module protected against dust, dirt and humidity. Pay care that the storage temperature and/or humidity is within the specified range (see "Technical data" of device).


Transport

Please ship the modules as storage conditions but shock protected.


Disposal

The module with its high integrated printed circuit board is special electronic waste and must be disposed accordingly.

Please met the requirements for disposal of the here presented devices according to the rules, regulations and laws of your country.
You therefore make an active contribution towards the protection of our environment.


Copyright

ENGEL Elektromotoren AG - Änderungen und Irrtümer vorbehalten