热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

碰焊机触摸屏软件开发

1软件需求人机界面为MCGS10寸触摸屏1062KW,接口为RS232RS484以太网,供电电源为24V。机触摸屏的功能为机器人的基本状态信息显示和对

1 软件需求

人机界面为MCGS 10寸触摸屏1062KW,接口为RS232/RS484/以太网,供电电源为24V。机触摸屏的功能为机器人的基本状态信息显示和对机器人的控制及参数给定。

目前设计的小车分成两栏共10格,需要将对应的触摸屏大致分成相应的10大格,会在工艺上规定每个格子只能放哪几类工件,然后在触屏上每个格子上给出相应的型号,下拉菜单或者缩略图等需要具体沟通,当来料小车停到位,工人在触屏上选好对应的工件,开启,触屏跟机器人控制柜通信,机器人控制柜控制碰焊机进行对应的碰焊作业。

采用RS232让触摸屏和贝加莱控制器通讯,通讯线缆距离大约为2米。控制信息包括:使能、启动、停止、急停、工件型号、槽位(1~10),数量,初始化(复位)。状态显示信息有机器人状态(就绪,使能,运行,暂停),故障信息,工序信息等。


2 通讯接口开发


2.1 硬件连接

触摸屏COM口RS485/RS232的通讯接口定义如下:


RS485 A+

RS485B-

RS232 RX

RS232 TX

GND

7

8

2

3

5

RS232需要将贝加莱控制器的RX连接触摸屏的3口,将控制器的TX连接至触摸屏2口,GND连接至触摸屏的5口。


2.2 通讯设备设置

RS232通讯设备采用通用串口父设备,子设备采用莫迪康ModbusRTU协议,添加以下设备窗口,如图2所示。

图2 添加通讯设备

       通用串口父设备的属性为:

串口端口号:RS232对应的是0-COM1,1-COM2对应的是RS485通讯

通讯波特率:11 - 57600bps

数据位:1 - 8位

停止位:0 - 1位

数据校验位:0 – 无校验

莫迪康ModbusRTU设备的属性需要设置设备的地址,将从站地址设为1,该地址需要与控制器下面的地址相对应。


2.3 通讯协议定义

(1)读取寄存器(功能码:03)

触摸屏请求指令格式为:


字节

0

1

2

3

4

5

6

7

含义

1

03

ADDRH

ADDRL

NUMH

NUML

CRCL

CRCH

地址

功能码

待读取参数首地址

指令数(参数个数1~125)

CRC校验

控制器响应指令格式为:


字节

0

1

2

3

4

5

6

含义

1

03

BYTECNT 

DATAH

DATAL

DATAH

DATAL

CRCL

CRCH

地址

功能码

响应字节数=

指令数*2

DATA1

DATA2

CRC校验

例:触摸屏请求读取地址为101的参数的值,控制器返回值为5

触摸屏请求:1 3 0 100 0 1 CRC

控制器响应:1  03  02  00  05 CRC

要读取的状态信息依次为:机器人状态,故障信息

(2)写乘法寄存器(功能码 16)

触摸屏向控制器连续写入多个字节,客户端发送数据格式为:


字节

0

1

2~3

4~5

6

7~8

……

含义

1

16

ADDR

NUM

BYTECNT 

DATA1

DATAn

CRCL

CRCH

地址

功能码

首地址参数

指令数

(1~100)

字节数

第1个数据

第n个数据

CRC校验

控制器响应返回数据格式为:


字节

0

1

2~3

4~5

6

7

含义

1

16

ADDR

NUM

CRCL

CRCH

地址

功能码

写入首地址

指令数

CRC校验

第1个槽位的地址为0020,共10个槽,依次写入每一个槽位放置的物料的类型

和数量

触摸屏发送:1 16 0 20 0 10 20 1 2 3 4 5 6 7 8 ……CRC

控制器返回:1  16  0  20  0 10 CRC

使能命令:

使能:地址为0001

启动:地址为0002

停止:地址为0003

急停:地址为0004

发送启动命令的数据为:
客户端请求: 1 16  0 2  0 1  2  0 1 CRC

服务器响应: 1 16   0 2   0 1  CRC

(3)CRC校验函数

cBuffer:计算CRC校验码的数组。

iBufLen:该数组的长度。

unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen)

{

    unsigned int i, j;                 //#define wPolynom 0xA001

    unsigned int wCrc = 0xffff;

    unsigned int wPolynom = 0xA001;

/*---------------------------------------------------------------------------------*/

    for (i = 0; i

    {

        wCrc ^= cBuffer[i];

        for (j = 0; j <8; j++)

        {

            if (wCrc &0x0001)

            {   wCrc = (wCrc >> 1) ^ wPolynom;  }

            else

            {  wCrc = wCrc >> 1;  }

         }

     }

return wCrc;

}


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
author-avatar
可爱鼠标1985
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有