S7-200主站读仪表数据问题 点击:1149 | 回复:6



恼实人

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 61回
  • 年度积分:0
  • 历史总积分:125
  • 注册:2004年2月13日
发表于:2010-08-26 16:20:26
楼主

大家好,向大家请教一个问题,我用S7-200做Modbus主站,一只仪表为从站,从站的地址为1,数据类型为04,数据地址为01,长度为2个字,校验码为偶(20 0B,循环冗余CRC16校验),通讯协议:ModBus RTU通讯协议,8个数据位,波特率为9600。我做了一个程序,总是连接不上,想向大家请教,能做一个依上述地址做一个简单程序最好。谢谢!

     




patrickma

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 114回
  • 年度积分:99
  • 历史总积分:622
  • 注册:2003年3月01日
发表于:2010-08-26 20:59:00
1楼

你是不是用的西门子现成的MODBUS主站协议库,如果是,手册讲的很详细呀

patrickma

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 114回
  • 年度积分:99
  • 历史总积分:622
  • 注册:2003年3月01日
发表于:2010-08-26 21:08:53
2楼
Modbus RTU 主站功能编程
1. 调用 Modbus RTU 主站初始化和控制子程序

使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:


图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序

各参数意义如下:

a. EN 使能: 必须保证每一扫描周期都被使能(使用 SM0.0)
b. Mode 模式: 为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议
c. Baud 波特率: 支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。
d. Parity 校验: 校验方式选择
0=无校验
1=奇较验
2=偶较验
e. Timeout 超时: 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。
注意: 这个值必须设置足够大以保证从站有时间响应。
f. Done 完成位: 初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)
g. Error 初始化错误代码(只有在 Done 位为1时有效):
0= 无错误
1= 校验选择非法
2= 波特率选择非法
3= 模式选择非法



2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;


图 3. 调用Modbus RTU 主站读写子程序

各参数意义如下:

a. EN 使能: 同一时刻只能有一个读写功能(即 MBUS_MSG)使能
注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。
b. First 读写请求位: 每一个新的读写请求必须使用脉冲触发
c. Slave 从站地址: 可选择的范围 1 - 247
d. RW 从站地址: 0 = 读, 1 = 写
注意:
1. 开关量输出和保持寄存器支持读和写功能
2. 开关量输入和模拟量输入只支持读功能
e. Addr 读写从站的 选择读写的数据类型
数据地址: 00001 至 0xxxx - 开关量输出
10001 至 1xxxx - 开关量输入
30001 至 3xxxx - 模拟量输入
40001 至 4xxxx - 保持寄存器
f. Count。 数据个数 通讯的数据个数(位或字的个数)
注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)
g. DataPtr 数据指针: 1. 如果是读指令,读回的数据放到这个数据区中
2. 如果是写指令,要写出的数据放到这个数据区中
h. Done 完成位 读写功能完成位
i. Error 错误代码: 只有在 Done 位为1时,错误代码才有效
0 = 无错误
1 = 响应校验错误
2 = 未用
3 = 接收超时(从站无响应)
4 = 请求参数错误(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙于其它请求
7 = 响应错误(响应不是请求的操作)
8 = 响应CRC校验和错误
-
101 = 从站不支持请求的功能
102 = 从站不支持数据地址
103 = 从站不支持此种数据类型
104 = 从站设备故障
105 = 从站接受了信息,但是响应被延迟
106 = 从站忙,拒绝了该信息
107 = 从站拒绝了信息
108 = 从站存储器奇偶错误



常见的错误:

如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
从站 delay 参数设的时间过长会造成主站 3 号错误
从站掉电或不运行,网络故障都会造成主站 3 号错误
3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)

Modbusmaster指令库需要一个284个字节的全局 V 存储区。

patrickma

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 114回
  • 年度积分:99
  • 历史总积分:622
  • 注册:2003年3月01日
发表于:2010-08-26 21:12:56
3楼
有一个文件名为   Micro ‘n Power.chm 的文档,想必很多人都知道,讲的挺好的。以上就是从中COPY的,呵呵

sovish521

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 122回
  • 年度积分:0
  • 历史总积分:551
  • 注册:2008年12月11日
发表于:2010-08-26 21:32:03
4楼
MARK 一个先 【字数补丁.exe】

恼实人

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 61回
  • 年度积分:0
  • 历史总积分:125
  • 注册:2004年2月13日
发表于:2010-09-02 17:12:53
5楼
谢谢,我已经弄通,这几天因工作忙没上线,主要是主站读取的字地址问题,感谢大家!

shanjiping

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2006年5月26日
发表于:2010-09-02 21:17:53
6楼

Modbusmaster指令库需要一个284个字节的全局 V 存储区。


热门招聘
相关主题

官方公众号

智造工程师