各位老师,学长你们好!
我刚开始接触PLC,纯属于小白,这段时间看自由口通信和modbus通信,搞得我焦头烂额的,却还是没有一点头绪。我在电脑上做了一个实验,想法:让电脑跟S7-200 PLC通过modbus协议进行通信,PLC做从站,把从站的modbus协议写道PLC上,电脑上使用串口调试软件发送一个数1,然后通过modbus协议,传送到PLC中,接收到以后点亮I0.0点(不知道这种想法是对还是错)。我用的是S7-200 226 CPU, 编程线是usb/ppi的(一头是485头,一头是USB接头)。
以下是我做的过程,我在编程环境中编写了从站程序,并用编程线下载到了PLC中(程序在下图中,因为刚学,编写的程序对不对我自己都不知道)然后用串口调试软件发送数据1做验证,结果没有反应,在程序状态监控中显示MBUS_SLAVE的错误代码是10(从属功能没有启动),还有就是我在库存储区分配上地址设置的是VB0-VB779,在MBUS_SLAVE中的holestr位中,按理说保持寄存器不能跟库存储区相重叠,可是我在设置保持寄存器为VB0-VB779范围之内时没事儿,但是错误代码是10就是那个从属功能没有启动。超出这个范围,比如&vb1000就显示:无法建立与指定地址的连接,可能是无效地址或不存在的地址,这个时候用的是ppi编程线。我把线换成485转usb线,调到运行当,点程序状态监控显示:端口无法打开或正由另一个应用程序占用。彻底的不知道是为什么了,请来是们帮我指点一下,我的错误在那里。或者我现在想做pc跟plc的modbus协议传输该怎么实验,谢谢你们万分感激。
问题补充:
谢谢两位老师的回答,上午我弄了一下才知道,原因是我用的端口0放ppi线,在初始化modbus通信以后端口被占用,使用ppi编程线就不能在监控了,经过指点,我吧端口1放置ppi编程线,端口0设置放置485转USB的传输线,在监视程序状态时通讯显示正常了(见图)。我现在想通过MODBUS调试精灵向PLC里面发送数据却不知道怎么弄了(也上图了)。还想跟老师请教,把数据发到PLC里后数据应该存放在VW0起始的存储区中,我该怎么读取这里的数据呢,就是说怎么读出PLC里的数据,总是绕不出这个弯。
图片说明:
最佳答案
1、线,在PC中一定要表示为一个串口,这样子才能起先通讯实验;siemens原装的USB/PPI,在PC中表示的是一个USB设备。
2、holdstart占用的V区,不要和库内存重叠。比如你的holdstart=&VB0,数量是1000,那么VB0-VB1999都是Hold范围,库内存至少分配到VB2000以上。为什么?现在照做,等有体会后,自然就明白了。
3、发下面这串数据到PLC,有回应数据就表示成功了。
假定modbus从站地址10,读取40001一个HOLD寄存器(也就是VW0):
0A 03 00 00 00 01 85 71
(16进制格式)
提问者对于答案的评价:
谢谢!但是我还是不知道后续问题怎么解决
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc298107.html