【问题标题】:Unable to insert data from PLC into MongoDB using Pymongo无法使用 Pymongo 将数据从 PLC 插入 MongoDB
【发布时间】:2016-04-23 17:22:09
【问题描述】:

我想使用 Pymongo 将 PLC 中的数据(字符串 - 'Hello World')插入 MongoDB。我无法弄清楚为什么没有创建集合并且没有将'Hello World' 插入其中。你能解释一下我哪里出错了吗?这是我到目前为止编写的代码:

    #!/usr/bin/python
    import socket         
    import socket
    from pymongo import MongoClient
    import datetime

    # Connection to server (PLC) PLC's IP addr is .135
    server = socket.socket()         
    host = '10.52.124.135' 
    port = 4840  

    server.connect((host, port))
    print server.recv(1024)

    server.close 

    #Connection to Client (Mongodb) on port 27017
    IP = '10.52.124.186'
    PORT = 27017
    BUFFER_SIZE = 1024

    client = MongoClient('10.52.124.186', 27017)
    db = client.RXMMongoDB
    collection = db.ABC

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((IP, PORT))
    s.listen(1)

    # connections loop
    while True:
            conn, addr = s.accept()
            print 'Connection address:',addr
            try:
                     # read loop
                     while True:
                          data = server.recv(BUFFER_SIZE)

                          if not data: 
                                  break

                          # send to Mongo
                          mongodoc = { "data": data, "date" : datetime.datetime.utcnow() }
                          db.ABC.insert_one(mongodoc)
            finally:
                     conn.close() 

【问题讨论】:

  • 什么版本的mongo?
  • @GeorgePetrov PyMongo 3.2、MongoDB 2.6、Python 2.7。
  • @GeorgePetrov 现在对这个错误进行了排序。我已将 MongoDB 上的服务器命名为“GDS”。我应该在代码中明确提及还是只需要服务器 IP 地址就足够了?
  • 但是你是怎么命名你的dbcollection的?
  • @GeorgePetrov DB 的名称是 GDS,其中 IP Address10.52.124.186 并且我使用过:db.RXMMongoDB.ABC.insert_one(mongodoc) 所以即使我没有命名 collection,ABC 也会被创建为一个集合吧?

标签: python mongodb sockets pymongo plc


【解决方案1】:

这样的事情对你有帮助吗?

import datetime
from pymongo import MongoClient

client = MongoClient('1.2.3.4',27017)
db = client.dbTest
data = "Hello SO World"
mongodoc = { "data": data, "date" : datetime.datetime.utcnow() }
db.myCollection.insert(mongodoc)

获得 PLC 数据后,您可能还想检查“数据”变量的内容吗?

【讨论】:

  • 嗨@Brandon,data = "Hello SO World" 语句已作为 PLC 中的输入给出。我是否必须在 .py 代码中再次将其作为输入?
  • 不@Arjun,我只是将其作为要插入Mongo的示例进行展示。我认为您的 TCP 套接字服务器代码原则上是可以的,但我不确定从您的 PLC 返回的数据格式是什么。因此,您可以尝试将“insert_one()”Mongo 函数更改为“insert()”。但是...我在您的代码中看到了 TCP 端口 4840;如果您尝试使用此代码充当 OPC-UA 服务器,则可能需要另辟蹊径并找到合适的 OPC-UA 库。
  • 嗨@brandon,输入数据以字符串形式给出,PLC 中没有数据转换。此外,对于代码的服务器部分,我尝试在 localhost 27017 端口上运行它,但是尽管禁用了防火墙和防病毒软件,但我收到了“主动拒绝连接”错误。
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2021-02-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多