Reinaldo Teixeira de Paula Posted November 19, 2024 at 06:45 PM Report #633711 Posted November 19, 2024 at 06:45 PM (edited) Estou desenvolvendo uma aplicação em c# onde busco as informação de um calibro que mede comprimento e concavidade, a memoria no clp usada em si e do tipo REAL, quando vou ler esta mesma memoria do clp no programa, me volta um valor diferente. a memoria lida e uma D2440 tipo REAL, ela ocupa duas memorias A D2440 e D2441 onde o valor seria 76.04, porem me retorna um valor bem diferente tentei usar conversão e sem sucesso, alguém poderia me dar uma luz? Estou usando conexão tcpFins UInt16 dmval = 0; try { //mostra os dados de produção if (!plc.ReadDM(Convert.ToUInt16("2440"), ref dmval)) { throw new Exception(plc.LastError); } txtMaximo.Text = dmval.ToString(); Edited November 19, 2024 at 08:15 PM by Reinaldo Teixeira de Paula
Mauro Carvalho Posted August 11, 2026 at 11:09 PM Report #635932 Posted August 11, 2026 at 11:09 PM O problema é estares a ler só o D2440 como UInt16 e a mostrar isso direto. Um REAL no Omron ocupa 2 words (D2440 + D2441), tens de juntar as duas antes de converter para float. UInt16 low = 0, high = 0; plc.ReadDM(2440, ref low); plc.ReadDM(2441, ref high); byte[] bytes = new byte[4]; BitConverter.GetBytes(low).CopyTo(bytes, 0); BitConverter.GetBytes(high).CopyTo(bytes, 2); float valor = BitConverter.ToSingle(bytes, 0); D2440 costuma ser a word baixa e D2441 a alta. Se o valor continuar estranho, tenta trocar a ordem, às vezes depende da config do PLC. Mauro Carvalho Software Engineer | C#, .NET, APIs, full-stack
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now