用 PJLink 控制投影机开关机(实操教程)
本文基于 PJLink 公开标准,讲通用对接思路;具体型号的支持范围、可用命令与信源编号以厂商说明书为准。文中命令均为 PJLink 标准命令,不针对任何单一品牌硬编参数。
闭馆时间到了,展厅里十几台投影要一台台关。你举着遥控器满场跑,对不准角度还得反复按;有的机位吊在三米高的桁架上,遥控根本够不着。第二天开馆更折腾——挨个开机、等预热、再逐台切回该放的信源。这活儿一天两遍,谁干谁烦。
更糟的是,很多网络中控系统里投影这一块是”黑盒”:厂商各说各话,A 家的控制协议到了 B 家的机器就推不动。今天要讲的 PJLink,就是来治这个病的——它让你用一套统一的网络命令,把不同品牌的投影机开关机、切信源、查状态全接管过来,编进中控一键搞定。
PJLink 是什么,为什么用它
PJLink 是投影机行业的一套厂商无关的网络控制标准。只要投影机支持 PJLink 并联了网,你就能用同一套命令去控制它,不用管它是哪个牌子。这一点对做展厅、做中控的人太关键了:一个项目里混着几家品牌的投影很常见,有了 PJLink,中控这边只写一套逻辑,底下换什么机器都通。
它分两个等级。Class 1 是基础款,覆盖了你日常最需要的操作:开关机、信源切换、静音、以及电源/信源/错误状态的查询——本文讲的全部在这个范围内,绝大多数支持 PJLink 的投影都有。Class 2 是扩展款,加了搜索发现、序列号读取、状态主动通知等能力,支持的机型少一些。做投影控制,吃透 Class 1 就够用了。
底层它走 TCP,默认端口 4352。命令是纯文本的 ASCII,人眼能读、手能敲,这也是它好调试的原因——出了问题你可以用最土的办法直接手发命令去试。
前置条件
动手之前,先把这几件事确认好,能省掉后面一大半排错时间:
- 投影机支持 PJLink 且已联网。翻说明书或菜单确认有 PJLink 功能,网线插好或 Wi-Fi 连上。
- 记下投影机 IP。在投影机的网络菜单里查,最好在路由器上给它绑一个固定 IP(DHCP 保留),否则哪天地址一变,中控就集体失联。
- 控制端和投影机同网段,能 ping 通。在中控主机上
ping 投影机IP,通了再往下走。ping 不通就是网络层的事,先解决网络别急着发命令。 - 认证密码。部分机型 PJLink 默认要密码认证,去投影菜单里查或设一个,记牢——后面握手要用。也有机型默认不带认证,那就更简单。
最小可用:先跑通一次
别急着上中控。咱们先用最原始的方式,手动把一台投影开机,让你先有个成就感、也确认这条链路是通的。
假设投影 IP 是 192.168.1.50,暂时没设认证密码。在中控主机或任意同网段电脑上,用一个能发 TCP 裸数据的工具——Windows 上可以用带 Raw/TCP 模式的串口网络调试助手(比如 SSCOM、NetAssist 这类),Linux/Mac 上可以直接 telnet 或 nc:
telnet 192.168.1.50 4352
连上的那一刻,投影机会先主动回你一句。如果它不要认证,你会看到:
PJLINK 0
0 表示”无需认证,直接发命令”。这时候你敲入开机命令,结尾一定要带回车(CR,0x0d):
%1POWR 1
投影机应该回:
%1POWR=OK
=OK 就是它收到并执行了。抬头看一眼——投影灯亮了、风扇转起来了,成了。关机同理,发 %1POWR 0,一样回 %1POWR=OK。
这里有个新手最容易栽的坑:很多调试工具默认不帮你加 CR,你敲完命令直接发,投影机没等到结尾符,就当你还没说完,一直不回。发之前务必确认工具里勾了”发送新行/加 CR”,或者手动在命令后补一个回车字节。
跑通了这一次,剩下的就都是在这个基础上加料。
命令速查表
PJLink 的命令格式是固定的一套:% + 类号(1 或 2)+ 4 字节命令 + 空格 + 参数 + CR。命令体大小写不敏感。带 ? 的是查询,投影机会把当前值回给你。下面是 Class 1 里你最常用的:
| 命令 | 作用 | 参数 / 返回 |
|---|---|---|
%1POWR 1 | 开机 | 回 %1POWR=OK |
%1POWR 0 | 关机 | 回 %1POWR=OK |
%1POWR ? | 查电源状态 | 回 0 待机 / 1 开机 / 2 冷却中 / 3 预热中 |
%1INPT xx | 切换信源 | xx 见下方取值,回 %1INPT=OK |
%1INPT ? | 查当前信源 | 回当前信源编号,如 31 |
%1AVMT 31 | 图声全静音(黑屏) | 回 %1AVMT=OK |
%1AVMT 30 | 取消图声静音 | 10/11 单独控图,20/21 单独控声;末位 1=开启静音、0=解除 |
%1NAME ? | 查设备名 | 回投影机名称,用于识别是哪台 |
%1INF1 ? | 查厂商名 | — |
%1INF2 ? | 查型号 | — |
%1ERST ? | 查错误状态 | 回 6 位数字,见”进阶”节 |
%1LAMP ? | 查灯泡/光源时长与点亮状态 | 回累计小时数 + 点亮标志 |
%1CLSS ? | 查支持的 Class 等级 | 回 1 或 2 |
信源编号 xx 的规则:十位表示类型,个位表示第几路。
1x= RGB(11为 RGB1,12为 RGB2)2x= 视频(复合/S 端子等)3x= 数字(HDMI、DVI,31常是 HDMI1)4x= 存储(USB 等内置存储回放)5x= 网络(网络串流输入)
具体每台机器到底有哪几路、编号怎么排,各家不完全一样——最稳的办法是先发 %1INST ?(查可用信源列表)或直接对着投影现有接口一路一路试,把实际编号记进你的配置表。别照抄别人项目的编号硬套。
认证握手详解
如果投影机设了 PJLink 密码,连接时它回的就不是 PJLINK 0,而是:
PJLINK 1 498e4a67
1 表示”需要认证”,后面那串 498e4a67 是它随机生成的8 位十六进制随机数(每次连接都不同)。这时候你不能直接发命令,得先按 Class 1 的摘要认证走一遍:
- 拼串:把随机数和你的密码首尾相接,得到
498e4a67+你的密码(比如密码是JBMIAProjectorLink,就拼成498e4a67JBMIAProjectorLink)。 - 算 MD5:对这整个拼接串做 MD5,得到一个 32 位十六进制的哈希。
- 拼进命令:把这个 32 位哈希直接放在命令最前面,紧跟着你要发的命令,一起发出去。比如开机就发
<32位MD5>%1POWR 1+ CR。 - 看回复:认证对了,投影机正常回
%1POWR=OK;密码错了,它回PJLINK ERRA(认证错误)并断开连接。
几个实战注意点:这个随机数一次连接只用一次,用完就废;下次连接投影机会给一个新的随机数,你得重新拼、重新算。也就是说,如果你要连发好几条命令,通常一条命令连一次、认证一次、发完就断,而不是复用同一个哈希。中控软件里这套流程都是自动做的,但你手动调试时得心里有数——手算 MD5 太麻烦,可以用命令行 echo -n "498e4a67你的密码" | md5sum 之类的工具先把哈希算出来再粘进去试。
只有一两台投影,值得为它上中控吗
编进中控之前,先想清楚这个问题。如果整个场子就一两台投影,需求也只是”到点自动开关、偶尔切个源”,那么专门配一台中控主机加面板加布线,成本和工期都不太划算。
这种情况有条轻量路径:让现有那台播放电脑兼任发指令的角色。上面的脚本挂进 Windows 任务计划,到点跑一次,开关机就自动了。不想自己维护脚本(认证、超时、重试这些琐碎细节写全其实挺费劲),可以用装在被控电脑上的代理程序代劳——我们自研的 SoftAgent 支持直接下发 PJLink 指令(含 MD5 认证密码),这项能力在免费版里就能用,配合它自带的定时任务,“到点开投影、闭馆关投影”这个最常见的需求不用另配中控主机就能跑起来。
那什么时候还是得上中控?要墙面面板让现场人员一键操作、要联动幕布灯光这类非网络设备、要做多设备时序编排、或者设备数量上了十几台——满足任意一条,就别用脚本硬扛了,往下看。
接入中控做开闭馆场景
手动能通了,接下来才是正题:把它编进中控,让”一台台跑”变成”点一下”。
思路很直接。在 SoftControl 展厅中控 这类可视化中控里,你为每台投影建一个 PJLink 设备,填好 IP、端口 4352、认证密码,中控内部会自动处理 TCP 连接和认证握手,你只需要往下”选命令”。
然后建两个场景:
- “开馆”场景:把全部投影的
%1POWR 1排进去;讲究一点的,再给每台加一条延时后的%1INPT xx,等预热完(查POWR?到1)自动切到该放的信源。早上到岗点一下,全场投影自己开、自己切好画面。 - “闭馆”场景:把全部投影的
%1POWR 0排进去。闭馆点一下,十几台一起关。
再进一步,中控一般都带定时任务:设成周一到周日 9:00 触发”开馆”、17:30 触发”闭馆”,连点都不用点了。展项联动也顺手——平时用 %1AVMT 31 让投影黑屏待命,观众触发某个互动装置时再发 %1AVMT 30 恢复画面,比反复开关机对灯泡/光源更友好,响应也快。这套编排怎么落地,可以看看我们的解决方案和实际案例里的做法。
故障排查表
真上手总会遇到不回话、不听话的情况。对照这张表,先定位再动手,别瞎试:
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 发命令完全没反应 | 命令结尾没加 CR / 少了 %1 前缀 / 命令拼错 | 确认工具勾了”加 CR”,前缀和 4 字节命令一字不差 |
| 连接直接被拒 | 端口不是 4352 / 防火墙拦了 / PJLink 功能没开 | 核对端口,投影菜单里开启 PJLink,检查网络 ACL |
回 PJLINK ERRA | 认证密码错,或没做握手 | 核对密码,按摘要认证流程拼 MD5 |
回 %1POWR=ERR3 之类 | 设备当前状态不允许该操作 | ERR1 命令不支持、ERR2 参数错、ERR3 时机不对、ERR4 投影故障 |
| 刚关机开不起来 | 处于冷却期(POWR? 回 2) | 等冷却结束回到 0 待机,再发开机 |
| 切信源不生效 | 信源编号 xx 和这台机器实际接口对不上 | 用 %1INST ? 查实际可用编号,别照抄 |
| 查询命令收不到返回 | TCP 连接没建好 / 命令发出但连接已断 | 先确认 ping 通、端口通,一次连接内完成收发 |
| 时通时不通 | 投影 IP 是 DHCP 动态分配的,地址变了 | 在路由器上给投影绑固定 IP |
特别提醒 ERR3——它是投影控制里最常见的”看起来失败了其实是时机问题”。你刚发完关机紧接着发开机,投影正在冷却,它就回 ERR3 拒绝你。这不是命令错,是它得先凉下来。中控脚本里凡是”关了又要开”的场景,中间都得先轮询 POWR?,等状态到位再发下一条。
进阶:批量、监测与状态读取
跑通单台、接进中控之后,还能再往上做两层。
批量脚本化。 十几台投影,与其在中控里一台台点,不如把 IP 列成一张表,用脚本循环连接、认证、发命令。开馆脚本遍历全表发 POWR 1,闭馆遍历发 POWR 0,新增一台投影只改配置表、不改逻辑。这也是 PJLink”厂商无关”最香的地方——一套脚本吃遍全场不同品牌。
在线监测。 写个轮询任务,每隔几分钟对全表投影发一遍 %1POWR ? 和 %1NAME ?。连不上或超时的,就是掉线/故障,推个告警出来。这样闭馆后你在后台就能看到哪台没正常关、开馆前能提前发现哪台有问题,不用等观众投诉才知道。
读错误与光源状态。 %1ERST ? 回的是 6 位数字,从左到右分别代表:风扇、灯泡/光源、温度、盖板、滤网、其它——每位 0 正常、1 警告、2 错误。轮询里带上它,就能在灯泡快坏、滤网该清、温度偏高时提前预警。%1LAMP ? 回累计使用小时数,做灯泡/光源寿命管理正好——快到额定寿命就安排更换,别等它在开馆时罢工。这类底层协议对接的通用套路,和 PJLink 协议速查 以及 Modbus、TCP/UDP 基础 是一脉相承的,都在协议库里能找到。
动手清单
跟着这张单子走一遍,你就完整掌握了:
- 查到投影 IP,并在路由器上绑成固定地址
- 中控主机 ping 通投影机
- 用调试工具手动发
%1POWR 1(记得加 CR),看到%1POWR=OK且投影亮起 - 若有密码,跑通一次摘要认证握手
- 对照信源接口,用
%1INST ?/ 逐路试,确定每路的xx编号并记进配置表 - 在中控里建好每台投影的 PJLink 设备
- 编好”开馆""闭馆”两个场景,各点一次验证
- 配好定时任务(如 9:00 开、17:30 关)
- 加一个轮询任务,
POWR?+ERST?做在线监测与故障预警
小结
PJLink 的价值不在于某一条命令多神奇,而在于它把”满场跑遥控”这件苦差事,变成了一套可编排、可批量、可监测的网络控制。先手动跑通一台建立信心,再接进中控做开闭馆场景,最后用轮询把它升级成能自己报警的设备网络——一步步来,不难。
延伸阅读:PJLink 协议速查、Modbus 协议入门、TCP/UDP 通信基础,更多底层对接资料见协议库。
想免写代码可视化配置 PJLink 投影机、把多台投影编进开闭馆一键场景?了解 SoftControl 展厅中控,或直接说说你的现场需求,我们帮你定制方案、聊聊对接。