热爱技术
专注分享

记一次有趣的中控修复过程

近期某项目上的一个中控程序出了点问题,我过去排查:据说是无法用程序控制灯的开关。

先说下中控是如何控制灯开关的。其实很简单,中控主机后面的485口接了一个8路灯光继电器,通过中控发码来控制继电器的开合,以达到控制灯光的作用。只不过在这个项目上,又略微复杂,因为继电器是通过串联的方式连接,每个继电器都有自己的地址码,以此来区分。

简单的拓扑:IPAD/墙装控制屏–>中控主机–>灯光继电器1–>灯光继电器2–>灯光继电器3–>灯光继电器4–>灯光继电器5  每个灯光继电器控制着不同的电器,现在坏的是最后一个,灯光继电器5。

 对于排查问题,用的最多也最好用的是“分段排查”。

首先用IPAD/墙装控制屏控制一下继电器1-4,查看工作一切正常。

检查继电器4到继电器5的连接线,正常。

检查继电器5的电源,正常。

手动控制继电器5,正常。

把继电器5拆下来,直连中控主机,无法工作。

 

因此判读:继电器5的串口接码模块坏了、中控主机发码不正常、继电器5的地址码自己变成其他码了。

判断接码模块是否损坏:拆开继电器5,观察里面的构造,通过中控主机发码测试,灯亮,正常。

中控主机发码不正常:这个检测麻烦,且其他四个继电器都可以工作,因此放到最后检查。

继电器5的地址码自己跳转成其他码了:这个是重点检测的。

 

如何检测继电器5的地址码已经跳转?这里就要涉及到中控编程了。AMX虽然后端代码都要纯手动编写,但是基本是模块化,条理清晰,因此也不算太难。

我们从继电器的厂家那里得到:继电器5的更改地址码的串口控制代码为:#SID00x>00y (其中00x为现有的地址码,00y是新的地址码)

为了防止串码,我们必须将继电器5单独拆出来,接到中控主机上。

 

如图增加一条执行命令,将继电器5的地址码从005改成007

blob.png

 上图中的REL8在中控程序中代表的是继电器5。

接下来添加一条按钮命令,对应刚才的执行命令:

blob.png

这条命令的意思是:对应的前端按钮编码为2460,按下后的操作是执行“REL8_CHANGE”这条命令,即更改地址码。

接着将继电器1-8路全开和全关的执行命令:#SKD00512345678 和 #SGD00512345678中的005都改为007。

最后我们回到前端界面。在里面加一个按钮,编号为2460,名称为更改地址码测试。

将前端界面程序导入到IPAD中,将后端程序编译后上传到中控主机中。

我们打开IPAD,点一下按钮“更改地址码测试”,然后回到灯光控制界面,测试一下“全开”和“全关”是否能实现。

结果没实现。

 出现这个问题说明继电器的地址码确实已经不是原来的005了,那它会变成多少呢?没人知道。且这个继电器无法通过物理按键或者程序初始化……

那么进入死胡同了吗?

突然间又想到一个笨方法。还模模糊糊记得继电器厂家提供的说明书,这个继电器最多16个串联。那么也就是说,最多有16个地址码。既然我不知道,那么可以一个个去试。

那么试的话还是把上面的方法重复16次?那样耗时间就真的太长了。

于是想了个方法。重复上面的方法16此虽然不太现实,但是我可以把所有可能的继电器地址码都改成同个地址码吧?

于是我把“REL8_CHANGE”这条执行命令,改成了如下形式:

blob.png

然后将后端代码编译,导入中控。继续在IPAD中按“更改地址码”,看到中控主机对应的485口在疯狂地闪。

然后按灯光的“全开”“全关”,发现有效果,可见,此次故障为地址码的问题,且现在已经将地址码改成了007。

测试出来后,将地址码从007改回005,将“全开”“全关”对应的后端程序控制代码改回原来,成功修复中控功能。

赞(3) 打赏
未经允许不得转载:小伟博客 » 记一次有趣的中控修复过程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