信科电子继电器板通讯协议说明 V3 

串口设置: 

波特率

数据位

停止位

校验位

9600

8位

1位

None

 

 

数据帧: 

每个数据帧包含8个字节,依次是:

数据头

地址

功能码

数据

校验和

1字节

1字节

1字节

4字节

1字节

有回码指令说明:

数据头: 
上位机发送:固定为 0x55    

下位机返回:固定为 0x22
目标地址: 
上位机发送:如果目标地址为1,则发送01,目标地址是多少就发送多少。

下位机返回:本机地址(当前模块的地址) 
功能码:  

上位机发送:主机发送的功能码告诉从机执行什么任务。

下位机返回:与主机(上位机)发送的功能码保持一致

数据内容: 
上位机发送:四字节,先发送第一字节,然后第二,三,四字节

下位机返回:代表了本电路模块的当前状态。如果是继电器板,代表了当前继电器板继电器的状态;如果是输入检测板,代表了当前模块输入的状态。(第1字节代表第25-32路, 第2字节代表第17-24路,第3字节代表第9-16路,第4字节代表第1-8路) 
校验和:

一字节,从第一个字节到校验和字节前所有数据累加所得结果(取后2位)。如果检测到校验和错误,则丢弃数据。

下位机收到需要应答的指令后立即回复应答,下位机收到不需要应答的指令,只处理指令,不回复应答。
功能码与对应的数据说明(数据为十六进制):

功能码10:读取当前继电器板的状态(最多32路)

举例说明:在第2、5、10、13、15路吸合其余全部断开状态下,查询第5路继电器状态

发送:55 01 10 00 00 00 05 6B

 

返回:22 01 10 00 00 52 12 97 (此回码指示的是第2、5、10、13、15路吸合,其余所有路断开的状态)

 

说明:查询状态时,无论发送查询的是第几路状态,返回的都是当前继电器板所有继电器的状态

功能码11:断开某一路继电器

举例说明:在1-8路全部吸合状态下,断开地址1第5路继电器

发送:55 01 11 00 00 00 05 6C

 

返回:22 01 11 00 00 00 EF 23    (此回码指示的是1、2、3、4、6、7、8吸合,其余所有路断开的状态)

 

功能码12:吸合某一路继电器

举例说明:在所有继电器全部断开状态下,吸合地址1第1路继电器

发送:55 01 12 00 00 00 01 69

 

返回:22 01 12 00 00 00 01 36    (此回码指示的是第1路吸合,其余所有路断开的状态)

 

功能码13:命令执行

执行某一特定命令,根据用户需要设定。方法如下:

“1”代表吸合,“0”代表断开,从右向左依次代表第1路、第2路······

举例说明:用户想要设置第1、5、8、10、15、16路吸合,其余断开,那么首先产生一个二进制数据为“1100001010010001”,将这个二进制数据转换为16进制即为“C291”将这个16进制数字分为两部分,分别为“C2”和“91”,(“C2”代表9-16路、“91”代表1-8路),生成“55 01 13 00 00 C2 91 BC”,即完成这个命令执行的设置。

发送:55 01 13 00 00 C2 91 BC

 

返回:22 01 13 00 00 C2 91 89     (此回码指示的是第1、5、8、10、15、16路吸合,其余所有路断开的状态)

 

功能码14:断开多个继电器,可以是连续的几个继电器也可以是间隔不连续的几个继电器

“1”代表执行,“0”代表不执行,从右向左依次代表第1路、第2路······

举例说明:在1-16路所有继电器全部吸合状态下,用户想设置第2、6、7、9、12、15路组断开,那么首先产生一个二进制数字为“0100100101100010” 将这个二进制数据转换为16进制即为“4962”将这个16进制数字分为两部分,分别为“49”和“62”(其中“49”代表9-16路,“62”代表1-8路),生成“55 01 14 00 00 49 62 15”,即完成这个组断开命令的设置。

发送:55 01 14 00 00 49 62 15

 

返回:22 01 14 00 00 B6 9D 8A    (此回码指示的是第1、3、4、5、8、10、11、13、14、16路吸合,其余所有路断开的状态)

 

功能码15:吸合多个继电器,可以是连续的几个继电器也可以是间隔不连续的几个继电器

“1”代表执行,“0”代表不执行,从右向左依次代表第1路、第2路······

举例说明:在1-32路所有继电器全部断开状态下,用户想设置第1、5、9、13、17、23、29路组吸合,那么首先产生一个二进制数字为“10000010000010001000100010001”将这个二进制数据转换为16进制即为“10411111 ”将这个16进制数字分为4部分,分别为“ 10”、“41 ”、“11 ”和“11 ”(这4部分数据依次代表第25-32路、第17-24路、第9-16路、第1-8路),生成“55 01 15 10 41 11 11 DE”,即完成这个组吸合命令的设置。

