开发协议 %e5%bc%80%e5%8f%91%e5%8d%8f%e8%ae%ae
您现在的位置:首页 > 开发协议 > 中控主机,PLC、DCS应用的开发协议,详细描述上位机开发通迅协议,十六进制控制码开发协议

使用教程

下载中心

中控主机,PLC、DCS应用的开发协议,详细描述上位机开发通迅协议,十六进制控制码开发协议

发布时间:2019/12/02 开发协议 浏览:4937

详细参数

本文介绍中控主机的上位机开发、和发送16进制,读写中控内部的开关量,读写中控内部模拟量的规则。可应用于【中控主机】、【PLC】、【DDC】、【DCS】、【集成系统模组】等各种产品。另外上位机开发过程中,只需要读取开关数据状态,和控制开关和写入一些数值,而内部逻辑功能不需要上位机设计,中控主机内部已集成逻辑,中控DCS自动运行PLC程序,自动调度总线下方的各种开关,各种仪表数值,提供EasyDCS全中文可编程软件,可设计时序,延时,点动,情景,模拟量上下限自动控制等功能,不需要上层复杂的程序设计,比如中控主机自动读取4个点位的的温湿度,达到上下限时自动启/停相对应的开关,而上层软件只需要把上限的值写入中控主机就可以了,完全不需要上层设计逻辑,时序等。
另外开发于普通开关量控制器时,也可以对十六进制控制的深入探讨。
以下为TCP数据报文结构:
注:功能码05、01、03、06、16等都是用十进制来跟网友表达,在发送过程中,需要将这些功能码转为十六进制来发送,给控制器识别。



解:图中起始位有6个,其中N也是一个位,N用来表示后面将要发送多少个字节,我们可以算一算后面有多少个字节(设备号+1、功能码+1、起始地址+2、开关状态+1、数量+1)共6个字节,所以N应填写十六进制06,再加前面5组00就一共6组了(00 00 00 00 00 06),所以起始位这里已经完全了解。另外在6个头字节中,第1和第2字节,如果要有所表示,可以自行增加一些数据标志位过去,比如增加时间数据,23分52秒(17 34 )也可以,每次发送过去加了一个变化时间,返回的数据与发送的是一样的(17 34 00 00 00 06),这样可以区别每次发送的数据都不相同,给开发者上位机自行校验的一种方法,但这两个字节控制器收到后,不会做什么什么反应。



请求方式:00 00 00 00 00 06 01 05 02 00 FF 00
响应方式:00 00 00 00 00 06 01 05 02 00 FF 00
00 00 传输标志,两个字节长度,填什么都可以,默认是00 00;
00 00协议标识,两个字节长度,默认为00 00;
00 06数据长度,用来指示接下来数据的长度,单位字节;
01设备号,设备号从00至FF任何数值均可以;我们所有TCP产品这里都没有定义设备号。
05功能码,功能码05为单路控制开关寄存器数据;
02 00寄存器地址;我们控制器的开关第1路是从0512地址开始的,10进制表示时是(0512),转为16进制为(02 00);
FF 开关状态控制方式,FF表示打开,00表示关闭;
00数量,默认填写00即可;


02 00寄存器地址;可以通过电子计算机进制转换,得到需要控制的第几路开关;

比如需要控制第13路,512+12=524,然后转换成16进制为20c,通过发送:00 00 00 00 00 06 01 05 02 0C FF 00即可打开,一般情况02这个基本上保持不变,我们只需将后面的0C改变一下就可以,00表示第1路,02表示第2路,0A表示第10路,0F表示第16路,10表示第17路…

当需要控制第230路时,一般中控主机开关可达上千路,计算方式可以512+229=741,转换为16进制为2E5,就可以发送00 00 00 00 00 06 01 05 02 E5 FF 00即可打开,



发送格式:

解:起始位6个字节,前面已提到过,填写(00 00 00 00 00 06)即可,表示后面有6个字节。
请求方式:00 00 00 00 00 06 01 01 02 00 00 00
响应方式:00 00 00 00 00 06 01 05 02 00 FF 00

