适用于博途编程环境下1200 1500 modbusRTU 和modbusTCPIP通讯

适用于博途编程环境下1200 1500 modbusRTU 和modbusTCPIP通讯

目录

适用于博途编程环境下1200 1500 modbusRTU 和modbusTCPIP通讯… 1

一.       RTU PLC作为主站,变频器或仪表为从站,plc往变频器读写数据。… 2

1.    使用modbus_comm_load 对物理上的485接口硬件组态…. 2

1.1 工作模式(背景数据块,不在引脚)…. 3

1.2 停止位(背景数据块,不在引脚)…. 3

1.3 断线重试次数(背景数据块,不在引脚)…. 3

1.4 断路检测(背景数据块,不在引脚)…. 4

1.5 激活诊断中断(背景数据块,不在引脚)…. 4

1.6 块使能(从此开始有引脚)…. 5

1.7 块启动…. 6

1.8 硬件标识符…. 6

1.9 传输速率…. 6

1.10 奇偶校验…. 6

1.11 响应超时…. 7

1.12 需要通讯的数据地址…. 7

1.13 块输出…. 9

2. 使用MODBUS_MASTER作为主站与从站通讯… 10

2.1 通讯定义…. 11

2.2 通讯地址循环(轮询)…. 12

2.3 通讯写…. 13

2.4 通讯读…. 15

二、RTU PLC作为从站,给别的设备提供数据,被别的设备控制… 16

1.    使用MODBUS_COMM_LOAD进行接口硬件组态… 16

1.1 与PLC作为主站时一样,看第一节里的1.1~1.13. 16

2.    使用MODBUS_SLAVE 作为从站来通讯…. 16

2.1 预留…. 16

2.2 块配置…. 17

三、MODBUS TCP/IP. 18

1. 作为服务器(从站),被客户端读写数据… 18

1.1 创建一个MB_SERVER块…. 18

1.2 新建参数变量…. 18

1.3 参数配置(无引脚) 19

1.4 参数配置(有引脚)…. 20

2.    作为客户端(主站),对服务器数据进行读写… 21

2.1 创建一个MB_CLIENT块…. 21

2.2 新建参数变量…. 21

2.3 参数配置(无引脚)…. 22

2.4 参数配置(有引脚)…. 23

