上位机与PLC Modbus RTU通讯的问题 点击:6951 | 回复:18



wal0327

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-13 11:35:46
楼主
求助帖15分-已结帖

台达40EH2 PLC在与上位机 RTU模式通讯中,1  、 MODRD MODWR等modbus指令是不是不可以用啊? 那RS指令呢,也不可以用吗?       2 、 比如发送 这串3A 01 05 05 00 FF00 F6 0D 0A 指令到PLC中,是直接在上位机里 write(" 3A 01 05 05 00 FF00 F6 0D 0A ")进去, 还是需要把这串字符分成高位低位 存到PLC的D区去啊,再通过其他指令发送啊?




wenwan90

  • 精华:0帖
  • 求助:12帖
  • 帖子:28帖 | 575回
  • 年度积分:12
  • 历史总积分:2497
  • 注册:2011年11月03日
发表于:2011-12-13 12:23:09
1楼

D区有地址吧!直接写进去就可以了嘛。又不是交换数据。

涛声依旧

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 540回
  • 年度积分:5
  • 历史总积分:18865
  • 注册:2006年12月03日
发表于:2011-12-13 12:24:06
2楼
上位机的型号能说下么

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-13 13:42:44
3楼

上位机是就是工控机,界面是自己用C# 做的,串口直接通过serialPort类实现的。

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-13 13:43:01
4楼

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-13 17:19:42
5楼

RS指令是PLC作为主控方式专用指令,只能在PLC程序中出现并使用。

PLC与上位机通讯,PLC是从机,根本用不着PLC主动联系,即使PLC主动联系了,上位机也不会理睬。

上位机与PLC的通讯方式要一致,上位机只管发:“3A 01 05 05 00 FF00 F6 0D 0A ”,注意:你采用的方式是ASCII,除了3A、0D、0A以外,其余的数值全部要变成ASCII的形式,即01要转换成30、31等等。

根据其他网友的介绍,听说也有采用RTU方式通讯成功的,但也有人说只能用ASCII,请楼主测试一下是否可行。

以下是台达厂家的解释(常见问题50例):

5、各位仁兄:我想知道,上位机和台达的PLC通讯怎么设置成主从式通讯?用其自带的485口。谢谢!
答:上位机和台达的PLC通讯,多数上位机是主的。这个不用什么设置,台达PLC默认就是从站,不需要做任何设置,直接调用MODBUS协议就可以了。但我们默认的是ASCII,如果要用RTU,必须把M1143置ON。

bhdxzgp

  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2011-12-13 18:24:13
6楼
楼上分析 的很好;希望越来越多的人从工控网中能得到收获!!!

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-13 22:52:40
7楼
回复内容:
谢谢yjig精彩的答复。我也是看了网上的说法,好像MODRD MODWR等modbus指令,只能用在master是PLC,而不是PC的通讯中; RS指令可以用在PC与PLC通讯的中,在PLC程序中进行串行数据传送。RTU模式是可以通讯成功的。这些说法都不是很确定啊,苦于现在只是方案论证期,没法用实物验证啊。只能先查点资料,向大虾们求解释下。

guoqianfly

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 14回
  • 年度积分:0
  • 历史总积分:1085
  • 注册:2011年3月17日
发表于:2011-12-23 08:19:07
8楼

可以用RS指令,现在plc中编好程序,在rs指令中设定接受地址,和发送地址,之后你可以用串口调试测试,你发送的数据保存在rs指令中拟设你的寄存器中,也可以用rs458口用modbus命令发送可以直接读写

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-25 20:59:08
9楼

回复内容:
对:guoqianfly关于可以用RS指令,现在plc中编好程序,在rs指令中设定接受地址,和发送地址,之后你可以用串口调试测试,你发送的数据保存在rs指令中拟设你的寄存器中,也可以用rs458口用modbus命令发送可以直接读写内容的回复:
我用的是rs485口通讯的。上位机是电脑,PLC做下位机。

1,此时也可以用RS指令吗?好像RS适用于PLC与变频器等通讯吧。

2,直接在上位机里 write(" 3A 01 xx xx xx xx 0D 0A "),比如把十进制数值100写到D区,此时写入的是16位数值吧?如果在T形图里,用的是32位指令,比如DMOV,DMUL等,是不是还牵扯到数据转换啊。谢谢。



yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-25 21:44:50
10楼

1、电脑里又没有个“RS”,你干吗非要扯出个“RS”来。

2、你直管发送数据,通常是采用16进制的数据,PLC对所接受的脉冲数据,全都默认为16进的数据,在PLC的内部进行计算时,无论你是什么数据,都统一按2进制的处理。

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-27 10:36:57
11楼

回复内容:
对:yjig关于1、电脑里又没有个“RS”,你干吗非要扯出个“RS”来。2、你直管发送数据,通常是采用16进制的数据,PLC对所接受的脉冲数据,全都默认为16进的数据,在PLC的内部进行计算时,无论你是什么数据,都统一按2进制的处理。内容的回复:


谢谢,解答完下面的问题,我把悬赏给你。比如我发送十进制数100,也就是十六进制数64,到D100里。

而我现在在PLC里运算用的都是如,DADD、DMUL这些32位运算指令,是不是需要先把D100的数据转化为32位存放在2个地址单元里,再运算?

2 如图,在用上位机电脑对PLC内的M110,发送MOdbus通讯指令进行置位时,如果M110在PLC内是上升沿,是不是就没有动作啊? 因为我在PLC内直接对此信号强制时没有反应。

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-27 12:01:06
12楼

发送十进制数100,也就是十六进制数64,到D100里,该D100是16位。如果你想进行32位运算,什么也别做,直接调用D100,不过,还有一个前提条件,就是采用32位时,D100、D101同时已经被占用,也就是说,对D101不得进行任何赋值。

如以下程序:

DADD   D100   K50000  D102

以上程序中的D100就是32位,D100的数值是K100

第二个问题看不懂,不知你想做什么。

wal0327

  • 精华:0帖
  • 求助:2帖
  • 帖子:11帖 | 30回
  • 年度积分:0
  • 历史总积分:150
  • 注册:2010年6月27日
发表于:2011-12-27 17:10:00
13楼

回复内容:
对:yjig关于发送十进制数100,也就是十六进制数64,到D100里,该D100是16位。如果你想进行32位运算,什么也别做,直接调用D100,不过,还有一个前提条件,就是采用32位时,D100、D101同时已经被占用,也就是说,对D101不得进行任何赋值。如以下程序:DADD   D100   K50000  D102以上程序中的D100就是32位,D100的数值是K100第二个问题看不懂,不知你想做什么。内容的回复:


非常感谢啊。现在补充下问题啊:

1 现在要读取占用D100,D101的32位数据,好像D100是高位,D101是低位吧?读取的时候,也只能是读出16位数据,分别读出D100和D101,那么我所需要的这个32位的数据的十进制数,是不是通过在电脑里编程,根据D100和D101的值实现的啊?

2梯形图中M110,原来是触摸屏中的按钮,现在要改为电脑发指令,对M110置位来实现。现在不知道上述梯形图中,M110置位后DDRVi指令有输出吗

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-27 17:55:04
14楼

1、楼主被西门子的搞晕了,西门子寄存器排列正如你所说,而台达(三菱)的D100是低位,D101是高位。

2、台达的可以进行无机(PLC)仿真,你这么不放心,完全可以编程验证一下,仿真时可能有部分功能不支持,你可采取分步仿真演示。

3、至于用电脑对M110控制,同样也可用以上的方式,也就是说将PLC的自己实现的功能,与电脑发送数据分开来,以便查找分析问题所在。

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-27 18:34:45
15楼

顺便再给你提供一计算机发送的数据(从机地址=1,SET-M110,PLC内部不得有OUT-M110,对M110只能用SET或RST):

RTU模式(SET-M1143):

01 05 08 6E FF 00 EF 87

ASCII模式(RST-M1143):

3A 30 31 30 35 30 38 36 45 46 46 30 30 38 35 0D 0A

 

zhou1

  • 精华:0帖
  • 求助:27帖
  • 帖子:30帖 | 399回
  • 年度积分:1
  • 历史总积分:0
  • 注册:2013年8月07日
发表于:2017-07-06 08:34:35
16楼

高手,厉害。。。。。。。。。。。。。

八星瓢虫

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:37
  • 注册:2017年7月14日
发表于:2017-07-19 16:51:33
17楼

下来学习学习,谢谢     


热门招聘
相关主题

官方公众号

智造工程师