Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

117 строки
3.7KB

  1. classdef Equipment < handle
  2. %EQUIPMENT Summary of this class goes here
  3. % Detailed explanation goes here
  4. properties (SetAccess=private)
  5. name
  6. tcp
  7. channel
  8. end
  9. methods
  10. function ecq = Equipment(name,ipAddress,port,channel)
  11. ecq.name = name;
  12. ecq.tcp = Equipment.getTCP(ipAddress,port);
  13. ecq.channel = channel;
  14. end
  15. function idn(ecq)
  16. fprintf(ecq.tcp,['++addr ',num2str(ecq.channel)]);
  17. fprintf(ecq.tcp,'*idn?');
  18. fprintf(ecq.tcp,'++read');
  19. fprintf(fscanf(ecq.tcp));
  20. end
  21. function starttcp(DMM)
  22. fopen(DMM.tcp);
  23. end
  24. end
  25. methods (Static)
  26. function tcpobject = getTCP(ipAddress,port)
  27. persistent tcpconnection;
  28. ipname = Equipment.ip2structname(ipAddress);
  29. if isempty(tcpconnection)
  30. tcpconnection = struct;
  31. end
  32. if ~isfield(tcpconnection, ipname)
  33. tcpconnection.(ipname).tcp = tcpip(ipAddress,port);
  34. tcpconnection.(ipname).nopen = 1;
  35. fopen(tcpconnection.(ipname).tcp);
  36. else
  37. tcpconnection.(ipname).nopen = tcpconnection.(ipname).nopen + 1;
  38. end
  39. tcpobject = tcpconnection.(ipname).tcp;
  40. end
  41. function iptest(ipAddress)
  42. validip = regexp(ipAddress,'^(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]))$', 'once');
  43. if isempty(validip)
  44. error('Invalid IP-address');
  45. end
  46. end
  47. function structname = ip2structname(ipAddress)
  48. Equipment.iptest(ipAddress);
  49. ipmatch = regexprep(ipAddress,'\.','_');
  50. structname = ['ip',ipmatch];
  51. end
  52. end
  53. end
  54. % classdef BankAccount < handle
  55. % properties (Access = ?AccountManager)
  56. % AccountStatus = 'open'
  57. % end
  58. % properties (SetAccess = private)
  59. % AccountNumber
  60. % AccountBalance
  61. % end
  62. % properties (Transient)
  63. % AccountListener
  64. % end
  65. % events
  66. % InsufficientFunds
  67. % end
  68. % methods
  69. % function BA = BankAccount(accNum,initBal)
  70. % BA.AccountNumber = accNum;
  71. % BA.AccountBalance = initBal;
  72. % BA.AccountListener = AccountManager.addAccount(BA);
  73. % end
  74. % function deposit(BA,amt)
  75. % BA.AccountBalance = BA.AccountBalance + amt;
  76. % if BA.AccountBalance > 0
  77. % BA.AccountStatus = 'open';
  78. % end
  79. % end
  80. % function withdraw(BA,amt)
  81. % if (strcmp(BA.AccountStatus,'closed')&& BA.AccountBalance <= 0)
  82. % disp(['Account ',num2str(BA.AccountNumber),' has been closed.'])
  83. % return
  84. % end
  85. % newbal = BA.AccountBalance - amt;
  86. % BA.AccountBalance = newbal;
  87. % if newbal < 0
  88. % notify(BA,'InsufficientFunds')
  89. % end
  90. % end
  91. % function getStatement(BA)
  92. % disp('-------------------------')
  93. % disp(['Account: ',num2str(BA.AccountNumber)])
  94. % ab = sprintf('%0.2f',BA.AccountBalance);
  95. % disp(['CurrentBalance: ',ab])
  96. % disp(['Account Status: ',BA.AccountStatus])
  97. % disp('-------------------------')
  98. % end
  99. % end
  100. % methods (Static)
  101. % function obj = loadobj(s)
  102. % if isstruct(s)
  103. % accNum = s.AccountNumber;
  104. % initBal = s.AccountBalance;
  105. % obj = BankAccount(accNum,initBal);
  106. % else
  107. % obj.AccountListener = AccountManager.addAccount(s);
  108. % end
  109. % end
  110. % end
  111. % end