← 返回 中控与协议

PJLink 控投影:认证、Class 1/2、电源/输入/状态常用指令

最后更新 2026-06-22
s4 · 中控与协议 🟡 涉接线/工业配置
你将学到
  • 搞清 PJLink 协议的定位:统一标准 vs 私有 RS232,什么时候选哪个
  • 理解 PJLink 的认证流程(随机数 + MD5),以及不需要认证时怎么处理
  • 区分 Class 1 和 Class 2 的功能差异,知道哪些设备支持 Class 2
  • 掌握常用指令(POWR/INPT/AVMT/ERST/NAME 等)的格式和应答,能直接发调试
  • 拿到指令速查表和故障排查表

展厅里有 12 台投影,来自 4 个不同品牌。如果每台都靠各家自己的私有 RS232 协议控制,你需要分别啃 4 份完全不同格式的手册,用 4 套完全不同的指令字节。现场调试时一台改设置影响另一台配置的概率极高,维护成本还不说。

PJLink 解决的就是这件事。它是日本 JBMIA(Business Machines and Information System Industries Association)在 2002 年发布的投影机统一控制标准,主流品牌的投影(爱普生、NEC、松下、索尼、三菱等)从商用系列开始基本都支持。统一标准的意思是:无论哪个品牌,只要支持 PJLink,你发 %1POWR 1 就是开机,%1POWR 0 就是关机,应答格式也一样。

当然 PJLink 也有边界——它能控的操作是"共性的"(电源、输入切换、静音、查询状态),各家投影的特有功能(色彩调整、几何校正、镜头调整等)PJLink 覆盖不了,那些还是要靠各家私有协议。

涉及网络设备控制(R2)。PJLink 协议规范(Class 1/2 指令格式、认证流程)以 JBMIA 官方 PJLink 规范文档为准(见文末来源);具体某台投影支持哪些 PJLink 指令、支持 Class 1 还是 Class 2,必须查该设备的手册或 PJLink 官方认证数据库,不是所有支持 PJLink 标识的投影都实现了全部指令。


PJLink 走 TCP 协议,端口 4352,这是 JBMIA 在 IANA 注册的固定端口,不需要查手册——见到 PJLink 投影,连 IP:4352 就对了。

指令格式全是 ASCII 文本(人可读),每条指令以 CR(回车,ASCII 0x0D)结尾,不是 \r\n,只有 \r

PJLink 是客户端-服务器模式:中控(或调试工具)作为 TCP 客户端,投影作为服务器。每次操作:建立 TCP 连接(或使用持久连接)→ 发指令 → 收应答 → 根据需要发下一条或断开。


认证流程:随机数 + MD5

PJLink 支持两种模式:

  1. 无认证模式(Class 1 / Class 2 均可):连上 TCP 4352 后,投影主动发送:

    PJLINK 0\r
    

    这里的 0 表示本次不需要认证(设备配置了空密码或关闭了密码验证)。你直接发指令就可以,不需要任何额外步骤。

  2. 有认证模式:连上后,投影发送:

    PJLINK 1 <随机字符串>\r
    

    这里 1 表示需要认证,<随机字符串> 是一个 8 字节的随机十六进制字符串(投影随机生成,每次连接不同)。

有认证时的处理流程

1. 客户端收到: PJLINK 1 D8B8C29C\r
   随机字符串 = "D8B8C29C"

2. 把随机字符串和密码拼接(默认密码是 "JBMIAProjectorLink",
   以实际配置为准):
   认证字符串 = "D8B8C29C" + "你的密码"
   (如果密码为空,则只用随机字符串)

3. 对认证字符串计算 MD5 哈希(32 位十六进制小写):
   MD5("D8B8C29CJBMIAProjectorLink") → 某个 32 位哈希值

4. 在每条指令前加上这个 MD5 哈希:
   发送: <MD5哈希值>%1POWR 1\r
   投影验证 MD5 正确后执行指令

Python 计算 MD5 认证字符串:

import hashlib

