Skip to content
문서 섹션

rftools Python 라이브러리

RF 및 전자 계산기 255개 전부와 시뮬레이션 작업에 프로그램으로 접근할 수 있습니다. 타입이 지정된 함수, 배치 호출, 목표값 역산, 비동기 지원, CLI를 제공합니다. 모든 호출에 키가 필요하며, 무료 키로 월 5회 호출할 수 있습니다.

설치

pip install rftools-io. Python 3.12 이상이 필요하며, httpx, pydantic, click이 함께 설치됩니다. PyPI에서 보기.

API 키

rftools login(또는 rftools.Client().login())는 페이지와 코드를 보여 줍니다. 페이지를 열고 로그인한 뒤 코드를 승인하면, 키가 본인만 읽을 수 있는 사용자 자격 증명 파일에 저장됩니다. 또는 RFTOOLS_API_KEY를 설정하세요. 이쪽이 우선합니다. rftools.Client()와 모듈 수준 도우미는 둘 중 어느 것이든 읽으며, 명시적인 api_key=가 둘 다보다 우선합니다. 키는 rfc_로 시작합니다. 인증을 참고하세요.

빠른 시작

rftools.calculate()는 CalculatorResult를 반환합니다. 출력을 이름으로 읽거나 .values, .warnings, .provenance를 사용하세요.

카테고리별 타입 스텁

계산기 카테고리마다 모듈 하나, 계산기마다 함수 하나가 있으며, 매개변수 이름과 기본값은 웹 페이지와 같습니다. 슬러그는 -을 _로 바꾼 함수 이름이 되고, 숫자로 시작하는 이름에는 calc_ 접두사가 붙습니다.

SDK 모듈
모듈계산기예
rftools.calculators.rf36rf.calc_5g_nr_band_lookup(), rf.calc_5g_nr_link_budget()
rftools.calculators.pcb36pcb.aperture_diagonal(), pcb.asymmetric_stripline()
rftools.calculators.power23power.battery_charge_time(), power.battery_internal_resistance()
rftools.calculators.signal14signal.adc_snr(), signal.am_modulation_index()
rftools.calculators.antenna11antenna.antenna_beamwidth(), antenna.antenna_downtilt()
rftools.calculators.general24general.calc_555_timer(), general.bjt_bias_point()
rftools.calculators.motor22motor.battery_runtime_motor(), motor.bldc_efficiency()
rftools.calculators.protocol11protocol.can_bus_timing(), protocol.clock_jitter()
rftools.calculators.emc16emc.cable_shield_effectiveness(), emc.chassis_resonance()
rftools.calculators.thermal6thermal.heatsink_calculator(), thermal.heatsink_selection()
rftools.calculators.sensor17sensor.calc_4_20ma_transmitter(), sensor.accelerometer_sensitivity()
rftools.calculators.unit_conversion19unit_conversion.angle_units(), unit_conversion.awg_wire()
rftools.calculators.audio18audio.amplifier_clipping(), audio.audio_adc_snr()
rftools.calculators.iot2iot.ble_link_budget(), iot.lora_link_budget()

목표값 역산

client.solve()는 출력을 목표값으로 만드는 입력 하나의 값을 찾아, 정확히 그 값에서 계산한 순방향 결과와 함께 반환합니다. 계산은 POST /api/py/v1/calculate/solve가 합니다. 집계되는 호출 한 번입니다. rftools-io 0.4.0부터 사용할 수 있습니다.

Python
import rftools

client = rftools.Client()

# The trace width that reaches 50 Ω on 1.51 mm FR-4, rounded to a 0.001 mm grid
result = client.solve(
    "microstrip-impedance",
    {"substrateHeight": 1.51, "dielectricConstant": 4.5, "copperThickness": 35},
    "traceWidth", "impedance", 50,
    grid=0.001,
)
print(result.value, result.reached, result.evaluations)
print(result.result.values["impedance"])

