Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用Pymongo将数据从PLC插入MongoDB_Python_Mongodb_Sockets_Pymongo_Plc - Fatal编程技术网

Python 无法使用Pymongo将数据从PLC插入MongoDB

Python 无法使用Pymongo将数据从PLC插入MongoDB,python,mongodb,sockets,pymongo,plc,Python,Mongodb,Sockets,Pymongo,Plc,我想使用Pymongo将数据(字符串-“Hello World”)从PLC插入MongoDB。我不明白为什么没有创建一个集合,并且没有将'Hello World'插入其中。你能解释一下我错在哪里吗?以下是我迄今为止编写的代码: #!/usr/bin/python import socket import socket from pymongo import MongoClient import datetime # Connec

我想使用Pymongo将数据(字符串-
“Hello World”
)从PLC插入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() 

像这样的东西能帮你吗

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数据后,您可能还需要检查“data”变量的内容?

mongo的哪个版本?@GeorgePetrov PyMongo 3.2、MongoDB 2.6、Python 2.7。@GeorgePetrov现在解决了这个错误。我已将MongoDB上的服务器命名为“GDS”。我应该在代码中明确提到这一点还是仅仅服务器IP地址就足够了?但是你是如何命名你的
db
集合的?@GeorgePetrov
db
的名称是
IP地址
10.52.124.186
的GDS,我使用过:
db.RXMMongoDB.ABC.insert_one(mongodoc)
因此,即使我没有命名一个
集合
,ABC也将被创建为一个集合,对吗?嗨@Brandon,
data=“Hello So World”
语句已经作为PLC中的输入给出。我必须在.py代码中再次将其作为输入吗?不@Arjun,我只是将其作为示例显示,以插入Mongo中。我认为您的TCP套接字服务器代码原则上是可以的,尽管我不确定从您的PLC返回的数据格式。因此,您可以尝试将“insert_one()”Mongo函数更改为“insert()”。但是…我在你的代码中看到了TCP端口4840;如果您试图用此代码充当OPC-UA服务器,您可能需要走不同的路线,找到合适的OPC-UA库。Hi@brandon,输入数据以字符串形式给出,PLC中没有数据转换。另外,对于代码的服务器部分,我尝试在localhost 27017端口上运行它,但尽管禁用了防火墙和防病毒软件,但还是出现了“连接主动拒绝”错误。