发送:55 01 15 10 41 11 11 DE

 

返回:22 01 15 10 41 11 11 AB (此回码指示的是第1、5、9、13、17、23、29路吸合,其余所有路断开的状态)

 

功能码16:使多个继电器状态发生改变,可以是连续的几个继电器也可以是间隔不连续的几个继电器

“1”代表执行,“0”代表不执行,从右向左依次代表第1路、第2路······

举例说明:在所有继电器全部断开状态下,用户想设置第1-15路组翻转,那么首先产生一个二进制数字为“111111111111111”将这个二进制数据转换为16进制即为“7FFF”将这个16进制数字分为两部分,分别为“7F”和“FF”(其中“7F”代表9-16路,“FF”代表1-8路),生成“55 01 16 00 00 7F FF EA”,即完成这个组翻转命令的设置。

发送:55 01 16 00 00 7F FF EA

 

返回:22 01 16 00 00 7F FF B7(此回码指示的是第1-15路吸合,其余所有路断开的状态)

 

功能码20:使某一路继电器状态发生改变

举例说明:在所有继电器全部断开状态下,翻转地址1第3路继电器

发送:55 01 20 00 00 00 03 79

 

返回:22 01 20 00 00 00 04 47(此回码指示的是第3路吸合,其余所有路断开的状态)

 

功能码21:使某一路继电器延时一段时间后断开

继电器吸合后延时一段时间再断开

数据1*65536+数据2*256+数据3=延时的时间(单位毫秒),数据4代表第几路

举例说明:在所有继电器全部断开状态下,用户想要设置第3路延时16秒断开,即16000毫秒(256<16000<65536),用16000除以256商为62余128,即16000=62*256+128,由此可以看出数据1应为0、数据2应为62、数据3应为128,将数据2和数据3转换为16进制数据分别为“3E”和“80”,生成“55 01 21 00 3E 80 03 38”, 即完成这个延时断开命令的设置。(需注意:执行延时断开命令时,如果继电器原本的状态就是断开,那么继电器要先吸合,延时所设置的时间后再断开)

发送:55 01 21 00 3E 80 03 38

 

返回:22 01 21 00 00 00 04 48    (此回码指示的是第3路吸合,其余所有路断开的状态)

 

功能码22:使某一路继电器延时一段时间后吸合(继电器断开后延时一段时间再吸合)

数据1*65536+数据2*256+数据3=延时的时间(单位毫秒),数据4代表第几路

举例说明:在所有继电器全部断开状态下,用户想要设置第7路延时25秒吸合,即25000毫秒(256<25000<65536),用25000除以256商为97余168,即16000=97*256+168,由此可以看出数据1应为0、数据2应为97、数据3应为168,将数据2和数据3转换为16进制数据分别为“61”和“A8”,生成“55 01 22 00 61 A8 07 88”, 即完成这个延时吸合命令的设置。(需注意:执行延时吸合命令时,如果继电器原本的状态就是吸合,那么继电器要先断开,延时所设置的时间后再吸合)

发送:55 01 22 00 61 A8 07 88

 

返回:22 01 22 00 00 00 00 45(此回码指示的是所有继电器断开的状态)

 

 

说明:不同的功能码配合不同的数据内容代表不同的功能。 
并不是所有的继电器板都支持所有的功能码
  

支持连发无回码指令说明:
0x30-0x3F功能码为指令连发功能码,因为这些功能码没有回码,所以可以连续发送,指令连续发送的目的是为了更快速的发送指令。因为,继电器回码造成了两个指令之间的时间间隔等待,为了避免造成过多的等待时间,避免让客户感觉到继电器板反应迟钝,引入了数据连发指令。

很多情况下,用户不需要查询或知道继电器扳的当前状态,只需要按照自己的要求来打开或者关闭某几路,这个时候使用无回码的连续指令就会很方便快速。

功能码30 、31 、32、 33 、34、 35、 36 、37 、38分别于功能码10、11、12、13、14、15、16、21、22的作用功能对应一致,只是下位机无返回数据。(具体说明参看上述有回码说明)

广播地址说明:
个别情况下,需要快速的打开或者关闭485总线上所有继电器,这个时候使用广播地址245很方便,广播地址的值为245,也就是说,向地址245发送的指令,总线上的每一个地址都会执行,关闭广播地址245的所有继电器,也就关闭的总线上的所有继电器,同样的道理,打开广播地址245的所有的继电器,也就打开了总线上所有的继电器。