第一篇:ECS-700串行通讯(COM741同黑马ESD_MODBUS+RTU)实施小结
ECS-700串行通信(MODBUS)实施小结
一、串行通信基础知识
不论做哪个系统,做哪种异构系统通信,一些基础知识是必须掌握的,象系统运算使用的数据类型、I/O点使用的位号种类等。
1、ECS-700的控制器运算数据类型如下: BOOL 8 bit ON,OFF SINT 8 bit-128~127 USINT 8 bit 0~255 INT 16 bit-32768~32767 UINT 16 bit 0~65535 DINT 32 bit-2147483648~2147483647 UDINT 32 bit 0~4294967296 REAL 32 bit 浮点值
2、ECS-700的I/O位号种类如下: AI 模拟量输入 AO 模拟量输出 DI 开关量输入 DO 开关量输入 NA 自定义模拟量 ND 自定义开关量 NN 自定义整型量 PA 页间交换模拟量 PD 页间交换开关量 PN 页间交换整型量
ECS-700中模拟量数据全部浮点处理,开关量数据全部为一字节布尔型处理。
3、ModBus 功能码
01 READ COIL STATUS(读线圈状态)02 READ INPUT STATUS(读输入状态)
03 READ HOLDING REGISTER(读保持寄存器)04 READ INPUT REGISTER(读输入寄存器)05 WRITE SINGLE COIL(写单个线圈)06 WRITE SINGLE REGISTER(写输入)15 WRITE MULTIPLE COIL(写多个线圈)WRITE MULTIPLE REGISTER(写输入寄存器)
4、Modbus 功能与数据类型对应表
MODBUS协议的一个输入寄存器或保持寄存器地址占两个字节即16位。
二、ECS-700系统串口通信基本知识
1、通信实施要点
MODBUS协议规定,一条MODBUS命令最多可以返回255个字节的数据,即最多可以支持255*8=2040个开关量或254/2=127个2字节模拟量或相应数量的其它类型数据。
ECS-700的FCU711-S控制器最多支持最大IO点数2000个点(含通信位号),其中AI最大1000个点,AO最大500个点,DI最大2000点,DO最大1000点。
COM741-S模块所带的每一个设备,具有512个字节的输入数据区和256个字节的输出数据区,即用户设置的同一设备下最多能读入512个字节的输入数据及256个字节的输出数据。
所以在进行大数据量通信时,需考虑以上三条限制。
说明:ECS-700的通信模块系统架构区别于原ECS-100系统,通信模块作为主控制器下的一个节点,逻辑上等同于I/O连接模块,通信后扫描添加的位号(通信位号)同主控制器下的常规I/O位号在上位机的处理完全相同。这们虽然避免了ECS-100系统那样需要通过站间通信进行控制数据处理,但另一方面又占用了控制器的系统资源。
2、ECS-700串口通信基本组态操作(以MODBUS协议,通信模块作主站为例)1)硬件安装及设置
串行通信模块COM741-S,配套基座有MB725-S(非冗余型)与MB726-S(冗余型)两种。
模块免跳线,RS485与RS232通信方式跳线在通信基座上设置,每个模块4个串口可分别设置。模块冗余工作方式有“一对一”、“一对二”(仅V10.20.00以上版本COM741-S模块才支持“一对二”冗余方式,配合使用的VisualFieldV3.1+SP1软件版本才开放“一对二”功能)两种。
“一对一”即一个智能设备提供一对冗余的、可同时工作的串口,两块互为冗余的COM741-S模块安装在同一块基座MB726-S上,相同串口号的串口分别智能设备冗余的两个串口相连,并可同时通信,工作/备用模块之间通过冗余通信交互信息,并由工作模块与控制器进行通信。这种冗余模式下物理连接冗余、串 口通讯冗余、模块冗余,极大地提高了系统的可靠性。
“一对二”模式下,智能设备的一个串口连接COM741-S的两个串口。此时智能设备不提供冗余串口,相同串口号的串口同时与智能设备提供的同一个串口相连,一个时间只有一侧模块的串口驱动串行总线工作,另一侧对应的串口做热备冗余。工作/备用模块之间通过冗余通讯交互信息,并由工作模块与控制器进行通信。此冗余模式下模块冗余,提高了系统的可靠性。
综上所述,“对”前边的“一”指对方设备的一个串口,“对”后面的“二” 指我方两个串行通信模块的两个串口。
如有多个智能设备通信时,要注意通信模块性参数限制,一个串口最多可接入32个智能设备,一个模块四个串口最多可接入64个智能设备。
由于通信模块在逻辑上相当于一个I/O连接模块,因此一对主控制器下最多只能带7个COM741-S模块(同I/O连接模块、PROFIBUS主站通信模块、FF通信模块混合计算),任务主控制器下的一个E-BUS节点,其地址在基座上设置。
2)通信组态流程
A.控制器下添加通信模块并设置冗余方式。B.打开串口通信组态软件。C.设置串口参数。
D.添加设备及设置设备参数。
E.添加MODBUS命令及设置MODBUS命令参数。3)位号扫描与修改
在位号表中可能过“扫描通道位号”自动添加位号,对自动添加的位号可以进行修改,也可能手动添加位号。添加的位号在位号表中自动注释为通信位号,延续在常规I/O位号后,在组态中使用同常规I/O位号完全相同。
三、ECS-700系统串行通信的具体实施与问题
以丰喜4#气化炉ECS-700系统与黑马ESD系统通讯为例说明
项目简况:本项目配置我公司ECS-700系统一套,软件版本VisualFieldV3.10.02.01-100630-M,配置COM741-S模块两块,冗余型通信模块基座MB726-S一个;黑马ESD系统一套,配套HIMA ELOP II软件。ESD系统只设置工程师站,提供SOE记录,全部上位机监控画面,在DCS侧经通信连接后组态完成。
1、硬件连接与设置
DCS在本地节点2#机架第一个基座位置安装冗余型通信模块基座MB726-S一个,设置节点地址为2;安装两块COM741-S模块。
黑马ESD系统配置两块冗余的通信卡,每块通信卡上有两个同时工作串口,预留一个串口备用。ESD配置了冗余通信电缆,电缆为6芯屏蔽,每3芯连接一块通信卡的一个串口,在每个串口的接口下通信电缆线端增加有冗余信号处理电路,送DCS端两个串口的三芯缆一一对应成对绞在一起,即合为一个串口连接线。COM741-S侧接线时,地线可以不接,对绞的DATA+、DATA-分别接于左侧通信模块对应接线端子2、1,然后把左右侧对应的1、2端子用电缆跨接。
2、通信组态
1)添加通信模块及设置冗余
2)打开串口通信组态软件
对新增的通信模块点右键,选通信组态。
3)设置串口通信参数
在通信组态中选中使用的串口,进行参数设置:
目前通信模块版本支持MODBUS标准协议主站及自定义协议主站,早期 COM741-S模块不支持自定义协议。
4)添加设备及设置设备参数
设备参数中实际地址即智能设备的地址(即从站地址);而地址则是参数在位号组态软件中执行位号扫描时,作为位号地址的一部分,帮助区分各个位号,与通讯协议中的地址无关(在老版本的VF软件中无实际地址这个参数,只有地址这个参数,它即表示智能设备的实际拨码地址)。
响应时间,即设备响应命令的超时时间,单位ms。设置为0时,通信模块内部在(0-200)ms内自动调整。串行通信模块发送命令给智能设备后,某些设备并不会立刻回应,而是等待一定时间后才回应。设置这个响应时间的目的,则是为了通信模块通过实际响应时间与其比较进而判断通信成功或超时。一般情况下,可设置为0,让通信模块自行修正。
间隔时间(ms),表示两条命令之间需要插入的等待时间。一些智能设备不允许在执行完一条命令后紧接着执行下一条命令,需要等待一段时间后才能响应。一般情况下,可设置为0,让通信模块在(0-10)ms之间处动修正。如设置时间太长则使得命令执行周期加大。
5)添加MODBUS命令及设置MODBUD命令参数
项目第一条读保持寄存器命令,即读取起始地址为1001的连续30个保持寄存器。
第二条写保持寄存器命令,意义为写从起始地址1031开始的连续20个保持寄存器数据。
命令执行周期表示该命令是否被周期执行以及执行周期是多长。只有周期地执行通信命令,才能将智能设备中的数据读入到通信模块或将通信模块数据写到智能设备。当执行周期等于0时,表示该命令不是周期命令,只会在组态启动时执行一次。所以,对读命令一般要设置为与控制器的控制周期相同。
对于写智能设备的命令来说,有两种触发方式:一是数据变化才写,二是定时写。设置为有变化才写的,将执行周期设置为0;设置为定时写方式,执行周期则为定时时间,但当发现需要下写的数据有更新时,串行通信模块仍会立即执行该条写命令。通信模块启动时,自动被认为数据没有变化,避免在启动时将不需要的数据写到智能设备中。所以,对写命令,一般配置为有变化才写,即设置执行周期为0。
3、本次通信实施中出现的硬件及软件问题 1)COM741-S通信模块版本问题
本项目发货模块固化程序版本为1.0,对冗余的支持性较差且不支持某冗余方式,下载与通讯状态不稳定。
在联系工程技术部后,根据研发提供的通信模块固化程序升级软件对COM741-S进行现场升级,升级为2.1版本后,通讯正常。
2)下载信息有错误
在下载过程中,一对主控制器会经常出现工作主控制器对COM741-S下载成功,而备用主控制器对COM741-S下载超时,下载失败的信息提示。
对于此问题,研发回复,属信息报警错误,实际已经下载成功,不影响使用。3)数据类型转换精度问题
由于该项目的ESD侧的顺控及大联锁逻辑中大量的变量需通过通信方式,由DCS写入到ESD,主要为开关量。
由于ESD-700系统内暂无置位函数,项目组初期实施方式为把16个开关量变量,按从低位到高位的顺序经过选择函数及位与运算的转换为16个对应位外其它15位均为0的整数,再通过位或运算将这16个整数合为一个浮点数送出写入到ESD的保持寄存器,要ESD解析后加入程控逻辑。
写命令组态前,对于读命令,同样ESD侧采到置位的方式把16个开关量合入一个寄存器地址,在DCS侧经读取保持寄存器后解析数据取位,经测试全部正常。
但写命令调试中,发现DCS把合并好的浮点数据写入ESD时,在DCS程序调试窗口看到的数据正常,但写入到智能设备使有一部分数据出现错误:比如通过 修改位置浮点数为384写过去便是383,同样2432写过去是2431等等,出现这们的精度差,对于使用开关量数据的通信来说是绝对不能使用的。
经咨询研发,暂无解决方案。最后的处理方法,只能是每8个开关量合为一个模拟量,即一个寄存器的高8位置0不用。量程范围为0-255,经测试,256个状态全部写出正常。
4)不能对同一寄存器同时进行读与写的操作
为了随时检测写命令是否被正常执行,增加了写命令的回读校验程序。其先,对写命令的这部分MODBUS寄存器进行读,然后通过写状态与读状态在一定时间内的比较判断是否写入。调试中发现,经常会有不能写入的现象发生。经分析,如对同一寄存器进行读写操作,如读指令与写指令不在同一时刻则读写成功;如时间上指令发生冲突则写指令执行失败。
处理方案:由ESD重新分配与写指令所指寄存器相同数量的寄存器与写指令寄存器一一对应,专用于回读。经修改后,写指令顺利执行。
5)用户功能块的嵌套问题 为了校验读写指令时,具体方案为读写状态相同时计时器清零,最终写指令输出为写状态,读写状态不同持续2秒后,用读指令对写指令进行复位。这样一个逻辑算法用户功能块,经对一个读写指令校验,使用正常。计划把8个数据放在一个用户功能块进行处理,结果在另一个用户功能块对它进行嵌套后经调试不能使用。
处理方法,在一个用户功能块中扫描执行8个数据相同的校验。