Bill of materials and cost estimate (.ohlcost)#

The bill of materials lists what a line is built from: structures by type and extension, insulator assemblies, wire lengths by cable, and hardware counted by rule. A cost file (.ohlcost) prices it; items without a price are listed so nothing is silently left out.

What is counted#

Item How
Structures By type and extension (structures given by their strings only are listed as "(no type)").
Insulator assemblies Every string holding a wire point a section is strung through (a bundle hangs from one; strings shared by sections counted once), by insulator assembly id. Strings given in a pylon file or only as geometry are listed by kind and length, e.g. string suspension 3.500 m, string strain 5.025 m (a V: two strings). A wire clamped straight to the structure has none.
Wire Per cable and role — conductor, earth wire (sections whose conductor path has no electrical system), wire (a line without electrical systems), jumper. The unstressed (cut) length of every span at the section's stringing condition: the given lengths of a section clipped in; for a section in the blocks, the lengths that give its tension or sag (the same calculation that clips it in). Times the subconductors of the bundle. If a section cannot be solved, its chords are used and a note says so.
Jumpers Their cut length if given, else the chord between the clamps plus the parabolic slack \( 8 d^2 / 3 c \) for the sag \( d \) over the chord \( c \); times the jumper's bundle.
Spacers Bundles only: along each span one spacer every spacer_interval (\( \lceil L / s \rceil - 1 \) per span).
Dampers dampers_per_span per subconductor and span, every section.
Spans Spans between two structures (pairs of structures next to each other in a section), for the stringing labour.

No sag or waste allowance is added to the wire lengths: add one to the price per metre if you use it.

Cost files (.ohlcost)#

format = "ohl-cost"
version = 1
name = "Example unit costs (invented)"
currency = "EUR"           # a label; nothing is converted

[labour]
per_structure = 2500.0     # erecting a structure (unless its type gives its own)
per_span = 1800.0          # stringing, per span between two structures

[[structure]]
type = "type-02"
price = 38000.0            # supply, without extension
foundation = 9000.0        # per structure (optional)
erection = 4000.0          # replaces labour.per_structure (optional)
extensions = { "+3" = 41000.0 }   # supply price with each extension

[[insulator]]
id = "I-220-single"        # an insulator assembly id, or an inline string's name
price = 650.0

[[cable]]
id = "acsr-drake-26-7"
price_per_m = 7.5
stringing_per_m = 1.2      # optional

[hardware]
spacer_interval = "60 m"   # bundles: a spacer every … along each span
spacer_price = 45.0
dampers_per_span = 2       # per subconductor and span
damper_price = 60.0

[[fixed]]
item = "Site establishment"
price = 25000.0
Section Field Notes
top currency, name Labels.
[labour] per_structure, per_span Optional.
[[structure]] type, price, extensions, foundation, erection A structure with an extension is priced from extensions only. A type or extension without a supply price is listed as missing.
[[insulator]] id, price Per assembly.
[[cable]] id, price_per_m, stringing_per_m Per metre of wire (every subconductor).
[hardware] spacer_interval, spacer_price, dampers_per_span, damper_price The rules count only when given.
[[fixed]] item, price Added once.

Prices are numbers ≥ 0; the same type, insulator or cable may be priced once. The cost data is yours: OpenOHL ships only examples/synthetic-line/unit-costs.ohlcost, whose prices are invented.

In the application#

File › Bill of materials › Cables… opens a window with the cables' part of the bill — the categories wire and stringing — its total and its items without a price. Structures, insulators and hardware are counted by ohl bom only: the application does not offer them yet. The project's first .ohlcost file (copied in from next to the project when it opens), or the first next to a line file, is used; Choose… picks another, No prices shows quantities only. It is computed in the background from the line as it is (the model is not changed); Compute again after edits. Export CSV… writes the table.

From the command line#

ohl bom examples/synthetic-line/synthetic-line-typed.ohl.json \
    --cost examples/synthetic-line/unit-costs.ohlcost --csv bom.csv --json bom.json

--library, --structures and --insulators choose the libraries as for ohl line. Without --cost the quantities are listed without prices.

The CSV columns: category,item,quantity,unit,unit_price,amount,currency, one row per line of the table and a total row when priced. Categories: structures, foundations, erection, insulators, wire, stringing, hardware, fixed. The JSON holds the whole bill (also the cut length of every span of every section) and the estimate.

View this page's source on GitHub