四、结束语20220722. 24

  • RTU PLC作为主站,变频器或仪表为从站,plc往变频器读写数据。
  • 官方教程 S7-1200_as_master (siemens.com.cn)

    1. 使用modbus_comm_load 对物理上的485接口硬件组态

    MODBUS_COMM_LOAD 块可用于1200和1500的MODBUSRTU通讯组态

    MB_COMM_LOAD只可用于1200

    用第一段为MODBUS的块,兼容性更好。

    1.1 工作模式(背景数据块,不在引脚)

    Modbus_Comm_Load.MODE

    0 = 全双工 (RS232)

    1 = 全双工 (RS422) 四线制模式(点对点)

    2 = 全双工 (RS 422) 四线制模式(多点主站,CM PtP (ET 200SP))

    3 = 全双工 (RS 422) 四线制模式(多点从站,CM PtP (ET 200SP))

    4 = 半双工 (RS485) 二线制模式 1)

    1.2 停止位(背景数据块,不在引脚)

    Modbus_Comm_Load.STOP_BITS

    1 = 1 个停止位,

    2 = 2 个停止位,

    0、3 到 255 = 保留

    1.3 断线重试次数(背景数据块,不在引脚)

    Modbus_Comm_Load.RETRIES

    返回“无响应”错误代码 0x80C8 之前主站执行的重复尝试次数。

    1.4 断路检测(背景数据块,不在引脚)

    Modbus_Comm_Load.BRK_DET

    0 = 断路检测已禁用

    1 = 断路检测已激活

    如果通讯不重要,设备可以在通讯中断情况下运行,可以用0禁用,比如通讯只是开机时给变频器给定一下频率。

    1.5 激活诊断中断(背景数据块,不在引脚)

    Modbus_Comm_Load.EN_DIAG_ALARM

    0 – 未激活

    1 – 已激活

    同1.4,根据通讯的重要性选择使不使用系统自带的报警。你可以自己做一个不影响运行的警告提示。

    之后有引脚

    1.6 块使能(从此开始有引脚)

    Modbus_Comm_Load.EN

    电平触发1

    没有故障通讯故障时就使能,有通讯故障时断开使能,通讯故障复位后自动把使能赋上。

    1.7 块启动

    Modbus_Comm_Load.REQ

    上升沿触发,启动modbus_comm_load 功能块

    1.8 硬件标识符

    Modbus_Comm_Load.PORT

    Plc上每个接口都有唯一编号地址,填入实际接线的接口的硬件标识符。

    1.9 传输速率

    Modbus_Comm_Load.BAUD

    有效值为:300、600、1200、2400、4800、9600、19200、38400、57600、76800、115200 bit/s。

    1.10 奇偶校验

    Modbus_Comm_Load.PARITY

    1. 无,1-奇校验(odd),2-偶校验(even)

    1.11 响应超时

    Modbus_Comm_Load.RESP_TO

    响应超时:5 ms 到 65535 ms – Modbus_Master 等待从站响应的时间(以毫秒为单位)。如果从站在此时间段内未响应,Modbus_Master 将重复请求,或者在指定数量(1.3里面的RETRIES参数决定次数)的重试请求后取消请求并提示错误

    1.12 需要通讯的数据地址

    Modbus_Comm_Load.MB_DB

    对 Modbus_Master 或 Modbus_Slave 指令的背景数据块的引用。

    MB_DB 参数必须与 Modbus_Master 或 Modbus_Slave 指令的(静态,因此在指令中不可见)MB_DB 参数相连。根据MODBUS库的版本不同,引用有所不同。

    见过如下两种

    1.13 块输出

    Modbus_Comm_Load.DONE BOOL

    Modbus_Comm_Load..ERROR BOOL

    Modbus_Comm_Load.STATUS WORD

    根据需要连接到变量进行逻辑控制用。

    2. 使用MODBUS_MASTER作为主站与从站通讯

    示意,这里自定义了MODBUS_MASTER的背景数据块名称,用去区别别的从站设备。

    2.1 通讯定义

    设置一些特殊需求

    以下都假设MODBUS_MASTER的背景数据块为MB_MASTER

    MB_Master.Blocked_Proc_Timeout 主站超时时间

    当由于某些原因(如已发出主站请求,但在彻底完成该请求前停止调用主站功能块时),造成Done及Error均没有置1时,需要提供一个定时时间,在时间到达后置位,以便执行下一个功能块或轮询下一个站点。

    MB_Master的背景数据块中提供了主站定时参数Blocked_Proc_Timeout(范围0S到5.5S,默认3S)

    此前的RESP_TO 是针对从站响应时间的,而Blocked_Proc_Timeout则是针对主站的定时时间,此功能参数用于防止单个 MB_Master 指令独占或锁定对端口的访问。

    2.2 通讯地址循环(轮询)

    从站的addr按照你希望的逻辑顺序写入一个变量,该变量用于链接MB_master.mb_addr

    一般轮询逻辑为,初始地址为1,当前读写完成后,加1,加到最后,重新赋值1. 期间还有从站超时也加1.

    主站超时,就是plc自己超时,没遇到过,遇到了估计硬件也就坏了,也就是2.1里面.Blocked_Proc_Timeout这个参数,目前以我的水平不知道实际用途。照着模板留下来的。

    2.3 通讯写

    在REQ的上升沿开始写,每次写入的数据是在一个缓冲区里,以中断的形式发出去,每次发出去的数据量有上限,避免数据量过大把plc卡死了不执行下面的程序了,在写入完成之前done不会置1。Plc的扫描不会卡在这里等通讯完成。如下图解释

    MB_ADDR 当前需要写入的从站地址

    Mode 根据读写的位置和数量决定,详细表格开博途的帮助看,这里是写一个数据到一个保持寄存器,所以是mode=1

    DATA_ADDR根据从站的说明书填写,这里写的是给定频率的地址

    DATA_LEN 写入的数据长度,单位是int、word或者uint,就是16位。

    DATA_PTR 数据指针,包含数据类型和长度,如图如果指针后面的类型不是int(16位)而是byte(8位),那么数量就是2了。(数据块里真的是byte形式才行)

    DONE 通讯完成标识,当前plc扫描周期内一般不可能完成通讯任务,比如第100次扫描到这里,发现done为1了,说明通讯完成了,用这个done做逻辑,比如地址+1,数据更换为下一个从站使用的数据等等。

    BUSY 当MODBUS_MASTER执行后,DONE或者ERROR为1之前,又有别的地方调用MODBUS_MASTER块,这个busy为1。整个程序,同时只允许有1个MOBDUS_MASTER功能块激活执行中。

    Error bool型,出错,不告诉你哪里错了,哪里错了看status

    STATUS 打开帮助,搜“modbus 错误消息”,有详细,可以做到hmi或者注释里,很多。

    2.4 通讯读

    根据需要,对一个从站先读或者先写,这里是先写入,再用写入完成的done来激活读取用的MODBUS_MASTER块

    Mode 就记0读1写,虽然帮助里能看到很多情况,一般用不上。

    其他参数和写一样。

    二、RTU PLC作为从站,给别的设备提供数据,被别的设备控制

    MODBUS_COMM_LOAD 块可用于1200和1500的MODBUSRTU通讯组态

    MB_COMM_LOAD只可用于1200

    推荐用第一段为MODBUS的块,兼容性更好

    1. 使用MODBUS_COMM_LOAD进行接口硬件组态

    1.1 与PLC作为主站时一样,看第一节里的1.1~1.13

    1. 使用MODBUS_SLAVE 作为从站来通讯

    2.1 预留

    还不熟,预留一项,特殊的参数什么的。

    2.2 块配置

    这里块可以换成MODBUS_SLAVE,总之要和COMM_LOAD块一致。

    ADDR 从站地址,作为从站地址是固定的,没有轮询多个主站,或者有我现在不知道。

    HOLD_REG 保持寄存器,这里指针P#DB30.DBX0.0 BYTE 6800,意思是从DB30开头开始的6800个BYTE,很多。注意要为16位的倍数,如果有bool量,凑够16位当一个字来通讯。

    NDR 应该是说,主站往plc上写数据完毕,置一1个扫描周期。NDR = new data receive 

    当NDR为1时,说明主站发来数据(控制)完毕了,PLC读取这6800个BYTE做处理。

    DR 可能是,主站完整的读取了一次这6800个BYTE。完成后置一1个扫描周期。

    三、MODBUS TCP/IP

    1. 作为服务器(从站),被客户端读写数据

    1.1 创建一个MB_SERVER块

    创建块后,就有DB可以配置参数了

    1.2 新建参数变量

    首先新建一个结构体变量,变量类型系统自带,叫 TCON_IP_v4 ,用于存放参数,里面有ip地址等等,链接到CONNECT

    1.3 参数配置(无引脚)

    ConnectionType 对于TCP来说,必须是11(十进制)

    ActiveEstablished 0被动(服务器),1主动(客户端),其它同样用此结构体的功能块会用到。

    Interfaceld 硬件标识符,网口的

    LocalPort 本地端口,数据从这里出去,到达客户端,西门子一般默认502

    RemotePort 远程客户端端口,这个无所谓,任意都行,填0即可。

    本地和远程端口,想成快递柜理解下? 快递柜(本地,服务器)的第502格里是你的快递,可以你(远程,客户端)自己取,也可以你叫别人帮忙取,最后都到你手里。

    ID 连接编号(取值范围:1 到 4095),该参数将唯一确定 CPU 中的连接。指令“MB_SERVER”的每个实例必须使用唯一的 ID。该 ID 还不得被不同通信类型的其他指令同时使用。比如换了个ip,换了端口什么的,就要用别的id。用触摸屏改这个TCP的ip时,忘了要不要改id了,总之触摸屏可以在线改PLC里tcp的ip换个设备通讯。

    RemoteAddress.ADDR[1~4] 四段IPV4的地址,从1到4是从高位到低位,如图那个常见的192.168.xxx.xxx。这里是对方的IP,不是本机的。

    1.4 参数配置(有引脚)

    DISCONNECT 就像禁用MB_SERVER块一样,为1时禁用,一般填个常态的false

    MB_HOLD_REG 保持寄存器,图中就是从指针指的地方,连续发送30个字(16位的倍数)给客户端

    CONNECT 连接到保存有参数的结构体变量

    NDR 应该是,本服务器内的保持寄存器被客户端写入的数据修改完毕,置一1个周期。

    DR 应该是,客户端从本机服务器完整的读取了一次(图中所示就是30个字),置一1个周期。

    1. 作为客户端(主站),对服务器数据进行读写

    2.1 创建一个MB_CLIENT块

    创建块后,就有DB可以配置参数了

    2.2 新建参数变量

    首先新建一个结构体变量,变量类型系统自带,叫 TCON_IP_v4 ,用于存放参数,里面有ip地址等等,链接到CONNECT

    2.3 参数配置(无引脚)

    ConnectionType 对于TCP来说,必须是11(十进制)

    ActiveEstablished 0被动(服务器),1主动(客户端),其它同样用此结构体的功能块会用到。

    Interfaceld 硬件标识符,网口的

    RemotePort 远程端口(对方是服务器),一般西门子端口502

    LocalPort 本地端口号(我是客户端),对于客户端来说,由plc自己决定哪个端口,填0.

    ID 连接号,即使是和MB_SERVER也不能重复

    RemoteAddress.ADDR[1~4] 四段IPV4的地址,从1到4是从高位到低位,如图那个常见的192.168.xxx.xxx。这里是对方的IP,不是本机的。

    MB_Unit_ID  MODBUS设备标识符,都填16#FF,目前就想成modbus设备的站地址。

    Blocked_Proc_Timeout 如果有一个被阻止的 Modbus 实例,则为复位静态变量 ACTIVE 前的等待时间(单位为秒)。例如,如果输出了一个客户端请求,而且在该请求完全执行之前中止执行客户端功能,则可能发生这种情况。等待时间必须介于 0.5 s 到 55 s 之间。

    Rcv_Timeout 等待服务器响应请求的时间(服务器超时时间)。

    Retries 在范围无响应错误(W#16#80C8)前,改指令尝试的发送次数。

    2.4 参数配置(有引脚)

    REQ 电平信号,1有效,启用块

    DISCONNECT 电平信号,0 不要断开连接

    MB_MODE 0读1写,0读,从对方读。 1写,自己的数据写到对方。

    MB_DATA_ADDR 从对方的啥地址开始读写,40001为保持寄存器的第一个

    MB_DATA_LEN 读写的数量,每16位bit数据记一个数量

    MB_DATA_PTR 指向数据缓冲区的指针,没试过,如果不在最后指定2

    CONNECT 连接到保存有客户端参数的结构体,其实里面存的是服务器的地址,要去访问服务器。

    四、结束语20220722

      还是有好多细节不理解,也肯定有理解错的地方,虽然不明所以,目前它能用。如果有大佬可以解释,感谢。我理解的在这里了。半途改昵称,还不能改我原来的- -?+1

    物联沃分享整理
    物联沃-IOTWORD物联网 » 适用于博途编程环境下1200 1500 modbusRTU 和modbusTCPIP通讯

    发表回复