models.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. enabled = models.BooleanField(default=True)
  39. def __str__(self):
  40. return self.device.serial_model
  41. class sync_params(models.Model):
  42. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='sync_params', null=True)
  43. file = models.CharField(max_length=100, default='Sync_params.xml')
  44. port = models.IntegerField(default=7)
  45. def __str__(self):
  46. return self.device.serial_model
  47. class sdr_params(models.Model):
  48. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='sdr_params', null=True)
  49. srate = models.PositiveIntegerField(default=2000000)
  50. freq = models.PositiveIntegerField(default=3000000)
  51. gain = models.PositiveIntegerField(default=35)
  52. ampl = models.BooleanField(default=True)
  53. file = models.CharField(editable=True)
  54. def __str__(self):
  55. return self.device.serial_model
  56. class gra_params(models.Model):
  57. device = models.ForeignKey(device, on_delete=models.PROTECT, related_name='gra_params', null=True)
  58. ip = models.GenericIPAddressField(default='127.0.0.1')
  59. file = models.CharField(editable=True)
  60. enabled = models.BooleanField(default=True)
  61. def __str__(self):
  62. return self.device.serial_model
  63. class measurement_info(models.Model):
  64. infostr = models.CharField(max_length=100, default='str')
  65. time = models.DateTimeField(default=timezone.now)
  66. iadc = models.ForeignKey(adc_params, on_delete=models.CASCADE, related_name='measurement_info6')
  67. isync = models.ForeignKey(sync_params, on_delete=models.CASCADE, related_name='measurement_info5')
  68. isdr = models.ForeignKey(sdr_params, on_delete=models.CASCADE, related_name='measurement_info4')
  69. igrax = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info3')
  70. igray = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info2')
  71. igraz = models.ForeignKey(gra_params, on_delete=models.CASCADE, related_name='measurement_info1')
  72. engine = models.CharField(max_length=100, default='DefaultEngine')
  73. def __str__(self):
  74. return self.infostr
  75. class device_state(models.Model):
  76. status = models.CharField(max_length=100, default='')
  77. code = models.BigIntegerField(default=0)
  78. def __str__(self):
  79. return self.status
  80. class state(models.Model):
  81. id_measurement = models.IntegerField(default=0)
  82. status = models.CharField(max_length=100, default='default')
  83. code = models.BigIntegerField(default=0)
  84. adc = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state6')
  85. sync = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state5')
  86. sdr = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state4')
  87. grax = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state3')
  88. gray = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state2')
  89. graz = models.ForeignKey(device_state, on_delete=models.CASCADE, related_name='state1')
  90. data_ready = models.BooleanField(default=False)
  91. def __str__(self):
  92. return self.status
  93. class measurement(models.Model):
  94. info = models.ForeignKey(measurement_info, on_delete=models.CASCADE, related_name='measurement2')
  95. state = models.ForeignKey(state, on_delete=models.CASCADE, related_name='measurement1', null=True)
  96. def __str__(self):
  97. return self.info.infostr
  98. class measurement_data(models.Model):
  99. measurement = models.ForeignKey(measurement, on_delete=models.CASCADE, related_name='measurement_data1', null=True)
  100. channel_data = models.ManyToManyField('channel_data', related_name='measurement_data2')
  101. data_num = models.IntegerField(default=0)
  102. averaging_num = models.IntegerField(default=0)
  103. def __str__(self):
  104. return str(self.id)
  105. class channel_data(models.Model):
  106. channel_num = models.IntegerField(default=0)
  107. channel_data = models.TextField(editable=True, default='')
  108. measurement_data = models.ForeignKey(measurement_data, on_delete=models.CASCADE, related_name='channel_data1', null=True)
  109. def __str__(self):
  110. return str(self.id)