def pjlink_auth(random_string: str, password: str = "") -> str:
    """
    计算 PJLink 认证哈希
    参数 random_string: 投影发来的随机字符串(如 "D8B8C29C")
    参数 password: PJLink 密码(空字符串表示无密码)
    返回: 32 位 MD5 哈希字符串(小写)
    """
    auth_str = random_string + password
    return hashlib.md5(auth_str.encode("ascii")).hexdigest()

# 示例(实际密码以投影配置为准)
random_str = "D8B8C29C"
password = ""  # 空密码
auth_hash = pjlink_auth(random_str, password)
print(f"认证哈希: {auth_hash}")
# 有认证时的指令格式:
cmd = f"{auth_hash}%1POWR 1\r"
💡 提示

大多数展厅项目里,投影的 PJLink 密码配成空(禁用认证),中控直接发指令,不走 MD5 流程。如果你用调试工具连上后直接发指令没反应,先检查投影发来的第一条消息——如果是 PJLINK 1 ... 就说明需要认证,你要先发 MD5 哈希。收到 PJLINK 0 才能直接发指令。中控软件(SoftControl 等)通常支持配置 PJLink 密码,填上去就行;手动用网络调试助手调试时,要注意这个步骤。


Class 1 和 Class 2 的区别

PJLink 有两个版本:

对比项 Class 1 Class 2
发布时间 2002 年 2011 年
版本标识 指令前缀 %1 指令前缀 %2
覆盖功能 电源、输入切换、音视频静音、查状态、查型号 Class 1 全部 + 冻结、背景色、镜头控制、多播查询等
设备支持 商用投影广泛支持 部分较新的中高端投影

Class 1 指令用 %1 前缀,Class 2 指令用 %2 前缀。Class 2 投影同时支持 Class 1 指令(兼容);只支持 Class 1 的投影不响应 %2 前缀的指令。

Class 2 新增的常用功能(以官方规范为准):

  • 镜头控制(变焦、对焦、镜头移位):%2LENS
  • 冻结画面:%2FREZ
  • 投影机 Logo 背景:%2LOGO
  • 多播:一条指令广播到网段内所有 PJLink 设备(UDP 4352)

实际使用建议:展厅控制用 Class 1 已经够用(电源、输入切换、静音、查状态)。如果投影手册明确标注支持 Class 2,且你需要镜头控制或冻结功能,再引入 Class 2 指令。不要假设所有投影都支持 Class 2。


常用指令速查表(Class 1)

指令格式:%1<命令> <参数>\r(发送);应答格式:%1<命令>=<结果>\r

命令 说明 发送示例 应答示例 备注
POWR 电源控制 / 查询 %1POWR 1\r %1POWR=OK\r 1=开机,0=关机,?=查询状态
POWR ? 查电源状态 %1POWR ?\r %1POWR=1\r 0=关机,1=开机,2=冷却中,3=预热中
INPT 输入源切换 / 查询 %1INPT 11\r %1INPT=OK\r 输入源编码见下方,?=查询当前输入
AVMT 音视频静音 / 查询 %1AVMT 31\r %1AVMT=OK\r 11=视频静音ON,12=OFF;21=音频ON;31=全部ON,30=全部OFF
ERST 查询错误状态 %1ERST ?\r %1ERST=000000\r 6位十六进制,每位对应一种错误(见下方)
LAMP 查询灯泡状态 %1LAMP ?\r %1LAMP=1024 1\r 灯时数+状态(1=开灯,0=关灯),可能有多组(多灯机)
INST 查询可用输入源列表 %1INST ?\r %1INST=11 31\r 返回该设备支持的所有输入源编码列表
NAME 查询投影机名称 %1NAME ?\r %1NAME=ProjectorA\r 返回设备配置的名称
INF1 查询制造商名 %1INF1 ?\r %1INF1=Manufacturer\r 查询结果以实际设备返回为准
INF2 查询型号 %1INF2 ?\r %1INF2=ModelXXX\r 查询结果以实际设备返回为准
INFO 查询其他信息 %1INFO ?\r %1INFO=...\r 返回内容由设备厂商定义
CLSS 查询支持的 Class %1CLSS ?\r %1CLSS=1\r%1CLSS=2\r 确认投影支持的 PJLink Class

输入源编码说明

PJLink 用一个 2 位数字表示输入源,第一位是接口类型,第二位是同类接口的序号:

第一位(接口类型) 含义
1 RGB(VGA 类接口)
2 VIDEO(复合视频)
3 DIGITAL(数字接口,通常是 HDMI/DVI/DisplayPort)
4 STORAGE(存储设备,如 USB)
5 NETWORK(网络/局域网)

例子:

  • 11 = RGB 第 1 路(VGA1)
  • 12 = RGB 第 2 路(VGA2)
  • 31 = DIGITAL 第 1 路(通常是 HDMI 1)
  • 32 = DIGITAL 第 2 路(HDMI 2)
💡 提示

具体某台投影的输入源编码需要用 %1INST ? 查询实际支持的列表,不能照上面的对应关系硬套。比如某台投影的 HDMI 1 可能映射为 31,也可能因为该品牌的实现不同映射为其他值。先发 %1INST ?,看返回值,确认可用的输入源编码,再用 %1INPT 切换。


ERST 错误状态字节含义

%1ERST ? 返回 6 位十六进制字符串,每位对应一种错误类型(以 PJLink Class 1 官方规范为准):

位置 对应错误
第 1 位 风扇故障(0=无,1=警告,2=故障)
第 2 位 灯泡故障(0=无,1=警告,2=故障)
第 3 位 温度过高(0=无,1=警告,2=故障)
第 4 位 覆盖盖板打开(0=无,2=故障)
第 5 位 滤网故障(0=无,1=警告,2=故障)
第 6 位 其他故障(0=无,1=警告,2=故障)

%1ERST=000000\r 表示无任何错误。%1ERST=020000\r 表示灯泡故障(第 2 位 = 2)。

这个查询在展厅运维中非常实用:中控软件可以定期轮询 ERST,在灯泡到寿命前(警告状态 = 1)提前预警。


如果指令本身格式有问题,投影会返回错误应答(以 PJLink 规范为准):

应答 含义
%1XXXX=OK\r 指令执行成功
%1XXXX=ERR1\r 命令无效(未定义的命令)
%1XXXX=ERR2\r 参数超出范围
%1XXXX=ERR3\r 指定的时间内不可执行(如关机时发开关灯指令,投影在冷却中)
%1XXXX=ERR4\r 投影机故障
%1XXXX=ERRA\r 认证错误(MD5 不匹配)

ERR3 很常见:投影关机后有冷却期(风扇还在转),这段时间发开机指令会收到 ERR3,等冷却完成再发就好。


这个问题展厅里经常遇到,给一个实用的判断框架:

场景 建议用法
投影有 PJLink 支持,中控软件支持 PJLink 优先 PJLink,统一协议省维护成本
展厅多台不同品牌投影 PJLink 更合适,不需要分别配各家私有指令
需要控制镜头移位、几何校正等专项功能 只能用各家私有协议(PJLink 覆盖不到这些)
投影不支持 PJLink,只有 RS232 没有选择,用 RS232 私有协议
老旧投影没有网口 RS232,配合串口服务器接进网络
投影有网口但品牌宣称支持 PJLink,实测不稳定 部分厂商实现不完整,考虑改用厂商自己的 TCP 协议(如果有的话)或换回 RS232
💡 提示

PJLink 是标准,但"支持 PJLink 标识"和"完整实现 PJLink"是两件事。部分品牌型号 PJLink 实现不完整,比如 LAMP ? 返回格式和规范不符、INPT 切换某些输入源时返回 ERR2,等。建议新项目第一次用某个型号时,先做一遍完整的指令测试(把你要用的每条指令都跑一遍,记录实际应答格式),发现不符合规范的地方在项目文档里记录,后续维护时不会踩坑。


(参考设备控制与指令调试的网络调试助手使用方法)

  1. 打开网络调试助手,选 TCP Client
  2. 目标 IP:投影的 IP 地址(查投影的网络设置菜单)
  3. 目标端口:4352
  4. 点"连接"
  5. 连接成功后,接收区应该立刻出现一行:
    • PJLINK 0\r → 无认证,直接发指令
    • PJLINK 1 xxxxxxxx\r → 需要认证,先算 MD5
  6. 切换到 ASCII 发送模式,勾选"自动加回车"(等效于加 \r
  7. 发送 %1POWR ?,应收到投影返回当前电源状态
  8. 发送 %1POWR 1,投影开机(如已开机,返回 OK 不重复动作)
💡 提示

如果工具没有"自动加回车"选项,切换到 HEX 发送模式,把指令文本转成 ASCII 码后在末尾附上 0D(十六进制 CR)。比如 %1POWR ? 的十六进制是:25 31 50 4F 57 52 20 3F 0D。注意 PJLink 只用 CR(0x0D),不用 CRLF(0x0D 0A),多一个 0x0A 可能导致指令被忽略。


故障排查表

现象 最可能的原因 怎么查 / 怎么办
TCP 连 4352 失败 投影网络未配置 / IP 填错 / PJLink 功能未开启 先 ping 投影 IP;进投影网络设置确认 PJLink 已启用,默认通常是关闭的
连上后不收到 PJLINK 开头的握手消息 投影固件版本不支持,或连接的端口不对 确认端口是 4352;查该型号手册确认 PJLink 端口
收到 PJLINK 1 但不知道密码 设备配置了 PJLink 密码 进投影 OSD 菜单或 Web 配置找 PJLink 密码,或复位设备密码(以手册为准)
发指令收到 ERRA MD5 认证不通过 检查密码是否正确;确认随机字符串拼接顺序(随机字符串在前,密码在后)
POWR 1 收到 ERR3 投影在冷却中,暂时不能开机 等冷却完成(通常 1~3 分钟)再发;或先发 POWR ? 查到状态 0 再开机
发指令无应答(TCP 已连接) \r 结束符 确认发送工具加了 CR(0x0D);或用 HEX 模式手动在末尾加 0D
指令格式对但投影不动 投影正在暖机预热中(状态 3),忽略指令 POWR ? 状态为 3 时等待预热完成,通常十几秒到几十秒
INPT 切换到某输入收到 ERR2 输入源编码不对 / 该接口不存在 先发 %1INST ? 查实际可用的输入源编码列表
中控软件显示 PJLink 已连接但状态不更新 TCP 长连接断了(投影侧超时关闭) 投影 PJLink 实现里有时有连接超时(30~60 秒无指令自动断连),中控需加保活或定时重连
部分功能返回 ERR1 投影不完整支持 PJLink,未实现该命令 确认该型号支持的指令列表(查设备手册或 JBMIA 认证数据库),改用该设备支持的指令

小结 · 你现在掌握了什么

  • PJLink 走 TCP 4352,ASCII 文本指令,CR(0x0D)结尾,连上后投影主动发握手消息。
  • 认证:PJLINK 0 直接发指令;PJLINK 1 <随机数> 时需要 MD5(随机数 + 密码)作为每条指令的前缀。
  • Class 1(%1 前缀)覆盖电源/输入/静音/状态;Class 2(%2)额外支持镜头/冻结,需查设备是否支持。
  • 常用指令:POWR 1/0/?(电源)、INPT xx/?(输入,先查 INST ? 得可用编码)、AVMT 31/30/?(静音)、ERST ?(错误状态)。
  • 应答格式:OK=成功,ERR1~4=各类错误,ERRA=认证错误。

下一步:协议章的调试工具和综合故障排查,去看设备控制与指令调试:串口助手 / 抓包 / 排乱码 / 无响应 / 地址冲突——把协议知识和调试手法合起来用。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明

需要展厅软硬件方案或定制开发?