def setupCommunication(): try: config = pyprofibus.PbConf.fromFile( "/home/david/robot_ws/src/vr_driver/config/panaprofi.conf") phy = config.makePhy() master = pyprofibus.DPM1(phy=phy, masterAddr=config.dpMasterAddr, debug=False) # slaveConf = config.slaveConfs[0] # slaveConf = config.slaveConfs.__next__() for slaveConf in config.slaveConfs: gsd = slaveConf.gsd slaveDesc = pyprofibus.DpSlaveDesc( identNumber=gsd.getIdentNumber(), slaveAddr=slaveConf.addr) slaveDesc.setCfgDataElements(gsd.getCfgDataElements()) slaveDesc.setSyncMode(slaveConf.syncMode) slaveDesc.setFreezeMode(slaveConf.freezeMode) slaveDesc.setGroupMask(slaveConf.groupMask) slaveDesc.setWatchdog(slaveConf.watchdogMs) master.addSlave(slaveDesc) master.initialize() return master, slaveDesc except pyprofibus.ProfibusError as e: print("Terminating: %s" % str(e)) return None, None
def test_dummy_phy(self): phy = pyprofibus.phy_dummy.CpPhyDummySlave(debug=True, echoDX=True) phy.setConfig(baudrate=19200) master = pyprofibus.DPM1(phy=phy, masterAddr=42, debug=True) conf = pyprofibus.conf.PbConf._SlaveConf() conf.addr = 84 conf.inputSize = 1 conf.outputSize = 1 conf.diagPeriod = 0 slaveDesc = pyprofibus.dp_master.DpSlaveDesc(conf) slaveDesc.setCfgDataElements([ pyprofibus.dp.DpCfgDataElement(pyprofibus.dp.DpCfgDataElement.ID_TYPE_OUT), pyprofibus.dp.DpCfgDataElement(pyprofibus.dp.DpCfgDataElement.ID_TYPE_IN), ]) slaveDesc.setUserPrmData(bytearray([1, 2, 3, 4, ])) slaveDesc.setSyncMode(True) slaveDesc.setFreezeMode(True) slaveDesc.setGroupMask(1) slaveDesc.setWatchdog(300) master.addSlave(slaveDesc) master.initialize() self.assertFalse(slaveDesc.isConnecting()) self.assertFalse(slaveDesc.isConnected()) # Run slave initialization state machine. for i in range(25): slaveDesc.setMasterOutData(bytearray([1, ])) master.run() if i == 1: self.assertTrue(slaveDesc.isConnecting()) self.assertFalse(slaveDesc.isConnected()) # Check dummy-slave response to Data_Exchange. for i in range(100): print("testing %d" % i) self.assertFalse(slaveDesc.isConnecting()) self.assertTrue(slaveDesc.isConnected()) j = 0 while True: j += 1 self.assertTrue(j < 10) slaveDesc.setMasterOutData(bytearray([i, ])) master.run() ret = slaveDesc.getMasterInData() if j >= 5 and ret is not None: break self.assertEqual(bytearray(ret), bytearray([i ^ 0xFF, ]))
def test_dummy_phy(self): phy = pyprofibus.phy_dummy.CpPhyDummySlave(debug=True) phy.setConfig(baudrate=19200) master = pyprofibus.DPM1(phy=phy, masterAddr=42, debug=True) slaveDesc = pyprofibus.DpSlaveDesc(gsd=None, slaveAddr=84) slaveDesc.setCfgDataElements([ pyprofibus.DpCfgDataElement( pyprofibus.DpCfgDataElement.ID_TYPE_OUT), pyprofibus.DpCfgDataElement( pyprofibus.DpCfgDataElement.ID_TYPE_IN), ]) slaveDesc.setUserPrmData(bytearray([ 1, 2, 3, 4, ])) slaveDesc.setSyncMode(True) slaveDesc.setFreezeMode(True) slaveDesc.setGroupMask(1) slaveDesc.setWatchdog(300) master.addSlave(slaveDesc) master.initialize() # Run slave initialization state machine. for i in range(25): slaveDesc.setOutData(bytearray([ 1, ])) master.run() # Check dummy-slave response to Data_Exchange. for i in range(100): print("testing %d" % i) j = 0 while True: j += 1 self.assertTrue(j < 10) slaveDesc.setOutData(bytearray([ i, ])) master.run() ret = slaveDesc.getInData() if j >= 5 and ret is not None: break self.assertEqual(bytearray(ret), bytearray([ i ^ 0xFF, ]))
import pyprofibus, pyprofibus.phy_dummy from pyprofibus import DpTelegram_SetPrm_Req, monotonic_time master = None try: # Parse the config file. config = pyprofibus.PbConf.fromFile("example_dummy.conf") print "file: example_dummy.py lines:16" # Create a PHY (layer 1) interface object phy = config.makePhy() print "file: example_dummy.py lines:20" # Create a DP class 1 master with DP address 1 master = pyprofibus.DPM1(phy = phy, masterAddr = config.dpMasterAddr, debug = True) print "file: example_dummy.py lines:25" exit(-1) # Create a slave descriptions. for slaveConf in config.slaveConfs: gsd = slaveConf.gsd slaveDesc = pyprofibus.DpSlaveDesc( identNumber = gsd.getIdentNumber(), slaveAddr = slaveConf.addr) # Create Chk_Cfg telegram elements slaveDesc.setCfgDataElements(gsd.getCfgDataElements()) # Set User_Prm_Data
# | 0AB0 | 0AA0 | 0AA0 | 0AA0 | 0AA0 | # ^--------------^----------^----------^----------^----------^ # import pyprofibus # Enable verbose debug messages? debug = True # Create a PHY (layer 1) interface object phy = pyprofibus.CpPhy(debug=False) # Create a DP class 1 master with DP address 1 master = pyprofibus.DPM1(phy = phy, masterAddr = 1, debug = debug) # Create a slave description for an ET-200S. # The ET-200S has got the DP address 8 set via DIP-switches. et200s = pyprofibus.DpSlaveDesc(identNumber = 0x817A, slaveAddr = 3, inputAddressRangeSize = 22, outputAddressRangeSize = 6) # Create Chk_Cfg telegram elements for elem in (\ pyprofibus.DpCfgDataElement(0xC1), # 1 In-Byte & 1 Out-Byte follows pyprofibus.DpCfgDataElement(0x06-1), # DI 22 Bytes pyprofibus.DpCfgDataElement(0x16-1), # DO 6 Bytes pyprofibus.DpCfgDataElement(0x00)): #