基于自由通信协议的通信编程 点击:1553 | 回复:5



赵青野

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:13帖 | 256回
  • 年度积分:0
  • 历史总积分:354
  • 注册:2001年10月09日
发表于:2004-11-23 14:47:00
楼主
最近帮一个客户写了个程序,是关于自由通信口的协议的.看这里好象很多朋友对自由通信协议的编程有兴趣.这里以此为例,介绍一下自由通信协议的通信编程. 一,应用目的:实现PLC和自由通信协议设备之间的通信 二,PLC:思博PCD1系列PLC 三,自由通信协议设备:MD204L显示屏



赵青野

  • 精华:3帖
  • 求助:0帖
  • 帖子:13帖 | 256回
  • 年度积分:0
  • 历史总积分:354
  • 注册:2001年10月09日
发表于:2004-11-23 14:50:00
1楼
四:MD204L显示屏自由通信协议介绍 控制器与显示器相连接的一个简单的通信协议,控制器是主控端, 显示器是从属端,在控制器中,只需编写简单的通信读/写程序,而不用编写通信中断服务程序。 首先,控制器发送一个请求给显示器,显示器接受请求之后,给控制器回复一个响应。 显示器和控制器交换数据为128(最大)字,为MW0~MW127,字的每个比特可以作为线圈使用,为MWx.i(x=0..127,i=0..15)。 请求的格式: 站号 命令 地址 长度 [数据] 校验 站号:显示器站号(0~255,0表示广播方式,显示器不需要回复) 命令:‘R’表示从显示器读取,‘W’表示向显示器写数据 地址:MW(0~127)的索引号 长度:需要读/写MW的个数(1~128) 数据:MW的值,如果命令是‘R’则没数据 校验:从站号到校验前的字节,所有字节相加,再取0x100的余数 (注意:如果校验是0x5A,则忽略,不作检查) 响应的格式: 站号 状态 [地址 长度 数据] 校验 状态:通信的状态 :0 – 正常 :1 – 地址错误 :2 – 长度错误 :3 – 范围错误(地址 + 长度 > 128 ) :4 – 命令错误 当命令是‘W’或不正常时,则没有地址、长度和数据 数据的格式 MWi(高) MWi(低) MWi+1(高) MWi+1(低) … MWi+n-1(高) MWi+n-1(低) 地址是 i , 长度是 n 。 协议: 首先,控制器发送一个请求给显示器。 显示器收到请求后,检查校验,如果校验正确,且站号等于显示器本身站号,显示器就响应这个请求。否则,显示器将不作响应。 控制器需要检查显示器的响应是否超时,超时时间为50毫秒。如果超时,控制器应该重新发送请求。 显示器检查接收数据是否超时,超时时间为25毫秒。如果超时,显示器初始化通信,等待控制器的新的请求。 读(从显示器读数据) 控制器 站号 ‘R’ 地址 长度 校验 显示器 站号 状态 地址 长度 数据 校验 数据:需要读的MW的值 写(向显示器写数据) 站号 ‘W’ 地址 长度 数据 校验 显示器 站号 状态 校验 状态:0 – OK ----------------------------- 例子 a) 控制器从MD204L读 MW0,MW1 控制器发送: 01H 52H 00H 02H 55H MD204L回应: 01H 00H 00H 02H 00H 00H 00H 0CH 0FH (MW0=0 MW1=12) b) 控制器写 256 到 MW0 控制器发送: 01H 57H 00H 01H 01H 00H 5AH MD204L回应:01H 00H 01H

赵青野

  • 精华:3帖
  • 求助:0帖
  • 帖子:13帖 | 256回
  • 年度积分:0
  • 历史总积分:354
  • 注册:2001年10月09日
发表于:2004-11-23 15:11:00
2楼
五,PLC程序 这里只以PLC向显示屏写数据为例: ;;初始化串口 TEXT INI_COM "UART:9600,8,E,1;MODE:MC4;" "DIAG:",FDIAG.T,",",RDIAG.T,";" ;;定义串口和显示屏一样:9600波特率,8个数据位,偶校验,1个停止位,RS485方式 $INIT SASI 1 INI_COMM $ENDINIT ;;主程序---- cob 0 0  db wr_r_buf [45] 01H, 57H, 5AH,14H ;;定义向显示屏发送的命令行数据串 cpb 3 ;;调用写数据子程序 ecob ;;主程序完成 ;;通信子程序 pb3------------- PB 3 ;将寄存器R80---R99的数据写到显示器MW90---MW109 SEI 0         LD COUNT       4         LOOP0: GETX R 80       REG_TMP1     COPY REG_TMP1     REG_TMP2      ACC L         SHIR REG_TMP1      8         TFR REG_TMP1      WR_R_BUF COUNT       INC COUNT       LD REG_TMP1      0FFH        AND REG_TMP2      REG_TMP1      REG_TMP2      TFR REG_TMP2      WR_R_BUF COUNT        INC COUNT        INI K 19        JR H LOOP0 ;;从 LOOP开始的程序把R 80---R 109的数据放在发送命令区域WR_R_BUF LD COUNT 0 LD REG_TMP2 0 LOOP1: TFR WR_R_BUF ; COUNT REG_TMP1 INC COUNT ADD REG_TMP1 REG_TMP2 REG_TMP2 CMP COUNT 44 JR N LOOP1 DIV REG_TMP2 100H REG_TMP1 SD_R ;;计算校验 TFR SD_R WR_R_BUF ; COUNT ;;从LOOP1开始的程序把校验结果放在命令行最后一位 LD COUNT K 0 LOOP2: TFR WR_R_BUF ; COUNT SD_R STH F TFUL JR H -1 STXD 1 SD_R INC COUNT CMP COUNT 25 JR N LOOP2 ;;从LOOP3开始的程序发送写数据命令 LD COUNT K 0       LOOP3:   ACC H LD CNT 100      STL F RBSY JR H LP SRXD 1 SD_R TFR SD_R RESPOND COUNT ;;读返回数据 INC COUNT CMP COUNT 3       JR N LOOP3 END: NOP EPB ;;结束程序

赵青野

  • 精华:3帖
  • 求助:0帖
  • 帖子:13帖 | 256回
  • 年度积分:0
  • 历史总积分:354
  • 注册:2001年10月09日
发表于:2004-11-23 15:32:00
3楼
目前有很多设备使用的都是自由通信协议,如果没有标准的协议,PLC与其通信都只有通过程序完成. 思博PCD系列PLC的通信功能强大,仅小型PLC系列就具有最多6个通信口,可支持不同的通信协议. 目前已经写过并应用的自由通信口协议有: 多普勒超声波流量仪 友讯达无线电台 爱普生微型打印机 EVIEW字符显示屏 松下PLC 康沃变频器 成都某高频电源

济南徐工

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 3回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年6月01日
发表于:2007-06-22 17:05:00
4楼
写得相当精彩

徐tongchao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2010年8月07日
发表于:2010-08-20 15:11:37
5楼

不错,不错

 


热门招聘
相关主题

官方公众号

智造工程师