0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3つの物理式で国家規格(インドの鋼材規格 IS 808)の誤植を見つけた話【Python】

0
Posted at

鋼材(H形鋼・溝形鋼・山形鋼)の単位重量・寸法・断面性能のきれいなデータが必要になりました。インドの形鋼については国家規格 IS 808 が一次情報で、Public.Resource.Org により公開されています。2021年版は最初からデジタルのPDF、1989年版と1964年のハンドブック(SP 6(1))はスキャン画像です。

表を書き写すこと自体は簡単です。難しいのは「書き写したデータ(と、そもそも印刷された表)が正しいか」をどう確かめるかです。ここで断面性能表の便利な性質が使えます。列どうしが独立していないのです。いくつかの物理的な関係式で列が結びついているので、各行が自分自身を検算できます。

3つの関係式

1. 単位重量は断面積から決まる。 鋼の密度は 7850 kg/m³。断面積 A cm² の部材 1 m の体積は A × 10⁻⁴ m³ なので:

単位重量 (kg/m) = 0.785 × A (cm²)

2. 断面二次半径は断面二次モーメントと断面積から決まる。

r = sqrt(I / A)

3. 断面係数は断面二次モーメントとせいから決まる(二軸対称断面の強軸):

Zx = Ix / (D / 2)

これだけで、ほとんどの行のほとんどの列を検算できます。Python で書くと本体は十数行です。

import math

TOL = 0.02  # 表は有効数字3〜4桁で印刷されている

def close(printed, derived, tol=TOL):
    # 小さい値は 0.1 単位で丸められているので、絶対誤差の余裕も持たせる
    return abs(printed - derived) <= tol * abs(derived) + 0.06

def check(row):
    problems = []
    if not close(row["M"], 0.785 * row["A"]):
        problems.append(("M", row["M"], round(0.785 * row["A"], 2)))
    for r, i in (("rx", "Ix"), ("ry", "Iy")):
        derived = math.sqrt(row[i] / row["A"])
        if not close(row[r], derived):
            problems.append((r, row[r], round(derived, 2)))
    if row.get("D") and not close(row["Zx"], row["Ix"] / (row["D"] / 20)):  # D は mm、Z は cm³
        problems.append(("Zx", row["Zx"], round(row["Ix"] / (row["D"] / 20), 1)))
    return problems

全行に流して引っかかったものは、私の転記ミスか、規格側の誤植のどちらかです。自分のミスは直し、残りは元データの横に errata.csv として置きました。元の CSV には印刷どおりの値を残し、ビルド時に訂正を当てる形です。

見つかったもの

IS 808:1989(1992年の追補を含む):

断面 列 印刷値 関係式から 検算
MC 100 Zx 33.5 38.4 Ix / (D/2) = 192 / 5.0
MC 175(重量級) 単位重量 22.7 21.7 0.785 × 27.6
MC 250 ry 2.37 2.33 √(211 / 39.0)
ISA 35×35×6 Iu 5.5 6.4 板厚 5 mm の山形鋼の 5.6 より小さい
ISA 65×65×4 Ix, Iu 21.70, 34.50 20.2, 32.0 追補で追加された行

IS 808:2021:

断面 列 印刷値 正しい値 備考
MC 75 rz 39.4 mm 29.4 mm √(78.2×10⁴ / 908)。1989年版は 2.94 cm で正しかった
MC 175* 単位重量 22.7 21.4 0.785 × 27.3 — 1989年版と同じ 22.7
100 mm 以上のすべての ISA rv 10倍 例:√(Iv / A) が 20.0 mm なのに 200.0 と印刷

個人的に一番面白いのは MC 175 です。自分の断面積と合わない単位重量が、1989年の表から2021年の表へ、32年越しにそのまま引き継がれていました。

大きなデータベースも無縁ではありません。米国の AISC Shapes Database はメートル系とヤード・ポンド系の列が並んでいるので、行ごとに突き合わせると、S24×90 の周長だけゼロが一つ多い(1840 mm のはずが 18400 mm)セルが見つかりました。

いまでも使われている1964年の値

関係式は、長年の混乱の理由も説明してくれました。ISMB 200 の単位重量を検索すると、多くの表は 25.4 kg/m、一部は 24.2 kg/m と出てきます。実はどちらも「正しい」のです。

版 フランジ厚 断面積 単位重量
SP 6(1):1964 ハンドブック 10.8 mm 32.33 cm² 25.4 kg/m
IS 808:1989 10.0 mm 30.8 cm² 24.2 kg/m
IS 808:2021 10.0 mm 30.8 cm² 24.17 kg/m

1989年の改訂でフランジが薄くなりました。古いハンドブックから写した表は更新されないまま残り、12 m の梁が今日圧延されているものより 15 kg 重く見積もられています。ISMB 100(11.5 → 8.9 kg/m)や ISMB 300(44.2 → 46.0 kg/m、こちらは重くなった)でも同じことが起きています。

工学データ全般に使える教訓

  • 冗長性を探す。 工学の表にはたいてい計算で求まる列があります。信じるのではなく再計算し、食い違いをシグナルとして扱う。
  • 印刷値は残す。 元データを書き換えず、訂正は理由と計算式つきで別ファイル(errata.csv)に置く。誰でも検証できるように。
  • 複数ソースを突き合わせる。 欧州形鋼なら2つのオープンライブラリ、AISC ならメートル系とヤード・ポンド系の列。
  • 旧版が効いてくる。 ユーザーが現行規格と合わない数字を引用していたら、たいてい旧版が原因です。黙ってどちらかを選ぶより、両方を見せるほうが役に立ちます。

整理したデータは Python パッケージにもしました(pip install steel-sections、steel_sections.get("ISMB 200").mass_1964_kg_m で旧版の値も取れます)。3つの版を並べた表と重量計算機はこちら:https://steelweight-calculator.com/charts/ismb-weight-chart/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?