您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > abplcmodbus通讯
Logix5000控制器ModbusRTU主从通信一、适用的控制器Logix5000控制器通过自带的串行口可以实现ModbusRTU主从通信。这里提到的Logix5000控制器,包括:·ControlLogix控制器(1756)·CompactLogix控制器(1769)·FlexLogix控制器(1794)当此串行口组态为用户模式实现ModbusRTU主从通信时,那么此端口不能再用于编程连接。二、机械接口与功能特性Logix5000控制器自带的串行口接口方式为常见的DB-9,RS232C,接口功能特性如下:三、接线方式1、接入RS232-Modbus通信当需要将Logix5000控制器接入RS232-Modbus实现点到点Modbus通信,可以订购以下电缆实现Logix5000控制器与通信设备的连接:·1747-CP3(用于SLC系列,使用后控制器盖无法关闭)·1756-CP3(用于Logix5000控制器)这两种电缆都可以实现RS232C连接,长度为3米。当然,你也可以自制通信电缆来实现Modbus通信,但长度限制为15米。接线方法如下:2、接入RS485-Modbus通信可以通过AIC+高级接口转换器(1761-NET-AIC)将Logix5000控制器连接到RS485网络实现Modbus一主多从通信。接线方法如下:四、波特率和通信距离Logix5000控制器串行口的通信波特率有110bps、300bps、600bps、1200bps、2400bps、4800bps、9600bps、19200bps、38400bps。默认为19200bps。通信距离与接口转换器质量、电缆材质和线径、波特率、从站数量和现场环境有关,遵循Modbus协议规定。五、支持的功能码Logix5000控制器串行口实现Modbus通信仅支持以下功能码:六、需要准备的软件·RSLogix5000V17(PLC编程软件)·RSLinxV2.54(PLC通信软件)·ModbusMaster.ACD例程(从AB官方网站下载)·ModbusSlave.ACD例程(从AB官方网站下载)七、ModbusRTU主站通信ModbusMaster.ACD文件帮助你使用Logix5000控制器作为Modbus主站,ACD文件包括:·11个控制器标签·1个周期性任务·2个用户自定义数据类型使用Logix5000控制器作为Modbus主站,你必须完成下面的步骤:1、从ModbusMaster.ACD文件中复制用户自定义数据类型到你的RSLogix5000工程。2、从ModbusMaster.ACD文件中复制控制器标签到你的RSLogix5000工程。3、从ModbusMaster.ACD文件中复制周期任务到你的RSLogix5000工程。4、配置控制器通讯端口。5、配置新的控制器标签。6、使用新的程序。7、校验工程并下载到控制器。复制用户自定义数据类型[1]、启动RSLogix5000。[2]、打开ModbusMaster.ACD文件。[3]、在另一个RSLogix5000窗口中,打开你的RSLogix5000工程。[4]、复制用户自定义数据类型:·Mod_Command_Structure·Mod_Status[5]、粘贴用户自定义数据类型到你的RSLogix5000工程。[6]重复上面的步骤完成第二个用户自定义数据类型的复制和粘贴。复制控制器标签[1]、在ModbusMaster.ACD文件中复制所有控制器标签。[2]将复制的所有控制器标签粘贴到你的RSLogix5000工程。[3]至此,所有的11个控制器标签都已经复制到你的RSLogix5000工程。下面是这11个控制器标签的描述:标签名称标签类型描述有效值Mod_ActiveBOOLModbus通讯使能位0=不使能1=使能Mod_Cmd_NumberDINT有效的命令数量1-40Mod_CommandsCommand[40]Modbus命令数组Mod_Commands[x].EnableINT命令使能0=不使能1=始终使能2=按扫描使能3=仅使能1次Mod_Commands[x].EchoReceivedINT如执行成功,则响应一个值和Enbale相同Mod_Commands[x].ScanNumberINT确定从站在哪一次扫描执行命令0-12缺省为12Mod_Commands[x].AddressOffsetinMasterINT主站数据表字级别的偏移量0=不偏移0≠有偏移Mod_Commands[x].SlaveAddressINT指定从站地址0-255Mod_Commands[x].FunctionCodeINT指定功能码支持1、2、3、45、6、15、16Mod_Commands[x].StartingAddressINT起始地址根据应用指定Mod_Commands[x].NumberofpointsINT指定读/写数据数量位:1-2000寄存器:1-120Mod_Commands[x].Spare1INT不用Mod_Commands[x].Spare2INT不用Mod_CommdMaxDINT最大的命令数量缺省40Mod_Data_Array_MaxDINT数据寄存器最大长度1-65537Mod_Data_Coils0INT[250]主站发送的输出位Mod_Data_Contacts1INT[250]主站接收的输入位Mod_Data_InpReg3INT[250]输入寄存器Mod_Data_HoldReg4INT[250]保持寄存器Mod_Echo_MaxTimeDINT响应超时时间ms默认350Mod_Scan_PresetDINT主站将要执行的扫描数0-40推荐至少为2复制周期任务完成上面的动作后,你必须复制ModTask任务和相应的Modbus_Interface程序到你的工程。[1]、从ModbusMaster.ACD文件中复制ModTask任务[2]、粘贴ModTask任务到你的RSLogix5000工程。[3]、从ModbusMaster.ACD文件中复制Modbus_Interface程序。[4]、将Modbus_Interface程序粘贴到你的RSLogix5000工程中的ModTask任务中。配置控制器通讯端口完成以上的步骤后,下一步就是配置控制器通讯端口。[1]、访问控制器属性[2]、配置SerialPort(串行口)选项卡。[3]、配置UserProtocol(用户协议)选项卡,如果需要。配置新的控制器标签一旦你的控制器标签被复制到你的RSLogix5000工程,你需要配置下表中的标签:配置上述标签之前,确保你已经理解如何从主站数据表和从站之间读写数据。Modbus主站数据表标签数组Modbus主站数据表有四个标签组:·线圈数据(Mod_Data_Coils0标签)数据以位格式从读或写入这个数组。·触点数据(Mod_Data_Contacts1标签)数据以位格式写入这个数组。·输入寄存器数据(Mod_Data_InpReg3标签)数据以字格式写入这个数组。·保持寄存器数据((Mod_DataHoldReg4标签)数据以字格式从读或写入这个数组。在这个解决方案中,Mod_Commands标签根据你的配置,Modbus主站:·使用四个数组中的一个(决定于功能码)·读/写数据从/到一个指定的位置(决定于地址偏移和起始地址)·读/写一个指定的数据量(决定于numberofpoints)·读数据(写到一个从站)或写数据(从一个从站读)到指定位置。例子如果你希望以下命令被执行:·命令总是被使能·主站从线圈数据表中字2开始写入数据·从Modbus从站节点2读取线圈数据·主站在线圈数据表中字2从位3开始写入·从一个从站读取32位线圈数据配置通信命令标签如下:·Mod_Commands[0].Enable=1·Mod_Commands[0].AddressOffsetinMaster=2·Mod_Commands[0].SlaveAddress=2·Mod_Commands[0].FunctionCode=1·Mod_Commands[0].StartingAddress=4·Mod_Commands[0].Numberofpoints=32使能新的程序最后,在运行程序之前,你必须使能新的程序。为了使能新的程序,你必须改变控制器标签Mod_Active的值为1。校验程序并下载运行一旦你从ModbusMaster.ACD文件中复制了所有部件到你的RSLogix5000工程中,并对新的控制器标签作了相应的配置,然后使能新的程序后,那么你需要对新的程序进行校验,然后下载运行。从站数据地址与主站数据表对应关系Modbus主站与从站通信,实现位或字类型的数据的读写操作。当进行读操作时,Modbus主站将读取的数据放置到主站的分类数据表中;当进行写操作时,Modbus主站将需要写出的数据也放置到对应的分类数据表中。主站分类数据表作为控制器标签,数据格式为整型数组,有四个,包括:线圈、离散输入、保持寄存器和输入寄存器,如下图所示:Mod_Data_Coils0数据表为线圈数据,适用于功能码1、5和15。Mod_Data_Contacts1数据表为离散输入数据,适用于功能码2。Mod_Data_HoldReg4数据表为保持寄存器数据,适用于功能码3、6和16。Mod_Data_InpReg3数据表为输入寄存器数据,适用于功能码4。当Modbus主站从某些从站读取到位或字类型的数据时,它们被放置到了哪里?怎么让这些数据像我们希望的那样在分类数据表中放置?当Modbus主站要向某些从站写入位或字类型的数据时,它们应该被放置到哪里?如何准确地将数据写入到从站的正确位置?在这里要提到命令中的两个标签:Mod_Commands[x].AddressOffsetinMaster和Mod_Commands[0].StartingAddress。前一个表示在主站数据表的地址偏移,后一个表示相应从站的起始地址。两个标签都是以字为单位进行操作的。实例1:读取5个离散输入状态(功能码2)情况一:Mod_Commands[x].AddressOffsetinMaster=0Mod_Commands[0].StartingAddress=0命令设置如下:主站读取的离散量状态放置位置图,如下:在这种情况下,从站数据没有任何偏置,主站数据表的数据也没有偏移。情况二:Mod_Commands[x].AddressOffsetinMaster=2Mod_Commands[0].StartingAddress=0命令设置如下:主站读取的离散量状态放置位置图,如下:在这种情况下,从站数据没有任何偏置,主站数据表的数据偏移2个字。情况三:Mod_Commands[x].AddressOffsetinMaster=0Mod_Commands[0].StartingAddress=3命令设置如下:主站读取的离散量状态放置位置图,如下:在这种情况下,从站数据偏置3位,主站数据表的数据偏移3位。情况三:Mod_Commands[x].AddressOffsetinMaster=2Mod_Commands[0].StartingAddress=3命令设置如下:主站读取的离散量状态放置位置图,如下:在这种情况下,从站数据偏置3位,主站数据表的数据偏移2个字3位。实例2:向从站写5个保持寄存器(功能码16)情况一:Mod_Commands[x].AddressOffsetinMaster=0Mod_Commands[0].StartingAddress=0命令设置如下:主站向从站写保持寄存器数据位置如下:在这种情况下,从站保持寄存器不偏移,主站保持寄存器数据表也不偏移。情况二:Mod_Commands[x].AddressOffsetinMaster=2Mod_Commands[0].StartingAddress=0命令设置如下:主站向从站写保持寄存器
本文标题:abplcmodbus通讯
链接地址:https://www.777doc.com/doc-2895607 .html