我实际上正在开发一个项目,读取来自19个PLC、西门子S1500和1个modicon的数据。在本教程之后,我使用了刮板工具:
但是,当刮刀工作一小段时间时,我会得到以下例外:

我将计划的时间从1更改到100,当刮刀到达相同数量的接收消息时,我总是得到相同的异常。
我已经测试过使用PlcDriverManager而不是PooledPlcDriverManager是否可以解决问题,但同样的问题仍然存在。
在我的pom.xml中,我使用以下依赖项:
<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,所以我认为刮板只使用了一个连接,所以我不知道哪里出错了。
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);
}发布于 2020-08-31 12:53:09
最后,实际上,是PLC随意地挂断了连接。然而,NiFi集成应该更优雅地处理这种情况。我为这个错误实现了一个修正..。请您尝试一下0.8.0 -快照版本(如果我们碰巧已经发布了,请使用0.8.0)。
https://stackoverflow.com/questions/63170398
复制相似问题