PJLink 到底是什么
PJLink 是一套跨厂商的投影机网络控制协议,由日本 JBMIA 制定。它的意义在于:同一条命令字符串,可以同时开爱普生、松下、索尼和 NEC 的投影机——不用为每个品牌单独做驱动,也不用拉 RS-232 线。
这在现场是实打实的省事。一个展厅六台投影机来自三个品牌,按常规要准备三套串口指令、三条线路、三套怪脾气;用 PJLink 就是一套命令走现有网络。
代价是:PJLink 只覆盖最大公约数——开关机、输入切换、消隐、状态查询。品牌专有功能(镜头记忆、边缘融合、几何校正)不在标准里,那些仍然要用厂商自己的 RS-232 或网络协议。
连接:TCP 端口 4352
PJLink 走 TCP,端口 4352。这是标准规定的,不要改,大多数投影机根本不给你改的入口。
| 项 | 值 |
|---|---|
| 传输 | TCP |
| 端口 | 4352 |
| 编码 | ASCII |
| 行结束符 | CR(0x0D)——不是 CRLF |
| 会话 | 一条命令一次连接是最稳的做法 |
这里有两个坑最容易栽:
- 结束符是单个回车。 如果你的工具发的是
\r\n,有些投影机会把结尾那个\n当成下一条命令的开头,于是报格式错误。只发\r。
- 响应也是
\r结尾。 如果你用按\n切分的行读取器去解析,你会一直干等,而数据其实早就躺在缓冲区里了。按0x0D分帧。
握手:PJLINK 0 与 PJLINK 1
socket 一连上,是投影机先说话。它会发来两种问候之一:
PJLINK 0<CR> ← 无需密码
PJLINK 1 a8b7c6d5<CR> ← 需要密码,附 8 位十六进制随机数PJLINK 0—— 直接发命令。
PJLINK 1 <随机数>—— 命令前必须拼上认证摘要(见下)。
现场经验:并不是每台投影机都真的会发问候。 有些机器一连上就直接收命令,而一个死等问候的客户端,会在这种本来能用的投影机上超时失败。稳妥的实现是:收不到问候就按"无认证"继续发,而不是直接判失败。
认证:摘要怎么算
算法很简单,但几乎每个人都会栽一次:
摘要 = MD5( 随机数 + 密码 ) ← 直接拼接,中间没有分隔符
命令行 = 摘要 + 命令 + CR实例——随机数 498e4a67,密码 JBMIA,命令 %1POWR 1:
MD5("498e4a67JBMIA") = 8a36d09ab68186318cedf79297d3bd47
发送: 8a36d09ab68186318cedf79297d3bd47%1POWR 1<CR>摘要是32 位小写十六进制,以 ASCII 文本发送,直接拼在命令前面,中间不加空格。它由每次新的随机数现算,所以不能跨连接缓存。
摘要算错时,投影机回:
PJLINK ERRA<CR>注意 PJLINK ERRA 是独立的一行,不是 %1XXXX=ERRA 那种响应格式。只会找 =ERR 的解析器会漏掉它,然后报成超时——于是施工的人跑去查一个根本不存在的网络问题。
命令格式
%1POWR 1<CR>
│││││ │└─ 参数(最长 128 字节)
││││└──── 分隔符(空格)
│└──────── 命令(4 个大写字符)
└───────── 头 '%' + 类别 '1'响应会用 = 回显命令:
%1POWR=OK<CR>查询用 ? 作参数:
%1POWR ?<CR> → %1POWR=1<CR>Class 1 完整指令表
| 命令 | 作用 | 参数 | 响应 |
|---|---|---|---|
%1POWR 1 | 开机 | 1 | OK / ERRx |
%1POWR 0 | 关机(待机) | 0 | OK / ERRx |
%1POWR ? | 电源状态 | ? | 0 待机 · 1 开启 · 2 冷却中 · 3 预热中 |
%1INPT n | 切换输入 | 见下 | OK / ERRx |
%1INPT ? | 当前输入 | ? | 如 31 |
%1AVMT 30 | 消隐关(快门开) | 30 | OK |
%1AVMT 31 | 消隐开(快门关) | 31 | OK |
%1AVMT ? | 消隐状态 | ? | 11 · 21 · 30 · 31 |
%1ERST ? | 错误状态 | ? | 6 位数字,见下 |
%1LAMP ? | 灯泡时数与状态 | ? | 1200 1 |
%1INST ? | 可用输入列表 | ? | 如 11 12 31 32 |
%1NAME ? | 投影机名称 | ? | 自由文本 |
%1INF1 ? | 制造商 | ? | 如 EPSON |
%1INF2 ? | 型号 | ? | 如 EB-L1075U |
%1INFO ? | 其他信息 | ? | 自由文本 |
%1CLSS ? | PJLink 类别 | ? | 1 或 2 |
INPT —— 输入源编号规则
参数是两个字符:第一位是输入类型,第二位是该类型下的序号。
| 首位 | 输入类型 |
|---|---|
1 | RGB |
2 | Video |
3 | Digital(DVI / HDMI) |
4 | Storage |
5 | Network |
所以 11 = RGB 1,12 = RGB 2,21 = Video 1,31 = Digital 1,依此类推。
不要猜这个映射。 哪个物理接口是 31 还是 32 由厂商决定,同一产品线的不同型号都可能不一样。先发 %1INST ?,它会返回这台机器实际支持的输入列表,调试阶段一次性对好就行。
AVMT —— 消隐取值
| 值 | 含义 |
|---|---|
11 | 视频消隐开 |
21 | 音频消隐开 |
30 | 音视频消隐关 |
31 | 音视频消隐开 |
带机械快门的投影机上,31/30 直接驱动快门。"两批观众之间黑屏"就该用这条命令——它对光源的损耗远小于关机再开机,而且一秒内就响应,不像开机要等几分钟预热。
ERST —— 错误状态怎么读
%1ERST ? 返回六位数字,每位对应一个子系统:
%1ERST=000000
││││││
│││││└─ 其他
││││└── 滤网
│││└─── 机盖打开
││└──── 温度
│└───── 灯泡
└────── 风扇每位取值:0 = 正常,1 = 警告,2 = 错误。
这是无人值守场景下最有用的一条命令。 每分钟轮询一次 %1ERST ?,能在投影机当着观众面挂掉之前就告诉你滤网堵了或灯泡快到寿了。
LAMP —— 时数与状态
%1LAMP=1200 1
│ └─ 0 = 关,1 = 开
└────── 累计小时数多灯泡机型会重复这对数字:%1LAMP=1200 1 850 1。
错误响应:ERR1–ERR4
| 代码 | 含义 | 实际在告诉你什么 |
|---|---|---|
ERR1 | 未定义命令 | 这台机器没实现这条命令——常见于把 Class 2 命令发给了 Class 1 设备。用 %1CLSS ? 确认类别 |
ERR2 | 参数超范围 | 命令对但参数不对。通常是这个型号上不存在的输入编号——查 %1INST ? |
ERR3 | 当前不可用 | 投影机正忙或处于状态切换中。开机后头 30–60 秒极其常见 |
ERR4 | 投影机故障 | 硬件故障。紧接着发 %1ERST ? 查是哪个子系统 |
ERR3 值得单独说。 它不是故障,它的意思是"过会儿再问我"。把 ERR3 当硬错误处理的中控系统,会在每天早上预热时把投影机全报成坏的。 正确做法是隔几秒重试。
为什么你的 PJLink 命令没有回应
按实际踩中的频率排序:
1. 投影机上根本没开 PJLink。
大多数投影机出厂时网络控制是关的。设置在网络菜单或待机菜单里,而且常常还被第二个开关卡着——待机功耗模式必须是"标准/高",不能是节能。节能待机下网络接口整个断电,所以典型症状是:开着机时所有命令都好用,唯独开机命令永远失败。
2. 你在等错误的结束符。
投影机用 \r 回了,你的读取器在按 \n 切。见上面的连接表。
3. 认证失败被报成了超时。
投影机发了独立一行的 PJLINK ERRA,解析器没认出来。去日志里找这个字面量。
4. 投影机压根没发问候。
有些机器会跳过。死等问候会把一台好机器变成超时故障。
5. 设备有响应,但不认这条命令。ERR1 意味着这个型号没有这条命令。在怀疑网络之前,先用 %1CLSS ? 确认类别。
6. 防火墙或 VLAN。
4352 不是常见端口,很容易被过滤。要从中控实际所在的那个网段做裸 TCP 连接测试,而不是从调试笔记本所在的另一个 VLAN 测。
建议的排查顺序:从同网段用裸 TCP 工具连上 → 确认问候到达 → 发 %1POWR ?(查询命令安全,且在待机状态下比开机命令好用得多)→ 确认能通之后,再把这条已验证的字符串搬进中控系统。如果查询有回应而开机没有,那你就已经找到了第 1 条里的节能待机设置。
用 SoftControl 控制 PJLink 投影机
SoftControl 原生支持 PJLink——端口 4352、PJLINK 0 / PJLINK 1 握手、MD5 摘要都由它处理,包括上面那两个现场情况:跳过问候的投影机,以及把 PJLINK ERRA 判成认证失败而不是超时。
由于它同时支持裸 TCP、UDP、HTTP、RS-232 和 Modbus,你可以把 PJLink 投影机、串口控制的显示器和 Modbus 灯光继电器放在同一个页面上——用 PJLink 干它擅长的事,品牌专有功能则回落到厂商协议。