| 作者 | 主题 |
|---|---|
|
谦 总坛主
经验值:23725 发帖数:3679 精华帖:8 |
楼主
主题:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
Modbus 作为一种容易使用的通信方式, 在各种应用场合得到了广泛的使用。通过Modbus协议我们可以使西门子的PLC与各种类型的仪表以及不同厂家的设备相联系在一起。西门子的s7-300/400 的modbus 模块 的使用,使西门子的PLC有了更广泛的使用,并且在网络上的使用更方便,更通用。
下载中心参考文档: 25380100:CP 341 Modbus ASCII (16位和32位)从站可装载驱动(英文) 25362836 :CP 341 Modbus ASCII (16位和32位)主站可装载驱动(英文) 1220184 :S7 串行通信模板 Modbus RTU 主站可装载驱动(EN) 1218007:S7 串行通信模板 Modbus RTU 从站可装载驱动(EN) 1117397:CP 341 串行通信模块的安装和参数配置(EN) 27774276:可装载的驱动程序 Modbus Slave (RTU) 27774018:可装载的驱动程序“Modbus Master (RTU)” 25356060:CP441-2/341的 Modbus ASCII 16 位和 32 位可加载的驱动程序 26702609:Modbus 协议的属性,优点及特点? A0081:CP340/CP341/CP440/CP441通讯及编程 A0336:CP341 Modbus RTU多站点轮询 A0311:PAC3200 MODBUS RTU通信使用入门 A0384:S7-300 CP341作主S7-200作从的Modbus通信 活动奖励: 此次集中交流将持续至8月10日,其中所有精华帖作者将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖积分。更多积分带给您更多奖品兑换的自由。 对于有突出发言贡献的网友,还可以在当前的可兑换奖品中免费挑选任一款奖品。 交流结束后也将专门整理重要内容,供广大网友分享参考。 预祝大家交流愉快,收获丰富! |
|
www123456 至圣 经验值:12603 发帖数:2379 精华帖:86 |
1楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
Modbus RTU是基于串口的一种通信协议,协议开放,多用于连接现场仪表设备,通信距离与串行通信定义相同。由于报文简单、开发成本比较低,许多现场仪表仍然使用Modbus RTU协议通信。Modbus RTU格式通信协议以主从的方式进行数据传输,主站发送数据请求报文到从站,从站返回相应报文。
CP341发送模块的发送程序主要是通过调用功能块FB8来实现,FB8是基于上升沿触发工作的.来一个上升沿FB8工作一次向总线上发送一个请求数据包,所以在程序中一定要设计一个触发代码段,来不断的使REQ:=M50.0循环往复的置“1”置“0”,这样FB8就可以正常运行了。 在设计程序时一定要注意FB8的参数SF:=‘S’及R_TYP:=‘X’的值都是大写否则程序调试不成功。FB8需要一个背景数据块.这一背景数据块一般由系统自动生成.以上程序中为DB3;对于通过CP34 1的Modbus Master驱动通讯的发送模块需要设计发送数据块DB块.用来对主站发送参数进行设置和初始化。 接收程序是调用FB7来实现的,由于CP341可以处理接收程序的细节部分.因此对于设计者来说只需要进行简单的设计就可以实现数据的接收。 对于Modbus多从站的通信(CP341带硬件狗为主站),编程时尤为需要注意,对于地址和站号等的轮询需要合理安排,否则会引起从站间的数据混乱。同时注意读上来的高低字节问题。 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅 |
|
依然 至圣 经验值:10152 发帖数:2530 精华帖:19 |
6楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
Modbus通讯比较普遍,尤其在仪表方面,但是如果实时性要求比较高、从站比较多,还是存在一定的问题。
我们应用的从站不是很多,一般小于10个,都是CP341+Dongle的模式。 现场感觉主要就是通讯速度和从站故障处理的问题: 1,从站数据需要参与控制,且实时性要求比较高,有状况后,45s内需要处理别的机器且保障已经正常运行;Modbus的通讯速度一边都是支持到115200或者38400,并不是很快,一旦从站过多,轮询起来会比较慢; 2,从站掉电或者故障后,导致的通讯堵塞,如果没有特殊处理,每次轮询到故障从站都会使通讯特别慢;程序可以判断处理,但是故障后多久重新判断,故障后数据的复位等还是比较麻烦,我曾经尝试通讯后把该从站数据清除,结果跑偏,把正常的从站数据也清了,原因是通讯堵塞,接下来的从站也受到了影响,至今还没有好的解决方案; 3,bool和register的通讯字长,手册说bool一次1024个,register一次127个;但是我尝试过register一次125个words,通讯总是超时,后来现场原因,没时间再试,还是改回原来的32words。 欢迎大侠们拍砖。 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
JUST DO IT
|
|
苦斗 侠士 经验值:1089 发帖数:299 精华帖:3 |
20楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
我也一直用CP340实现Modbus RTU通讯方式实现读写操作!CP341没有用过!
Modbus RTU通讯就是普通的串行通讯而已(一发送、一接收如此循环),只是按照他们自己通讯规约! 如: 地址、功能码、数据域、CRC校验码等(发送和返回的读写长度可能不同,根据情况而定) 目前的变频器、智能仪表等都支持Modbus RTU! 也是最常见的从站! 具体协议请查询Modbus通讯协议! 根据我做过的和三垦、ABB变频器、托利多称重仪表等通讯来说明一些常见的功能码如03读、06写、10(H) 批次写功能! 配置:cpu312+CP340、ABB_510变频器 实现读电流、频率、写频率. 大致思路:PLC里做过从站轮询,功能(读电流、读频率、写频率)轮询! CP340参数配置: 硬件组态里面:地址默认即可(比如320); 基本参数栏:中断生成:否,参数---Protocol选:ASCII,双击Protocol----Speed选择9600(最高只能9600,这点 不同于200PLC) 数据位8位,停止位1位,无奇偶校验 在Interface栏下 选择Half Duplex (RS 485) TWO-Wire Mo 其它都默认即可! 下面开始就03读频率(104,根据寄存器地址起始对应67H)命令 如轮询地址1,功能地址是1 发送命令: 地址 功能码 数据域读起始高位 数据域读起始低位 被读数据个数高位 被度数据个数低位 CRC_l CRC_H 01H 03H 00 67H 00 01 ... ... 返回格式 地址 功能码 数据域个数高位 数据域个数低位 数据域高位 数据域低位 CRC_L CRC_H 01 03 00 01 ### ### ... ... 06H和10H类似 可以用串口通讯软件测试下 发送一命令 看看返回数据是否正确 所以问题关键是弄清楚协议、轮询程序、以及CRC校验等 关于CRC校验,建议不要开数学公式 网上有关于计算的步骤: 具体如下: 1- 预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器; 2- 把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器; 3- 把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位; 4- 如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或; 5- 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 6- 重复步骤2到步骤5,进行下一个8位数据的处理; 最后得到的CRC寄存器即为CRC码。 最好做过个子程序 在发送命令和接收命令中调用即可 下面是我的校验子部分程序 仅供参考 L W#16#FFFF T #TEMP2 L #Start_add SLD 3 LAR1 L #DBNO T #TEMP4 OPN DB [#TEMP4] NOP 0 L #Count x001: T #TEMP3 L B#16#0 T #TEMP5 NOP 0 L DBB [AR1,P#0.0] T LB 9 L #TEMP5 L #TEMP2 XOW T #TEMP2 +AR1 P#1.0 L 0 T #TEMP6 NOP 0 L 8 x002: T #TEMP6 L #TEMP2 SRW 1 T #TEMP2 JP x003 JU x004 x003: NOP 0 A( L W#16#A001 L #TEMP2 XOW T #TEMP2 ) x004: NOP 0 L #TEMP6 LOOP x002 NOP 0 L #TEMP3 LOOP x001 NOP 0 L LB 2 T #CRC_H L LB 3 T #CRC_L 另外我发现同样是Mobus通讯 200通讯间隔最短可以调到50ms发送 接收一次,同样的配置用CP340最短 要80MS才来得及接收! 是什么原因呢? 难道200利用的是中断 340用的是程序 所以速度没中断快?? 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅 |
|
一天到晚游泳的猪 侠圣 经验值:2643 发帖数:768 精华帖:10 |
21楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
说说我的modbus调试经历
第一次是用cp441-2(在400h上,配两块,带硬件dongle)做冗余的slave与一个rtu(两个串口)通讯,西门子的modbus slave做从站还是比较简单的,配下就行不用编程。不过现在想想这种方案太奢侈了,应该在400h挂的et200上面配两块cp341 第二次是用cp341(不带硬件狗)以modbus ascii协议与仪表通讯,配成了ascii驱动自己写LRC校验啥的 第三次,用cp341实现modbus rtu的主站通讯,一块cp341带了硬件狗,另外一块没带(因为从站的通讯要求有点怪,配成ascii驱动比较符合要求,然后自己写crc校验等等),通讯对象是空压机,能发控制命令 感觉调试modbus最好要掌握modbus的通讯原理,尤其是能看懂报文内容,这样就可以用串口调试软件分析故障原因 另外,西门子plc实现modbus通讯并不是仅仅用cp340、341或者cp441-2,还可以用其他方法: 1、et200s带的串行模块,master/slave可以灵活配置 2、用dp/modbus网关,要求plc有dp接口,不过这种网关一般会有点限制,比如报文的数量、长度等等 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
有生之年,狭路相逢,终不能幸免
|
|
火麒麟 侠圣 经验值:4024 发帖数:571 精华帖:18 |
22楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
上面一位老兄的CRC校验程序可以考虑用下循环,少用跳转:
VAR_INPUT DB_NO : INT ; DBB_Start : INT ; DBB_Counts : INT ; END_VAR VAR_OUTPUT CRC_H : BYTE ; CRC_L : BYTE ; END_VAR VAR_TEMP CRC_REG : WORD ; DB_NO_TEMP : INT ; BytesChecked : INT ; BitsChecked : INT ; END_VAR BEGIN NETWORK TITLE = L W#16#FFFF; T #CRC_REG; //预置CRC寄存器 L #DB_NO; T #DB_NO_TEMP; OPN DB [#DB_NO_TEMP]; L #DBB_Start; //读入校验起始字节 SLD 3; LAR1 ; L #DBB_Counts; //读入校验字节数量 _A: T #BytesChecked; //字节处理循环 L DBB [AR1,P#0.0]; L LB 1; XOW ; T LB 1; L 8; _B: T #BitsChecked; //位处理循环 L #CRC_REG; SRW 1; T #CRC_REG; JZ _C; //检验移出位是否为1 L #CRC_REG; L W#16#A001; XOW ; T #CRC_REG; _C: L #BitsChecked; //校验下个位 LOOP _B; +AR1 P#1.0; //校验下个字节 L #BytesChecked; LOOP _A; L LB 1; //输出校验码 T #CRC_H; L LB 0; T #CRC_L; END_FUNCTION 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
业精于勤,行成于思
|
|
依然 至圣 经验值:10152 发帖数:2530 精华帖:19 |
24楼
主题:回复:应用探讨——S7-300/400 PLC Modbus通讯应用探讨
版主你好,清除该站的数据是因为工艺需要,如果不清除,有可能该站掉线后上位还有数据显示,会给操作人员错误的判断信息,最主要的是:我的站信息里面需要参与判断控制的。
我的程序是每个从站一个接受DB,清除也是用SFC21,就是清除的时候是根据判断当前的站号,,当有通讯超时时,把当前的站号对应的站数据清零。 具体程序如下: 发送超时: O "SendOK" O "SendErr" O "SendOverTime" R "SendReq" S "Recving" //发送数据超时检测 A "SendReq" L S5T#100MS SD "SendOverTime" 接受超时: O "RecvOk" O "RecvErr" O "RecvOverTime" JCN _199 //接收完成 R "Recving" CALL "Comm_Complete" _199: NOP 0 A "Recving" L S5T#400MS SD "RecvOverTime" 当发现发送或者接收延时定时器激活时,调用SFC21,清除当前的接收从站对应的DB号数据。 我可以肯定是这里出错了,但是这样有时还会清掉通讯正常的数据,由于现场原因,故障这块一直没有时间处理,但是问题却一直存在,如鲠在喉。 管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
JUST DO IT
|