2. Tín hiệu Analoge output
Ngược lại với module input (module analog input là mã hóa của dãy số nguyên integer maximum 27648 từ tín hiệu analog đầu vào) thì ngược lại, Đầu ra của module analog lai là tín hiệu analog từ dãy số integer maximum 27648.
Như trên mình cũng đã nói, trong thư viện của Siemens cũng đã có sẵn hàm này rồi và các bạn chỉ cần lôi nó ra xài, đó là hàm FC106. Nếu không có gì lớn thì chịu khó đọc help của Siemens là làm được. ở đây mình cũng chép nguyên cái hướng dẫn của Siemens cho các bạn tham khảo
The UNSCALE function takes a real input value (IN) in engineering units scaled between a low and a high limit (LO_LIM and HI_LIM) and converts it to an integer value. The result is written to OUT. The UNSCALE function uses the equation:
OUT = [ ((IN–LO_LIM)/(HI_LIM–LO_LIM)) * (K2–K1) ] + K1
and sets the constants K1 and K2 based upon whether the input value is BIPOLAR or UNIPOLAR.
·BIPOLAR: The output integer value is assumed to be between –27648 and 27648, therefore, K1 = –27648.0 and K2 = +27648.0
·UNIPOLAR: The output integer value is assumed to be between 0 and 27648, therefore, K1 = 0.0 and K2 = +27648.0
If the input value is outside the LO_LIM and HI_LIM range, the output (OUT) is clamped to the nearer of either the low limit or the high limit of the specified range for its type (BIPOLAR or UNIPOLAR) and an error is returned.
Thực ra đây cũng chính là công thức biến đổi ngược của công thức tình giá trị của analog input mà thôi. Thế nhưng mình đã nói, các bạn nên tạo một chương trình tối ưu cho ứng dụng của mình và sau đây mình cũng giới thiệu với các bạn chương trình của admin vocsy dành cho các bạn tham khảo.
Ta cũng áp dụng công thức
Out=((Raw-Raw_Min)*(Scale_Max-Scale_Min))/(Raw_Max-Raw_Min) + Raw_Min
L #Scale_Min
ITD
DTR
T #_Scale_Min_R
L #Scale_Max
ITD
DTR
T #_Scale_Max_R
L #Raw
L #Raw_Min
-R
T #_temp_real
// Scale_Max - Scale_Min
L #_Scale_Max_R
L #_Scale_Min_R
-R
//(Raw - Raw_Min) * (Scale_Max - Scale_Min)
L #_temp_real
*R
T #_temp_real
// Raw_Max - Raw_Min
L #Raw_Max
L #Raw_Min
-R
T #_temp_real2
//(Raw - Raw_Min) * (Scale_Max - Scale_Min) / (Raw_Max - Raw_Min)
L #_temp_real
L #_temp_real2
/R
//(Raw - Raw_Min) * (Scale_Max - Scale_Min) / (Raw_Max - Raw_Min) + Scale_Min
L #_Scale_Min_R
+R
T #_Output
//Convert scaled output to integer
L #_Scaled_R
RND
T #Scaled
Và đây là chương trình gọi thực tế để các bạn tham khảo