Pass Sequence Units in PyRolL

This part of the documentation is currently work in progress.

Think of a rolling process as of a sequence of roll passes and intermediate times, called transports. Both are subsumed under the term unit. The Unit class is the base class representing this concept. A unit can most abstractly be considered as a black box transforming the state of a profile, thus taking an incoming profile instance, simulation its evolution within the unit and yielding an outgoing profile instance.

It defines three attributes:

Attribute

Description

label

A label string for human identification, used in log messages and output.

in_profile

The profile that represents the incoming workpiece state of the unit.

out_profile

The profile that represents the outgoing workpiece state of the unit.

Currently, two derived classes exist in the core library: RollPass and Transport.

The unit class defines an abstract method solve(in_profile: Profile), which triggers the solution procedure and accepts a profile object that has to be treated as the incoming profile. This object is copied and modified and made available in the in_profile attribute by the implementations of this method.

Also, the Unit class maintains hooks that should be applicable to all types of units.

To read about the basics of hooks and plugins, see here.

Roll Passes

The roll pass is the most important unit, since forming of the workpiece is happening here. It is represented by the RollPass class. The RollPass constructor takes a Roll object, which is defining the properties of the working rolls including the groove.

Rolls

Roll objects represent a working roll implemented in a rolling stand. The main properties are about the geometry and rotational movement of the roll. Rolls define the basic hooks specified below. With appropriate plugins, elastic deformation of the rolls during the process can be modelled.

Hooks

To read about the basics of hooks and plugins, see here.

On roll passes, several basic hooks are specified and implemented. You can provide your own implementations of them and also specify new ones.

The figure below shows an overview over the respective classes and their hook function signature.

Classes Connected to Roll Passes and Their Hook Signatures

The following are defined by default.

RollPass

gap(roll_pass: RollPass) float

Gap between the rolls.

height(roll_pass: RollPass) float

Maximum height of the pass contour.

in_profile_rotation(roll_pass: RollPass) float

Rotation of the in profile for the specified roll pass.

mean_flow_stress(roll_pass: RollPass) float

Mean flow stress of the material for the respected roll pass.

roll(roll_pass: RollPass) float

Object representing the working rolls of the roll pass.

roll_force(roll_pass: RollPass) float

Roll force of the pass.

spread(roll_pass: RollPass) float

Spread in the pass as ratio b1/b0.

strain_change(roll_pass: RollPass) float

Applied strain in the pass.

strain_rate(roll_pass: RollPass) float

Mean strain rate in the pass.

tip_width(roll_pass: RollPass) float

Tip width of the pass contour.

velocity(roll_pass: RollPass) float

Mean rolling velocity.

volume(roll_pass: RollPass) float

Volume of the workpiece within the roll gap.

Roll

contour_line(roll: Roll) LineString

Contour line of the roll’s surface.

groove(roll: Roll) GrooveBase

Object representing the groove shape carved into the roll.

max_radius(roll: Roll) float

Maximal (outer) radius of the roll.

min_radius(roll: Roll) float

Minimal (inner) radius of the roll.

nominal_radius(roll: Roll) float

Nominal radius of the roll (equal to the grooves y=0 axis).

rotational_frequency(roll: Roll) float

The rotational frequency of the roll.

working_radius(roll: Roll) float

Working radius of the roll (some kind of equivalent radius to flat rolling).

RollPass.Roll

contact_area(roll_pass: RollPass, roll: Roll) float

Area of contact between workpiece and one roll.

contact_length(roll_pass: RollPass, roll: Roll) float

Contact length in rolling direction between rolls and workpiece.

roll_torque(roll_pass: RollPass, roll: Roll) float

Roll torque of the pass.

RollPass.Profile

flow_stress(roll_pass: RollPass, profile: Profile) float

Flow stress of workpiece material.

RollPass.OutProfile

filling_ratio(roll_pass: RollPass, profile: OutProfile) float

Filling ratio of profile width to usable groove width.

strain(roll_pass: RollPass, profile: OutProfile) float

Strain of the out profile.

width(roll_pass: RollPass, profile: OutProfile) float

Width of the out profile.

Below you will find detailed descriptions of selected hooks as example of using them.

in_profile_rotation

The angle in degree by which the incoming profile is rotated at feeding into the roll pass. Currently only integers are valid values. Per default common rotations are implemented for the available groove types. Typically you will use the applies_to_in_grooves and applies_to_in_grooves decorators from pyroll.utils to provide new implementations. The code block below shows an example implementation of this hook, the explicit specname is used to avoid naming conflicts when providing more than one implementation in one file.

@RollPass.hookimpl(specname="in_profile_rotation")
@applies_to_in_grooves("diamond")
@applies_to_out_grooves("diamond")
def diamonds(roll_pass):
    return 90

Transports

Hooks

To read about the basics of hooks and plugins, see here.

On transports, several basic hooks are specified and implemented. You can provide your own implementations of them and also specify new ones.

The figure below shows an overview over the respective classes and their hook function signature.

Classes Connected to Transports and Their Hook Signatures

The following hooks are defined by default.

Transport

duration(transport: Transport) float

Duration of the transport.

Transport.OutProfile

strain(transport: Transport, profile: OutProfile) float

The equivalent strain of the outgoing profile of the transport unit.