1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| {
/// <summary>
/// Implémente le périphérique pyromètre sur bus I2C (Marque : Plannar)
/// </summary>
public class Pyrometer
{
#region Propriétés privées
/// <summary>
/// Adresse I2C du pyrometre
/// </summary>
//byte byPyroAdresse = 0xA0;
public static readonly byte byPyroAdresse = 0x64;
/// <summary>
/// Handle obtenu lors de la connection
/// </summary>
private int m_iHandle;
/// <summary>
/// Pause en millisecondes entre l'envoi de la commande I2C et la lecture. (en plus du temps prévu dans la fonction I2C_Write)
/// </summary>
private int m_iI2CPause = 20;
/// <summary>
/// Commande I2C pour la lecture des températures
/// </summary>
byte[] byCmdTemp = new byte[] { 0x07 };
/// <summary>
/// Transaction I2C pour l'envoi de la commande de lecture des températures
/// </summary>
BaseboardI2CCommand.U2C_TRANSACTION I2C_CmdTemp = new BaseboardI2CCommand.U2C_TRANSACTION();
#endregion
#region Propriétés
/// <summary>
/// Température ambiante (Corps du pyromètre)
/// </summary>
public static decimal m_decTemperatureAmbiante;
/// <summary>
/// Température de l'objet (ie : poche)
/// </summary>
public static decimal m_decTemperatureObjet;
/// <summary>
/// Température de l'objet (ie : poche)
/// </summary>
public static decimal TemperatureObjet
{
get { return m_decTemperatureObjet; }
set { m_decTemperatureObjet = value; }
}
/// <summary>
/// Température ambiante (Corps du pyromètre)
/// </summary>
public static decimal TemperatureAmbiante
{
get { return m_decTemperatureAmbiante; }
set { m_decTemperatureAmbiante = value; }
}
#endregion
/// <summary>
/// Lecture des températures du pyrometre et mise à jour des propriétés public
/// </summary>
/// <returns>True : lecture correcte / False : lecture incorrecte
/// </returns>
public bool GetTemperatures()
{
byte[] bDataRecu = new byte[] { 0x00, 0x00, 0x00, 0x00 };
try
{
//Envoi de la commande
BaseboardI2CCommand.U2C_RESULT WriteResult = BaseboardI2CCommand.I2C_Write(m_iHandle, ref I2C_CmdTemp);
// si ecriture I2C correcte alors on relit 4 bytes
if (WriteResult == BaseboardI2CCommand.U2C_RESULT.U2C_SUCCESS)
{
// temporisation
Thread.Sleep(m_iI2CPause);
//Lecture des 4 bytes
BaseboardI2CCommand.U2C_RESULT ReadResult = BaseboardI2CCommand.I2C_Read(m_iHandle, byPyroAdresse, 4, ref bDataRecu, false);
if (ReadResult == BaseboardI2CCommand.U2C_RESULT.U2C_SUCCESS)
{
// Mise a jour des propriétés
if ((bDataRecu[0] != 0xFF) && (bDataRecu[1] != 0xFF))
m_decTemperatureAmbiante = (decimal)(((256 * bDataRecu[0]) + bDataRecu[1]) / 10.0);
if ((bDataRecu[2] != 0xFF) && (bDataRecu[3] != 0xFF))
m_decTemperatureObjet = (decimal)(((256 * bDataRecu[2]) + bDataRecu[3]) / 10.0);
return true;
}
else
{
throw new Exception("Error while reading I2C answer from pyrometer");
return false;
}
}
else
{
throw new Exception("Error while writing I2C getTemperature command");
return false;
}
}
catch
{
return false;
}
}
#region Constructeur
/// <summary>
/// Constructeur
/// </summary>
/// <param name="handle">handle de connection à la carte IO</param>
public Pyrometer(int handle)
{
// affectation du handle de connection
m_iHandle = handle;
I2C_CmdTemp.InitializeForWrite(byPyroAdresse, byCmdTemp, false);
}
#endregion
#region Methodes
#endregion
}
} |
Partager