最近在做研华工控机控制输出IO,因为工控机的IO板卡比较贵,而且后面必须接继电器,这样会造成我们机器的电控柜比较大,电路走线非常困难,在这个原因的困扰下,我提出自己做一块IO驱动板的需求,最后在我们硬件工程师的努力下,总算完成IO驱动板的设计任务,并且他们写了板子的程序,同时他们也测试过稳定性及功能。

因为要在工地测试我们机器,一直没有时间写CAN控制IO驱动的程序,最近在以前开发CANopen的基础上,编写CAN2.OB的通信程序。首先,我们有两个需求:(1)要能通过CAN分析仪进行控制IO输入输出。(2)能够通过研华CAN口控制IO输入输出。我们的工控机因为一开始设计程序的人用Window系统,人机界面是通过C#的Winform写的,同时跟硬件相关的制作成dll库进行调用,所以我们只能在已有的基础进行开发,通过读取研华工控机的说明书,他们的硬件支持can2.0b:

在了解到硬件支持扩展2.0b,接下来就是看看他们的数据接收和发送接口是否有,或者怎样知道发送是扩展帧还是标准帧,又查找他们的说明书,最后也发现,他们的里面有写:

确定了支持发送和接收API后,就是要跟PCB板进行通信,我们要看IO驱动板的协议是自己定的,所以我们贴出我们的协议(同事陈麟制定):

1.1 报文支持

本文介绍的协议,是基于CAN2.0B(29位ID的拓展格式帧)实现的高层协议。虽然CAN2.0B协议支持数据、远程、错误和溢出帧,但此高层协议只使用数据帧。

1.2 CAN2.0B报文格式

表1-1 CAN2.0B报文格式

CAN2.0B报文使用29位(bit)帧ID(11Bit SID + 18Bit EID),下文直接合并为29Bit ID域。DLC域指示数据段有多少个字节。本高层协议只使用了CAN2.0B的数据帧,所以该报文的其他域本文不再详细明。

1.3 高层协议报文格式

图1-1 高层协议说明

本协议的帧格式由6大部分组成:

  1. 优先权:控制该报文在CAN总线上的传输优先级,值越小,优先级越高;
  2. 功能码:指示该报文的功能;
  3. 目的地址:接收该报文的模块地址;
  4. 源地址:发送该报文的地址;
  5. 可选数据载荷:个别报文(功能码)会携带一些控制数据。

2.1 特别约定

从can通信特点来说,在can总线上的设备都有同等的通信地位。但在本协议约定的拓扑架构中,从通信地位上划分都有上位机和下位机之分,本协议只适用于具有上位机和下位机的拓扑架构模型,其模型图如下:

图2-1 设备拓扑

2.2 设备地址约定

本协议使用8位地址,最大支持256个设备。为了统一管理,对地址作以下约定:

表2-1 地址使用范围

地址区间

使用方式描述

255

广播地址

254

主机地址

0~253

从机地址

2.3 重启从机

表2-2 复位命令请求(主机发、从机收)

功能码

0x01

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

2.4 读取输入IO电平

表2-2 读取输入IO电平命令请求(主机发、从机收)

功能码

0x02

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

表2-3 读取输入IO电平明令回应(从机发、主机收)

功能码

0x03

源地址

从机地址

目的地址

254

数据域

2个字节,Bit0 ~ Bit15分别对应一个通道的电平,如Bit0的值为1代表通道0为高电平,值为0代表通道0为低电平。

2.5 设置输出IO电平

表2-4 设置输出IO电平命令(主机发、从机收)

功能码

0x04

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

Byte0~Byte1为控制值,Byte2~Byte3为通道掩码,详细见下文

数据域又细分为两个域:

  1. 控制值,16位,每一位分别指示每一个输出IO的电平,值为1代表高电平,值为0代表低电平。
  2. 通道掩码,16位。每一位分别对应一个IO通道,该位值位1代表控制值对应位的值有效,值为0代表控制器对应位的值无效。

举例,要设置通道0和通道3为高电平:

控制值为:0x0009(00000000 00001001),除了位0和位3,其他位的值随意

通道掩码为:0x0009(00000000 00001001)。

2.6 读取输出IO电平

表2-5 读取输出IO电平命令请求(主机发、从机收)

功能码

0x05

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

表2-6 读取输出IO电平命令回应(从机发、主机收)

功能码

0x06

源地址

从机地址

目的地址

254

数据域

2个字节,Bit0 ~ Bit15分别对应一个通道的电平,如Bit0的值为1代表通道0为高电平,值为0代表通道0为低电平。

2.7 设置电机状态

表2-7 设置电机正/反转命令(主机发、从机收)

功能码

0x07

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

Byte0~Byte1为控制值,Byte2为通道掩码,详细见下文

1)控制值

表2-8 控制值说明(功能码0x07)

[0 : 1]

通道0控制值:0,待机,输出都为高阻;1,反转;2,正转;3,停止,输出都为低电平。

[2 : 3]

通道1控制值,同上

[4 : 5]

通道2控制值,同上

[6 : 7]

通道3控制值,同上

[8 : 9]

通道4控制值,同上

[10 : 11]

通道5控制值,同上

[12 : 13]

通道6控制值,同上

[14 : 15]

通道7控制值,同上

  1. 通道掩码

共8位(1Byte),每一位的值代表控制值里对应的通道控制值是否有效:1有效,0无效。

举例,控制电机0反转,电机3正转:

  1. 控制值:0x0042 (01 00 00 10), 除了[0:1]和[6:7],其他位的值随意。
  2. 通道掩码:0x09 (0000 1001), 位0和位3为1,其余为0。

2.8 读取电机状态

