一种MB-RTU多站通讯的实现

已锁定

zy5840

  • 帖子

    24
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2017-03-06

普通 普通 如何晋级?

一种MB-RTU多站通讯的实现

584

4

2021-10-09 16:55:35

本帖是http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1656086&b_id=64&s_id=83&num=91#anch

改进。

----------------------------------------------------------------

在上一个帖子中提到的方法在单站的情况下使用还算方便,如果多站,还是比较繁琐,参考了Zane的帖子http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1535757&b_id=64&s_id=83&num=23#anch

借鉴了芳季的部分程序,实现了多站MB-RTU通讯在程序中只调用一次MB_MSG指令,即可完成所有通讯并保证不会发生指令冲突的错误。

----------------------------------------------------------------

  1. 硬件

    PLC         200 SMART 标准版

    MB子站    英威腾GD200A系列变频器

    触摸屏    昆仑通态TPC1061Ti

  2. 任务列表

    任务号    任务    站地址    读写    操作数地址    操作数量    数据地址   

    1    M01_变频器控制值    10    1    408193    1    VW2100    

    2    M01_写入频率值    10    1    408194    1    VW2102    

    3    M01_读取频率值    10    0    412289    1    VW2104    

    4    M01_读取电流值    10    0    412293    1    VW2106    

    5    M01_读取状态值    10    0    408449    1    VW2108    

    6    M01_读取故障值    10    0    408451    1    VW2110    

    7    M02_变频器控制值    20    1    408193    1    VW2200    

    8    M02_写入频率值    20    1    408194    1    VW2202    

    9    M02_读取频率值    20    0    412289    1    VW2204    

    10    M02_读取电流值    20    0    412293    1    VW2206    

    11    M02_读取状态值    20    0    408449    1    VW2208    

    12    M02_读取故障值    20    0    408451    1    VW2210    

    13    M03_变频器控制值    30    1    408193    1    VW2300    

    14    M03_写入频率值    30    1    408194    1    VW2302    

    15    M03_读取频率值    30    0    412289    1    VW2304    

    16    M03_读取电流值    30    0    412293    1    VW2306    

    17    M03_读取状态值    30    0    408449    1    VW2308    

    18    M03_读取故障值    30    0    408451    1    VW2310    

    我在这里的例子是三个子站,每个子站定义了6个任务,,一共18个任务;

    在后面的程序中只用到任务号1-6,也就是只有一个子站,其他子站可以简单复制/修改一下子程序即可;

    这个任务号是以后参数传递的纽带,可以自定义任务号,如果需要优先级也需要在这里定义好

  3. 主程序

    LD     First_Scan_On

    FILL   +0, VW1200, 102

    MOVW   +100, VW1200

    //定义表格长度和初始化表格

    LD     启动Modbus

    EU

    S      通讯令牌, 1

    //初始化通讯令牌

    LD     Always_On

    =      L60.0

    LD     Always_On

    =      L63.7

    LD     L60.0

    CALL   MBUS_CTRL, L63.7, 19200, 0, 0, +1000, 启动Modbus, MB_StartError

    //初始化MBUS_CTRL

    LD     Always_On

    CALL   M01

    //处理1#子站

    LD     Always_On

    TON    T114, +20

    A      T114

    CALL   M01_Modbus_Read

    //处理1#子站的变频器读取

    LD     T114

    A      通讯令牌

    AW>=   VW1202, +1

    EU

    FIFO   VW1200, TaskNo

    CALL   TaskNoToParameter, TaskNo, MB_Slave, MB_RW, MB_Addr, MB_Count, MB_DataPtr

    S      开始通讯, 1

    R      通讯令牌, 1

    //MB-RTU任务出队列并传递参数

    LD     MB_Done

    EU

    CALL   MB_Result, TaskNo, MB_Error

    S      通讯令牌, 1

    R      开始通讯, 1

    R      MB_Done, 1

    //通讯完成检查

    LD     开始通讯

    =      L60.0

    LD     开始通讯

    EU

    =      L63.7

    LD     L60.0

    CALL   MBUS_MSG, L63.7, MB_Slave, MB_RW, MB_Addr, MB_Count, MB_DataPtr, MB_Done, MB_Error

    //MB-RTU通讯

一种MB-RTU多站通讯的实现 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7555条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。