综合资讯 技术文章 原文阅读 在线商城 下载专区 DATASHEET 技术论坛 商务频道

电子技术 | 技术资料 | 嵌入式系统 | 单片机专题 | DSP专题
EDA/PLD专题 | 电源技术专题 | 电子制作专题 | 其他综合 | 芯片选型

所在的位置:首页在线阅读其他综合PRO-FACE人机界面应用技巧正文
 
第3讲 轻轻松松学会串口通讯编程

Pro-face的GP2000系列(除GP2301,2501,2401H和2301H)触摸屏有一个扩展串行接口(COM2) ,这个扩展串口通过D脚本程序的编写可以方便的实现GP与一些特殊设备间的通讯(RS232) 。
   下面是一个扩展串口通讯的实例。这里我们进行通讯的设备是GP-2500S与CHK-8D型电池巡检仪(以下简称巡检仪)。
  1.通讯要求
   我们的目的是通过触摸屏读出巡检仪检测到的电池电压信息。
  2.通讯设置
   巡检仪有一个RS-485口,支持多种波特率。它的通讯格式为异步,一位起始码,八位数据位,一位停止位,无校验,半双工方式。首先,我们在GP的扩展SIO设置中选择和巡检仪的通讯设置一样的参数。设置方法如下:同时按住GP的任意三个角,进入OFFLINE状态,依次进入INITIALIZE,SETUP I/O,SETUP SIO,这里有GP的通讯设置,把它们设置成与巡检仪相应的格式即可。
  3.报文交换格式(代码各项均为1字节HEX码)
   上位机下发命令:
   EB 90 EB 90 巡检仪机号 上位机号 03 00 C1 00 00 90 EB
   巡检仪回复:
   EB 90 EB 90 上位机号 巡检仪机号 报文长度(L)报文长度(H) C2
   电池组电压(1)电池组电压(2)1#电池电压(1) 1#电池电压(2)
   2#电池电压(1)2#电池电压(2) …………N#电池电压(1)
   N#电池电压(2)代码和(L) 代码和(H) 90 EB
   巡检仪机号: 即机器的地址编号,在CHK-8D型巡检仪上设定,我们这里把它设为1号
   电池的节数N: 根据实际的电池节数,在CHK-8D型巡检仪上设定,我们这里设为103节
  4.D脚本语句说明
  4.1 接收功能
   下面的命令被用于读从扩展口接收到的数据
  格式 IO_READ([p:EXT_SIO], LS Storage Address, Transer Byte)
  例子 IO_READ([p:EXT_SIO],[w:LS0100], 10)
  [p:EXT_SIO]表示接收数据
  [w:LS0100]这是存放接收数据的起始地址,接收数据的大小存放在LS0100,接收的数据从LS0101开始存,10表示有10个字节存放在LS区(最大传送字节是6095)。
  4.2 发送功能
   下面的命令表示把要发送的数据写到扩展口
  格式 IO_WRITE_EX([p:EXT_SIO], LS Storage Address, Transer Byte)
  例子 IO_WRITE_EX([p:EXT_SIO], [w:LS0100], 10)
  [w:LS0100]是要发送的数据开始地址,10表示要发送10个数据。
  *注意:每一个传送的是字节,也就是说传送的是每一个字的低八位,同样接收的数据也是一样的。
  4.3 控制
   增加控制变量去清除发送和接收缓存器以及错误状态,这个变量的属性是只能写的。
  格式
   位 [c:EXT_SIO_CTRL**] **:00到15
   字 [c:EXT_SIO_CTRL]
  例如:控制字的内容
   位 [c:EXT_SIO_CTRL00]=1
   字 [c:EXT_SIO_CTRL]=0x0007
  当控制字的内容被确定以后,它的处理过程按照这样的次序来完成的,先清除错误状态,然后清除接收缓存,再清除发送缓存。
  


  
  4.4 状态
   增加[EXT_eSIO_ISTAT]作为状态变量,这个变量的属性是只读的。
  格式
   位 [s:EXT_SIO_STAT**] **:00到15
   字 [s:EXT_SIO_STAT]
  例如
   位 if([s:EXT_SIO_STAT00]==1)
   字 if(([s:EXT_SIO_STAT]&0x0000)<>0)
  字的内容描述如下
  


  
  
  4.5 接收数据的大小
   这个属性也是只读的。
  格式 [r:EXT_SIO_RECV]
  例如 if([r:EXT_SIO_RECV]>=10)
  5.通讯实现
  5.1 硬件连接
   由于巡检仪的通讯口是RS485,这里我们需要一个485/232的转换器。9针的COM2口的管脚定义如下:
  


  5.2 软件设计
  
   首先,新建一个PRO/PB工程,PLC类型选择Memory Link SIO type, 协议选择Extend SIO Script,如下图所示
  


  
  然后新建一个画面,放置一些键盘输入显示,地址设为收到的电池电压的地址。我们计算了总接受报文长度为221个字节,准备放置到7000到7220的地址中。GP发送报文总长度为13个字节,准备放置在6000到6012的地址中 。
   这些准备完成后,下面就可以开始D脚本编程了。如下所示:
   第一个程序:每30秒发送一次报文给巡检仪。
  


  第二个程序:初始化
  


  其中[s:EXT_SIO_STAT14]为扩展SIO状态字的第14位,当其值为1时表示扩展SIO协议准备好了。[c:EXT_SIO_CTRL]为扩展SIO控制字,它的00,01,02位为1时分别清发送缓存,接收缓存,错误信息。[b:020000]到[b:020004]为通讯步骤,当初始化完成触发[b:020001],执行下一步。
  第三个程序:发送准备
  


  这一步主要是把发送到巡检仪的报文储存到6000开始的13个连续地址中去。完成后[b:020001]清零,[b:020002]置1,执行下一步。
  第四个程序:发送子程序
  


  ldcopy(databuf0, [w:6000], 13)是把6000开始的13个地址中的数据放到databuf0这个串中。
  [s:EXT_SIO_STAT00]等于1表示发送缓存区为空。
  IO_WRITE_EX([p:EXT_SIO], databuf0, 13)为把databuf0的开始13个数据通过扩展口发送。
  第五个程序:接收子程序
  


  [s:EXT_SIO_STAT02]等于1表示接收数据准备完毕。
  [r:EXT_SIO_RECV ]为接收数据长度,为了保证完整接收巡检仪传过来的报文,我们首先判断接收数据的长度是否大于221。
  IO READ ( [p:EXT_SIO ], databuf1, 221)表示接收221个字节的数据放到databuf1中。
  _dlcopy ([w:7000], databuf1, 0, 221)是将databuf1中0位开始的221个字节数据存放到[w:7000]开始的地址中去。
  第六个程序:主程序
  


  [b:020002]等于1时开始发送报文,发送完毕[b:020003]置1开始接收数据。接收完判断数据是否正确,正确的话[b:020004]置1,一次通讯完成。不正确的话[b:020003]重新置1,再收。
   这样一个扩展串口通讯程序就完成了,此后再对接收的数据进行一些处理,即可得到我们所需的数据了。这是扩展口通讯的一个实际应用,大家可以参照此中的参数设置和思路,编写自己的扩展口通讯程序。
  
  









返回 上一页 下一页   信息发布:工号06   转引自: 【 】 【打印】 【关闭

关于我们 ┋ 友情链接


深圳市福田区海滨广场福业大厦12C
电话:0755-88305880 25960580 传真:0755-88305880
Copyright©2005-2007 无忧电子开发网版权所有

粤ICP备05064233号