发表于:2021/3/15 10:42:10
#0楼
PLC 的应用场合,有时需要与伺服通讯,最简单的方法是透过 RS-232/485,採用 modbus协定。这对于轴数不多的小系统是很划算的方式。但往往达不到快速的反应,而使应用受限,甚为可惜。本文针对此类应用,以台达A2伺服为例,提供一些加速的方法,可以提升通讯的刷新率,使命令的反应更为迅速,有兴趣的读者可以参考。
提升 Baud rate P3-01.X
提升 baud rate可以减少每个位元的传输时间,通常 baud rate 需随着通讯距离增加而降低,否则错误率会增高,因此配线愈短愈好,并做好隔离抵抗干扰,封包传输时间可以根据 baud rate 算出。例如 baud rate= 115200,表示每个 bit 需要 1/115200 秒,一个 byte 若用 8E1 格式(见 P3-02)则需要 11位元(1启动+8资料+1同位检查+1停止),一个封包若有 30 byte 则需要花费:
1/115200 x 11 x 30 = 2.8 msec。
使用 RTU 取代 ASCII,P3-02
相同的内容若以 RTU 方式传输,封包的位元数约为 ASCII 方式的一半,传输时间也节省一半!
A2 伺服支持的 Modbus 命令有:
CMD 06h:一次写一个 16 bit 的参数,若写入的参数属性为 32 bit则会错误!
CMD 10h:一次写N个参数,N=1~4,16 bit 或 32 bit 参数都可写。每个参数佔2个 word 位址,不论该参数是16/32 bit 都一样。
CMD 03h:一次读N个参数,N=1~5,16 bit 或 32 bit 参数都可读,每个参数佔2个 word 位址,不论该参数是16/32 bit 都一样。
使用映射参数,减少通讯次数
由于通讯读写的对象位址通常不会连续,例如要控制DI需要写入 P4-07,触發PR需要写 P5-07,若分别写入就需要2次通讯,这样很没有效率。台达 A2伺服提供8个映射参数 P0-25~P0-32,以上述为例,可以将 P4-07 映射到 P0-25,而 P5-07 映射到 P0-26,通讯时用CMD 10h同时对 P0-25~P0-26 做通讯,就只需要一次通讯,可大大的提升效率。且因每一映射参数都是 32 bit 宽,而上述 P4-07 与 P5-07 都是 16 bit 宽,故可将其分别映射到 P0-25 的高 16bit 与低 16 bit,不必佔用2个映射参数。因此,使用映射参数的好处除了使位址连续而减少通讯次数外,也可以使通讯的资料紧凑,提高频宽利用率,这是很重要的技巧。映射的方法可参考参数 P0-35 的设定,或使用 ASDASoft 软件,如下图进行操作:
映射参数的配置技巧
如果觉得8个映射参数不够用,可以将读写都需要的参数配置在中间,可节省空间。例如:总共需要通讯9个参数,(已超过8个了),若其中需读5个参数,写4个参数,由于有些参数可能是读写都需要的,例如 DI:P4-07 与 PR:P5-07,映射时可以将只需读取的3个参数配置在映射区1~3,然后4,5配置读写都需要的参数 ,接着配置只需写入的参数 6,7。读取时用 CMD 03h 同时读取1~5。写入时用 CMD 10h 同时写入 4~7。就可以满足需求,反而还剩一个映射空间未使用。如果还是不够用,可以把每次通讯都需要读写的参数配置在映射区,偶尔才需读写的就不做映射,直接用其本身的位址来通讯即可。其观念类似于 CANopen 协定中的 PDO 与 SDO 概念,PDO 适合需要频繁刷新的参数,效率高但对象固定(採用映射);SDO 适合需要随机通讯的参数,对象可变但效率低。
建立与PLC 扫描同步的通讯
藉由上述映射技巧与多笔读写的通讯命令,程序统一在一处对伺服的映射参数做读/写,这样可以将所需资料一次刷新到 PLC 的记忆体中,也相当于让伺服的参数映射到 PLC 的记忆体中,很像 memory link,其中,映射区的读取与写入分别对应到 PLC 不同的记忆体,如下图中的 IN_Area 与 OUT_Area。且资料刷新与 PLC 扫描週期同步,这样可使通讯的内容在一次扫瞄週期内维持固定,避免程式逻辑發生错误。
台达A2伺服的PR模式,具有回原点,点对点运动,也包含电子凸轮,若能提升 modbus 的通讯效率,PLC 就能有效的利用这些功能,对一般的应用已经足够,不一定非得上 CAN bus 或 EtherCAT,除了简化系统也可节省成本,对小型系统尤其具有竞争力。
提升 Baud rate P3-01.X
提升 baud rate可以减少每个位元的传输时间,通常 baud rate 需随着通讯距离增加而降低,否则错误率会增高,因此配线愈短愈好,并做好隔离抵抗干扰,封包传输时间可以根据 baud rate 算出。例如 baud rate= 115200,表示每个 bit 需要 1/115200 秒,一个 byte 若用 8E1 格式(见 P3-02)则需要 11位元(1启动+8资料+1同位检查+1停止),一个封包若有 30 byte 则需要花费:
1/115200 x 11 x 30 = 2.8 msec。
使用 RTU 取代 ASCII,P3-02
相同的内容若以 RTU 方式传输,封包的位元数约为 ASCII 方式的一半,传输时间也节省一半!
A2 伺服支持的 Modbus 命令有:
CMD 06h:一次写一个 16 bit 的参数,若写入的参数属性为 32 bit则会错误!
CMD 10h:一次写N个参数,N=1~4,16 bit 或 32 bit 参数都可写。每个参数佔2个 word 位址,不论该参数是16/32 bit 都一样。
CMD 03h:一次读N个参数,N=1~5,16 bit 或 32 bit 参数都可读,每个参数佔2个 word 位址,不论该参数是16/32 bit 都一样。
使用映射参数,减少通讯次数
由于通讯读写的对象位址通常不会连续,例如要控制DI需要写入 P4-07,触發PR需要写 P5-07,若分别写入就需要2次通讯,这样很没有效率。台达 A2伺服提供8个映射参数 P0-25~P0-32,以上述为例,可以将 P4-07 映射到 P0-25,而 P5-07 映射到 P0-26,通讯时用CMD 10h同时对 P0-25~P0-26 做通讯,就只需要一次通讯,可大大的提升效率。且因每一映射参数都是 32 bit 宽,而上述 P4-07 与 P5-07 都是 16 bit 宽,故可将其分别映射到 P0-25 的高 16bit 与低 16 bit,不必佔用2个映射参数。因此,使用映射参数的好处除了使位址连续而减少通讯次数外,也可以使通讯的资料紧凑,提高频宽利用率,这是很重要的技巧。映射的方法可参考参数 P0-35 的设定,或使用 ASDASoft 软件,如下图进行操作:
映射参数的配置技巧
如果觉得8个映射参数不够用,可以将读写都需要的参数配置在中间,可节省空间。例如:总共需要通讯9个参数,(已超过8个了),若其中需读5个参数,写4个参数,由于有些参数可能是读写都需要的,例如 DI:P4-07 与 PR:P5-07,映射时可以将只需读取的3个参数配置在映射区1~3,然后4,5配置读写都需要的参数 ,接着配置只需写入的参数 6,7。读取时用 CMD 03h 同时读取1~5。写入时用 CMD 10h 同时写入 4~7。就可以满足需求,反而还剩一个映射空间未使用。如果还是不够用,可以把每次通讯都需要读写的参数配置在映射区,偶尔才需读写的就不做映射,直接用其本身的位址来通讯即可。其观念类似于 CANopen 协定中的 PDO 与 SDO 概念,PDO 适合需要频繁刷新的参数,效率高但对象固定(採用映射);SDO 适合需要随机通讯的参数,对象可变但效率低。
建立与PLC 扫描同步的通讯
藉由上述映射技巧与多笔读写的通讯命令,程序统一在一处对伺服的映射参数做读/写,这样可以将所需资料一次刷新到 PLC 的记忆体中,也相当于让伺服的参数映射到 PLC 的记忆体中,很像 memory link,其中,映射区的读取与写入分别对应到 PLC 不同的记忆体,如下图中的 IN_Area 与 OUT_Area。且资料刷新与 PLC 扫描週期同步,这样可使通讯的内容在一次扫瞄週期内维持固定,避免程式逻辑發生错误。
台达A2伺服的PR模式,具有回原点,点对点运动,也包含电子凸轮,若能提升 modbus 的通讯效率,PLC 就能有效的利用这些功能,对一般的应用已经足够,不一定非得上 CAN bus 或 EtherCAT,除了简化系统也可节省成本,对小型系统尤其具有竞争力。