物联网智能化自动控制器教学实验箱
admin1,331 次






通过PC电脑或手机APP实现设备的控制。
丰富的软件及教学资料:
通过PC端软件进行远程网络或本地局域网内的控制。
KC868-H8/KC868-H32/KC868-H8W/KC868-H32W 网络继电器手机APP软件下载地址:
关于网线继电器控制器的二次开发,我们与人民邮民出版社合作,进行全年应用案例与实际编程的文章连载。
网线继电器设备通信协议详解:
1.查询智能控制盒设备型号:
发送:RELAY-SCAN_DEVICE-NOW
返回:RELAY–SCAN_DEVICE–CHANNEL_8/CHANNEL_32,OK/ERROR
这是一条查询设备类型的指令,我们想获得当前连接的设备类型时,可以发送以上参数。目前智能控制盒有两种不同配置的型号,即命令下发后,如果获取成功会返回:“RELAY–SCAN_DEVICE–CHANNEL_8,OK” 或 “RELAY–SCAN_DEVICE–CHANNEL_32,OK”这两种类型的字符串。返回值最后面的数字“8”代表该控制类型为KC868-H8,“32”代表该控制类型为KC868-H32。
2.智能控制盒服务器工作模式开启:
发送:RELAY-TEST-NOW
返回:RELAY-TEST-START
这是一条智能控制盒的初始化命令,当控制盒处于“TCP服务器”模式时,需要发送这条初始化命令让控制盒进入工作状态,该工作模式开启后,后续所有通信协议中的“包序号”参数均可使用固定的数值即可,我们在后面的协议解析中会再说明一下。
3.KC868-H8设备初始化命令集:
发送:RELAY–SCAN_DEVICE–NOW
发送:RELAY-TEST-NOW
这是作为智能控制盒的初始化命令集,每一次设备上电或重新上电后,必须首先发送这两条命令来进行设备的初始化工作,具体命令的返回值,前面已讲。待“RELAY-TEST-NOW”这条命令发送后,有返回“RELAY-TEST-START
”字符串后,我们就可以进行自由地使唤控制盒了。
4.单独控制某一路继电器的开与关:
发送:RELAY-SET-x(1字节pack_num),x(1字节继电器序号),x(1字节动作0/1)
返回:RELAY-SET-x(1字节pack_num),x(1字节继电器序号),x(1字节动作0/1),OK/ERROR
这条命令是我们在第一期文章中所介绍到的核心指令,也是最让人兴奋的一条硬件版的Hello World指令,它可以控制某一路继电器的打开或关闭,指令非常简单,通俗易懂。首先,第一个参数pack_num,我们已经有前面讲到过,当控制盒在“TCP服务器”模式下,该参数已经没有意义,比如:我们可以设置成数字“1”固定不变。但你可能会问,既然没有用的参数,为什么还要放在指令中作为参数呢,那不是挺麻烦?呵呵,“包序号”的真正意义将会在远程控制模式中体现出来,只是我们的教程现在还没有讲到,我们将会在后期的“远程控制模式”教程中使用到它。协议中的第3个字节参数——“动作0/1”的意义在于,“0”表示“关闭”;“1”表示“打开”。我们举个例子来看一下,比如:我们要打开第1路继电器,我们可以发送命令“RELAY-SET-1,1,1”,第1个参数“1”表示固定的包序号;第2个参数的“1”表示第1路继电器,第三个参数“1”表示“打开”。如果我们要关闭第1路继电器,我们可以发送命令“RELAY-SET-1,1,0”,第1个参数“1”表示固定的包序号;第2个参数的“1”表示第1路继电器,第三个参数“0”表示“关闭”。如果我们要打开第2路继电器,我们可以发送命令“RELAY-SET-1,2,1”,第1个参数“1”表示固定的包序号;第2个参数的“2”表示第2路继电器,第三个参数“1”表示“打开”。看到这里,你应该感觉控制继电器原来是那么容易吧。略有点小成就感吧:)
5.单独查询某一路继电器当前开关状态:
发送:RELAY-READ-x(1字节pack_num),x(1字节继电器序号)
返回:RELAY-READ-x(1字节pack_num),x(1字节继电器序号),x(1字节状态0/1),OK/ERROR
当我们时不时控制继电器的“打开”、“关闭”、再“打开”、再“关闭”........,等时间久了,我们可能已经不知道控制盒上继电器当前的工作状态了,有时候我们在做控制之前,还是需要知道他们的当前设备的,目前是“打开”的,还是“关闭”的。这时候,我们便可以使用继电器的查询命令来进行查询了。比如:我们要查询第1路继电器现在是处于“打开”还是“关闭”状态,我们可以发送:“RELAY-READ-1,1”,第1个参数“1”表示固定的包序号;第2个参数“1”表示需要查询的路数。此时,查询成功后,控制盒会返回“RELAY-READ-1,1,OK”,第2个参数“1”表示现在的状态为“打开”状态,如果是“0”表示现在的状态为“关闭”状态。想查询第几路继电器,直接将路数参数更改即可。
6.查询触发输入端状态:
发送:RELAY-GET_INPUT-x(1字节pack_num)
返回:RELAY-GET_INPUT-x(1字节pack_num),x(1字节状态),OK/ERROR
注:当控制盒触发输入端被触发时,会主动上报一条命令,格式为:RELAY-ALARM-X,X代表被触发的路数。
触发输入端是控制盒用来接开关量传感器的输入端子,如图中控制盒的一侧,由高位和低位组合成一组开关量输入端,他有多元化的实际应用方式,比如:你可以接手动开关,软件中可以定义好,当手动按下开关后,输出端的继电器会执行哪些动作;当有线开关量的传感器信号接入时,软件中可以定义好,当传感器被触发时,输出端的继电器会执行哪些动作,这就是我们通常说的智能联动,也是智能家居中最广泛的应用方法之一。联动的自动化控制过程中,第一步就需要我们去获得触发事件的状态,即什么时候被触发,哪路传感器被触发。此时,我们可以使用触发输入端的查询命令发给控制合,如:“RELAY-GET_INPUT-1”,查询成功后,控制盒会返回:“RELAY-GET_INPUT-1,255,OK”,第2个参数“255”即是8路触发端的状态字节。我们用8位二进制来表示8路输入端状态。用“0”表示“触发”,用“1”表示“未触发”。如果当前8路状态全部是“未触发”的话,那么8路输入端的状态为 11111111,注意,这是二进制的8个“1”,然后我们将其转换为十进制数,为“255”。如果当前8路状态全部是“触发”的话,那么8路输入端的状态为 00000000,注意,这是二进制的8个“0”,然后我们将其转换为十进制数,为“0”。如果当前8路状态是1-4路是“未触发”,5-8路为“触发”的话,那么8路输入端的状态为 00001111,注意,这是二进制的“00001111”,然后我们将其转换为十进制数,为“15”。在程序中,我们不需要不断的循环去查询状态,可以利用触入端被触发器的主动上报命令进行配合而进行查询,当触发信号产生时,客户端接收到“RELAY-ALARM-X”的指令串时,再发送一条“RELAY-GET_INPUT-x”进行查询。如下图所示,当我们用镊子手动短接第一路的输入端时,则控制盒会主动上报字符串“RELAY-ALARM-1”到PC客户端,这时,我们发送查询第1路输入端的命令后,返回字符串“RELAY-GET_INPUT-1,254,OK”,我们将数字十进制数“254”转换为二进制数为“11111110”,所以可以得知第1路输入端被触发。
7.查询智能控制盒序列号:
发送:RELAY-HOST-NOW
返回:HOST-CHKLIC-8a2af927888793c9a22280b8(返回控制盒序列号)
每一台控制盒设备都有一个唯一的标识符,类似于每个人的身份证号码一样,为了做好设备的维护和管理工作,也不例外,如发送:“RELAY-HOST-NOW”命令后,将返回“HOST-CHKLIC-8a2af927888793c9a22280b8”,其中最后一个“-”后面的一长串数字、字母的组合,即为设备的序列号,“8a2af927888793c9a22280b8”是设备的序列号,序列号将用于后期关于远程控制的教程中使用。同时,这也是一条设备继电器的测试命令,如果发送此命令给控制盒,控制盒的第1-8路继电器会依次打开,然后第1-8路继电器再依次关闭,作为一条简单的继电器测试命令。
8.一次控制多路继电器的开与关:
KC868-H8:
发送:RELAY-SET_ALL-x(1字节pack_num),D0
返回:RELAY-SET_ALL-x(1字节pack_num),D0,OK/ERROR
KC868-H32:
发送:RELAY-SET_ALL-x(1字节pack_num),D3,D2,D1,D0
返回:RELAY-SET_ALL-x(1字节pack_num),D3,D2,D1,D0,OK/ERROR
之前所介绍的通信协议中,我们已经可以分别对每一个继电器进行“打开”和“关闭”的操作了,这里,我们再介绍一条多路继电器同时进行控制的指令,他们是区别在哪里呢?前面我们所讲的控制继电器都是针对某一个的,如果要控制多个继电器开关,就是需要发送多条控制命令,需要若干时间去执行。这里,我们介绍的指令,可以实现一次性控制多路继电器开关,如“全开”、“全关”,或者某几路“打开”,某几路“关闭”的操作,只需要一条指令,多路控制速度非常快。我们可以看到命令中,除了“包序号”参数之外,只有一个字节的参数了,这一个字节就代表了8路继电器想进行控制的状态设置,用“1”表示“打开”,用“0”表示“关闭”,同样,也是用8位二进制来表示各路继电器的状态,再转成十进制数。如:我们要将8路继电器全部打开,则可以发送命令“RELAY-SET_ALL-1,255”,我们要将8路继电器全部关闭,则可以发送命令“RELAY-SET_ALL-1,0”,如果要将1-4路继电器打开,5-8路继电器关闭,那么参数是这样定义的,二进数表示:00001111,转换为十进制数为“15”,最终发送命令为“RELAY-SET_ALL-1,15”。在协议内容中,我们看到还有KC868-H32型号的控制盒,即他有32路继电器可以让我们进行控制,所以,他是用4个字节来表示所有继电器的状态的,1-8路继电器用D0字节表示;9-16路继电器用D1字节表示;17-24路继电器用D2字节表示;25-32路继电器用D3字节表示,每一个字节的含义和KC868-H8控制盒的表达方式一样,只是将32路划分成4个字节,多了几个参数。
9.一次读取多个继电器当前开关状态:
发送:RELAY-STATE-x(1字节pack_num)
返回:
KC868-H32:RELAY-STATE-x(1字节pack_num),D0,OK/ERROR
KC868-H8:RELAY-STATE-x(1字节pack_num),D3,D2,D1,D0,OK/ERROR
同样的情况,前面我们已经看了查询继电器状态的通信协议,那是按某一路进行查询的。我们也可以进行一次读取多个继电器状态的方式来进行查询。比如:发送“RELAY-STATE-1”,那么根据控制盒不同型号的情况,会有两种返回状态的字符串,如果控制盒是KC868-H8的型号,那会返回“RELAY-STATE-1,255,OK”,“255”则表示控制盒8路继电器的当前状态,将十进制数“255”转成二进制数为“11111111”,“1”表示“打开”状态,前面我们已经提到过,所以,这8路继电器的当前状态均为“打开”。同样,如果得到的数转成二进制后,某一位是数字“0”的话,那么代表该路的继电器当关的状态为“关闭”状态。
评论 | 0 条评论
登录之后才可留言,前往登录