一种即插即用的工业网络扩展方法
技术领域
本发明涉及网络系统技术领域,具体地说是一种即插即用的工业网络扩展方法。
背景技术
一般工控系统由PC应用程序、运动控制卡、执行机构和IO板组成。PC应用程序负责人机界面交互、路径规划、指令的发送、状态的监控和显示等工作;运动控制卡通常基于PCI总线,用以实现多个步进/伺服电机的协调控制;执行机构为电机和机床等,最终执行运动控制卡的指令,完成用户规划好的一系列动作和走出相应的路径;IO板通常专门用于数字输入、数字输出、D/A输出、PWM输出等。
IO板通常为独立的板卡,由运动控制卡控制或者PC直接控制,接口一般为RS232或者RS485总线,但是会存在以下不足:1.通信速度不够快,效率较低。以高性能的ARM芯片STM32F407为例,其USART的通信速率在8倍过采样时最高仅达到10.5Mbit/s,在16倍过采样时,最高只有5.25Mbit/s。且速率较高时,传输距离变短,抗干扰能力变弱。2.不方便扩展。当一个IO板的输入输出口数量不能满足需要时,需要重新设计一块拥有更多输入输出口的板子来代替原来的IO板,不能通过增加IO板的数量的方式扩展IO。3.RS232/485占用PCB面积较大,浪费资源,且和电脑连接时可能需要电平转换器件,例如USB转RS232。
发明内容
本发明为克服现有技术的不足,提供一种即插即用的工业网络扩展方法。硬件上采用以太网网口代替RS232或者RS485总线,以UDP广播的方式通信,扩展IO时,只需要通过以太网再增加一块或者若干块IO板即可。
为实现上述目的,设计一种即插即用的工业网络扩展方法,包括PC模块、运动控制卡、IO板、执行机构,其特征在于:PC模块采用数据线双向连接运动控制卡,运动控制卡采用数据线双向连接执行机构;PC模块采用网线连接交换机或者路由器;所述的交换机或者路由器通过若干端口采用网线分别连接若干IO板,IO板采用数据线双向连接执行机构。
所述的PC模块的工作流程分为扫描配置IO板流程及正常使用IO板流程;所述的PC模块为UDP服务器或者UDP服务端和UDP客户端。
所述的PC模块扫描配置IO板流程如下,
(1)当PC模块为UDP服务器时,初始化UDP服务器,UDP服务器进行监听端口;
(2)UDP服务器扫描200ms,记录扫描到的所有的ID号;
(3)判断扫描到的IO板的数量和实际连接的数量是否相等,是则将所有的ID号进行编号并保存,便于之后使用时读取,否则检查硬件连接或者UDP服务器重新扫描;
(4)UDP服务器将所有的ID号进行编号并保存,便于之后使用时读取,此时,输入输出口的逻辑编号从序号小的IO板开始依次增大;
(5)UDP服务器扫描配置IO板结束。
所述的PC模块正常使用IO板流程如下,
(1)当PC模块为UDP服务端和客户端时,初始化UDP服务端和客户端,PC一直作为服务端监听端口接收数据,发送数据时PC作为UDP客户端;
(2)PC模块检查文件保存的ID号,并判断文件保存的ID号是否全部被扫描到,是则PC模块作为客户端发送指令,查询IO板的系统信息,设置IO板上发的时间间隔,设置断开网络时的输出状态,否则报警,报警解除后重新判断文件保存的ID号是否全部被扫描到;
(3)PC模块作为客户端发送指令,查询IO板的系统信息,设置IO板上发的时间间隔,设置断开网络时的输出状态;
(4)UDP服务端检查接收是否超时,是则报警,报警解除后重新判断文件保存的ID号是否全部被扫描到,否则检查是否接收到数据;
(5)UDP服务端检查是否接收到数据,是则处理接收到的数据,将IO板的x的输入y转换成逻辑编号I(x*n+y),否则将逻辑输出编号Oz转换成某一IO板的实际编号;
(6)UDP服务端处理接收到的数据,将IO板的x的输入y转换成逻辑编号I(x*n+y),当前输出口的状态转换规则和输入相同,并发送消息给状态处理线程;
(7)状态处理线程接收消息;
(8)当状态处理线程要求设置Oz的状态时,将逻辑输出编号Oz转换成某一IO板的实际编号,IO板的ID(K)=ID(Z/m),IO板的输出为O(z%m);(9)UDP服务端和客户端发送设置IO状态指令,该指令为广播发送,目标地址255.255.255.255;
(10)UDP服务端继续检查接收是否超时,继续工作。
所述的IO板的工作流程如下,
(1)IO板中的GPIO、Systick、参数、网络PHY及协议栈初始化,Systick每1ms中断一次同时SystickCnt加1,上发时间间隔未被上位机设置时,默认g_upload_time=5ms,同时从FLASH读取系统的ID,ID未设置时为“111111111111”;
(2)判断网络芯片PHY的Link状态是否置位,是则判断是否设置了ID,否则设置网络断开时的输出口状态,并默认为全部输出关闭,然后延时5ms,继续判断网络芯片PHY的Link状态是否置位;
(3)判断是否设置了ID,是则判断SystickCnt是否是g_upload_time的整数倍,否则判断是否接收到设置ID指令;
(4)判断是否接收到设置ID指令,是则设置ID,否则继续判断网络芯片PHY的Link状态是否置位;
(5)判断SystickCnt是否是g_upload_time的整数倍,是则UDP广播发送当前的输入输出状态以及自己的ID号,否则判断是否接收到数据;
(6)UDP广播发送当前的输入输出状态以及自己的ID号;
(7)判断是否接收到数据,是则判断收到的ID号是否与自身ID匹配,否则继续判断网络芯片PHY的Link状态是否置位;
(8)判断收到的ID号是否与自身ID匹配,是则根据不同的指令进行处理不同的任务,指令分为查询系统信息、设置网络断开时的输出口状态、设置上发时间间隔以、设置输出口状态等,如果指令非法,丢弃;否则视为指令非法,丢弃;
(9)数据处理完毕,继续判断网络芯片PHY的Link状态是否置位,继续工作。
本发明同现有技术相比,便于扩展,当IO数量不够时,通过以太网再增加一块或多块IO板即可方便的实现扩展IO数量;即插即用,操作简单,一般的方案当使用TCP/IP通信时,需要板卡拥有和PC在同一网段的IP地址,使用前需要设置,较为繁琐,本发明以UDP广播的方式通信,无需手动设置IP地址,即插即用;传输距离远、抗干扰能力强,通信速度快,以太网工作在全双工模式、100Mbit/s的通信速度,当PC和IO板都使用千兆的以太网芯片时,可以获得1Gbit/s的通信速度;便于安装,只需要一根网线即可方便的实现硬件连接,无需额外的转换电路。
附图说明
图1为工控系统IO板连接方式——运动控制卡连接IO板。
图2为工控系统IO板连接方式——PC连接IO板。
图3为工控系统UDP广播扩展IO的方式。
图4为PC模块扫描配置IO板的流程图。
图5为PC模块使用IO板的流程图。
图6为IO板的工作流程示意图。
具体实施方式
下面根据附图对本发明做进一步的说明。
如图1,图2所示,IO板通常为独立的板卡,由运动控制卡控制或者PC直接控制,接口一般为RS232或者RS485总线,但是会存在以下不足:1.通信速度不够快,效率较低。以高性能的ARM芯片STM32F407为例,其USART的通信速率在8倍过采样时最高仅达到10.5Mbit/s,在16倍过采样时,最高只有5.25Mbit/s。且速率较高时,传输距离变短,抗干扰能力变弱。2.不方便扩展。当一个IO板的输入输出口数量不能满足需要时,需要重新设计一块拥有更多输入输出口的板子来代替原来的IO板,不能通过增加IO板的数量的方式扩展IO。3.RS232/485占用PCB面积较大,浪费资源,且和电脑连接时可能需要电平转换器件,例如USB转RS232。
如图3所示,PC模块采用数据线双向连接运动控制卡,运动控制卡采用数据线双向连接执行机构;PC模块采用网线连接交换机或者路由器;所述的交换机或者路由器通过若干端口采用网线分别连接若干IO板,IO板采用数据线双向连接执行机构。
可以通过交换机或者路由器方便的通过增加IO板的方式扩展IO数量。当只有一个IO板时,可以不使用交换机和路由器,将PC的网口和IO板的网口用一根网线连接即可,网线既可以是交叉线也可以是直连线。
PC模块既是UDP服务器也是UDP客户端,接收数据时PC模块作为UDP服务器监听本地端口SVR_PORT(IO板发送时的目标端口)。发送数据时,PC模块作为UDP客户端使用随机端口向远端端口IO_PORT(IO板监听的端口)广播发送,发送的数据包含IO板的ID号,IO板可以使用该IO号识别指令是否是发送给自己,广播发送的目标地址为255.255.255.255,如此,所有的IO板均可以收到PC发来的数据。使用ID号区分不同的IO板,所以不关注IO板的IP地址,所有IO板的地址一样,例如1.2.3.4。同样地,IO板既是UDP服务器也是UDP客户端,接收数据时IO板作为服务器监听本地端口IO_PORT(PC发送时的目标端口),发送数据时,IO板作为客户端使用随机端口向远端端口SVR_PORT(PC监听的端口)广播发送,发送的数据含有自身的ID号,可以让PC模块识别到是哪一块IO板发来的数据,广播发送的目标地址同样为255.255.255.255。
由于使用的是UDP广播通信,所有的IO板的IP地址可以默认一样,使用不同的ID号来区分不同的IO板,无需设置IP地址,操作大大简化,从而可以轻易的实现即插即用。
使用过程中需要对不同的板子进行寻址操作。寻址规则如下:如表1所示,表1为0~K号IO板的输入输出编号表,假设每一块IO板有n个输入,m个输出,当有K+1块IO板时,假设IO板的编号分别为0~K,ID号分别为ID0-IDk,则第K号IO板的输入编号为I(K*n)~I((K+1)*n-1),输出编号为O(K*m)~O((K+1)*m-1)。当PC端应用程序访问IO口时,只需事先扫描所有的IO板并给予编号保存即可,如果增加或减少了IO板,需要重新扫描并编号。
当收到ID号为IDx(0<=x<=K)的IO板的输入y(0<=y<=n-1)有效时,查找之前保存的扫描记录可知IDx的序号为x,则IDx的y输入的序号为I(x*n+y),读取的输出口状态和输入口寻址规则相同;当要访问输出口Oz时,IO板的序号为z/m即ID(z/m),输出口在IO板上的序号为(z%m),即O(z%m)(%为取余数操作)。
举例说明,假设有3块IO板,每个IO板有15个输入,16个输出,IO板的ID号分别为150914100003、150914100001、150914100002,将它们编号为0号、1号、2号,输入分别为I0-I14、I15-I29,I30-I44,输出口分别为O0-O15,016-O31,O32-O47。当2号IO板的8号输入为1时,即I38为1(x=2,n=15,y=8,I(x*n+y)=I38。当要输出O20为1时,即IO板1的4号输出口有效(ID(z/m)=ID(20/16)=ID1,O(z%m)=O(20%16)=O4)。根据指令及状态的不同,如表2至表6所示,表2为设置指令表,表3为查询系统信息表,表4为设置网络断开时的输出口状态表,表5为设置上发间隔表,表6为设置输出口状态和读取输入口状态表。
表1
序号 |
ID号 |
I(一个IO板n个输入) |
O(一个IO板m个输出) |
0 |
ID0 |
I0~I(n-1) |
O0~O(m-1) |
1 |
ID1 |
I(n)~I(2n-1) |
O(m)~O(2m-1) |
2 |
ID2 |
I(2n)~I(3n-1) |
O(2m)~O(3m-1) |
…… |
…… |
…… |
…… |
K |
IDK |
I(K*n)~I((K+1)*n-1) |
O(K*m)~O((K+1)*m-1) |
PC模块的工作流程分为扫描配置IO板流程及正常使用IO板流程。
如图4所示,PC模块扫描配置IO板流程如下,
(1)当PC模块为UDP服务器时,初始化UDP服务器,UDP服务器进行监听端口;
(2)UDP服务器扫描200ms,记录扫描到的所有的ID号;
(3)判断扫描到的IO板的数量和实际连接的数量是否相等,是则将所有的ID号进行编号并保存,便于之后使用时读取,否则检查硬件连接或者UDP服务器重新扫描;
(4)UDP服务器将所有的ID号进行编号并保存,便于之后使用时读取,此时,输入输出口的逻辑编号从序号小的IO板开始依次增大;
(5)UDP服务器扫描配置IO板结束。
如图5所示,PC模块正常使用IO板流程如下,
(1)当PC模块为UDP服务端和客户端时,初始化UDP服务端和客户端,PC一直作为服务端监听端口接收数据,发送数据时PC作为UDP客户端;
(2)PC模块检查文件保存的ID号,并判断文件保存的ID号是否全部被扫描到,是则PC模块作为客户端发送指令,查询IO板的系统信息,设置IO板上发的时间间隔,设置断开网络时的输出状态,否则报警,报警解除后重新判断文件保存的ID号是否全部被扫描到;
(3)PC模块作为客户端发送指令,查询IO板的系统信息,设置IO板上发的时间间隔,设置断开网络时的输出状态;
(4)UDP服务端检查接收是否超时,是则报警,报警解除后重新判断文件保存的ID号是否全部被扫描到,否则检查是否接收到数据;
(5)UDP服务端检查是否接收到数据,是则处理接收到的数据,将IO板的x的输入y转换成逻辑编号I(x*n+y),否则将逻辑输出编号Oz转换成某一IO板的实际编号;
(6)UDP服务端处理接收到的数据,将IO板的x的输入y转换成逻辑编号I(x*n+y),当前输出口的状态转换规则和输入相同,并发送消息给状态处理线程;
(7)状态处理线程接收消息;
(8)当状态处理线程要求设置Oz的状态时,将逻辑输出编号Oz转换成某一IO板的实际编号,IO板的ID(K)=ID(Z/m),IO板的输出为O(z%m);
(9)UDP服务端和客户端发送设置IO状态指令,该指令为广播发送,目标地址255.255.255.255;
(10)UDP服务端继续检查接收是否超时,继续工作。
如图6所示,IO板的工作流程如下,
(1)IO板中的GPIO、Systick、参数、网络PHY及协议栈初始化,Systick每1ms中断一次同时SystickCnt加1,上发时间间隔未被上位机设置时,默认g_upload_time=5ms,同时从FLASH读取系统的ID,ID未设置时为“111111111111”;
(2)判断网络芯片PHY的Link状态是否置位,是则判断是否设置了ID,否则设置网络断开时的输出口状态,并默认为全部输出关闭,然后延时5ms,继续判断网络芯片PHY的Link状态是否置位;
(3)判断是否设置了ID,是则判断SystickCnt是否是g_upload_time的整数倍,否则判断是否接收到设置ID指令;
(4)判断是否接收到设置ID指令,是则设置ID,否则继续判断网络芯片PHY的Link状态是否置位;
(5)判断SystickCnt是否是g_upload_time的整数倍,是则UDP广播发送当前的输入输出状态以及自己的ID号,否则判断是否接收到数据;
(6)UDP广播发送当前的输入输出状态以及自己的ID号;
(7)判断是否接收到数据,是则判断收到的ID号是否与自身ID匹配,否则继续判断网络芯片PHY的Link状态是否置位;
(8)判断收到的ID号是否与自身ID匹配,是则根据不同的指令进行处理不同的任务,指令分为查询系统信息、设置网络断开时的输出口状态、设置上发时间间隔以、设置输出口状态等,如果指令非法,丢弃;否则视为指令非法,丢弃;
(9)数据处理完毕,继续判断网络芯片PHY的Link状态是否置位,继续工作。
表2
表3
表4
表5
表6