models.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. from ast import mod
  2. from django.db import models
  3. from django.utils import timezone
  4. from numpy import mask_indices, maximum
  5. # Create your models here.
  6. class device(models.Model):
  7. device_type = models.CharField(max_length=100, default='ADC')
  8. brend = models.CharField(max_length=100, default='Picoscope')
  9. serial_model = models.CharField(max_length=100, default='PS400A')
  10. proto = models.CharField(max_length=100, default='TCP')
  11. proto_interface = models.CharField(max_length=100, default='adc_default')
  12. time_creation = models.DateTimeField(default=timezone.now)
  13. time_publication = models.DateTimeField(blank=True, null=True)
  14. # Потом можно будет добавить ещё что-нибудь
  15. def set_defaults(self):
  16. self.time_publication = timezone.now()
  17. self.save()
  18. def __str__(self):
  19. return self.serial_model
  20. class adc_params(models.Model):
  21. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='adc_params', null=True)
  22. srate = models.PositiveIntegerField()
  23. points = models.JSONField(blank=True,
  24. null=True,
  25. default=list,
  26. help_text='Массив целых чисел в формате JSON')
  27. n_channels = models.PositiveIntegerField()
  28. channel_ranges = models.JSONField(blank=True,
  29. null=True,
  30. default=list,
  31. help_text='Массив целых чисел в формате JSON')
  32. n_triggers = models.PositiveIntegerField()
  33. trigger_channel = models.PositiveIntegerField()
  34. threshold = models.IntegerField()
  35. trig_direction = models.IntegerField()
  36. auto_measure_time = models.PositiveIntegerField()
  37. averaging = models.PositiveIntegerField(default=1)
  38. averaging_delay = models.FloatField(default=1.0)
  39. enabled = models.BooleanField(default=True)
  40. def __str__(self):
  41. return self.device.serial_model
  42. class sync_params(models.Model):
  43. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='sync_params', null=True)
  44. file = models.CharField(max_length=100, default='Sync_params.xml')
  45. port = models.IntegerField(default=7)
  46. def __str__(self):
  47. return self.device.serial_model
  48. class sdr_params(models.Model):
  49. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='sdr_params', null=True)
  50. srate = models.PositiveIntegerField(default=2000000)
  51. freq = models.PositiveIntegerField(default=3000000)
  52. gain = models.PositiveIntegerField(default=35)
  53. ampl = models.BooleanField(default=True)
  54. file = models.CharField(editable=True)
  55. def __str__(self):
  56. return self.device.serial_model
  57. class gra_params(models.Model):
  58. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='gra_params', null=True)
  59. ip = models.GenericIPAddressField(default='127.0.0.1')
  60. file = models.CharField(editable=True)
  61. enabled = models.BooleanField(default=True)
  62. def __str__(self):
  63. return self.device.serial_model
  64. class measurement_info(models.Model):
  65. infostr = models.CharField(max_length=100, default='str')
  66. time = models.DateTimeField(default=timezone.now)
  67. iadc = models.ForeignKey(adc_params, on_delete=models.CASCADE, related_name='measurement_info6')
  68. isync = models.ForeignKey(sync_params, on_delete=models.CASCADE, related_name='measurement_info5')
  69. isdr = models.ForeignKey(sdr_params, on_delete=models.CASCADE, related_name='measurement_info4')
  70. igrax = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info3')
  71. igray = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info2')
  72. igraz = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info1')
  73. engine = models.CharField(max_length=100, default='DefaultEngine')
  74. def __str__(self):
  75. return self.infostr
  76. class device_state(models.Model):
  77. status = models.CharField(max_length=100, default='')
  78. code = models.BigIntegerField(default=0)
  79. def __str__(self):
  80. return self.status
  81. class state(models.Model):
  82. id_measurement = models.IntegerField(default=0)
  83. status = models.CharField(max_length=100, default='default')
  84. code = models.BigIntegerField(default=0)
  85. adc = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state6')
  86. sync = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state5')
  87. sdr = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state4')
  88. grax = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state3')
  89. gray = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state2')
  90. graz = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state1')
  91. data_ready = models.BooleanField(default=False)
  92. def __str__(self):
  93. return self.status
  94. class measurement(models.Model):
  95. info = models.ForeignKey(measurement_info, on_delete=models.CASCADE, related_name='measurement2')
  96. state = models.ForeignKey(state, on_delete=models.CASCADE, related_name='measurement1', null=True)
  97. def __str__(self):
  98. return self.info.infostr
  99. class measurement_data(models.Model):
  100. measurement = models.ForeignKey(measurement, on_delete=models.CASCADE, related_name='measurement_data1', null=True)
  101. channel_data = models.ManyToManyField('channel_data', related_name='measurement_data2')
  102. data_num = models.IntegerField(default=0)
  103. averaging_num = models.IntegerField(default=0)
  104. def __str__(self):
  105. return str(self.id)
  106. class channel_data(models.Model):
  107. channel_num = models.IntegerField(default=0)
  108. channel_data = models.TextField(editable=True, default='')
  109. measurement_data = models.ForeignKey(measurement_data, on_delete=models.CASCADE, related_name='channel_data1', null=True)
  110. def __str__(self):
  111. return str(self.id)