电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • 扫码下载手机洽洽

    随时找料

    即刻洽谈

    点击下载PC版
  • 华强电子网公众号

    电子元器件

    采购信息平台

  • 华强电子网移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

利用Spcomm控件实现Siemens PLC与微机的通讯

来源:-- 作者:-- 浏览:667

标签:

摘要: 1 前言   s7-226是西门子公司生产的具有很高性能价格比的微型可编程序控制器,它有多种通讯协议,如ppi协议,mpi协议,profibus协议和用户自定义协议(自由口)。本课题就是利用siemens plc226的自由口通信协议(自定义通信协议),用delphi(使用spcomm控件)开发的上位机与plc间的通信。   2 siemens plc的自由口通信协议   目前,随着plc的快速发

  1 前言

  s7-226是西门子公司生产的具有很高性能价格比的微型可编程序控制器,它有多种通讯协议,如ppi协议,mpi协议,profibus协议和用户自定义协议(自由口)。本课题就是利用siemens plc226的自由口通信协议(自定义通信协议),用delphi(使用spcomm控件)开发的上位机与plc间的通信。

  2 siemens plc的自由口通信协议

  目前,随着plc的快速发展,越来越多的plc生产厂商开发了它与计算机的通信功能(主要是利用计算机串口进行通信),本文是以s7-226 plc为例,作详细阐述,本文的通信协议采用的是自由口通信协议,自由口通讯协议是用户可以通过程序来控制s7 200 cpu通讯口的操作模式,利用自由口通讯模式,可以实现用户自定义的通讯协议连接多种智能设备。通过使用接收中断、发送中断、发送指令和接受指令用户程序控制通讯口的操作,在自由通讯模式下,通讯协议完全有用户控制。

  smb30(用于端口0)和smb31(用于端口1)用于选择波特率和奇偶校验。当cpu处于stop模式,自由端口被禁止。只有的cpu处于run模式 时,才能进行自由端口通讯。

  3 plc的中断处理

  要使用plc的通讯功能,必须要对中断有所了解,因为一般的通讯程序都使用中断程序来完成。中断连接指令(atch)用于把一个中断事件和一个中断程序联 系起来,并允许这个事件。部分中断事件如表1所示。

  从表1可以看出,通讯事件是处于最高优先级别的,也就是说当又中断事件来时,cpu最先处理通讯事件。

  4 程序说明

  4.1 主程序说明

  ld sm0.1

  movb 16#09, smb30 ; 首次扫描时,初始化自由口,选择 9600波特率,选择8位数据,无校验位

  movb 16#b0, smb87 ; rcv允许,检测信息结束字符,检 测空闲信息条件

  movb 16#0a, smb89 ; 设定信息结束信息为16进制值0a(回车)

  movw +5, smw90 ; 设置空闲线超时时间为5s

movb 100, smb94 ; 设定最大字符数为100

  atch int_3, 23 ; 接收完成连接到中断3

  atch int_4, 9 ; 发送完成连接到中断4

  eni ; 允许用户中断

  rcv vb100, 0 ; 端口0的接收信箱缓冲区指向vb100

  4.2 接收和处理信号的plc程序(int_0)。

  network 1 input ; 用于存放串口的输入值

  ld sm0.0

  dtch 10

  xmt vb100, 0

  movb vb101, #input

  network 2 ; 如果input的值大于100,q0.0输出

  ldb> #input, 100

  = q0.0

  network 3 ; 如果input的值小于100大于50,q0.1输出

  ldb<= #input, 100

  ab> #input, 50

  = q0.1

  network 4 ; 如果input的值小于50大于0,q0.2输出

  ldb<= #input, 50

  ab> #input, 0

  = q0.2

  network 5 ; 中断返回

  ld sm0.0

  creti

5 用spcomm组件编写串行通信程序

  5.1 spcomm组件通讯设置如表2所示。

  5.2 通讯协议说明

  其中指令1到指令4可以用于控制cpu的特殊寄存器的值(由于篇幅限制,读者可以阅读相关特殊寄存器书籍),本文实验只用到了指令1,通过 指令1的值就可以控制i0.0,i0.1,i0.2三个输出端(可以根据需要进行任意控制和修改)。

  5.3 上位机程序说明

  (1) 发送内容定义如下

  sbuf[1]:=byte(strtoint(edit1。text)); file://我们正是通过一个编辑框来实现对i0.0,i0.1,i0.2三个输出端的控制

  sbuf[2]:=byte($01); file://命令号

  sbuf[3]:=byte($ff);

  sbuf[4]:=byte($ff);

  sbuf[5]:=byte($01);

  sbuf[6]:=byte($0a); file://帧尾

  senddata;//调用发送函数

  (2) senddata函数说明

  procedure senddata;

  var

  i:integer;

  commflg:boolean;

  begin

  viewstring:=``;

  commflg:=true;

  for i:=1 to 6 do

  begin

  if not form1、comm1、writecommdata(@sbuf[i],1) then

  file://注意,根据上面的协议说明,每次向plc发送数据时这里只改变了sbuf[1] 的值,可以根据需要改变任何数组的值

  begin

  commflg:=false;

  break;

  end;

  sleep(2); file://发送时字节间的延时

  viewstring:=viewstring+inttohex(sbuf[i],2)+` `;

  end;

  viewstring:=`发送`+viewstring;

  form1。memo1。lines.add(viewstring);

  form1。memo1。lines.add(``);

  if not commflg then messagedlg(`发送失败 !` ,mterror,[mbyes],0);

  end;

  6 结束语

  按照类似的方法,选择不同的地址和单元区,可以编写出其它命令的控制指令,以上的程序已在我所在的武汉大学建模与控制实验室得到验证。

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67