西门子海南PLC模块总代理
西门子S7-200的自由口通信需要通过编程设置串口的工作模式,安排发送和接受指令的触发顺序,还要设定接收的起始和结束条件。对于刚刚开始使用s7-200的工程师来说,的确有很多细微处易犯错误。一般碰到客户抱怨通信不上的问题,就要逐一帮客户确认编程配置是否正确。虽然麻烦,不过逐条查下去,总能查到错误所在并解决问题。但是有一次客户遇到的问题颇出人意料,还真耗费了一些时间。
客户反应在编写了自由口通信程序之后,PLC可以发送数据给通信伙伴,但是却收不到任何伙伴方发出的数据。能发送数据给对方,说明通信端口设置没有问题。极有可能是端口被其他通信指令占用导致无法进入接收状态。比如说用常开点调用XMT,或者没有对接收的故障状态进行判断并终止接收,从而导致后续的XMT和RCV都无法被正确执行。客户表示他的程序并不存在这种情况。但是为了测试问题所在,客户下载了一个仅包含条件触发RCV的程序下去,还是接收不到数据。监控程序RCV指令已被正常执行。
那么是不是接收的起始条件设置不当?客户使用的是起始字符,这并无不妥。并且改成空闲线检测之后,问题依然存在。难道是对方发送的信号有问题?用串口调试软件来测试,是可以接收到的。眼见这几个常见错误都没能cover住这个问题,我只好从头一步步地跟客户确认。但是还是没能发现任何破绽。郁闷之下,只好让客户把程序发过来看看。
次检查程序的时候还真没注意到问题出在哪里。等到看出来了才觉得啼笑皆非:
不知道大家看出来没有?客户在设定完空闲线时间SMW90和消息定时器溢出值SMW92后,惯性地将接受地大字符数SMB94也写成了传送字SMW94。而西门子PLC的高低字节是逆序的,也就是说SMB94为高有效字节,SMB95为低有效字节。见手册中的如下说明:
结果就是大字符数100被传给了SMB95,SMB95是神马呢?神马也不是,总之与接收条件无关。而真正大字符数存储字节SMB94被赋值为0
库存储区分配
在完成前面两个指令调用后,还要为库指令使用的符号分配内存。当库指令被插入到主程序块中,在导航树“程序块”下会出现一个“库”节点。在“库”节点上点击鼠标右键,在弹出菜单中选择“库存储区”,进入“库存储区分配”对话框。
在地址框中输入分配内存的开始地址,或者通过点击“建议地址”按钮自动分配内存。注意,分配的内存不要与已使用的内存重叠。
紫金桥软件组态完成PLC编程和配制后,还要对紫金桥软件进行配制,这样才能获取、处理、查测、存储和显示相应的数据。组态过程分为两个步骤:(1)设备组态,即建立一个与PLC相对应的逻辑设备;(2)点组态,即建立过程数据库点的过程参量与PLC中变量的对应关系,从而利用点的自身功能进行处理、检测和存储。当然要将过程数据在计算机上展现给用户,还要进行交互界面(窗口)组态。但这一过程对所有应用是相同这,这里就不介绍了。
设备组态设备组态就根据PLC使用的通讯协议及在网上的节点地址、端口属性等对通讯参数进行定义的过程。
进入紫金桥开发环境,将导航树切换到“数据库”,在导航树上选择“设备驱动/MODBUS/
MODBUS(ASCII&RTU串口通讯)”,单击鼠标右键,在单出菜单中选择“增加设备驱动”会弹出发下所示对话框:
在对话框中输入设备名称、设备地址(与PLC中MBUS_INIT初始化的Addr参数一致),选择串口号,并且设置(点击“设置”按钮)端口属性,使用它与PLC中MBUS_INIT命令设置的属性一致。点击“下一步”:
在Modbus设备定义对话框中将协议类型选择为“RTU”,存贮器类型选择“32位”(即长整和浮点型4字节的数据的传送格式为高位在前,低位在后)。单击“完成”按钮,则设备组态完成。
点组态及I/O连接完成了点组态还要进行点组态I/O连接,这样才能将PLC中的变量映射到紫金桥软件中。
进入紫金桥开发环境,将导航树切换到“数据库”,在导航树上双击“点组态”,进入点组窗口:
选择点类型,建点,设置常规参数是点组态的基本操作,对所有应用是相同的,这里就不详细说明了。下面重点介绍一下I/O连接及与变量对应关系。
这里以模拟I/O点的I/O连接为例。新建一个模拟I/O点后,输入点名,切换到“数据连接”属性页:
从该属性的设备列表框中选择在上一步骤中建立的设备(如:MOD),点击“增加连接项”按钮,进入“Modbus组点对话框”:
这里的“内存区”、“偏置”和“数据格式”是与PLC中部分内存类型和地址相对应的。对于在Modbus协议中不能对应的PLC内存类型,如果需要上传到过程数据库中,可以先它们先移动到V内存区,再通过V内存区读取。S7-200内存区与紫金桥I/O连接对应关系如下所示:
S7-200地址 | 紫金桥软件I/O连接 | |
内存区 | 偏置 | |
Q0.0 | DO离散输出量 | 0 |
Q0.1 | 1 | |
Q0.2 | 2 | |
……(Qm.n) | ……(m*8+n) | |
Q15.6 | 126 | |
Q15.7 | 127 | |
I0.0 | DI离散输入量 | |
I0.1 | ||
I0.2 | ||
……(Im.n) | ||
I15.6 | ||
I15.7 | ||
AIW0 | AR输入寄存器 | |
AIW2 | ||
AIW4 | ||
……(AIW2n) | ……(n) | |
AIW62 | 31 | |
Hold Start(如:VB0) | 0 | |
Hold Start+2(如:VB2) | 1 | |
Hold Start+4(如:VB4) | 2 | |
…… | …… | |
Hold Start+(HoldMax-1)*2 | HoldMax-1 |
在完成存贮区和地址组态,还要注意一点就是数据类型一致性,只有类型一致才能从PLC上获得正确数据。我们可以从“数据格式”中选择格式。对于字寄存器我们也可以将它拆分为位,从而获得某个位的状态。
注:对新组态的数据库点只有重新启动后才会生效。
以上是对通过Modbus协议在紫金桥软件中获取S7-200 PLC数据的使用方法的简单介绍
详细介绍vb与三菱plc通讯的方法, 以及vb与三菱plc通信。
在工业生产中,人们常常面临着数据采集与管理。作为工厂自动化的三大支柱可编程控制器 PLC(Programmable Logic Controller),由于其安全可靠,广泛的用于数据采集与控制。生产过程中,要监视PLC内部的数据与运行状况,选用市场上的人机界面或组态软件,虽然功能丰富,但大都价格昂贵,在一些中小规模的生产场合,人们希望能自己用语言开发一个简易实用的通信程序。使用Visual Basic 6.0,开发串行通信程序时,有两种方法,一种是用bbbbbbs API函数,另一种是用VB支持的通信控件 MSCOMM。以下介绍使用通信控件方式实现通讯
1.硬件
采用SC-09编程电缆,连接PC串口与PLC编程口实现通讯。
2.PLC编程口的通信协议简介
通信格式:
波特率9600,偶校验,8位数据位,一位停止位。 具体请参考有关资料,以下举例说明其通讯格式
1)、DEVICE READ(读出软设备状态值)
计算机向PLC发送:
3.vb与三菱plc通讯具体程序说明
MSComm控件简介用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的通信工具。Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误