首页 > 其他分享 >炼钢厂系统项目经验总结

炼钢厂系统项目经验总结

时间:2022-11-28 20:34:29浏览次数:38  
标签:炼钢厂 java socket 系统 空格 import 料仓 电文 经验总结

此项目的逻辑性较强,重点部分是捋顺逻辑,讲清思路

重点模块为:车辆入库模块自动上料模块

首先说一下整体的厂内情况及运营流程(结合下面的图会更好理解):

首先炼钢厂有三类仓库:合金仓库地下料仓高位料仓,下图能很好地看到

因为在整个运转过程中,是需要添加原材料的,所以这里就以拉原料的卡车为出发点。

首先卡车拉着一车的原材料比如(萤石球)放入合金仓库或者地下料仓均可,实际生产的过程中限定了品种对应哪个仓库,这里因为是大致流程就不说这么细致了,能讲清大致流程就好

原材料有两个路线:

  • 送入合金库,然后通过铲车送到地下料仓,然后根据存放原料的地下料仓号的奇偶来判断从运送的是哪根皮带,奇数是皮带1,偶数是皮带2,高位料仓通过plc(可编程控制器,下面会详细讲解)进行控制上料是否开始及完成等信号,最后将原材料分别加到对应的炼钢炉里面。
  • 直接送入地下料仓,后序操作跟上面的相同。

车辆入库模块:

  是上图中的这部分,拉原料的卡车在进入工厂之前,会在门口处被录入车牌号,货物品种,货物重量,订单编号等一系列信息,然后数据发送方会在局域网内通过socket给我们(数据接收方,需要通过向日葵远程连接对方内网主机进行获取)以电文的形式进行发送数据,电文格式如下:

/IP:端口号 已经断开连接
/IP:端口号 已经断开连接/IP:端口号 发来数据为JNLM01的是:0852JNLM0120221123181851JNLMDIBGDS2211230737      JM2211230024闽AA9983            A6035202            石灰石筛粉                                                                      炼钢厂二区                                                                                          炼铁厂                                                                                                                                                                                                                                                                                                                          000000536200000002174000000031880202211231750152022112318184520221123175015                                                                                                                                                                              

可以看到这些电文我们无法直接拿来用,我们需要进行解析,将对应的数据传给对应的字段,然后存到我们的数据库里面。

那么问题来了,我们如何创建socket呢?

 服务端:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class TcpServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(9000);//建立端口号为9000
            Socket socket = serverSocket.accept();//等待客户端的连接
            InputStream is = socket.getInputStream();//接受客户端的信息流
 
            //接受信息代码模块
            byte[] buffer = new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1)
            {
                String msg = new String(buffer, 0, len);
                System.out.println(msg);
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端:

import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
//客户端
public class TcpClient {
    public static void main(String[] args) {
        try {
            InetAddress byName = InetAddress.getByName("127.0.0.1");//ip地址
            int port=9000;//端口号
            Socket socket = new Socket(byName, port);//建立一个socket连接
            OutputStream ou = socket.getOutputStream();//发送io流
            ou.write("你好,李焕英".getBytes(StandardCharsets.UTF_8));//getBytes()是将String字符串转换为Byte数组
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

然后是解析电文字符串

从以上的电文中可以看到:电文中存在好多空格,而且这些电文数据的长短也是不一样的,无法直接通过位数进行截取

采用的方式是:

  • 首先采用分割字符串的函数split(" ");让所有的字符串按一个空格进行分割,分割完的结果是(   车号  )(品种)(    重量)等,可以看到这些子字符串里面仍然含有空格。
  • 然后采用trim(),即可以对每个子字符串进行去空格操作,然后再拼接子字符长,拼接好的效果是 :车号(空格)品种(空格)重量等,可以看到他们之间已经就只存在一个空格,然后这就可以看成我们熟悉的数组
  • 我们可以再次利用split(),将该字符串进行分割,然后存入数组,供我们使用,后序的存入数据库就不在过多的描述。

存入数据库之后,我们的前端页面会把这些车辆的具体信息,以列表的形式进行展示,并且在每一行的后面附有操作按钮,控制其是否入库。(不方便贴页面,想了解可留言),其入库操作就是将控制字段从0改为1,然后对应物料的重量进行累加,在进行sql查找的时候只查找满足没有入库条件的信息。

自动上料模块:

在了解这部分之前首先要知道每个炼钢炉都有对应的报警线,当炉内原料的剩余量低于对应的报警线时,就需要上料,之前都是人工盯着报警线上料的,这样既不安全,也不高效,那怎么实现的自动上料呢?

在这个过程中opc(可编程控制器)立了大功,其主要是连接系统软件以及设备硬件的中间桥梁,软件系统通过给它发送指令来控制硬件设备,硬件设备通过给它发送数据供软件系统进行下一步操作。

opc的界面如图所示:

 

 自动上料模块的功能流程图如下图所示:

 

标签:炼钢厂,java,socket,系统,空格,import,料仓,电文,经验总结
From: https://www.cnblogs.com/YuQiLe/p/16921317.html

相关文章