首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLC4X:工作刮擦过程中的异常

PLC4X:工作刮擦过程中的异常
EN

Stack Overflow用户
提问于 2020-07-30 09:40:16
回答 1查看 184关注 0票数 0

我实际上正在开发一个项目,读取来自19个PLC、西门子S1500和1个modicon的数据。在本教程之后,我使用了刮板工具:

PLC4x刮板教程

但是,当刮刀工作一小段时间时,我会得到以下例外:

我将计划的时间从1更改到100,当刮刀到达相同数量的接收消息时,我总是得到相同的异常。

我已经测试过使用PlcDriverManager而不是PooledPlcDriverManager是否可以解决问题,但同样的问题仍然存在。

在我的pom.xml中,我使用以下依赖项:

代码语言:javascript
复制
        <dependency>
            <groupId>org.apache.plc4x</groupId>
            <artifactId>plc4j-scraper</artifactId>
            <version>0.7.0</version>
        </dependency>

我试图将版本更改为旧版本,如0.6.0或0.5.0,但问题仍然存在。

如果我使用modicon (Modbus TCP),我也会在一小段时间后得到这个异常。

有人知道为什么会发生这个错误吗?提前谢谢。

编辑:使用刮取器版本0.8.0-快照,我继续遇到这个问题。

Edit2:这是我的代码,我认为问题可能是,在我的刮板中,我打开了许多连接,当它到达65526条消息时,就会失败。但是由于所有的处理都发生在lambda函数中,而且我使用的是PooledPlcDriverManager,所以我认为刮板只使用了一个连接,所以我不知道哪里出错了。

代码语言:javascript
复制
 try {
        // Create a new PooledPlcDriverManager
        PlcDriverManager S7_plcDriverManager = new PooledPlcDriverManager();


        // Trigger Collector
        TriggerCollector S7_triggerCollector = new TriggerCollectorImpl(S7_plcDriverManager);

        // Messages counter
        AtomicInteger messagesCounter = new AtomicInteger();


        // Configure the scraper, by binding a Scraper Configuration, a ResultHandler and a TriggerCollector together
        TriggeredScraperImpl S7_scraper = new TriggeredScraperImpl(S7_scraperConfig, (jobName, sourceName, results) -> {
            LinkedList<Object> S7_results = new LinkedList<>();

            messagesCounter.getAndIncrement();

            S7_results.add(jobName);
            S7_results.add(sourceName);
            S7_results.add(results);

            logger.info("Array: " + String.valueOf(S7_results));
            logger.info("MESSAGE number: " + messagesCounter);

            // Producer topics routing
            String topic = "s7" + S7_results.get(1).toString().substring(S7_results.get(1).toString().indexOf("S7_SourcePLC") + 9 , S7_results.get(1).toString().length());
            String key = parseKey_S7("s7");
            String value = parseValue_S7(S7_results.getLast().toString(),S7_results.get(1).toString());
            logger.info("------- PARSED VALUE -------------------------------- " + value);

            // Create my own Kafka Producer
            ProducerRecord<String, String> record = new ProducerRecord<String, String>(topic, key, value);

            // Send Data to Kafka - asynchronous
            producer.send(record, new Callback() {
                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                    // executes every time a record is successfully sent or an exception is thrown
                    if (e == null) {
                        // the record was successfully sent
                        logger.info("Received new metadata. \n" +
                                "Topic:" + recordMetadata.topic() + "\n" +
                                "Partition: " + recordMetadata.partition() + "\n" +
                                "Offset: " + recordMetadata.offset() + "\n" +
                                "Timestamp: " + recordMetadata.timestamp());
                    } else {
                        logger.error("Error while producing", e);
                    }
                }
            });



        }, S7_triggerCollector);
        

        S7_scraper.start();
        S7_triggerCollector.start();


        } catch (ScraperException e) {
            logger.error("Error starting the scraper (S7_scrapper)", e);
        }
EN

回答 1

Stack Overflow用户

发布于 2020-08-31 12:53:09

最后,实际上,是PLC随意地挂断了连接。然而,NiFi集成应该更优雅地处理这种情况。我为这个错误实现了一个修正..。请您尝试一下0.8.0 -快照版本(如果我们碰巧已经发布了,请使用0.8.0)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63170398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档