00 00 传输标志,两个字节长度,填什么都可以;
00 00协议标识,两个字节长度,默认为00 00;
00 06数据长度,用来指示接下来数据的长度,单位字节;
01设备号,设备号从00至FF任何数值均可以;填什么都可以;
01功能码,功能码01为读入多个开关寄存器状态;
02 00寄存器地址;我们控制器的开关第1路是从0512地址开始的,10进制表示时是(0512),转为16进制为(02 00);
00 开关数量高位;中控主机正常情况检测128路作为一个包返回给上位机,而底位就可以达到这个数量,所以高位可填写00;
00 开关数量底位,一般我们可检测1路、2路、4路、8路、16路、32路、等等,一般一次不超过128路;

上图为DCS可编程中控主机内置寄存器地址位置,红色剪头表示的都为开关量,可以通过01号功能码发送协议查得对应的开关状态,比如发送查询S开关状态0512地址开始,一共查询10路可发送下图示例:


请求发送方式:00 00 00 00 00 06 00 01 02 00 00 0A
上图表示通过TCP查询地址02 00(0512),位于S寄存器地址的第1路,共查询10路(0A)。
数据返回如下图:

响应方式:00 00 00 00 00 05 00 01 02 01 00
起始位:00 00 00 00 00 05表示后面有5个字节
设备号:      00,与发送时相同
功能码:      01,与发送时相同
字节数量:  02,(第1个字节+1,与第2个字节+1)就表示有2个字节。
第1个字节:01,第1到第8路开关状态,8位状态,转换成二进制为:0000 0001,表示第1路打开,第2到第8路关。
第2个字节:00,第9到第16路开关状态,8位状态,转换成二进制为:0000 0000,表示全部都关闭。

注意:【字节数量】,这个地方为何显示02来表示后面有2个数节,因为一个字节表示8路开关,两个字节表示16路开关,3个字节表示24路开关,所以当我们查询的数量在16路的范围内含16路,会传回两个字节,当我们查询的数量是32以内或32路,且又大于24路时,将会返回4个字节,而这个02也将变为04。而这个就是【01】功能码的表达方式,是一个查询多路开关状态。所以后面的字节数量将不固定是会有多个,但每一次查询最大128路,而后面将继续介绍控制多路开关状态的【15】功能码。



功能码15,与功能码05、01也基本相同,发送报文时需要发送16进制,所以15转为16进制为【0F】,功能码15只是我们沟通用的口头语,硬件通迅叫0F。发送格式:

第一行表示只控制8路以内,第二行控制16路以内,第三行控制24路以内,第四行控制32路以内,还可以继续发送不同格式控制不超过128路以内。当超过128路时,起始地址可以自行修改从第几路开始控制,02 00表示第1路开始,那02 80就可以表示从128路开始控制。
请求方式:00 00 00 00 00 08 01 0F 02 00 00 08 01 04
00 00 传输标志,两个字节长度,填什么都可以;

00 00协议标识,两个字节长度,默认为00 00;
00 08数据长度,用来指示接下来数据的长度,单位字节,重要,这里跟控制数量有关系,数量多这里将随之增加,看一下这一串数据有多少数量(00 00 00 00 00 08 01 0F 02 00 00 08 01 04),背景红色的就是数量,一共有8个。
01设备号,设备号从00至FF任何数值均可以;填什么都可以。
0F功能码,功能码0F,也叫做15号功能吗,为写入多个开关寄存器状态;
02 00起始地址;我们控制器的开关第1路是从0512地址开始的,10进制表示时是(0512),转为16进制为(02 00);
00 08表示需要控制多少路,00是高位,08是底位;
01后面字节数量,通知控制器,后面将要发送多少字节,一个字节表示8路,01表示一个字节(也就是只控制8路);
04第1字节,这个字节表示8路中,有多少个开,有多少个关,04转为二进制为:00000100(排序为87654321),也就是第3路打开,其它全关;
例:比如控制8路某几路开关;
请求方式:00 00 00 00 00 08 01 0F 02 00 00 08 01 D5
响应方式:00 00 00 00 00 06 01 0F 02 00 00 08
所有的返回值都只是发送时的前12个字节,因为前面有提到过起始地址第6个字节是表示后面有多少个字节,所以08数量也变成06了。
例:比如控制13路某几路开关;
请求方式:00 00 00 00 00 09 01 0F 02 00 00 0D 02 D5 0F
响应方式:00 00 00 00 00 06 01 0F 02 00 00 0D
控制13路时,转换成十六进制为0D需要2个节字,一个字节表示8路,所以字节数量使用两个,然后跟着控制前8路和后8路,控制前8路D5用二进制表示为:11010110,后8路0F用二进制表示为:1111,后面没有0补足0,相当于00001111,所以控制开关时,不管是控制多少路,也需要按8路的方式进行多路控制。返回结果:也是跟发送时的前12个字节相同,只是第6个字节有所变化。


模拟的应用

中控主机内部地址提供的模拟量数量众多,中控主机会从RS485通迅接口上读取各种模块,各种仪表中的数据,然后将这些数据保存在中控主机的地址池,再提供给开发工程师通过TCP方式发送报文进行读取地址池的数据。另外除了扩展到的模拟量数据可以转换成TCP方式,中控主机内部自带一些延时、计时、计数、用户输入值、时间信息等,都可以从TCP进行读写操作,03功能码为读多路寄存器状态如下:

上图为发送报文结构方式,输入03功能码,其实与查询开关量01功能码完全一样,中控主机重新分配了一些地址池专门保存模拟量数据,地址池的分配参考链接:http://www.jinruida.net/107.html

首先提示一下,我们读取模拟量返回的数值是16位的,所以需要2个字节来表示1个值。
比如读取第1路模拟量:
发送:00 00 00 00 00 06 01 03 00 00 00 01
00 00 00 00 00 06这一组为数据报头,注定的,直接记住就可以了,06表示后面有多少个字节。01表示地址号,03表示功能码,00 00表示从哪一个寄存器地址作为基准位开始读取,填高位和底位,00 01表示读取多少个模拟量,这里底位01表示只读取1个。
(什么叫高位、底位,十六进制FF是最大数值,转为10进制来理解就是255,再加0就是256个(但256会进位变成00),而中控主机模拟量将会超过256个,所以这个位最多就是FF(256)不够使用,所以就有了高位来表达直超过256的个数,比如可以表达260个、300个、1000个等,
Byte数据类型(字节型)用一个字节(Byte)储存,可区别256个数字,取值范围:0到255。两个字节一起就是一个位,可表达数字(int16)整数为:0-65535,或者带负数形式表示为:-32768~32767。

返回:00 00 00 00 00 05 01 03 02 00 14
返回的
00 00 00 00 00 05 01 03一共8个字节是与发送时一样,只是06变成05,工程师只需判断返回的第6个字节数值是05,就可以知道后面再加5个字节是本次有效值,01 03 02 00 14这5个字节都是本次返回的有效值,其中01 03是设备号,和功能码,是与发送时一样的,剩下02 00 14,02是一个数量,表示后面有2个字节值。00 14表示一个16位模拟量值,00为前8位,14为后8位,加起来为16位,叫16位模拟量(Signed)。
简单地讲,(00 00 00 00 00 05 01 03 02 00 14)除了返回前8个字节是与发送时一样(除了第6个),后面的跟着跟着的一个02是数量,其它是数值,02表示后面有2个字节是有效字节数值。这里展示读取了一个16位模拟量,00 14就是值,因为一个字节为8位,所以2个才能组成16位,直接可将16进制的0014转为十进制是20,如果表示温度就可以当20度。
发送:00 00 00 00 00 06 01 03 00 00 00 03

发送格式中数量高位底位为00 03,表示只读取3个模拟量(1个16位的模拟量值用2个字表来表示,会返回6个字节)。

返回:00 00 00 00 00 09 01 03 06 00 14 00 00 00 00

返回数据除了与发送时前8个字节相同,06后面就是读取到的数据,一共有6个字节,00 14,00 00 ,00 00,每2位为一个值。

上图用一个modbus测试工具通过TCP方式查询3个模拟量结果。


上图表示返回报文结构方式。
发送查询模拟量数量时,数据长度会根据发送查询多少个来返回多少个,一次最多不超过120个,且间隔时间相对调整在100mS以上。





发布时间: