Skip to main content

PrL的负能量场

有的没的
  1. 最近 open webui更新新版本后,在我的 ios16.2 的 safari 上发现历史会话的所有LLM 的回复都变成空白了。

    查找了一下问题,在 issue 发现了解决方案。
    首先推荐使用 0.6.10 这个版本试一下。如果还不行就在容器里执行
    find /app/build/_app/immutable/chunks/*.js -exec sed -i -e "s/.split(new RegExp(\"(?<=\[.\!?\])\\\\\\\\s+\"));/.match(\\/\\[^.?\!\]+\[.\!?\]+\[\\\\])'\"\`\’\”\]\*|.+\/g)||\[\];/g" {} \;



    #AI #openwebui
  2. PNP”和“NPN”这两个术语通常用于描述 数字输入(DI)信号的类型**,尤其是传感器或开关的输出类型。因此,它们主要用于描述 **输入侧的接线方式和信号来源的特性**。

    ---

    ## 简单总结:

    | 类型 | 用于描述 | 特点 |
    |------|----------|------|
    | **PNP / NPN
    | 主要用于 数字输入(DI)模块 的信号源(如传感器、接近开关等) | 描述的是外部设备如何向 PLC 输入端子提供电流 |

    ---

    ## 🔍 详细解释:

    ### 1. PNP 型(Source Type)
    - 又称 漏型输入(Sourcing Input)**。
    - 传感器/开关在导通时将 **24V(L+)电平送入 PLC 的 DI 点**。
    - 当输入闭合时,电流从传感器流出到 PLC 的输入点 → 所以叫 “source”。

    #### 📌 接线方式:
    - 传感器电源正极(24V)接到传感器的棕色线;
    - 传感器输出线(黑色线)接到 PLC 的 DI;
    - PLC 的 DI 模块内部连接到 **M 端子作为参考地**;
    - 电源负极接到 M。

    > ⚠️ 如果你的 PLC DI 模块是 **支持 PNP 输入的漏型接法**,则使用这种方式。

    ---

    ### 2. **NPN 型(Sink Type)

    - 又称 吸型输入(Sinking Input)**。
    - 传感器/开关在导通时将 **PLC 的 DI 点拉到 GND(M)**。
    - 当输入闭合时,电流从 PLC 输出 → 流入传感器 → 所以叫 “sink”。

    #### 📌 接线方式:
    - 传感器电源正极接到 PLC 的 L+;
    - PLC 的 DI 输出接到传感器的黑色线;
    - 传感器的蓝色线接到电源负极(即 M);
    - 传感器输出导通时,电流从 L+ → DI → 传感器 → M。

    > ⚠️ 如果你的 PLC DI 模块是 **支持 NPN 输入的吸型接法**,则使用这种方式。

    ---

    ## 🧠 总结口诀(方便记忆):

    - **PNP 是“供出电”**:传感器把电送到 PLC;
    - **NPN 是“吸入电”**:传感器把电流引走。

    ---

    ## 📝 补充说明:

    虽然 PNP/NPN 主要描述的是 **输入信号的类型**,但在实际应用中,也会看到它们出现在 **输出模块
    的上下文中,比如晶体管输出的 PLC 是否支持 PNP 或 NPN 类型的负载接法。不过这种情况较少见,大多数情况下我们说 PNP/NPN 都是指:

    > 输入模块所连接的传感器或开关的输出类型

    ---

    ## 📎 实际例子:

    你买了一个接近开关,上面写着:

    - Output: PNP, NO
    表示它是一个常开的 PNP 输出型传感器,适用于漏型输入的 PLC 模块。

    ---

    如果你有 S7-1200 的具体型号,我也可以告诉你它默认支持哪种类型的输入(PNP or NPN),是否可以切换等等 😊


    #plc #pnp
  3. 终于自己实践了使用 acme.sh docker 版本申请证书! 同样配合 crontab 每两个月执行一次,美滋滋!就和脚本版本的 acme 一个样。

    - 并且在xray 的 inbound 里加上新域名的证书,就可以实现多个 sni 访问你的 vless 服务器了!再也不用跳过证书验证了!
    - 发现 xray 实际上跟域名相关的设置,就只有这个 cert,很方便。



    相关的配置:

      "streamSettings": {
          "certificates": [
            {
              "certificateFile": "/etc/v2ray-agent/tls/a.com.crt",
              "keyFile": "/etc/v2ray-agent/tls/a.com.key",
              "ocspStapling": 3600
            },
            {
              "certificateFile": "/root/acmedocker/b-fullchain.com.cer",
              "keyFile": "/root/acmedocker/b.com.key",
              "ocspStapling": 3600
            }
          ]
      }


    但是需要注意但是,这个 cer 文件,一定要使用 fullchain 的。



    acme.sh 的 docker 命令:

    0 3 1 */2 * docker run --rm -v "/root/acmedocker":/acme.sh --net=host neilpang/acme.sh  --issue -d b.com  --standalone --server letsencrypt --renew


    设置完 xray 之后,可以使用 openssl 进行验证:

      openssl s_client -connect b.com:443 -servername b.com




    ps 这个需求起源于 giffgaff ml,想用 hk 服务器但是又不想抛弃de域名(看起来延迟低一点,其实上一点也不低。。)

    #network
  4. 今天又探索出了一个,让 llm 更好的和 python docx 库联动的方法。

    写了一个脚本,这个脚本可以列出 docx文件里表格的每个单元格的 index 还有内容。

    把这个运行后的结果,粘贴在 prompt 中,这样成功率很高。

    查看 docx repo 中的docx_inspectTable0.py

    #programming
  5. 下面列出几个常见品牌的合法MAC前缀

    查询网址:https://udger.com/resources/mac-address-vendor?v=top
    https://gist.github.com/aallan/b4bb86db86079509e6159810ae9bd3e4

    ### 检查方法

    【Tips】你可以在[mac地址查询网站](https://macvendors.com/)输入前缀查品牌。

    openwrt更改mac地址方法
    pppoe 协议吗,要修改这个文件 /etc/config/network
    文件里有没有下面这一段
    config device 'wan_dev'
    option name 'eth0.2'
    option macaddr '40:31:3c:xx:xx:xx'
    没有的话,添加进文件,eth0.2这个改成和 wan里的一样


    config device
            option name 'lan2'
            option macaddr 'xxx'
    
    config device
            option name 'lan3'
            option macaddr 'xxx'
    
    config device
            option name 'eth1'
            option macaddr 'xxx'


    #network
  6. com是接正电吗?不是接gnd? 还有所谓的行话“干节点”是啥意思

    1. COM 是接正电还是接 GND?

    COM 端子**既不是固定接正电,也不是固定接 GND**。

    COM (Common) 是继电器触点的**公共端**,它就像一个普通开关的其中一个接线柱。你需要将**外部电源的一端**连接到 COM 端子,然后将负载连接在 NO 或 NC 端子与外部电源的**另一端**之间,形成一个完整的电路。

    具体 COM 是接电源的正极还是负极 (GND),取决于你的**外部负载电路**是如何接线的:

    * DC 电路 (例如 24V DC):
    * 如果你的负载 (比如指示灯或接触器线圈) 的另一端是固定接到电源的负极 (GND) 的: 那么 COM 端子就需要接到电源的**正极 (+V)。这种接法下,继电器触点是接在电源正极和负载之间,提供电流给负载,这类似于晶体管输出中的 **Sourcing 模式。
    * 如果你的负载的另一端是固定接到电源的正极 (+V) 的: 那么 COM 端子就需要接到电源的**负极 (GND)。这种接法下,继电器触点是接在负载和电源负极之间,吸收电流,这类似于晶体管输出中的 **Sinking 模式。

    * AC 电路 (例如 230V AC):
    * COM 端子通常接到 AC 电源的**火线 (Line) 或**零线 (Neutral) 中的一根。负载接到 NO 或 NC 端子,负载的另一端接到 AC 电源的另一根线。

    结论: COM 端子是外部负载电路的**公共连接点**,它接的是你为这个负载电路提供的**外部电源**的**其中一端**。是接正极、负极、火线还是零线,取决于你外部电路的具体接法。

    2. 所谓的行话“干节点”是啥意思?

    “干节点” (Dry Contact),也称为无源触点,是继电器输出中最常见的一种形式,尤其是在电力系统和工业控制领域。

    “干”的意思是这个触点本身**不带电**,它**不提供电压或电流**。它仅仅是一个物理的开关(闭合或断开),用来**控制外部独立电源提供的电路**。

    你可以把它想象成你家里墙上的电灯开关。开关本身不发光,也不产生电。它只是连接或断开外部电网到灯泡的电路。这个开关就是一个“干节点”。

    区别于“湿节点” (Wet Contact) 或“有源触点”:

    * 湿节点: 指的是触点本身连接到了模块内部的电源。当触点闭合时,它会输出模块内部的电压(比如 24V DC)。这种输出实际上是模块内部电源通过触点直接给外部负载供电。晶体管输出通常可以认为是湿节点(尽管它是半导体而不是物理触点,但它直接控制模块内部电源的输出)。

    继电器输出通常是“干节点”**,因为继电器触点(COM, NO, NC)与驱动继电器线圈的模块内部电路是**电气隔离**的。触点上流过的电流和电压完全由你连接到 COM 和 NO/NC 上的**外部电源**决定。

    “干节点”的优点:**

    1. 高隔离性: 触点与模块内部电路之间有物理隔离,可以承受较高的外部电压,有效防止外部高压或干扰损坏内部电路。
    2. 灵活性: 可以用于控制不同电压等级(高压、低压)和不同电源类型(AC、DC)的外部负载,只要不超过触点的额定值。
    3. 可靠性: 在恶劣的电气环境中(如变电站),干节点的抗干扰能力更强。

    因此,“干节点”是继电保护设备和一些要求高隔离性、能控制不同类型负载的工业设备中首选的输出方式。当提到继电器输出时,如果不是特别说明,通常指的就是干节点。

    #plc
  7. 晶体管输出和继电器输出有啥区别? 继电器输出没有npn pnp之分吗?那么继电器输出的com口和do口分别接啥?

    1. 晶体管输出 (Transistor Output) 和 继电器输出 (Relay Output) 的区别

    这两种是数字量输出模块常见的类型,它们的核心区别在于使用不同的元件作为开关:

    * 晶体管输出: 使用半导体晶体管(如双极性晶体管或MOSFET)作为电子开关。
    * 优点:
    * 速度快: 开关速度非常快,适用于需要高速动作的场合(如脉冲输出)。
    * 寿命长: 没有机械触点,理论上开关次数无限,寿命长。
    * 无噪音: 运行时没有机械动作,非常安静。
    * 体积小: 通常可以做到更高的通道密度。
    * 缺点:
    * 有方向性: 通常只适用于直流 (DC) 负载,且有 NPN (Sinking) 和 PNP (Sourcing) 之分,需要与负载和电源的接法匹配。
    * 电压/电流限制: 单个晶体管能承受的电压和电流通常低于同等体积的继电器,特别是难以承受大电流冲击或开断高感性负载。
    * 有压降和漏电流: 导通时有微小的电压降,关断时有微小的漏电流。
    * 隔离性相对较低: 虽然通常通过光耦提供隔离,但耐压等级可能不如继电器的物理触点隔离。

    * 继电器输出: 使用一个电磁继电器作为机电开关。PLC/设备内部的信号驱动继电器的线圈,线圈产生磁力吸合或释放物理触点,从而接通或断开外部电路。
    * 优点:
    * 隔离性好: 继电器触点与内部控制电路之间有物理隔离(空气间隙),隔离电压高,抗干扰能力强。
    * 交直流通用: 触点本身只是一个机械开关,可以用来控制交流 (AC) 或直流 (DC) 负载,不分 NPN/PNP。
    * 负载能力强: 触点可以承受较大的电流和电压,尤其是在开断感性负载方面,设计合理的继电器具有较强的灭弧能力。
    * 无漏电流: 触点断开时是物理断开,理论上没有漏电流。
    * 缺点:
    * 速度慢: 开关速度受机械动作限制,比晶体管慢得多。
    * 寿命有限: 触点有机械磨损和电弧腐蚀,开关次数有限,寿命相对较短(尤其是频繁开关或带大负载开关时)。
    * 有噪音: 动作时会有“咔哒”的机械声。
    * 体积相对大: 单个通道通常比晶体管输出占用更多空间。

    总结区别: 晶体管输出适合高速、高寿命、低功耗、直流负载的应用;继电器输出适合需要良好隔离、交直流通用、负载能力强、对速度要求不高的应用。

    2. 继电器输出没有 NPN/PNP 之分吗?

    是的,继电器输出的触点本身没有 NPN/PNP 之分。

    NPN 和 PNP 是描述**晶体管**类型的术语,涉及到电流的方向(Sinking 或 Sourcing)。而继电器的输出是**物理触点**,它只是简单地将外部电路的两点连接或断开,就像一个普通开关一样。触点本身不产生或控制电流的方向,它只是一个通路。外部负载电路的电流方向和性质(AC或DC,Sinking或Sourcing)由你如何连接外部电源和负载决定,与继电器触点本身无关。

    继电器内部驱动线圈的电路可能使用晶体管,那个内部驱动电路可能有 NPN/PNP 的特性,但这完全是模块内部的事情,不体现在输出触点上。

    3. 继电器输出的 COM 口和 DO 口分别接啥?

    对于继电器输出,常见的端子标识是 COM (Common)**、**NO (Normally Open)NC (Normally Closed)**。

    * **COM (Common):
    这是继电器触点的**公共端**。你可以理解为开关的**活动臂**或**输入端**。外部电源的一端通常接到这里。
    * NO (Normally Open): 这是继电器的**常开端**。在继电器线圈**未得电**时,COM 和 NO 之间是**断开**的。当继电器线圈**得电**时,触点吸合,COM 和 NO 之间**导通**。
    * NC (Normally Closed): 这是继电器的**常闭端**。在继电器线圈**未得电**时,COM 和 NC 之间是**导通**的。当继电器线圈**得电**时,触点断开,COM 和 NC 之间**断开**。

    DO (Digital Output) 口的接法:

    在PLC或设备上,当一个数字量输出被编程为 ON 时,它会驱动对应的继电器线圈得电。我们通常希望在输出 ON 时,外部负载(比如指示灯、接触器线圈)是导通的。因此,最常见的接法是使用 COMNO 端子。


    连接方法说明:

    1. 将外部电源(可以是 DC 24V, AC 230V 等,取决于继电器触点的额定值)的**一端**连接到继电器输出的 COM 端子。
    2. 将你要控制的负载(比如指示灯、接触器线圈、电磁阀等)的**一端**连接到继电器输出的 NO 端子。
    3. 将负载的**另一端**连接回外部电源的**另一端**,形成一个完整的回路。

    这样,当PLC的该数字量输出为 ON 时,继电器线圈得电,COM 和 NO 导通,外部电源通过 COM -> NO -> 负载 -> 电源另一端形成回路,负载得电工作。当PLC输出为 OFF 时,继电器线圈失电,COM 和 NO 断开,回路断开,负载停止工作。

    NC 端子则用于实现“常开”的反向功能,即在PLC输出 OFF 时负载工作,ON 时负载停止,这在某些特殊应用中可能会用到,但不像 NO 那样常用作典型的 DO 输出。

    #plc
  8. 长远计划
    需要给爸妈家挑个路由器
    看着有推荐C R 6609的 35
    兆能M2 30多 但是信号不如cr好


    #路由器

    下周计划
    1 建议214改气路
    2 216备课
    3 看哔哩哔哩v20的讲法 内容 ppt 问问黄皓阳ppt
    4 备课步进电机
    5 备课s7 开发五子棋

    6 26号之前 上交实习报告
    7 出卷子
    8 提前打印卷子
    9 查看机器人补课时间


    - 1+x报销
    - 教学比赛
    - 2024年总结
    #plan
  9. 把 gemini balancer 迁移到 x96 上了,没做外网映射,然后再 owu 上面配了内网地址,结果内外网都能用。看来是 owu 后端发的模型请求。

    这就太妙了,部署在本地的响应速度直接缩短了至少 50%。

    #tech #ai
  10. 查看emmc健康度的两种方式


    eMMC 存储在 linux 上被挂载为块设备,一般通过 /dev/mmcblk* 访问。

    1. mmc-utils 工具

    $ mmc extcsd read /dev/mmcblk2
    =============================================
      Extended CSD rev 1.8 (MMC 5.1)
    =============================================
    
    ...
    $ mmc extcsd read /dev/mmcblk2 | grep -iE 'life|eof'
    eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x01
    eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x01
    eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01
    


    2. /sys/class/block 源文件

    Android 上可能没有 mmc 工具,可以通过 /sys/class 查询设备的各种信息。

    # 需要 root 权限
    $ cat /sys/class/block/mmcblk2/device/pre_eol_info
    0x01
    $ cat /sys/class/block/mmcblk2/device/life_time
    0x01 0x01
    


    关键字段\_健康度
    ---------

    1. DEVICE\_LIFE\_TIME\_EST\_TYP

    越小越好,分为 A/B 字段,代表 SLC/MLC 寿命。

    | Value | Description |
    | --- | --- |
    | 0x00 | Not defined |
    | 0x01 | 0%~10% device life time used |
    | 0x02 | 10%~20% device life time used |
    | 0x03 | 20%~30% device life time used |
    | 0x04 | 30%~40% device life time used |
    | 0x05 | 40%~50% device life time used |
    | 0x06 | 50%~60% device life time used |
    | 0x07 | 60%~70% device life time used |
    | 0x08 | 70%~80% device life time used |
    | 0x09 | 80%~90% device life time used |
    | 0x0A | 90%~100% device life time used |
    | 0x0B | Exceeded its maximum estimated device life time |
    | Others | Reserved |

    2. PRE\_EOL\_INFO

    | Value | Pre-EOL Info | Description |
    | --- | --- | --- |
    | 0x00 | Not defined | |
    | 0x01 | Normal | Normal |
    | 0x02 | Warning | Consumed 80% of reserved block |
    | 0x03 | Urgent | |
    | 0x04~0xFF | Reserved | |


    #tech #linux