表2-9 读取电机状态命令请求(主机发、从机收)

功能码

0x08

源地址

254

目的地址

0xFF(全部设备),其他(指定的设备地址),254无效

数据域

表2-10 读取电机状态命令回应(从机发、主机收)

功能码

0x09

源地址

从机地址

目的地址

254

数据域

2个字节,解析请参考表2-8

2.9 自动上报输入IO状态

如果输入IO的电平有变动,从机会主动将以下报文发送到主机,主动上报IO的电平。

表2-11 输入IO电平变动通知报文(从机发、主机收)

功能码

0x0A

源地址

从机地址

目的地址

254

数据域

Byte0~Byte1为通道值,Byte2~Byte3为通道掩码,详细见下文

  1. 通道值:16位,每一位分别指示对应通道的电平值:1为高电平,0为低电平。
  2. 通道掩码:16位,每一位的值指示对应通道的电平是否发生变动:1,为发生变动, 0无变动。

最终调试结果就是我们通过上位机,可以控制我们工控机进行输入输出控制和读取数据。

研华工控机通过CAN2.0B控制自己制作的PCB电路板相关推荐

  1. 研华电脑510上电自启_研华工控机BIOS设置通电自启动方法技巧

    目前研华工控机的BIOS设置主要有Award.AMI.Phoenix-AwardBIOS和Phoenix等,而研华工控机使用的是Phoenix-AwardBIOS. BIOS设置的主界面: 电源开机后 ...

  2. 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:研华工控机接上电源后5vsb那颗灯闪烁是怎么回事,我这里回答:第一次看到这么有内涵的东西 参考回答:太好了 非常喜欢 感谢 辛苦了话 ...

  3. 研华电脑510上电自启_研华工控机怎么设置u盘启动_研华工控机U盘引导方法

    描述 本文主要介绍的是研华工控机,首先介绍了研华工控机怎么设置u盘启动,其次阐述了研华工控机U盘引导方法,具体的步骤教程跟随小编一起来了解一下. 研华工控机怎么设置u盘启动 研华IPC-610 工控机 ...

  4. 研祥计算机U盘启动,研华工控机怎么设置u盘启动_研华工控机U盘引导方法

    本文主要介绍的是研华工控机,首先介绍了研华工控机怎么设置u盘启动,其次阐述了研华工控机U盘引导方法,具体的步骤教程跟随小编一起来了解一下. 研华工控机怎么设置u盘启动 研华IPC-610 工控机安装的 ...

  5. 研华工控机linux改win7,嵌入式工控机研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5...

    研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5 在上一篇文章中,小编为您详细介绍了关于<有一个研祥工控机 旧的 想拆里面的视频采集 ...

  6. 研华工控机610L断电开机自启动

    @TOC研华工控机 断电开机自启动 研华工控机610L断电开机自启动 说明:此文章只针对研华工控机610L系列,并且BIOS的日期为2021年以后的版本 主要原因 在工程里,一般我们用的工控机都是一天 ...

  7. contec计算机主板说明书,PCA-6007 Rev.A1 PCA-6007LV Rev.A1 研华工控机主板

    Advantech PCA-6007LV REV.A1 Full-Size Industrial CPU Board ,Advantech PCA-6007LV REV.A2 P4 Full-Size ...

  8. 鸣志驱动器与研华工控机RS485/422 com串口接线方法

    鸣志驱动器与研华工控机RS485/422 com串口接线方法

  9. 研华 工控机 IBOX101 ubuntu-16.04 华为模块 4G Sim卡 上网

    ubuntu-16.04 华为模块 4G Sim卡 上网 研华 工控机 IBOX101 参考资料: https://blog.csdn.net/wowocpp/article/details/9008 ...

最新文章

  1. Const 重载解析
  2. Android studio Day01-23
  3. Maven 模块继承、聚合
  4. 7.20套娃(tao)
  5. 几个.net开发中常用的工具下载
  6. er图转为数据流程图_「数据架构」实体关系模型介绍
  7. C C++面试常问简答题(2)
  8. Shell-杀死指定进程
  9. WINXP内PING一个IP地址时电脑会发出很响的一声“滴”声
  10. windows 如何快速锁定计算机,Win7电脑锁定计算机快捷键的方法
  11. Correct way to wait for VBLANK on windows 10 in windowed mode
  12. python菜单怎么做_Python 城市菜单详解(超详解)
  13. 打破硬件内卷:荣耀开启高端旗舰手机智慧新赛道
  14. 基于单片机住宅家庭防盗报警系统设计-毕设课设资料
  15. Android 蓝牙手柄连接流程解析和自动化方案
  16. java applet 打印_applet 打印常见问题与解决方法
  17. 笔记 黑马程序员C++教程从0到1入门编程——基础语法入门
  18. python基础教程django 获取字段最大值,最新的记录操作
  19. 华为出品,必属精品!华为资深专家十年‘成神之作’网络协议宝典
  20. C#零基础入门03:打老鼠初级

热门文章

  1. jQuery图标数字滚动计数代码
  2. 无声的功勋之数据库管家KMonitor
  3. 树莓派入门(八)—— 汉化Raspbian操作系统
  4. php日历怎么存价格数据库,日历价格表?
  5. android 文件管理器 apk,华为手机文件管理器(com.huawei.hidisk) - 10.11.11.301 - 应用 - 酷安...
  6. android phone恢复出厂设置,Android手机正确恢复出厂设置方法
  7. 让监管者了解区块链是头等大事
  8. CodeForces - 1324D Pair of Topics(思维+二分)
  9. 容器技术之ChrootDocker
  10. linux 4.9内核,Linux Kernel 4.9 正式发布