Client.solve(slug, inputs, solve_for, target_output, target_value, grid=None, range=None)는 .value, .unrounded, .reached, .evaluations, .warnings, .result를 지닌 SolveResult를 반환합니다. 마지막 항목은 solve_for를 .value로 둔 입력에 대해 client.calculate()가 반환하는 것과 같은 CalculatorResult입니다. 탐색으로 도달할 수 없는 목표값도 결과를 반환하며, .reached는 False이고 찾은 값 중 가장 가까운 값이 담기며, 역시 호출 한 번의 비용이 듭니다. 필드, 탐색 범위, 거부는 목표값 역산을 참고하세요.

배치

요청 하나에 최대 50건의 계산을 담을 수 있어 스윕에 적합합니다. 계산한 항목마다 호출 1회입니다. 배치 엔드포인트는 API 요금제에 포함됩니다. 요금(API는 월 $19, 10,000회)을 참고하세요.

Python
results = client.batch([
    ("vswr-return-loss", {"vswr": 1.5}),
    ("vswr-return-loss", {"vswr": 2.0}),
    ("free-space-path-loss", {"frequency": 2400, "distance": 0.05}),
])
for r in results:
    print(r.values if r.ok else r.error)

사용량

월간 할당량은 계정에 속하며, 계정의 모든 키의 호출이 여기서 차감됩니다.

Python
usage = client.usage()             # GET /v1/usage, never metered
print(usage.used, "of", usage.allowance, "used; resets", usage.reset_at)
for key in usage.keys:
    print(key.key_id, key.label, key.used)

result = client.calculate("vswr-return-loss", {"vswr": 2.5})
print(result.usage.remaining)      # from this response's X-Usage-* headers

시뮬레이션 작업

매개변수와 파일은 보내기 전에 로컬에서 작업 유형의 계약에 비추어 검사됩니다. failed로 끝난 작업은 JobFailed를 발생시키며, 그 errorKind가 .kind에 담깁니다. 시뮬레이션 작업을 참고하세요.

Python
job = client.submit_job("sat_link_budget", {"latitude_deg": 40.7, "longitude_deg": -74.0})
job = job.wait(timeout=600)        # polls as the web app does
print(job.status, job.result())    # a summary; job.result(full=True) for all of it

est = client.estimate_job("fdtd_sparam", {"traceW": 0.42, "subH": 0.51, "solveMode": "express"})
print(est.lane, est.within_budget)  # never charged, no key needed

비동기 지원

FastAPI 서비스, 비동기 노트북, 동시 스윕에는 AsyncClient를 사용하세요.

Python
import asyncio
import rftools

async def main():
    async with rftools.AsyncClient() as client:
        result = await client.calculate("vswr-return-loss", {"vswr": 2.5})
        print(result["returnLoss"])

asyncio.run(main())

CLI

rftools 명령은 패키지와 함께 설치됩니다.

Shell
rftools login                                   # get a key; saved, never printed
rftools calc vswr-return-loss --vswr 2.5
rftools calc vswr-return-loss --vswr 2.5 --json | jq .values
rftools list --category rf
rftools info free-space-path-loss
rftools solve microstrip-impedance --for traceWidth --target impedance=50 --grid 0.001 \
    --param substrateHeight=1.51 --param dielectricConstant=4.5 --param copperThickness=35
rftools sim fdtd_sparam --param solveMode=express --no-wait
rftools estimate fdtd_sparam --param traceW=0.42 --param subH=0.51
rftools version

오류 처리

오류는 메시지 문구가 아니라 HTTP 상태로 분류됩니다. 500, 502, 503, 504 상태는 백오프를 두고 재시도한 뒤에 예외로 발생시킵니다. 오류를 참고하세요.

SDK 예외
예외발생 조건
ValidationErrorHTTP 400, 422
AuthErrorHTTP 401, 403
QuotaErrorHTTP 402
NotFoundHTTP 404
APIErrorHTTP 409, 500, 503
RateLimitErrorHTTP 429
JobFailedfailed로 끝난 작업. .kind는 그 작업의 errorKind입니다.
LoginErrorrftools login이 키를 받지 못함. .error는 access_denied 또는 expired_token입니다.

자동화할 준비가 되셨나요?

라이브러리를 설치하고 무료 키를 받으면 1분 안에 첫 계산을 실행할 수 있습니다. 그 뒤에 있는 REST API는 API 레퍼런스에서 설명합니다.