Python 无法使用Pymongo将数据从PLC插入MongoDB
我想使用Pymongo将数据(字符串-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
“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
和集合的?@GeorgePetrovdb
的名称是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端口上运行它,但尽管禁用了防火墙和防病毒软件,但还是出现了“连接主动拒绝”错误。