Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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
从Mininet Python API启动的脚本在一段时间后停止工作_Python_Mininet_Pymodbus - Fatal编程技术网

从Mininet Python API启动的脚本在一段时间后停止工作

从Mininet Python API启动的脚本在一段时间后停止工作,python,mininet,pymodbus,Python,Mininet,Pymodbus,我试图在mininet中编写一些自动化测试,其目的是: 创建简单拓扑的步骤 在服务器和客户端之间运行一些通信 收集一些数据并在一段时间后停止 我可以通过运行miniedit配置并在连接到主机的两个终端上手动启动服务器和客户端脚本来运行这些测试,这种情况很好 然而,我试图用Python API来实现这一点,但是在交换了一些数据包之后,我在主机上启动的脚本就不能正常工作了。正如我之前所说,如果我在两个终端上手动启动这两个脚本,那么这两个脚本可以正常工作,所以我认为可能还有另一个问题。 我最初认为

我试图在mininet中编写一些自动化测试,其目的是:

  • 创建简单拓扑的步骤
  • 在服务器和客户端之间运行一些通信
  • 收集一些数据并在一段时间后停止
我可以通过运行miniedit配置并在连接到主机的两个终端上手动启动服务器和客户端脚本来运行这些测试,这种情况很好

然而,我试图用Python API来实现这一点,但是在交换了一些数据包之后,我在主机上启动的脚本就不能正常工作了。正如我之前所说,如果我在两个终端上手动启动这两个脚本,那么这两个脚本可以正常工作,所以我认为可能还有另一个问题。 我最初认为这可能是我用来实现服务器和客户端脚本的模块上的一个bug(pyModbuspyModbusTCP)但是,当手动启动脚本时,它们不会出现任何问题,这一事实让我认为,通过pythonapi启动脚本的方式可能有问题

这是启动模拟的脚本:

#/usr/bin/python
从mininet.topo导入topo
从mininet.net导入mininet
从mininet.util导入dumpNodeConnections
从mininet.log导入setLogLevel
#第一个参数是项目路径
clientPath=sys.argv[1]+'test/integration/test\u training/client.py'
serverPath=sys.argv[1]+'test/integration/test\u training/server.py'
单开关拓扑(拓扑)类:
def生成(自身,n=2):
switch=self.addSwitch('s1')
对于范围(n)内的h:
host=self.addHost('h%s'(h+1))
self.addLink(主机、交换机)
def test():
拓扑=单开关拓扑(n=2)
网络=小型网络(地形)
net.start()
hosts=net.hosts
服务器=主机[0]
客户端=主机[1]
#在后台启动服务器进程
sendCmd('python3'+serverPath)
#启动客户端并打印输出
client.cmdPrint('python3'+clientPath)
#这是测试的其余部分
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
setLogLevel('info')
测试()
启动此脚本时,日志显示客户端在一段时间内正确接收到响应。但是,在某一点上,服务器将始终开始发送空响应,当我在miniedit配置上手动运行脚本时,这种情况永远不会发生

这些是服务器和客户端脚本(这些是简单的pyModbus和pyModbusTCP脚本,作为默认示例提供):

服务器 该服务器基本上定期更新一些值并侦听查询

#/usr/bin/python3
从pymodbus.server.async导入StartTcpServer
从pymodbus.device导入Modbus设备标识
从pymodbus.datastore导入ModbusSequentialDataBlock
从pymodbus.datastore导入ModbusSlaveContext、ModbusServerContext
从twisted.internet.task导入循环调用
服务器ip='10.0.0.1'
服务器\端口=502
起始地址=1
最终地址=[1]*100
#日志
导入日志记录
logging.basicConfig()文件
log=logging.getLogger()
log.setLevel(logging.DEBUG)
初始值=0
#更新服务器功能
def更新_服务器(a):
log.debug(“更新PLC寄存器…”)
上下文=a[0]
寄存器=4
从站id=0x00
地址=0
values=context[slave\u id].getValues(寄存器、地址、计数=5)
值=[v+1表示值中的v]
log.debug(“新值:”+str(值))
上下文[slave_id]。设置值(寄存器、地址、值)
store=ModbusSlaveContext(
di=ModbusSequentialDataBlock(0,[1]*100),
co=ModbusSequentialDataBlock(0,[2]*100),
hr=ModbusSequentialDataBlock(0,[3]*100),
ir=ModbusSequentialDataBlock(0,[init_val]*100))
上下文=ModbusServerContext(从服务器=存储,单服务器=真)
标识=ModbusDeviceIdentification()
identity.VendorName='Pymodbus'
identity.ProductCode='PM'
identity.VendorUrl=http://github.com/bashwork/pymodbus/'
identity.ProductName='Pymodbus服务器'
identity.ModelName='Pymodbus服务器'
identity.MajorMinorRevision='1.0'
#服务器运行和更新
时间=0.5
loop=LoopingCall(f=更新服务器,a=(上下文,))
loop.start(time,now=False)
StartTcpServer(上下文,标识=标识,地址=(服务器\ ip,服务器\端口))
客户 此客户端连接到服务器并定期发送查询

#/usr/bin/python3
从pymodbuscp.client导入ModbusClient
导入时间
服务器ip='10.0.0.1'
服务器\端口=502
c=ModbusClient(主机=服务器\ ip,端口=服务器\端口,自动\打开=真)
c、 调试(真)
尽管如此:
如果c.是开着的():
#从地址0开始读取5个输入寄存器
值=c.读取\输入\寄存器(0,5)
打印(值)
睡眠时间(0.1)
其他:
c、 开()
睡眠时间(0.5)
我在这个问题上绞尽脑汁已经有一段时间了,找不到解决办法。我错过什么了吗