no message
							parent
							
								
									a74b651dce
								
							
						
					
					
						commit
						b129e0f404
					
				| 
						 | 
					@ -90,6 +90,7 @@
 | 
				
			||||||
            <version>0.1.55</version>
 | 
					            <version>0.1.55</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- 获取系统信息 -->
 | 
					        <!-- 获取系统信息 -->
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.github.oshi</groupId>
 | 
					            <groupId>com.github.oshi</groupId>
 | 
				
			||||||
| 
						 | 
					@ -126,8 +127,11 @@
 | 
				
			||||||
            <version>4.1.42.Final</version>
 | 
					            <version>4.1.42.Final</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.github.s7connector</groupId>
 | 
				
			||||||
 | 
					            <artifactId>s7connector</artifactId>
 | 
				
			||||||
 | 
					            <version>2.1</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,132 @@
 | 
				
			||||||
 | 
					package com.youchain.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.github.s7connector.api.DaveArea;
 | 
				
			||||||
 | 
					import com.github.s7connector.api.S7Connector;
 | 
				
			||||||
 | 
					import com.github.s7connector.api.factory.S7ConnectorFactory;
 | 
				
			||||||
 | 
					import com.github.s7connector.impl.serializer.converter.StringConverter;
 | 
				
			||||||
 | 
					import com.sun.mail.iap.ConnectionException;
 | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.nio.ByteBuffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * S7西门子PLC连接工具类
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author <NAME>
 | 
				
			||||||
 | 
					 * @date 2024/04/12
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Slf4j
 | 
				
			||||||
 | 
					public class S7ConnectorUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public S7Connector connect() {
 | 
				
			||||||
 | 
					        S7Connector s7Connector = null;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            s7Connector = S7ConnectorFactory
 | 
				
			||||||
 | 
					                    .buildTCPConnector()
 | 
				
			||||||
 | 
					                    .withHost("192.168.0.21")//设置PLC的IP地址
 | 
				
			||||||
 | 
					                    .withPort(102)//设置PLC的端口号
 | 
				
			||||||
 | 
					                    .withTimeout(10000)//设置连接超时时间
 | 
				
			||||||
 | 
					                    .withRack(0)//设置PLC的机架号
 | 
				
			||||||
 | 
					                    .withSlot(2)//设置PLC的插槽号
 | 
				
			||||||
 | 
					                    .build();
 | 
				
			||||||
 | 
					            return s7Connector;
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 读取PLC数据
 | 
				
			||||||
 | 
					     * 读取条码信息
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param connector 连接器
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void readMo(S7Connector connector) {
 | 
				
			||||||
 | 
					        if (connector == null) {
 | 
				
			||||||
 | 
					            throw new RuntimeException("PLC连接失败,请检查!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        long startTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * 读取数据
 | 
				
			||||||
 | 
					         * 选择区块:DB
 | 
				
			||||||
 | 
					         * 区块编号:100
 | 
				
			||||||
 | 
					         * 字节:500
 | 
				
			||||||
 | 
					         * 偏移:0
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        byte[] PlcData = connector.read(DaveArea.DB, 100, 500, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        long endTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        log.info("读取耗时:" + (endTime - startTime) + "ms");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String str1 = "";
 | 
				
			||||||
 | 
					        StringConverter converter = new StringConverter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String extract1 = converter.extract(str1.getClass(), PlcData, 0, 0);
 | 
				
			||||||
 | 
					        log.info("内置方法转换str=" + extract1);
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            connector.close();
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 读取PLC数据
 | 
				
			||||||
 | 
					     * 读取容器信息
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param connector 连接器
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Integer readStock(S7Connector connector) throws IOException {
 | 
				
			||||||
 | 
					        Integer status = null;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (connector == null) {
 | 
				
			||||||
 | 
					                throw new IllegalArgumentException("PLC连接失败,请检查!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            long startTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * 读取数据
 | 
				
			||||||
 | 
					             * 选择区块:DB
 | 
				
			||||||
 | 
					             * 区块编号:100
 | 
				
			||||||
 | 
					             * 字节:1
 | 
				
			||||||
 | 
					             * 偏移:0
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            byte[] PlcData = connector.read(DaveArea.DB, 100, 1, 24);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            long endTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					            log.info("读取耗时:" + (endTime - startTime) + "ms");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Integer stock = null;
 | 
				
			||||||
 | 
					            StringConverter converter = new StringConverter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            status = converter.extract(stock.getClass(), PlcData, 0, 0);
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            throw new IOException("读取PLC数据异常", e);
 | 
				
			||||||
 | 
					        } finally {
 | 
				
			||||||
 | 
					            connector.close();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return status;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 写入数据到PLC
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param connector 连接器
 | 
				
			||||||
 | 
					     * @param instruct  写入的数据;上位机给PLC发扫码合格指令,不合格写1,合格写2,0无效,上位机写,PLC清
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void write(S7Connector connector, Integer instruct) {
 | 
				
			||||||
 | 
					        long startTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES);
 | 
				
			||||||
 | 
					        buffer.putInt(instruct);
 | 
				
			||||||
 | 
					        byte[] bytes = buffer.array();
 | 
				
			||||||
 | 
					        connector.write(DaveArea.DB, 100, 22, bytes);
 | 
				
			||||||
 | 
					        long endTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        System.out.println((endTime - startTime) + "ms");
 | 
				
			||||||
 | 
					        System.out.print("写入成功");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue