266 lines
17 KiB
Python
266 lines
17 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""gen_kb.py - 生成 pinout_kb.json(V0.0 网表知识库)。
|
||
运行: & '.venv\\Scripts\\python.exe' tools/netlist_semantics/gen_kb.py
|
||
数据来源:V0.0.tel 实测 + docs/芯片手册 + AGENTS.md 硬件引脚表。
|
||
"""
|
||
import json
|
||
import os
|
||
|
||
KB = {
|
||
"_comment": "V0.0 网表知识库:instances=位号→器件, nets=网络→语义。引脚功能以【网名+本表】为准(KiCad 符号脚号为任意编号,非手册脚号)。",
|
||
"instances": {
|
||
"U1": {"mpn": "CH395F", "pkg": "QFN-32", "desc": "SPI 以太网控制器 (MAC+PHY);SPI2↔U17,MDI→T1"},
|
||
"U2": {"mpn": "RTL8305NBI-CG", "pkg": "QFN-48", "desc": "双口 10/100 以太网交换/PHY;驱动 J1/J2,经 T1 接 U1"},
|
||
"U3": {"mpn": "TPAFE5160", "pkg": "LQFP-64", "desc": "16 通道 16-bit ADC;8080/FSMC 并口↔U17"},
|
||
"U4": {"mpn": "B0303S", "pkg": "PWRM-TH", "desc": "3.3V→3.3V 隔离 DC-DC(通信域 C3.3V);实际 B0303S,封装误标 B0505S-1WR3(A2,V0.1 更正)"},
|
||
"U5": {"mpn": "WINGTAT 9001-15481C00A", "pkg": "CONN-TH 48P", "desc": "48P 子板插座(继电器/告警/ADC/串口/时钟)"},
|
||
"U6": {"mpn": "LDO (SOT-223)", "pkg": "SOT-223-4", "desc": "5V→G3.3V LDO(通信 3.3V 域)"},
|
||
"U7": {"mpn": "LDO (SOT-223)", "pkg": "SOT-223-4", "desc": "5V→3.3V LDO(主 3.3V 域)"},
|
||
"U8": {"mpn": "FOC-817SC-F", "pkg": "SMD-4", "desc": "光耦;隔离 ST_DIR4→DIR4(485 方向控制)"},
|
||
"U9": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART1 → 232 ch1"},
|
||
"U10": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART3 → 232 ch3"},
|
||
"U11": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART4 → RS485"},
|
||
"U12": {"mpn": "SuperESD (CDSOT23)", "pkg": "SOT-23-3", "desc": "ESD 保护;RS485 A/B 线"},
|
||
"U13": {"mpn": "TPT3232E", "pkg": "SOP-16", "desc": "双路 RS232 电平转换收发器(驱动 RS232_TX1/RX1/TX3/RX3 → CN1/U14)"},
|
||
"U14": {"mpn": "C2836689", "pkg": "RJ45-TH", "desc": "RJ45 座(232/CLOCK/CF 通信口,非以太网)"},
|
||
"U15": {"mpn": "TP8485E-SR", "pkg": "SOIC-8", "desc": "RS-485 收发器"},
|
||
"U16": {"mpn": "SD2506API-G", "pkg": "DIP-6", "desc": "时钟/RTC 芯片(I2C: SD_SDA/SD_SCL)"},
|
||
"U17": {"mpn": "STM32F407ZGT6", "pkg": "LQFP-144", "desc": "主 MCU (Cortex-M4 @168MHz)"},
|
||
"U18": {"mpn": "AIP74LVC16245TA48", "pkg": "TSSOP-48", "desc": "16 位总线收发器(U17 ↔ 子板 U5)"},
|
||
"U19": {"mpn": "GD5F2GQ5UE", "pkg": "WSON-8", "desc": "2Gbit SPI NAND Flash"},
|
||
"U20": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (GND/PGND)"},
|
||
"U21": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (GND/PGND)"},
|
||
"U22": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (CGND/PGND)"},
|
||
"J1": {"mpn": "HR911105A", "pkg": "RJ45-TH", "desc": "RJ45+网络变压器一体(端口 A)"},
|
||
"J2": {"mpn": "HR911105A", "pkg": "RJ45-TH", "desc": "RJ45+网络变压器一体(端口 B)"},
|
||
"H1": {"mpn": "16P 排针", "pkg": "HDR-TH", "desc": "LCD 8080 并口(板外屏)"},
|
||
"H2": {"mpn": "3P 排针", "pkg": "HDR-TH", "desc": "SWD 调试(SWDIO/SWCLK/GND)"},
|
||
"CN1": {"mpn": "JL15 端子", "pkg": "CONN-TH", "desc": "通信端子(RS485 A/B + RS232 1/3)"},
|
||
"X1": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U2 RTL8305 (RXI/RXO)"},
|
||
"X2": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U1 CH395F (XI/XO)"},
|
||
"X3": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U17 pin23/24(网未命名,推测 HSE 8MHz)"},
|
||
"T1": {"mpn": "H1102NLT", "pkg": "XFMR-SMD", "desc": "网络变压器(U1 CH395F ↔ U2 RTL8305)"},
|
||
"L1": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "5V→AVCC 滤波"},
|
||
"L2": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "AGND↔GND 连接"},
|
||
"L3": {"mpn": "磁珠/电感", "pkg": "L1206", "desc": "VDD50↔5V"},
|
||
"L4": {"mpn": "磁珠/电感", "pkg": "L1206", "desc": "G3.3V 滤波"},
|
||
"L6": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "3.3V→STM_VDDA 滤波"},
|
||
"D1": {"mpn": "肖特基/钳位二极管", "pkg": "SMB", "desc": "G3.3V 保护"},
|
||
"D2": {"mpn": "肖特基/钳位二极管", "pkg": "SMB", "desc": "3.3V 保护"},
|
||
"D3": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_RX3 保护"},
|
||
"D4": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_TX3 保护"},
|
||
"D5": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_TX1 保护"},
|
||
"D6": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_RX1 保护"},
|
||
"Q1": {"mpn": "MOSFET/三极管", "pkg": "SOT-23", "desc": "LED 驱动"},
|
||
},
|
||
"nets": {
|
||
"GND": {"func": "主数字地"},
|
||
"AGND": {"func": "模拟地(ADC/模拟域)"},
|
||
"PGND": {"func": "电源/网络地(RJ45 屏蔽)"},
|
||
"CGND": {"func": "通信地(隔离侧)"},
|
||
"3.3V": {"func": "3.3V 主电源"},
|
||
"5V": {"func": "5V 电源(输入)"},
|
||
"C3.3V": {"func": "3.3V(通信/隔离侧)"},
|
||
"G3.3V": {"func": "3.3V(U6 LDO 输出,通信域)"},
|
||
"AVCC": {"func": "模拟 3.3V(ADC 供电,经 L1)"},
|
||
"AVDDL": {"func": "PHY 电源(U2 RTL8305)"},
|
||
"STM_VDDA": {"func": "STM32 模拟电源 VDDA(经 L6)"},
|
||
"VDD50": {"func": "5V(子板/USB 域,经 L3)"},
|
||
"XI": {"func": "晶振输入", "note": "X2→U1 CH395F"},
|
||
"XO": {"func": "晶振输出", "note": "X2→U1 CH395F"},
|
||
"RXI": {"func": "晶振输入", "note": "X1→U2 RTL8305"},
|
||
"RXO": {"func": "晶振输出", "note": "X1→U2 RTL8305"},
|
||
"CLOCK": {"func": "时钟(子板/232)", "note": "→U5 C8 / U14 pin7"},
|
||
"HRST": {"func": "ADC 复位", "note": "U3 reset,经 R16/C31"},
|
||
"GD_SCLK": {"func": "SPI1_SCK", "gpio": "PB3", "note": "→U19 SCK"},
|
||
"GD_SO": {"func": "SPI1_MISO", "gpio": "PB4", "note": "U19 SO←"},
|
||
"GD_SI": {"func": "SPI1_MOSI", "gpio": "PB5", "note": "→U19 SI"},
|
||
"GD_CS": {"func": "SPI1_NSS", "gpio": "PE0", "note": "→U19 CS"},
|
||
"GD_HOLD": {"func": "HOLD", "gpio": "PE1", "note": "→U19 HOLD"},
|
||
"GD_WP": {"func": "写保护", "gpio": "PB8", "note": "→U19 WP"},
|
||
"SPI1_SOMI": {"func": "SPI1 MOSI(子板侧)", "note": "经 U18 16245→子板;GPIO 待核"},
|
||
"SPI1_SIMO": {"func": "SPI1 MISO(子板侧)", "note": "经 U18 16245←子板;GPIO 待核"},
|
||
"CH395F_SCS": {"func": "SPI2_NSS", "gpio": "PB12"},
|
||
"CH395F_SCK": {"func": "SPI2_SCK", "gpio": "PB13"},
|
||
"CH395F_SDO": {"func": "SPI2_MISO", "gpio": "PB14"},
|
||
"CH395F_SDI": {"func": "SPI2_MOSI", "gpio": "PB15"},
|
||
"SD_SDA": {"func": "I2C SDA", "note": "→U16 SD2506"},
|
||
"SD_SCL": {"func": "I2C SCL", "note": "→U16 SD2506"},
|
||
"ST_TX0": {"func": "USART ch0 TX", "note": "→子板 (U5 A10)"},
|
||
"ST_RX0": {"func": "USART ch0 RX", "note": "←子板 (U5 B10)"},
|
||
"ST_TX1": {"func": "USART ch1 TX", "note": "→U9 隔离→232 ch1"},
|
||
"ST_RX1": {"func": "USART ch1 RX", "note": "←U9 隔离←232 ch1"},
|
||
"ST_TX2": {"func": "USART ch2 TX", "note": "→子板 (U5 C7)"},
|
||
"ST_RX2": {"func": "USART ch2 RX", "note": "←子板 (U5 C6)"},
|
||
"ST_TX3": {"func": "USART ch3 TX", "note": "→U10 隔离→232 ch3"},
|
||
"ST_RX3": {"func": "USART ch3 RX", "note": "←U10 隔离←232 ch3"},
|
||
"ST_TX4": {"func": "UART5_TX(485)", "gpio": "PC12", "note": "→U11 隔离"},
|
||
"ST_RX4": {"func": "UART5_RX(485)", "gpio": "PD2", "note": "←U11 隔离"},
|
||
"ST_DIR4": {"func": "485 方向 DE", "gpio": "PD0", "note": "→U8 光耦"},
|
||
"TX4": {"func": "485 TX(隔离后)", "note": "U11→U15"},
|
||
"RX4": {"func": "485 RX(隔离后)", "note": "U15→U11"},
|
||
"DIR4": {"func": "485 方向(隔离后)", "note": "U8→U15"},
|
||
"RS485_A": {"func": "485 A 线", "note": "U15→U12 ESD→CN1"},
|
||
"RS485_B": {"func": "485 B 线", "note": "U15→U12 ESD→CN1"},
|
||
"TX1": {"func": "232 ch1 TX(隔离后)", "note": "U9→U13"},
|
||
"RX1": {"func": "232 ch1 RX(隔离后)", "note": "U13→U9"},
|
||
"TX3": {"func": "232 ch3 TX(隔离后)", "note": "U10→U13"},
|
||
"RX3": {"func": "232 ch3 RX(隔离后)", "note": "U13→U10"},
|
||
"RS232_TX1": {"func": "232 ch1 总线", "note": "U13→CN1/U14"},
|
||
"RS232_RX1": {"func": "232 ch1 总线", "note": "CN1/U14→U13"},
|
||
"RS232_TX3": {"func": "232 ch3 总线", "note": "U13→CN1/U14"},
|
||
"RS232_RX3": {"func": "232 ch3 总线", "note": "CN1/U14→U13"},
|
||
"LCD_DB0": {"func": "8080 数据 D0", "note": "U17 FSMC→H1"},
|
||
"LCD_DB1": {"func": "8080 数据 D1", "note": "U17 FSMC→H1"},
|
||
"LCD_DB2": {"func": "8080 数据 D2", "note": "U17 FSMC→H1"},
|
||
"LCD_DB3": {"func": "8080 数据 D3", "note": "U17 FSMC→H1"},
|
||
"LCD_DB4": {"func": "8080 数据 D4", "note": "U17 FSMC→H1"},
|
||
"LCD_DB5": {"func": "8080 数据 D5", "note": "U17 FSMC→H1"},
|
||
"LCD_DB6": {"func": "8080 数据 D6", "note": "U17 FSMC→H1"},
|
||
"LCD_DB7": {"func": "8080 数据 D7", "note": "U17 FSMC→H1"},
|
||
"LCD_CS": {"func": "片选", "note": "U17→H1"},
|
||
"LCD_CD": {"func": "数据/命令 (ALE)", "note": "U17→H1"},
|
||
"LCD_RD": {"func": "读", "note": "U17→H1"},
|
||
"LCD_WR": {"func": "写", "note": "U17→H1"},
|
||
"LCD_RST": {"func": "复位", "note": "U17→H1"},
|
||
"LCD_BK": {"func": "背光", "note": "U17→H1"},
|
||
"TP_RD": {"func": "读控制 (FSMC)", "gpio": "PD3"},
|
||
"TP_CONVST": {"func": "转换启动", "gpio": "PD4"},
|
||
"TP_BUSY": {"func": "忙", "gpio": "PD7"},
|
||
"TP_OS0": {"func": "输出选择 OS0"},
|
||
"TP_OS1": {"func": "输出选择 OS1"},
|
||
"TP_OS2": {"func": "输出选择 OS2"},
|
||
"TP_FRSTDATA": {"func": "首数据", "note": "经 R24"},
|
||
"DB0": {"func": "FSMC 数据 D0", "gpio": "PG0", "note": "U17↔U3"},
|
||
"DB1": {"func": "FSMC 数据 D1", "gpio": "PG1"},
|
||
"DB2": {"func": "FSMC 数据 D2", "gpio": "PG2"},
|
||
"DB3": {"func": "FSMC 数据 D3", "gpio": "PG3"},
|
||
"DB4": {"func": "FSMC 数据 D4", "gpio": "PG4"},
|
||
"DB5": {"func": "FSMC 数据 D5", "gpio": "PG5"},
|
||
"DB6": {"func": "FSMC 数据 D6", "gpio": "PG6"},
|
||
"DB7": {"func": "FSMC 数据 D7", "gpio": "PG7"},
|
||
"DB8": {"func": "FSMC 数据 D8", "gpio": "PG8"},
|
||
"DB9": {"func": "FSMC 数据 D9", "gpio": "PG9"},
|
||
"DB10": {"func": "FSMC 数据 D10", "gpio": "PG10"},
|
||
"DB11": {"func": "FSMC 数据 D11", "gpio": "PG11"},
|
||
"DB12": {"func": "FSMC 数据 D12", "gpio": "PG12"},
|
||
"DB13": {"func": "FSMC 数据 D13", "gpio": "PG13"},
|
||
"DB14": {"func": "FSMC 数据 D14", "gpio": "PG14"},
|
||
"DB15": {"func": "FSMC 数据 D15", "gpio": "PG15"},
|
||
"AIN1": {"func": "子板模拟输入→ADC1"},
|
||
"AIN2": {"func": "子板模拟输入→ADC2"},
|
||
"AIN3": {"func": "子板模拟输入→ADC3"},
|
||
"AIN4": {"func": "子板模拟输入→ADC4"},
|
||
"AIN5": {"func": "子板模拟输入→ADC5"},
|
||
"AIN6": {"func": "子板模拟输入→ADC6"},
|
||
"AIN7": {"func": "子板模拟输入→ADC7"},
|
||
"AIN8": {"func": "子板模拟输入→ADC8"},
|
||
"AIN9": {"func": "子板模拟输入→ADC9"},
|
||
"AIN10": {"func": "子板模拟输入→ADC10"},
|
||
"AIN11": {"func": "子板模拟输入→ADC11"},
|
||
"AIN12": {"func": "子板模拟输入→ADC12"},
|
||
"AIN13": {"func": "子板模拟输入→ADC13"},
|
||
"AIN14": {"func": "子板模拟输入→ADC14"},
|
||
"AIN15": {"func": "子板模拟输入→ADC15"},
|
||
"ADC1": {"func": "TPAFE5160 通道1"},
|
||
"ADC2": {"func": "TPAFE5160 通道2"},
|
||
"ADC3": {"func": "TPAFE5160 通道3"},
|
||
"ADC4": {"func": "TPAFE5160 通道4"},
|
||
"ADC5": {"func": "TPAFE5160 通道5"},
|
||
"ADC6": {"func": "TPAFE5160 通道6"},
|
||
"ADC7": {"func": "TPAFE5160 通道7"},
|
||
"ADC8": {"func": "TPAFE5160 通道8"},
|
||
"ADC9": {"func": "STM32 ADC 通道9"},
|
||
"ADC10": {"func": "STM32 ADC 通道10"},
|
||
"ADC11": {"func": "STM32 ADC 通道11"},
|
||
"ADC12": {"func": "STM32 ADC 通道12"},
|
||
"ADC13": {"func": "STM32 ADC 通道13"},
|
||
"ADC14": {"func": "STM32 ADC 通道14"},
|
||
"ADC15": {"func": "STM32 ADC 通道15"},
|
||
"ADC16": {"func": "STM32 ADC 通道16"},
|
||
"ADC17": {"func": "STM32 ADC 通道17"},
|
||
"ADC1_GND": {"func": "ADC 通道1 地"},
|
||
"ADC2_GND": {"func": "ADC 通道2 地"},
|
||
"ADC3_GND": {"func": "ADC 通道3 地"},
|
||
"ADC4_GND": {"func": "ADC 通道4 地"},
|
||
"ADC5_GND": {"func": "ADC 通道5 地"},
|
||
"ADC6_GND": {"func": "ADC 通道6 地"},
|
||
"ADC7_GND": {"func": "ADC 通道7 地"},
|
||
"ADC8_GND": {"func": "ADC 通道8 地"},
|
||
"KEY1": {"func": "按键1", "note": "上拉 3.3V"},
|
||
"KEY2": {"func": "按键2", "note": "上拉 3.3V"},
|
||
"KEY3": {"func": "按键3", "note": "上拉 3.3V"},
|
||
"KEY4": {"func": "按键4", "note": "上拉 3.3V"},
|
||
"KEY5": {"func": "按键5", "note": "上拉 3.3V"},
|
||
"KEY6": {"func": "按键6", "note": "上拉 3.3V"},
|
||
"KEY7": {"func": "按键7", "note": "上拉 3.3V"},
|
||
"KEY8": {"func": "按键8", "note": "上拉 3.3V"},
|
||
"EXTKI1": {"func": "外部按键输入1", "note": "U5→U18→U17"},
|
||
"EXTKI2": {"func": "外部按键输入2", "note": "U5→U18→U17"},
|
||
"EXTKI3": {"func": "外部按键输入3", "note": "U5→U18→U17"},
|
||
"EXTKO1": {"func": "外部按键输出1", "note": "U17→U18→U5"},
|
||
"EXTKO2": {"func": "外部按键输出2", "note": "U17→U18→U5"},
|
||
"EXTKO3": {"func": "外部按键输出3", "note": "U17→U18→U5"},
|
||
"HT_A23": {"func": "子板信号 HT"},
|
||
"HT_A26": {"func": "子板信号 HT"},
|
||
"HT_C25": {"func": "子板信号 HT"},
|
||
"HT_C26": {"func": "子板信号 HT"},
|
||
"HT_C27": {"func": "子板信号 HT"},
|
||
"CLZ_LED": {"func": "子板状态 LED(闭锁)"},
|
||
"ERT_LED": {"func": "子板状态 LED"},
|
||
"TRIP_LED": {"func": "子板状态 LED(跳闸)"},
|
||
"RUN_LED": {"func": "子板状态 LED(运行)"},
|
||
"RELAY_STO": {"func": "继电器控制", "note": "U17→U18→U5"},
|
||
"H16": {"func": "子板信号"},
|
||
"V15": {"func": "子板信号"},
|
||
"J3": {"func": "子板信号"},
|
||
"F3": {"func": "子板信号"},
|
||
"K3": {"func": "子板信号"},
|
||
"RAS": {"func": "FSMC RAS(子板侧)"},
|
||
"DQM0": {"func": "FSMC DQM0(子板侧)"},
|
||
"DQM1": {"func": "FSMC DQM1(子板侧)"},
|
||
"WAIT1": {"func": "FSMC WAIT(子板侧)"},
|
||
"SDCKE": {"func": "FSMC CKE(子板侧)"},
|
||
"ST_IN_C3": {"func": "子板输入"},
|
||
"ST_IN_D4": {"func": "子板输入"},
|
||
"ST_IN_E4": {"func": "子板输入"},
|
||
"CF_P": {"func": "CF 通信 P", "note": "U5→U14/CN1"},
|
||
"CF_Q": {"func": "CF 通信 Q", "note": "U5→U14/CN1"},
|
||
"V_ZL1": {"func": "电压测量1→ADC16"},
|
||
"V_ZL2": {"func": "电压测量2→ADC17"},
|
||
"R16": {"func": "子板信号"},
|
||
"SWCLK": {"func": "SWD 时钟", "note": "U17→H2"},
|
||
"SWDIO": {"func": "SWD 数据", "note": "U17↔H2"},
|
||
"NRST": {"func": "复位", "note": "U17/U1,经 R40/SW1"},
|
||
"LED1": {"func": "板级 LED1", "gpio": "PC4", "note": "低有效;顺序按 AGENTS.md 待核"},
|
||
"LED2": {"func": "板级 LED2", "gpio": "PC5", "note": "低有效"},
|
||
"LED3": {"func": "板级 LED3", "gpio": "PB1", "note": "低有效"},
|
||
"LED4": {"func": "板级 LED4", "gpio": "PB2", "note": "低有效"},
|
||
"LED5": {"func": "板级 LED5", "gpio": "PF11", "note": "低有效"},
|
||
"LED6": {"func": "板级 LED6", "gpio": "PF12", "note": "低有效"},
|
||
"PBLED": {"func": "PHY 活动 LED", "note": "U2→R2→LED"},
|
||
"DIS_EEE": {"func": "显示/EEE 指示", "note": "U2→R6→LED1"},
|
||
"INT": {"func": "CH395F 中断", "note": "U1→U17"},
|
||
"RX_P": {"func": "MDI 差分(U2↔T1)"},
|
||
"RX_N": {"func": "MDI 差分(U2↔T1)"},
|
||
"TX_P": {"func": "MDI 差分(U2↔T1)"},
|
||
"TX_N": {"func": "MDI 差分(U2↔T1)"},
|
||
"RXA_P": {"func": "端口A MDI(U2↔J1)"},
|
||
"RXA_N": {"func": "端口A MDI(U2↔J1)"},
|
||
"TXA_P": {"func": "端口A MDI(U2↔J1)"},
|
||
"TXA_N": {"func": "端口A MDI(U2↔J1)"},
|
||
"RXB_P": {"func": "端口B MDI(U2↔J2)"},
|
||
"RXB_N": {"func": "端口B MDI(U2↔J2)"},
|
||
"TXB_P": {"func": "端口B MDI(U2↔J2)"},
|
||
"TXB_N": {"func": "端口B MDI(U2↔J2)"},
|
||
},
|
||
}
|
||
|
||
if __name__ == "__main__":
|
||
out = os.path.join(os.path.dirname(os.path.abspath(__file__)), "pinout_kb.json")
|
||
with open(out, "w", encoding="utf-8", newline="\n") as f:
|
||
json.dump(KB, f, ensure_ascii=False, indent=1)
|
||
f.write("\n")
|
||
print("written: %s (instances=%d, nets=%d)" % (
|
||
out, len(KB["instances"]), len(KB["nets"])))
|