1、西门子S7-200 PLC自由口通信学习摘要 本文以s7-200 PLC与智能电表通信为范例(电表波特率为1200bps,偶校验,8位数据位) 一、PLC自由口协议初始化 1、根据智能设备通信时使用的波特率、校验方式、起始位等参数配置PLC自由口,即将上述参数用MOVB指令写入SMB30,SMB30格式如下图所示: 初始化子程序如下: 二、声明中断 发送数据和接收完数据都能链接到中断程序,发送完中断与接收完中断的中断号分别为9和23,中断可在初始化子程序中声明 三、编写自由口要发送的报文子程序 严格按智能设备报文格式,将相应命令,将指令长度(字节)MOV到任意的字节单元,例如vb10。再用MO
2、V_B或MOV_W等指令传送到vb11开始后连续的字节中。 报文子程序 上图为读取电表标识编码为9010(即正向有功总电能)的指令 四、用 XMT指令发送报文 XMT指令需指定两个参数,第一个为要发送的报文的起始地址(本例为VB10),第二个为使用的通信口(本例为0口)。可以用定时器控制某一CPU内部触点来控制报文发送的周期。要注意的是,XMT指令必须用上升沿“ |P| ” 触发,否则CPU将会报错,CPU将认为有多个XMT/RCV指令同时执行,这是不允许的! 发送报文子程序 五、利用发送完中断启动接收数据指令 当报文用XMT发送完毕,会产生9号中断。我们可以利用中断子程序捕捉相应的中断,并在
3、中断程序中编写相应事件!在步骤1中已经声明了9号中断连接到中断子程序“发送完中断”。因为此我们在“发送完中断”中断子程序中使用RCV指令即可接收到由通信口返回的数据。即将数据送到VB100. “发送完中断”中断子程序 总结一下编程原则: 这里我们总结以下自由口编程的一般原则: 1. SM0.1 触发端口初始化,连接发送完成和接收完成中断(中断事件9 和23) 2. SM0.0 触发RCV 指令 3. XMT 指令用上升沿触发,并在指令运行前先保证端口 0 的停止接收 4. 根据将要接收信息的不同,合理设置SMB87SMB94 5. 必须满足发送结束条件(如字节个数,结束字符等)才能产生9号中断