QUECTEL GSM рдореЙрдбреЗрдо M95 - рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡

QUECTEL GSM рдореЙрдбреЗрдо M95 - рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡


рд╢реБрд░реБрдЖрдд рдореЗрдВ

рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдЬреАрдПрд╕рдПрдо-рдореЙрдбрдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкрд┐рдЫрд▓рд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд╛рдЧреНрдп рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ, рдореИрдВ рдХреНрд▓реЗрдХреНрдЯреЗрд▓ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐, рд╕реЗрдВрдЯреНрд░реЙрди рдХреЗ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдореИрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдПрдХ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдкрд░ рднрдЯрдХ рдЧрдпрд╛ - рдПрдХ рдЬреАрдПрд╕рдПрдо рдореЙрдбрдо рдФрд░ рдПрдХ рдЬреАрдкреАрдПрд╕ рдЬреАрдкреАрдПрд╕ рд░рд┐рд╕реАрд╡рд░ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдбреЗрдЯрд╛рд╢реАрдЯ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЬрд╛рдирдХрд╛рд░реА рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рддреЛ рдХрд┐рдпрд╛ред

рдПрдХ рджрд┐рди рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рд▓рдЧрднрдЧ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛), рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЕрдкрд▓реЛрдб рдХреА рдереА, рд╡рд╣ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдерд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рджреА рдереАред рдЕрдЧрд▓реЗ рджрд┐рди рдореБрдЭреЗ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдирдВрдмрд░ рд╕реЗ рдХреЙрд▓ рдЖрдпрд╛, рдПрдХ рд╕реБрдЦрдж рдорд╣рд┐рд▓рд╛ рдЖрд╡рд╛рдЬ рдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ рд╕реИрдЯреНрд░реЙрди рдХрдВрдкрдиреА рдХреЗ рдкреНрд░рдмрдВрдзрдХ рдЙрдирдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдореЗрд░реА рд░реБрдЪрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣ рд░рд╣реЗ рдереЗред рдЯреЗрд▓реАрдлреЛрди рд╕рдВрдкрд░реНрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рдбрд╝рдХреА рдиреЗ рдкреВрдЫрд╛ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ - рдПрдХ рдирд┐рдЬреА рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдХрд╛рдиреВрдиреА рдЗрдХрд╛рдИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдПрдХ рд╕рд╡рд╛рд▓ рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛ - рдЖрдкрдХреА рд░реБрдЪрд┐ рдХрд┐рд╕ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ? рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓рдбрд╝рдХреА рдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХрд╛рдиреВрдиреА рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╢рд┐рдкрдореЗрдВрдЯ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВ рд╕рд╣рдордд рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдбрд╝рдХреА рдкреНрд░рдмрдВрдзрдХ рдиреЗ рдЦреБрдж рдХреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдереАред рдПрд╕рдПрдордПрд╕-рдХреА рдФрд░ рдЖрд╡рд╛рдЬ рд╕рдВрдЪрд╛рд░ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдЗрдЪреНрдЫрд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрджрд┐рдо рд▓реЗрдХрд┐рди рдмреЗрд╣рдж рд╕рд╕реНрддрд╛ рдЬреАрдПрд╕рдПрдо-рдореЙрдбреЗрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ред рдЬрд╡рд╛рдм рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рдереА, рдФрд░ рдПрдХ рдореЙрдбреЗрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░, рдПрдХ "рдЖрджрд┐рдо" рдХреА рдХреАрдордд рдкрд░ рдПрдХ рддрд╛рдЬрд╛ рдПрдо 95 рдЙрддреНрдкрд╛рдж рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреАрдорддреЗрдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдпреЗ рд╣рдорд╛рд░реЗ Satron рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореЙрдбреЗрдо рдФрд░ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдФрд░ рдХрдИ рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдереЗред

рддреБрд░рдВрдд рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ рдЕрдЬреАрдм рд╣реИ, рдпрд╣ рдЗрддрдирд╛ рдЙрджрд╛рд░ рдХреНрдпреЛрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдЧреЗ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛, рдФрд░ рдХрдВрдкрдиреА рдХреЗ рдЕрдиреБрдХреВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рджреМрд░ рдХрд╛ рд╕рдорд░реНрдерди, рдФрд░ рд▓рдбрд╝рдХреА рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдХрд╛рдо рдХреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЧреБрдгрд╡рддреНрддрд╛ред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐:

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ! рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрд╕реА рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдореЗрд░рд╛ рд╕рд╛рд░рд╛ рдЕрдиреБрднрд╡ рдЪрд┐рд▓реНрд▓рд╛рдпрд╛ - рдпрд╣ рд╕рдбрд╝рд╛ рд╣реБрдЖ "рдХреАрдЪрдбрд╝" рдХрд╛ рд╕реЗрдЯрдЕрдк рдФрд░ рдЕрдЧрд▓рд╛ "рд╕реНрдЯреАрдорд┐рдВрдЧ" рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдо 95 рдореЙрдбреЗрдо рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдЖ, рддреЛ рдореЗрд░реЗ рдЕрдВрджрд░ рдПрдХ рдЕрдЬреАрдм рд╕рд╛ рд╕рдВрджреЗрд╣ рдкреИрджрд╛ рд╣реЛ рдЧрдпрд╛, рдЪреАрдиреА рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдЙрджреНрдпреЛрдЧ рдХреЗ рдкреНрд░рдмреБрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдкреНрд░рдЦреНрдпрд╛рдд рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╣реА рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдереАрдВ, рд▓реЗрдХрд┐рди рдХреАрдордд ... рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ, рдореБрдЭреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрд░ рдЖрд░реЛрдк рд▓рдЧрд╛рдиреЗ рд╕реЗ рдбрд░ рд▓рдЧрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдореЙрдбреЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╢реВрдиреНрдп рдЕрдиреБрднрд╡ рдерд╛, рдФрд░ рдореБрдЭреЗ рдШреЛрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдореБрдЭреЗ 4.4-рд╡реЛрд▓реНрдЯ рдХреЗ рдЖрд╡реЗрдЧ рдХреЗ рд╕рд╛рде рдПрдХ Altium рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдордирд╛рдирд╛ рдерд╛ рдФрд░ рдлреЛрди рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдЬреИрдХ рд╕рд╣рд┐рдд рдЖрд╡рд╢реНрдпрдХ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбреЗрдо рдХрд╛ рд╡рдЬрди рдХрд░рдирд╛ рдерд╛ред , рдмрдЯрди рдкрд░ / рдмрдВрдж рдФрд░ рдЙрднрд░рдиреЗ рдмрдВрджред рдПрдВрдЯреАрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ AMMAP 003 рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреВрд░реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдкрд░реНрд╕рдирд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ USB рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде FT232LR рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдордиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ FT232LR рдкреЛрд░реНрдЯреНрд╕ рдХреА рд╢рдХреНрддрд┐ рдореЙрдбреЗрдо рдХреЗ рдЙрддреНрдкрд╛рджрди (2.8V) рд╕реЗ рд▓реА рдЧрдИ рдереА, рдЗрд╕рд▓рд┐рдП рд╕реНрддрд░реЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред

рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд - рдмрдВрджрд░рдЧрд╛рд╣ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдореИрдВ рдкреЛрд░реНрдЯ рдХреЛ рдХреЙрдордЯреНрд░реИрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ (рдЬрдмрдХрд┐ рдпрд╣ рдХрдЪреНрдЪрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛) рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдФрд░ рдкреНрд░реЗрд╕ рдореЗрдВ "рдПрдЯреА" рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВред рдЕрджреНрднреБрдд! рдореЙрдбреЗрдо рдЧреВрдБрдЬ рдЧрдпрд╛:

рдПрдЯреА
рдареАрдХ

рдлрд┐рд░ рднреНрд░рдо рд╢реБрд░реВ рд╣реБрдЖред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореИрдВрдиреЗ "рдПрдХ рджреЛрд╕реНрдд рдХреЛ рдХреЙрд▓" (рдпрд╛рдиреА, рдЦреБрдж рдХреЛ) рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЙрдбреЗрдо рдиреЗ рд▓рдЧрд╛рддрд╛рд░ "NO CARRIER" рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред рдбреЙрдХреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╕рдордп рдЗрдирдЯреЗрд╢рди рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдЖ рдерд╛ - рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрд╡рд╛рдЬ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ ";"ред рдЕрдкрдиреА рд╢рд░реНрдо рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдВрдкрд░реНрдХ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреВрдЫрд╛ рдФрд░ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рдордЭрджрд╛рд░ рд░реВрдк рдореЗрдВ рдЗрдВрдЬреАрдирд┐рдпрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЦреБрдж рдХреЛ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ рдХреЙрд▓ рджреЗрдЦрддрд╛ рд╣реВрдВред рдореИрдВ рдХреЙрд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЦреБрдж рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ - рдЪреБрдкреНрдкреАред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдирд╛рд▓реЙрдЧ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЪреИрдирд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдореЙрдбреЗрдо "AT + QAUDCH = 2" рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВред
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдЧрд▓рд╛ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд░рд╣рд╛, рдФрд░ рдореИрдВ рдлреЛрди рдкрд░ рдФрд░ рд╣реЗрдбрд╕реЗрдЯ рдореЗрдВ рдЦреБрдж рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдзреНрд╡рдирд┐ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рднрд╛рд╖рдг рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд, рдХрд┐рд╕реА рднреА рдЧреВрдВрдЬ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд╕реНрддреЗ рд╕рдВрдЪрд╛рд░ рдХреЗ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ред рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬреНрдп рдереЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝реИрдХреНрдЯрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдмрд╕реЗ рд╕рдлрд▓ рдереАрдВред
рдПрд╕рдПрдордПрд╕-рдХрд╛рдореА рдХреЗ рд╕рд╛рде рдЖрд╡рд╛рдЬ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓рд╛ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдЬреАрдПрд╕рдПрдо рдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдПрдХ рдЬреАрдкреАрдЖрд░рдПрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рд╛ред

рдЖрдИрдкреА тАЛтАЛрдвреЗрд░ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛, рдиреЗ рдореБрдЭреЗ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореЙрдбреЗрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрдпрд╛рдо рдХреЗ рдбреЗрдЯрд╛ рджрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг "рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░" рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ M95 рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ VB.NET рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреВрдВрдЧрд╛ред
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ
Private Sub RunScript() Dim sRet, sTemp As String Dim timeStart As Date Dim timeStop As Date Dim nTime As Double = 0 Dim nCount As Integer Dim tSpan As TimeSpan Dim serialStatus As Boolean = SerialPortA.IsOpen Dim seansOpen As Boolean = False Dim sBlock440 As String = "operations$├╢├╗├в├░├л├й├о├░├╖├▒├й├░├╢├в├й├о├░├│2837├в├н2├а├г├п├л├╢├г├й├п├а├╢├л├д├о3├п├░├а├л├о├╢├н├│├п├а├╣├г34├п├а├╣├г├а4├│├н├п├╣├╢├г├н├п4├а├к├г├╣├н├╢├п├╣├╕├г├н4├п├а├╣├г├╢├│├е├п├а├к├г├╢├╣4├п├а├╣├г├╕4├н├п├а├╣├╢├г4├н├п├а├к├╣├╢6├е4├к6├е├п├╢├╕├г├н├а├п├╢4├╣├п├е├а├╢├╣├а├п├╢├╣├г├а4├п├╢├╣├г47├п├е├а├к├╣├╢├п├╣4├г├п├а├╕├╢├г├а├п4├╣├г├п4├а├╣├г├╢├п├а├╣├╢├г├п4├а├╕├╣├г6├п4├а├╣├г├╢4├п├е├а├╕├г├╢├п64├а├╕├г46├п├а6├╢├п├а├╕76├╢4├п├а├д├╢├г├а├п├н├╢├г├╕├н├пuiowq3ygrowg3fowrtgowufygbow4gfowueyfgco6wt4go68gfrwkuyfcgwkgy4ckuw4ygfouwygou4fgrfouwf4gow4grfw4yofgowu4ygfou4fgwo4uygfwy4gfow4g4gfowufgou4rgyfwuyfguwygf4uyg4f6gfiu4gklejhdkwehfewhrkferhiuht43iuhiur" '         Dim nDisconnect As Integer = 0 Dim nMinTimeA, nMinTimeB, nMaxTimeA, nMaxTimeB, nEvgTimeA, nEvgTimeB As Integer Dim nSendAttemptA, nSendAttemptB, nLostPackA, nLostPackB As Integer Dim nSendSuccA, nSendSuccB As Integer Dim nLostConnect As Integer = 0 Dim timeSummary As Double = 0 Dim timeSummaryMin As Double = 0 Dim timeSummaryMax As Double = 0 Dim timeSummaryEvg As Double = 0 _allowRun = True _allowEcho = True _ReadBuff = "" _lastClear = False _lastLine = "" nMinTimeA = 0 nMinTimeB = 0 nMaxTimeA = 0 nMaxTimeB = 0 nEvgTimeA = 0 nEvgTimeB = 0 nSendAttemptA = 0 nSendAttemptB = 0 nLostPackA = 0 nLostPackB = 0 nSendSuccA = 0 nSendSuccB = 0 '   MessPull.ClearMessage() MessPull.AllowCMEErrorIntercept = True MessPull.AllowFuncIntercept = True MessPull.AllowSMSErrorIntercept = True MessPull.DropCME_Error() MessPull.DropSMS_Error() '   Dim record As New StreamWriter(Application.StartupPath & "\Default.log") Me.WriteToConsole("Script started at " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Script started at " + DateTime.Now.ToLongTimeString + "!") If Not SerialPortA.IsOpen Then Try SerialPortA.Open() Catch Me.WriteToConsole("Serial Port: " + SerialPortA.PortName + " is busy! Script stopped at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Serial Port: " + SerialPortA.PortName + " is busy! Script stopped at: " + DateTime.Now.ToLongTimeString + "!") _allowRun = False End Try End If '   If _allowRun Then nCount = 0 sTemp = "" MessPull.ClearMessage() While ((InStr(sTemp, "OK") = 0) And _allowRun) nCount += 1 sTemp = MessPull.ExecuteAT(SerialPortA, "AT" + vbCrLf, 3000) Me.WriteToConsole("Attempt: " + Str(nCount) + " Send: " + sTemp) End While Me.DisplayFunc() '   Me.WriteToConsole("Turn on the modem!" + vbCrLf) If Not MessPull.CheckAndSetup(SerialPortA, "AT+CFUN?", "CFUN", "1", , , , , "AT+CFUN=1", "Call Ready", 15000) Then Me.WriteToConsole("Modem does not turn on! Script Aborted!" + vbCrLf) _allowRun = False Else '    Me.WriteToConsole(MessPull.ExecuteAT(SerialPortA, "ATE1", 3000)) MessPull.CheckAndSetup(SerialPortA, "AT+CREG?", "CREG", "1", 0, ",", "OK", 1000, "AT+CREG=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+CGREG?", "CGREG", "1", 0, ",", "OK", 1000, "AT+CGREG=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+CRC?", "CRC", "0", 0, ",", "OK", 1000, "AT+CRC=0", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QAUDCH?", "QAUDCH", "2", 0, ",", "OK", 1000, "AT+QAUDCH=2", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIFGCNT?", "QIFGCNT", "1", 0, ",", "OK", 1000, "AT+QIFGCNT=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QICSGP?", "QICSGP", "1", 0, ",", "OK", 1000, "AT+QICSGP=" + _QICSGP, "OK", 5000) End If Me.DisplayFunc() End If While _allowRun While _allowRun If (MessPull.CheckAndSetup(SerialPortA, "AT+CREG?", "CREG", "1", 1) And MessPull.CheckAndSetup(SerialPortA, "AT+CGREG?", "CGREG", "1", 1)) Then Exit While End If Me.DisplayFunc() End While Me.DisplayFunc() Me.WriteToConsole("Modem is registered on the home network at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Modem is registered on the home network at: " + DateTime.Now.ToLongTimeString + "!") '    While (_allowRun And (Not seansOpen = True)) Me.DisplayFunc() Me.WriteToConsole(MessPull.ExecuteAT(SerialPortA, "AT+QISTAT", 2000) + vbCrLf) 'MessPull.WaitAnswer(SerialPortA, 5000, "", False) 'record.WriteLine("Request status at: " + DateTime.Now.TimeOfDay.ToString + "!") sRet = MessPull.GetFuncValue("STATE") Select Case sRet Case "IP INITIAL" MessPull.CheckAndSetup(SerialPortA, "AT+QISDE?", "QISDE", "0", 0, ",", "OK", 1000, "AT+QISDE = 0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIMUX?", "QIMUX", "0", 0, ",", "OK", 1000, "AT+QIMUX = 0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIMODE?", "QIMODE", "0", 0, ",", "OK", 1000, "AT+QIMODE=0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIDNSIP?", "QIDNSIP", "0", 0, ",", "OK", 1000, "AT+QIDNSIP=0", 5000) If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIREGAPP", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can not register application on network! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "IP START" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIACT", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can't Activate GPRS/CSD context! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "IP GPRSACT" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QILOCIP", 2000, "."), ".") > 0 Then Me.WriteToConsole("Can't Get local IP addres!" + vbCrLf) record.WriteLine("Can't Get local IP addres!") End If Case "IP STATUS" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIOPEN=" + _QIOPEN, 5000, "OK"), "OK") > 0 Then seansOpen = True Else Me.WriteToConsole("Can not estabilish connect!" + vbCrLf) record.WriteLine("Can not estabilish connect!") seansOpen = False End If Case "IP CLOSE" MessPull.ExecuteAT(SerialPortA, "AT+QIDEACT", 5000, "DEACT OK") Me.WriteToConsole("Deactivate GPRS/CSD context!" + vbCrLf) record.WriteLine("Deactivate GPRS/CSD context!") seansOpen = False Case "CONNECT OK" seansOpen = True Me.WriteToConsole("Connection OK!" + vbCrLf) record.WriteLine("Connection OK!") Case "PDP DEACT" Me.WriteToConsole("GPRS/CSD context was deactivated because of unknown reason. Reconnecting!" + vbCrLf) record.WriteLine("GPRS/CSD context was deactivated because of unknown reason. Reconnecting!") If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIACT", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can't Activate GPRS/CSD context! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "TCP CONNECTING" Sleep(800) Case Else Me.WriteToConsole("Connection status: " + sRet + vbCrLf) record.WriteLine("Connection status: " + sRet) End Select Me.WriteToConsole("Connection status: " + sRet + vbCrLf) Me.DisplayFunc() End While While (seansOpen And _allowRun) MessPull.ClearMessage() MessPull.ExecuteAT(SerialPortA, "AT+QISTAT") timeSummary = 0 nSendAttemptA += 1 timeStart = Now sRet = Trim(MessPull.ExecuteAT(SerialPortA, "AT+QISEND=8", 3000, ">", False)) 'Me.WriteToConsole("Time execution AT+QISEND=8" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, ">") > 0 Then sRet = MessPull.ExecuteAT(SerialPortA, "balance$", 3000, "SEND OK", False) 'Me.WriteToConsole("Time execution [balance$]" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, "SEND OK") > 0 Then _nCharWait = 40 sRet = MessPull.WaitAnswer(SerialPortA, 10000, "balance>................................", , False) If sRet = "balance>................................" Then Me.WriteToConsole(vbCrLf) timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds timeSummary = tSpan.TotalMilliseconds nMinTimeA = IIf(nMinTimeA = 0, nTime, IIf(nMinTimeA > nTime, nTime, nMinTimeA)) nMaxTimeA = IIf(nMaxTimeA = 0, nTime, IIf(nMaxTimeA < nTime, nTime, nMaxTimeA)) nEvgTimeA = IIf(nEvgTimeA = 0, nTime, (nTime + nEvgTimeA) / 2) nSendSuccA += 1 '     nSendAttemptB += 1 timeStart = Now sRet = Trim(MessPull.ExecuteAT(SerialPortA, "AT+QISEND=440", 3000, ">", False)) 'Me.WriteToConsole("Time execution AT+QISEND=440" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, ">") > 0 Then MessPull.ClearMessage() _nCharWait = 4 sRet = MessPull.ExecuteAT(SerialPortA, sBlock440, 5000, "SEND OK", False) If InStr(sRet, "SEND OK") > 0 Then sRet = MessPull.WaitAnswer(SerialPortA, 10000, "done", , False) If InStr(sRet, "done") > 0 Then timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds timeSummary = timeSummary + tSpan.TotalMilliseconds nMinTimeB = IIf(nMinTimeB = 0, nTime, IIf(nMinTimeB > nTime, nTime, nMinTimeB)) nMaxTimeB = IIf(nMaxTimeB = 0, nTime, IIf(nMaxTimeB < nTime, nTime, nMaxTimeB)) nEvgTimeB = IIf(nEvgTimeB = 0, nTime, (nTime + nEvgTimeB) / 2) nSendSuccB += 1 Me.WriteToConsole(vbCrLf) Me.WriteToConsole("Cycle Ok. Time: " + timeSummary.ToString + vbCrLf) record.WriteLine("Cycle Ok. Time: " + timeSummary.ToString) timeSummaryMin = IIf(timeSummaryMin = 0, timeSummary, IIf(timeSummaryMin > timeSummary, timeSummaryMin, timeSummaryMin)) timeSummaryMax = IIf(timeSummaryMax = 0, timeSummary, IIf(timeSummaryMax < timeSummary, timeSummary, timeSummaryMax)) timeSummaryEvg = IIf(timeSummaryEvg = 0, timeSummary, (timeSummary + timeSummaryEvg) / 2) Else nLostPackB += 1 Me.WriteToConsole("Not Answer (440 byte). Time: " + nTime.ToString + vbCrLf) record.WriteLine("Not Answer (440 byte). Time: " + nTime.ToString) End If Else Me.WriteToConsole("Unsuccessfully send Data Pack (440 byte). Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully send Data Pack (440 byte). Time: " + nTime.ToString) End If Else timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds Me.WriteToConsole("Error execute command AT+QISEND=440. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Error execute command AT+QISEND=440. Time: " + timeSummary.ToString) End If Else timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds nLostPackA += 1 Me.WriteToConsole("Unsuccessfully execute command [balance$]. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully execute command [balance$]. Time: " + nTime.ToString) End If Else Me.WriteToConsole("Unsuccessfully send command [balance$]. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully send command [balance$]. Time: " + nTime.ToString) MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds End If Else MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") Me.WriteToConsole("Error execute command AT+QISEND=8!" + vbCrLf) record.WriteLine("Error execute command AT+QISEND=8!") End If MessPull.SetFuncValue("CounterA", nSendAttemptA.ToString) MessPull.SetFuncValue("CounterB", nSendAttemptB.ToString) MessPull.SetFuncValue("AverageTimeA", nEvgTimeA.ToString) MessPull.SetFuncValue("AverageTimeB", nEvgTimeB.ToString) Me.DisplayFunc() If Not MessPull.GetFuncValue("STATE") = "CONNECT OK" Then nLostConnect += 1 seansOpen = False Me.WriteToConsole("Connection lost at: " + DateTime.Now.ToLongTimeString + vbCrLf) record.WriteLine("Connection lost at: " + DateTime.Now.ToLongTimeString) Me.WriteToConsole("Attempt to reconnect." + vbCrLf) record.WriteLine("Attempt to reconnect.") End If Sleep(2000) End While End While MessPull.ExecuteAT(SerialPortA, "AT+QICLOSE", 5000, "CLOSE OK|ERROR") MessPull.ExecuteAT(SerialPortA, "AT+QIDEACT", 5000, "DEACT OK|ERROR") Me.WriteToConsole("Connection Closed and GPRS/CSD context was deactivated at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Connection Closed and GPRS/CSD context was deactivated at: " + DateTime.Now.ToLongTimeString + "!") Me.WriteToConsole("---------------------------------------------------------------------------------------------" + vbCrLf) record.WriteLine("---------------------------------------------------------------------------------------------") Me.WriteToConsole("Execution repport:" + vbCrLf) record.WriteLine("Execution repport:") Me.WriteToConsole("[balance$] request MIN time (milliseconds): " + nMinTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request MIN time (milliseconds): " + nMinTimeA.ToString) Me.WriteToConsole("[balance$] request MAX time (milliseconds): " + nMaxTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request MAX time (milliseconds): " + nMaxTimeA.ToString) Me.WriteToConsole("[balance$] request AVERAGE time (milliseconds): " + nEvgTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request AVERAGE time (milliseconds): " + nEvgTimeA.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("[440 byte pack] request MIN time (milliseconds): " + nMinTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request MIN time (milliseconds): " + nMinTimeB.ToString) Me.WriteToConsole("[440 byte pack] request MAX time (milliseconds): " + nMaxTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request MAX time (milliseconds): " + nMaxTimeB.ToString) Me.WriteToConsole("[440 byte pack] request AVERAGE time (milliseconds): " + nEvgTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request AVERAGE time (milliseconds): " + nEvgTimeB.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Summary request MIN time (milliseconds): " + timeSummaryMin.ToString + vbCrLf) record.WriteLine("Summary request MIN time (milliseconds): " + timeSummaryMin.ToString) Me.WriteToConsole("Summary request MAX time (milliseconds): " + timeSummaryMax.ToString + vbCrLf) record.WriteLine("Summary request MAX time (milliseconds): " + timeSummaryMax.ToString) Me.WriteToConsole("Summary request AVERAGE time (milliseconds): " + timeSummaryEvg.ToString + vbCrLf) record.WriteLine("Summary request AVERAGE time (milliseconds): " + timeSummaryEvg.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Total send attempt command [balance$]: " + nSendAttemptA.ToString + vbCrLf) record.WriteLine("Total send attempt command [balance$]: " + nSendAttemptA.ToString) Me.WriteToConsole("Total send attempt packet [440 byte]: " + nSendAttemptB.ToString + vbCrLf) record.WriteLine("Total send attempt packet [440 byte]: " + nSendAttemptB.ToString) Me.WriteToConsole("Total send succes [balance$]: " + nSendSuccA.ToString + vbCrLf) record.WriteLine("Total send succes [balance$]: " + nSendSuccA.ToString) Me.WriteToConsole("Total send succes [440 byte]: " + nSendSuccB.ToString + vbCrLf) record.WriteLine("Total send succes [440 byte]: " + nSendSuccB.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Lost packet [balanse$]: " + nLostPackA.ToString + vbCrLf) record.WriteLine("Lost packet [balanse$]: " + nLostPackA.ToString) Me.WriteToConsole("Lost packet [440 byte]: " + nLostPackB.ToString + vbCrLf) record.WriteLine("Lost packet [440 byte]: " + nLostPackB.ToString) Me.WriteToConsole("---------------------------------------------------------------------------------------------" + vbCrLf) record.WriteLine("---------------------------------------------------------------------------------------------") Me.WriteToConsole("Script stopped at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Script stopped at: " + DateTime.Now.ToLongTimeString + "!") record.Close() '   If Not serialStatus Then SerialPortA.Close() End If '    _allowEcho = True End Sub 



рдкрд░реАрдХреНрд╖рдг рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛ рдпрд╣ рдЙрдмрд╛рдК рд╣рд┐рд╕реНрд╕рд╛ рдмрд╕ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕рд░реНрд╡рд░ рдкрддрд╛ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдПрдкреАрдПрди рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдореЙрдбреЗрдо рдХреЛ "рдореГрдд" рдЬрд╝реЛрди рдХреА рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдореЛрдб рдореЗрдВ рд╢рд╣рд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд▓рдВрдмреА рдпрд╛рддреНрд░рд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдЯреЗрд▓реАрдлреЛрди рдХрдиреЗрдХреНрд╢рди рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, 860 рд╕реЗ рдЕрдзрд┐рдХ рдкреИрдХреЗрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рдЦреЛ рдЧрдП рдереЗ, рдФрд░ рдЖрдИрдкреА рд╕рддреНрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд▓реНрдХрд┐ рдкреНрд░рд╕рд┐рджреНрдз рдмреАрдЬреАрдПрд╕ 2 рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЙрдбреЗрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рдВрдЪрд╛рд░ рд╕реНрдерд┐рд░рддрд╛ рдФрд░ M95 рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╡рд┐рдирд┐рдордп рджрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ Cinterion BGS2 рдХреА рдкреЗрд░рд╛рдИ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рджреЛрдиреЛрдВ рдореЛрдбреЗрдо рд▓реИрдкрдЯреЙрдк рдХреЗ рдпреВрдПрд╕рдмреА рдкреЛрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдереЗ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдорд╛рди AMMAP 003 рдПрдВрдЯреЗрдирд╛ рдереЗ, рд▓реЗрдХрд┐рди BGS2 рдХреЛ 1000mF рдкрд╛рд╡рд░ рдХреИрдкреЗрд╕рд┐рдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ M95 рдХреА рдХреАрдордд 100 рдорд╛рдЗрдХреНрд░реЙрдлрд╝рд╛рд░рдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдереАред рдЗрд╕реА рд╕рдордп, рдПрдо 95 рдХреА рдФрд╕рдд рд╡рд░реНрддрдорд╛рди рдЦрдкрдд рдмреАрдЬреАрдПрд╕ 2 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 46% рдХрдо рдереАред рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдкрд░рд┐рдгрд╛рдо, рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдореБрдЭреЗ M95 рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рджреЛ рджрд┐рди рд▓рдЧреЗ, рдФрд░ рдореБрдЭреЗ BGS2 рдХреЗ рд▓рд┐рдП "рдкрд╕реАрдирд╛" рдЪрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рддреЛ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП)ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, M95 рдореЙрдбреЗрдо рдХреЗ рд░реВрдк рдореЗрдВ QUECTEL рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╣рд▓реЗ рдЕрдиреБрднрд╡ рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рдкреНрд░рд╕рдиреНрди рдХрд┐рдпрд╛, рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВ рдРрд╕реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдереЗ, рдмрд┐рдирд╛ рд╕рд╛рд░ рдЪрддреБрд░рд╛рдИ рдФрд░ рдореГрдд рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗред

рд╣рд╛рдБ, рд╣реЗрдм рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдореБрдЭреЗ M95 рдХреЗ рдЬрдк рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░рдирд╛, рдореБрдЭреЗ рдорд╛рдлрд╝ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдиреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦрд╛, рдФрд░ рд╕рдВрдЧрдд 12 рд╡рд░реНрдЧ рдХреЗ рдЬреАрдкреАрдЖрд░рдПрд╕ рдореЙрдбреЗрдо рдХреЗ рдЖрда рдореЙрдбрд▓ рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдпрд╛ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░реВрд╕реА рдмрд╛рдЬрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдХрд┐рдлрд╛рдпрддреА рдФрд░ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореЙрдбреЗрдо рд╣реИред рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛!

рд╕реВрдЦрд╛ рдХреЛрдб

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд░реА рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд░реВрдб, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛрдб рд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдлреЙрд░реНрдо рдХреЛрдб рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рднреАред

рд╡рд░реНрдЧ рдпреБрдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб:
 Imports System Imports System.Object Imports System.Collections Imports System.Threading.Thread Imports System.IO.Ports Module ScriptRun 'Public Enum AnswerStatus As Integer ' Reciv_Nothing = 0 ' Reciv_OK = 1 ' Reciv_Send = 2 ' Reciv_Func = 4 ' Reciv_Mess = 8 ' Reciv_CME_ERROR = 16 ' Reciv_ERROR = 32 ' Reciv_TimeOut = 256 'End Enum Public Class MessPull #Region "Declaration Block" Private Shared msgList As String() = {} '  ,    '#Private Shared AnsModem As AnswerStatus '    AnswerStatus Private Shared _funcTable As New Hashtable() '    +:  Private Shared _Recieved As Boolean '     - True '#Private Shared _messTable As New Hashtable() '   +  '    ,       ,   '    -    - _funcVal Private Shared _funcIntercept As Boolean = True '   "+FUNC: VALUE" Private Shared _EchoIntegcept As Boolean = True '      (  ATE0) Private Shared _cmeIntercept As Boolean = True '     "+CME ERROR: XXX" Private Shared _smsIntercept As Boolean = True '     "+SMS ERROR: XXX" Private Shared _cmeError As Boolean = False ' -  "+CME ERROR: XXX" Private Shared _smsError As Boolean = False ' -  "+SMS ERROE: XXX" Private Shared _cmeLastError As Integer = -1 '  "+CME ERROR:" Private Shared _smsLastError As Integer = -1 '  "+SMS ERROR:" Private Shared _lastCommand As String = "" '    '    Private Shared startTime, stopTime As Date '   TimeOut-    Private Shared tSpan As TimeSpan '  TimeOut,    Private Shared _lastTRun As Integer '   TimeOut- Private Shared _timeOut As Boolean ' TimeOut   TimeOut- '   SyncLock,       Private Shared blockSync As New Object Public Shared URCMessageList() As String = {"RING", _ "MO RING", _ "MO CONNECTED", _ "Call Ready", _ "CCWV", _ "RDY", _ "NORMAL POWER DOWN", _ "UNDER_VOLTAGE WARNING", _ "UNDER_VOLTAGE POWER DOWN", _ "OVER_VOLTAGE WARNING", _ "OVER_VOLTAGE POWER DOWN"} #End Region #Region "Property definition Block" Public Shared ReadOnly Property FuncTable As Hashtable Get SyncLock blockSync Return _funcTable End SyncLock End Get End Property Public Shared ReadOnly Property MessageRecieved As Boolean Get SyncLock blockSync Return _Recieved End SyncLock End Get End Property Public Shared ReadOnly Property LastTimeRun() As Integer Get SyncLock blockSync Return _lastTRun End SyncLock End Get End Property Public Shared ReadOnly Property TimeOutState() As Boolean Get SyncLock blockSync Return _timeOut End SyncLock End Get End Property Public Shared Property AllowFuncIntercept() As Boolean Get SyncLock blockSync Return _funcIntercept End SyncLock End Get Set(value As Boolean) SyncLock blockSync _funcIntercept = value End SyncLock End Set End Property Public Shared Property AllowEchoIntercept() As Boolean Get SyncLock blockSync Return _EchoIntegcept End SyncLock End Get Set(value As Boolean) SyncLock blockSync _EchoIntegcept = value End SyncLock End Set End Property Public Shared Property AllowCMEErrorIntercept() As Boolean Get SyncLock blockSync Return _cmeIntercept End SyncLock End Get Set(value As Boolean) SyncLock blockSync _cmeIntercept = value End SyncLock End Set End Property Public Shared Property AllowSMSErrorIntercept() As Boolean Get SyncLock blockSync Return _smsIntercept End SyncLock End Get Set(value As Boolean) SyncLock blockSync _smsIntercept = value End SyncLock End Set End Property Public Shared ReadOnly Property LastCME_Error() As Boolean Get SyncLock blockSync Return _cmeLastError End SyncLock End Get End Property Public Shared ReadOnly Property LastSMS_Error() As String Get SyncLock blockSync Return _smsLastError End SyncLock End Get End Property Public Shared Property LastCommand() As String Get SyncLock blockSync Return _lastCommand End SyncLock End Get Set(value As String) SyncLock blockSync _lastCommand = value End SyncLock End Set End Property #End Region #Region "TimeOut-Function" Public Shared Function CheckAndSetup(ByRef comPort As SerialPort, ByVal sCheckCommand As String, ByVal sFunc As String, ByVal sValue As String, Optional ByVal nIndex As Integer = 0, Optional ByVal sDelim As String = ",", Optional ByVal sCheckExpect As String = "OK", Optional ByVal nCheckTimeOut As Integer = 1000, Optional ByVal sSetCommand As String = "", Optional ByVal sSetExpect As String = "OK", Optional ByVal nSetTimeOut As Integer = 2000) As Boolean '----------------------------------------------------------------------------------- ' ChechAndSetup  AT- <sCheckCommand>    <comPort>  '   <nCheckTimeOut>      ' "OK"  "0".       '<sFunc>   <nIndex>    <sValue>.    ',    True      False. '   <sCheckCommand>      ,   ' False. '--------------------------------- '     <sSetCommand>   ,    '    False,     <comPort>  ' <sSetCommand>      "OK"  "0"  '  <nSetTimeOut>.       ,  '   <sFunc>   <nIndex>    <sValue>. '      False  True. '--------------------------------- '           'False   TimeOutState  True '--------------------------------- ' <sDelim>   ,      '   String.Split() '----------------------------------------------------------------------------------- Dim stTime As Date = Now Dim sRet As String Dim bCheck As Boolean ' startTime = stTime CheckAndSetup = False _timeOut = False If (comPort.IsOpen And (sCheckCommand.Length > 0)) Then SerialWriteLine(comPort, sCheckCommand) sRet = WaitAnswer(comPort, nCheckTimeOut, sCheckExpect, False) bCheck = CheckFuncValue(sFunc, sValue, sDelim, nIndex) If ((Not bCheck) And (Not _timeOut) And (sSetCommand.Length > 0)) Then startTime = Now SerialWriteLine(comPort, sSetCommand) sRet = WaitAnswer(comPort, nSetTimeOut, sSetExpect, False) If Not _timeOut Then CheckAndSetup = CheckFuncValue(sFunc, sValue, sDelim, nIndex) End If Else CheckAndSetup = bCheck End If End If stopTime = Now tSpan = stopTime.Subtract(stTime) _lastTRun = Int(tSpan.TotalMilliseconds) End Function Public Shared Function SendData(ByRef comPort As SerialPort, _ Optional sComm As String = "", _ Optional ByVal tOut As Integer = 1000, _ Optional sExpect As String = "OK|ERROR") As String '----------------------------------------------------------------------------------- '  AT-      comPort   '      sComm ( )    '       sExpect. '------------------------------------ '  sComm = ""  ,       AT- ',           . '------------------------------------ '  tOut ,      1  '------------------------------------ '   '  .     '   '   "|".      '() ' ,        ' '        ,    ' .    ,   '" " + " " - vbCrLf. '    tOut,       ',    TimeOutState = True   LastTimeRun   '   '    WaitAnswer, TimeOutState   False '  LastTimeRun     '----------------------------------------------------------------------------------- startTime = Now If sComm.Length > 0 Then SerialWrite(comPort, sComm) End If SendData = WaitAnswer(comPort, tOut, sExpect, False) stopTime = Now tSpan = stopTime.Subtract(startTime) _lastTRun = Int(tSpan.TotalMilliseconds) End Function Public Shared Function ExecuteAT(ByRef comPort As SerialPort, _ Optional sComm As String = "", _ Optional ByVal tOut As Integer = 1000, _ Optional sExpect As String = "OK|ERROR", _ Optional ByVal bSetCrLf As Boolean = True) As String '----------------------------------------------------------------------------------- '  AT-      comPort   '      sComm ( )    '       sExpect. '------------------------------------ '  sComm = ""  ,       AT- ',           . '------------------------------------ '  tOut ,      1  '------------------------------------ '   '  .     '   '   "|".      '() ' ,        ' '        ,    ' .    ,   '" " + " " - vbCrLf. '    tOut,       ',    TimeOutState = True   LastTimeRun   '   '    WaitAnswer, TimeOutState   False '  LastTimeRun     '----------------------------------------------------------------------------------- startTime = Now If sComm.Length > 0 Then comPort.WriteLine(Trim(sComm)) End If ExecuteAT = WaitAnswer(comPort, tOut, sExpect, False) stopTime = Now tSpan = stopTime.Subtract(startTime) _lastTRun = Int(tSpan.TotalMilliseconds) End Function Public Shared Function WaitAnswer(ByRef commPort As SerialPort, _ Optional tOut As Integer = 1000, _ Optional sExpect As String = "OK|ERROR", _ Optional ByVal bStTime As Boolean = True, _ Optional ByVal bSetCrLf As Boolean = True) As String '----------------------------------------------------------------------------------- '         commPort  '  tOut          '    sExpect. '------------------------------------ ' bStTime      , '( - ) '------------------------------------ '  tOut ,      1  '------------------------------------ '   '  .     '   '   "|".      '() ' ,        ' '        ,    ' .    ,   '" " + " " - vbCrLf. '    tOut,       ',    TimeOutState = True   LastTimeRun   '   '    WaitAnswer, TimeOutState   False '  LastTimeRun     '----------------------------------------------------------------------------------- Dim sTemp, sText As String Dim sTerminator As String = IIf(bSetCrLf, vbCrLf, "") Dim aExpect As String() = {} Dim bContinue As Boolean = True _timeOut = False If bStTime Then startTime = Now End If WaitAnswer = "" If sExpect.Length > 0 Then aExpect = sExpect.Split("|".ToCharArray) Else aExpect = {} End If While bContinue While (MsgCount() < 1) Sleep(5) stopTime = Now tSpan = stopTime.Subtract(startTime) If tSpan.TotalMilliseconds > tOut Then _timeOut = True _lastTRun = Int(tSpan.TotalMilliseconds) bContinue = False Exit While End If End While If bContinue Then sTemp = ExtractMess() WaitAnswer = IIf(WaitAnswer.Length > 0, WaitAnswer + sTemp + sTerminator, sTemp + sTerminator) If aExpect.Length > 0 Then For Each sText In aExpect If InStr(sTemp, sText) > 0 Then bContinue = False Exit For End If Next sText End If Else Exit While End If End While stopTime = Now tSpan = stopTime.Subtract(startTime) _lastTRun = Int(tSpan.TotalMilliseconds) End Function Public Shared Function WaitFunc(ByVal sKey As String, Optional ByVal tOut As Integer = 1000, Optional ByVal sDelim As String = ",", Optional ByVal nIndex As Integer = -1) As String '----------------------------------------------------------------------------------- '    sKey  -    tOut  '.          '     nIndex. '------------------------------------ '  tOut ,      1  '------------------------------------ '  nIndex  ,       '     sDelim.   nIndex ,  '    sKey       . '----------------------------------------------------------------------------------- Dim sTemp As String _timeOut = False startTime = Now WaitFunc = "" While True sTemp = GetFuncValue(sKey, sDelim, nIndex) If sTemp.Length > 0 Then WaitFunc = sTemp Exit While End If stopTime = Now tSpan = stopTime.Subtract(startTime) If tSpan.TotalMilliseconds > tOut Then _timeOut = True _lastTRun = Int(tSpan.TotalMilliseconds) Exit While End If Sleep(5) End While stopTime = Now tSpan = stopTime.Subtract(startTime) _lastTRun = Int(tSpan.TotalMilliseconds) End Function #End Region #Region "Public Methods ()" Public Shared Sub SerialWrite(ByVal comPort As SerialPort, ByVal sComm As String) If (comPort.IsOpen And (sComm.Length > 0)) Then comPort.Write(sComm) _lastCommand = Trim(sComm) End If End Sub Public Shared Sub SerialWriteLine(ByVal comPort As SerialPort, ByVal sComm As String) If (comPort.IsOpen And (sComm.Length > 0)) Then comPort.WriteLine(sComm) _lastCommand = Trim(sComm) End If End Sub Public Shared Function IsCME_Error() As Boolean IsCME_Error = _cmeError End Function Public Shared Function IsSMS_Error() As Boolean IsSMS_Error = _smsError End Function Public Shared Sub DropCME_Error() _cmeError = False _cmeLastError = -1 End Sub Public Shared Sub DropSMS_Error() _smsError = False _smsLastError = -1 End Sub Public Shared Function AppendLines(ByVal aLines As String()) As Integer '------------------------------------------------------------------------------- '        '         '       ,      Dim sText As String If aLines.Length > 0 Then For Each sText In aLines AppendLines = AppendMess(sText) Next End If End Function Public Shared Function AppendMess(ByVal sText As String) As Integer '------------------------------------------------------------------------------- '        '         '       ,     Dim nCount As Integer = 0 If _funcIntercept Then sText = FuncIntercept(sText) End If If sText.Length > 0 Then SyncLock blockSync nCount = msgList.Length ReDim Preserve msgList(nCount) msgList(nCount) = Trim(sText) nCount = msgList.Length _Recieved = True End SyncLock Else SyncLock blockSync nCount = msgList.Length End SyncLock End If AppendMess = nCount End Function Public Shared Function Items() As String() '------------------------------------------------------------------------------- '      ( )  Dim aStr As String() SyncLock blockSync Dim nCount As Integer = UBound(msgList) ReDim aStr(nCount) Array.Copy(msgList, aStr, msgList.Length) End SyncLock Items = aStr End Function Public Shared Function MsgCount() As Integer '------------------------------------------------------------------------------- '       SyncLock blockSync MsgCount = msgList.Length End SyncLock End Function Public Shared Function ExtractMess() As String '------------------------------------------------------------------------------- '           '       ,    '     '       ,    Dim nCount As Integer ExtractMess = "" SyncLock blockSync If msgList.Length > 0 Then ExtractMess = msgList(0) nCount = UBound(msgList) nCount -= 1 Array.Copy(msgList, 1, msgList, 0, msgList.Length - 1) ReDim Preserve msgList(nCount) End If If msgList.Length = 0 Then _Recieved = False End SyncLock End Function Public Shared Sub ClearMessage() '------------------------------------------------------------------------------- '     SyncLock blockSync msgList = {} _Recieved = False End SyncLock End Sub Public Shared Function GetFuncValue(ByVal sKey As String, Optional ByVal sDelim As String = ",", Optional ByVal nIndex As Integer = -1) As String Dim sVal As String = "" Dim aVal As String() = {} GetFuncValue = "" SyncLock _funcTable.SyncRoot If _funcTable.ContainsKey(sKey) Then sVal = _funcTable(sKey) End If End SyncLock If (sVal.Length > 0) And (nIndex >= 0) Then aVal = sVal.Split(sDelim.ToCharArray, StringSplitOptions.RemoveEmptyEntries) If nIndex > UBound(aVal) Then Exit Function Else GetFuncValue = aVal(nIndex) End If Else GetFuncValue = sVal End If End Function Public Shared Function CheckFuncValue(ByVal sFunc As String, ByVal sValue As String, Optional ByVal sDelim As String = ",", Optional ByVal nIndex As Integer = 0) As Boolean Dim aVal As String() CheckFuncValue = False If (sFunc.Length > 0) And (_funcTable.Contains(sFunc)) Then aVal = _funcTable(sFunc).ToString.Split(sDelim.ToCharArray, StringSplitOptions.RemoveEmptyEntries) If nIndex <= UBound(aVal) Then CheckFuncValue = IIf(Trim(sValue) = Trim(aVal(nIndex)), True, False) End If End If End Function Public Shared Sub SetFuncValue(ByVal sKey, ByVal Value) SyncLock _funcTable.SyncRoot _funcTable(sKey) = Value End SyncLock End Sub Public Shared Sub RemuveFunc(ByVal sKey) SyncLock _funcTable.SyncRoot _funcTable.Remove(sKey) End SyncLock End Sub Public Shared Sub ClearFuncList() SyncLock _funcTable.SyncRoot _funcTable.Clear() End SyncLock End Sub #End Region #Region "Private Methods" Private Shared Function FuncIntercept(ByVal sText As String) As String '------------------------------------------------------------------------------- ' ""   +CREG:1.     '      "+"   '  ":",         ',    ":".  "+"  ":"   ' . '---------------- '          '    ,     '  . '---------------- Dim i, n, m As Integer Dim aLine As String() Dim key As String = "" Dim val As String = "" '      sText = Trim(sText) If (_EchoIntegcept And (sText = _lastCommand)) Then FuncIntercept = "" Exit Function End If '       FuncIntercept = sText i = InStr(sText, "+") n = InStr(sText, ":") m = InStr(sText, "^") If ((i > 0) Or (n > 0) Or (m > 0)) Then If sText.Length > 0 Then aLine = sText.Split("+^:".ToCharArray, StringSplitOptions.RemoveEmptyEntries) If aLine.Length = 0 Then Exit Function ElseIf aLine.Length = 1 Then key = aLine(0) val = "" ElseIf aLine.Length = 2 Then key = aLine(0) val = aLine(1) End If If val = "CME ERROR" Then _cmeError = True _cmeLastError = Int(val) If Not _cmeIntercept Then Exit Function End If ElseIf val = "SMS ERROR" Then _smsError = True _smsLastError = Int(val) If Not _smsIntercept Then Exit Function End If End If SyncLock _funcTable.SyncRoot _funcTable(Trim(key)) = Trim(val) End SyncLock FuncIntercept = "" End If End If End Function #End Region End Class End Module 



рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ / рдлрд╛рд░реНрдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреЛрдб:
 #Region "Import Namespace" Imports System Imports System.Text Imports System.IO Imports System.IO.Ports Imports System.Threading Imports System.Threading.Thread Imports System.Collections Imports System.Object Imports System.ComponentModel Imports System.Runtime.InteropServices Imports System.Runtime.ConstrainedExecution #End Region Public Class CommCare #Region "Declaration" Shared SerialPortA As SerialPort Shared _continue As Boolean ' False      ComboBox    Shared _readPort As Boolean ' False         TextBoxM Shared _lineCount As Integer '      TextBoxM,   -      Shared _nCharWait As Integer = 0 '    ,    _nCharWait    vbCrLf Shared _lastLine As String = "" '     COM   Shared _lastRead As String = "" '  ,       COM  Shared _ReadBuff As String = "" '            Shared _lastClear As Boolean '      _lastRead Shared _lockRead As Boolean '       _lastRead Shared _allowRun As Boolean '     ,   (False)   Shared _allowEcho As Boolean '           COM  Shared _timeOut As Boolean ' Shared _QICSGP As String '        Shared _QIOPEN As String '        Public hashToken As Hashtable '     AT- Private ScriptThread As Thread = New Thread(AddressOf RunScript) '     Public Enum scNames scKeyWord scVarData scLabel scCodeData scSubData End Enum '    Public aScript As Array = {New Hashtable, New Hashtable, New Hashtable, New ArrayList, New ArrayList} Public RunStack As Stack = New Stack Private BaudList As String() = {"4800", "9600", "14400", "19200", "38400", "57600", "115200", "128000", "230400", "460800", "614400", "921600", "1228800"} Private DataBitsList As String() = {"8", "7", "6", "5", "4"} ' API -     INI- Private Declare Auto Function GetPrivateProfileString Lib "kernel32" _ (ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As StringBuilder, _ ByVal nSize As Integer, _ ByVal lpFileName As String) As Int32 ' API -     INI- Private Declare Auto Function WritePrivateProfileString Lib "Kernel32" _ (ByVal Section As String, _ ByVal Key As String, _ ByVal putStr As String, _ ByVal INIfile As String) As Int32 ' This delegate enables asynchronous calls for setting ' the text property on a TextBox control. Delegate Sub SetTextCallback([text] As String, bClear As Boolean) #End Region #Region "COM Collectors" ' Recollect COM port setting Private Sub Refresh_COMSetting() _continue = False ' Dim readThread As Thread = New Thread(AddressOf Read) ' Create a new SerialPort object with default settings. Call CollectParity() Call CollectBaudRate() Call DataBitsSet() Call StopBitsSet() Call FlowControlSet() _continue = True End Sub ' Collect list of available COM ports (registry info) Private Sub CollectCOMM_List() Dim listCOM As String() = IO.Ports.SerialPort.GetPortNames() Dim port As String ' Clear list of COM Ports ComboBoxCOM_List.Items.Clear() ' Get list of serial COM ports ' Fill ComboBox, names of COM For Each port In listCOM ComboBoxCOM_List.Items.Add(port) Next port ComboBoxCOM_List.SelectedIndex = 0 End Sub ' Fill ComboBox BaudRate value and set ComboBox to port value allready setted Private Sub CollectBaudRate() 'Fill ComboBox_BaudList available speed list Dim BaudRate As String Dim DefBaud As Integer Dim DefSel As Integer Dim SelBox As Integer ComboBox_BaudList.Items.Clear() DefSel = 0 DefBaud = SerialPortA.BaudRate For Each BaudRate In BaudList Try SerialPortA.BaudRate = Int(BaudRate) If Int(BaudRate) = DefBaud Then SelBox = DefSel End If DefSel = DefSel + 1 ComboBox_BaudList.Items.Add(BaudRate) Catch ex As Exception ' Do nothing End Try Next SerialPortA.BaudRate = DefBaud ComboBox_BaudList.SelectedIndex = SelBox End Sub ' Fill ComboBox DataBits value and set ComboBox to port value allready setted Private Sub DataBitsSet() Dim DefDataBits As Integer Dim sBits As Integer Dim BoxSel, nSel As Integer ComboBox_DataBits.Items.Clear() DefDataBits = SerialPortA.DataBits nSel = 0 For Each sBits In DataBitsList If Int(sBits) = DefDataBits Then BoxSel = nSel End If nSel = nSel + 1 ComboBox_DataBits.Items.Add(sBits) Next ComboBox_DataBits.SelectedIndex = BoxSel End Sub ' Fill ComboBox StopBits value and set ComboBox to port value allready setted Private Sub StopBitsSet() ComboBox_StopBits.Items.Clear() Dim s As String For Each s In [Enum].GetNames(GetType(StopBits)) ComboBox_StopBits.Items.Add(s) Next s ComboBox_StopBits.SelectedIndex = SerialPortA.StopBits End Sub ' Fill ComboBox Parity value and set ComboBox to port value allready setted Private Sub CollectParity() Dim s As String ComboBox_ParityList.Items.Clear() For Each s In [Enum].GetNames(GetType(Parity)) ComboBox_ParityList.Items.Add(s) Next s ComboBox_ParityList.SelectedIndex = SerialPortA.Parity End Sub ' Fill ComboBox Handshake value and set ComboBox to port value allready setted Private Sub FlowControlSet() Dim s As String ComboBox_FlowControl.Items.Clear() For Each s In [Enum].GetNames(GetType(Handshake)) ComboBox_FlowControl.Items.Add(s) Next s ComboBox_FlowControl.SelectedIndex = SerialPortA.Parity End Sub #End Region #Region "Thread safe sub" ' Thread-Safe write to console TextBoxM Private Sub WriteToConsole(ByVal [text] As String, Optional bClear As Boolean = False) If Me.TextBoxM.InvokeRequired Then Dim d As New SetTextCallback(AddressOf WriteToConsole) Me.Invoke(d, New Object() {[text], bClear}) Else _readPort = False If bClear Then Me.TextBoxM.Text = [text] Else Me.TextBoxM.AppendText([text]) End If Me.CB_DataRecived.Checked = MessPull.MessageRecieved End If End Sub ' Thread-Safe write to console TextBox_Recieved Private Sub WriteToRecieved(ByVal [text] As String, Optional bClear As Boolean = False) If Me.TextBox_Recieved.InvokeRequired Then Dim d As New SetTextCallback(AddressOf WriteToRecieved) Me.Invoke(d, New Object() {[text], bClear}) Else If bClear Then Me.TextBox_Recieved.Text = [text] Else Me.TextBox_Recieved.AppendText([text]) End If End If End Sub #End Region #Region "Local procedure" ' Load token list from file Private Sub LoadToken(ByVal fName As String) Dim nCntr As Integer Dim sToken As String If File.Exists(fName) Then Dim rdStream As New StreamReader(fName) hashToken = New Hashtable nCntr = 1 While Not rdStream.EndOfStream sToken = rdStream.ReadLine() hashToken.Add(sToken, nCntr) nCntr += 1 End While rdStream.Close() End If End Sub ' Write COM port configuration to file Private Sub WriteConfig(ByVal fName) WritePrivateProfileString("SERIAL1", "PortName", ComboBoxCOM_List.Text, fName) WritePrivateProfileString("SERIAL1", "BaudRate", ComboBox_BaudList.Text, fName) WritePrivateProfileString("SERIAL1", "Parity", Str(ComboBox_ParityList.SelectedIndex), fName) WritePrivateProfileString("SERIAL1", "DataBits", ComboBox_DataBits.Text, fName) WritePrivateProfileString("SERIAL1", "StopBits", Str(ComboBox_StopBits.SelectedIndex), fName) WritePrivateProfileString("SERIAL1", "Handshake", Str(ComboBox_FlowControl.SelectedIndex), fName) WritePrivateProfileString("DATE", "LastSaved", Date.Today, fName) ' Form Size & Position WritePrivateProfileString("FORMPOS", "Y", Me.Location.Y.ToString(), fName) WritePrivateProfileString("FORMPOS", "X", Me.Location.X.ToString(), fName) WritePrivateProfileString("FORMPOS", "Height", Me.Height.ToString(), fName) WritePrivateProfileString("FORMPOS", "Width", Me.Width.ToString(), fName) ' TabControl WritePrivateProfileString("INTERNAL", "TabActive", TabControlA.SelectedIndex.ToString(), fName) WritePrivateProfileString("SCRIPT", "QICSGP", TextBoxBearer.Text, fName) WritePrivateProfileString("SCRIPT", "QIOPEN", TextBoxIP.Text, fName) End Sub ' Load COM port configuration from file Private Sub LoadConfig(ByVal fName) Dim nLength As Integer Dim sBuff As StringBuilder Dim iniparam As String Dim nIndex As Integer Dim aPoint As Point sBuff = New StringBuilder(500) sBuff.Clear() If File.Exists(fName) Then nLength = GetPrivateProfileString("SERIAL1", "PortName", ComboBoxCOM_List.Text, sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() nIndex = ComboBoxCOM_List.FindString(iniparam) If nIndex >= 0 Then ComboBoxCOM_List.SelectedIndex = nIndex SerialPortA.PortName = ComboBoxCOM_List.Text End If sBuff.Clear() ' nLength = GetPrivateProfileString("SERIAL1", "BaudRate", ComboBox_BaudList.Text, sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() nIndex = ComboBox_BaudList.FindString(iniparam) If nIndex >= 0 Then ComboBox_BaudList.SelectedIndex = nIndex SerialPortA.BaudRate = Int(ComboBox_BaudList.Text) End If sBuff.Clear() ' nLength = GetPrivateProfileString("SERIAL1", "Parity", Str(ComboBox_ParityList.SelectedIndex), sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() ComboBox_ParityList.SelectedIndex = Int(iniparam) SerialPortA.Parity = Int(iniparam) sBuff.Clear() ' nLength = GetPrivateProfileString("SERIAL1", "DataBits", ComboBox_DataBits.Text, sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() nIndex = ComboBox_DataBits.FindString(iniparam) If nIndex >= 0 Then ComboBox_DataBits.SelectedIndex = nIndex SerialPortA.DataBits = Int(iniparam) End If sBuff.Clear() ' nLength = GetPrivateProfileString("SERIAL1", "StopBits", Str(ComboBox_StopBits.SelectedIndex), sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() ComboBox_StopBits.SelectedIndex = Int(iniparam) SerialPortA.StopBits = Int(iniparam) sBuff.Clear() ' nLength = GetPrivateProfileString("SERIAL1", "Handshake", Str(ComboBox_FlowControl.SelectedIndex), sBuff, sBuff.Capacity, fName) iniparam = sBuff.ToString() ComboBox_FlowControl.SelectedIndex = Int(iniparam) SerialPortA.Handshake = Int(iniparam) ' Form size & position sBuff.Clear() nLength = GetPrivateProfileString("FORMPOS", "Y", Me.Location.Y.ToString(), sBuff, sBuff.Capacity, fName) aPoint.Y = Int(sBuff.ToString()) sBuff.Clear() nLength = GetPrivateProfileString("FORMPOS", "X", Me.Location.X.ToString(), sBuff, sBuff.Capacity, fName) aPoint.X = Int(sBuff.ToString()) Me.Location = aPoint sBuff.Clear() nLength = GetPrivateProfileString("FORMPOS", "Height", Me.Height.ToString(), sBuff, sBuff.Capacity, fName) Me.Height = Int(sBuff.ToString()) sBuff.Clear() nLength = GetPrivateProfileString("FORMPOS", "Width", Me.Width.ToString(), sBuff, sBuff.Capacity, fName) Me.Width = Int(sBuff.ToString()) ' Tab control sBuff.Clear() nLength = GetPrivateProfileString("INTERNAL", "TabActive", TabControlA.SelectedIndex.ToString(), sBuff, sBuff.Capacity, fName) nLength = Int(sBuff.ToString()) TabControlA.SelectTab(nLength) ' Script process sBuff.Clear() nLength = GetPrivateProfileString("INTERNAL", "ScriptAutoLoad", "No", sBuff, sBuff.Capacity, fName) If UCase(sBuff.ToString()) = "YES" Then AutoLoadScriptToolStripMenuItem.Checked = True sBuff.Clear() Dim scriptPathName As String = sBuff.ToString() nLength = GetPrivateProfileString("INTERNAL", "ScriptFile", "", sBuff, sBuff.Capacity, fName) scriptPathName = sBuff.ToString() Dim read As New StreamReader(scriptPathName) TextBox_Script.Text = read.ReadToEnd.ToString read.Close() End If ' Load default token nLength = GetPrivateProfileString("SCRIPT", "TokenFileName", Application.StartupPath & "\Default.tok", sBuff, sBuff.Capacity, fName) Call LoadToken(sBuff.ToString()) sBuff.Clear() nLength = GetPrivateProfileString("SCRIPT", "QICSGP", "1,""inet.bwc.ru""", sBuff, sBuff.Capacity, fName) TextBoxBearer.Text = sBuff.ToString() sBuff.Clear() nLength = GetPrivateProfileString("SCRIPT", "QIOPEN", """TCP"",""46.254.241.3"",9999""", sBuff, sBuff.Capacity, fName) TextBoxIP.Text = sBuff.ToString() End If End Sub ' Check native token Private Function CheckNativeToken(ByVal sToken) As Boolean CheckNativeToken = hashToken.Contains(sToken) End Function ' Run script operation Private Sub RunScript() Dim sRet, sTemp As String Dim timeStart As Date Dim timeStop As Date Dim nTime As Double = 0 Dim nCount As Integer Dim tSpan As TimeSpan Dim serialStatus As Boolean = SerialPortA.IsOpen Dim seansOpen As Boolean = False Dim sBlock440 As String = "operations$├╢├╗├в├░├л├й├о├░├╖├▒├й├░├╢├в├й├о├░├│2837├в├н2├а├г├п├л├╢├г├й├п├а├╢├л├д├о3├п├░├а├л├о├╢├н├│├п├а├╣├г34├п├а├╣├г├а4├│├н├п├╣├╢├г├н├п4├а├к├г├╣├н├╢├п├╣├╕├г├н4├п├а├╣├г├╢├│├е├п├а├к├г├╢├╣4├п├а├╣├г├╕4├н├п├а├╣├╢├г4├н├п├а├к├╣├╢6├е4├к6├е├п├╢├╕├г├н├а├п├╢4├╣├п├е├а├╢├╣├а├п├╢├╣├г├а4├п├╢├╣├г47├п├е├а├к├╣├╢├п├╣4├г├п├а├╕├╢├г├а├п4├╣├г├п4├а├╣├г├╢├п├а├╣├╢├г├п4├а├╕├╣├г6├п4├а├╣├г├╢4├п├е├а├╕├г├╢├п64├а├╕├г46├п├а6├╢├п├а├╕76├╢4├п├а├д├╢├г├а├п├н├╢├г├╕├н├пuiowq3ygrowg3fowrtgowufygbow4gfowueyfgco6wt4go68gfrwkuyfcgwkgy4ckuw4ygfouwygou4fgrfouwf4gow4grfw4yofgowu4ygfou4fgwo4uygfwy4gfow4g4gfowufgou4rgyfwuyfguwygf4uyg4f6gfiu4gklejhdkwehfewhrkferhiuht43iuhiur" '         Dim nDisconnect As Integer = 0 Dim nMinTimeA, nMinTimeB, nMaxTimeA, nMaxTimeB, nEvgTimeA, nEvgTimeB As Integer Dim nSendAttemptA, nSendAttemptB, nLostPackA, nLostPackB As Integer Dim nSendSuccA, nSendSuccB As Integer Dim nLostConnect As Integer = 0 Dim timeSummary As Double = 0 Dim timeSummaryMin As Double = 0 Dim timeSummaryMax As Double = 0 Dim timeSummaryEvg As Double = 0 _allowRun = True _allowEcho = True _ReadBuff = "" _lastClear = False _lastLine = "" nMinTimeA = 0 nMinTimeB = 0 nMaxTimeA = 0 nMaxTimeB = 0 nEvgTimeA = 0 nEvgTimeB = 0 nSendAttemptA = 0 nSendAttemptB = 0 nLostPackA = 0 nLostPackB = 0 nSendSuccA = 0 nSendSuccB = 0 '   MessPull.ClearMessage() MessPull.AllowCMEErrorIntercept = True MessPull.AllowFuncIntercept = True MessPull.AllowSMSErrorIntercept = True MessPull.DropCME_Error() MessPull.DropSMS_Error() '   Dim record As New StreamWriter(Application.StartupPath & "\Default.log") Me.WriteToConsole("Script started at " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Script started at " + DateTime.Now.ToLongTimeString + "!") If Not SerialPortA.IsOpen Then Try SerialPortA.Open() Catch Me.WriteToConsole("Serial Port: " + SerialPortA.PortName + " is busy! Script stopped at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Serial Port: " + SerialPortA.PortName + " is busy! Script stopped at: " + DateTime.Now.ToLongTimeString + "!") _allowRun = False End Try End If '   If _allowRun Then nCount = 0 sTemp = "" MessPull.ClearMessage() While ((InStr(sTemp, "OK") = 0) And _allowRun) nCount += 1 sTemp = MessPull.ExecuteAT(SerialPortA, "AT" + vbCrLf, 3000) Me.WriteToConsole("Attempt: " + Str(nCount) + " Send: " + sTemp) End While Me.DisplayFunc() '   Me.WriteToConsole("Turn on the modem!" + vbCrLf) If Not MessPull.CheckAndSetup(SerialPortA, "AT+CFUN?", "CFUN", "1", , , , , "AT+CFUN=1", "Call Ready", 15000) Then Me.WriteToConsole("Modem does not turn on! Script Aborted!" + vbCrLf) _allowRun = False Else '    Me.WriteToConsole(MessPull.ExecuteAT(SerialPortA, "ATE1", 3000)) MessPull.CheckAndSetup(SerialPortA, "AT+CREG?", "CREG", "1", 0, ",", "OK", 1000, "AT+CREG=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+CGREG?", "CGREG", "1", 0, ",", "OK", 1000, "AT+CGREG=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+CRC?", "CRC", "0", 0, ",", "OK", 1000, "AT+CRC=0", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QAUDCH?", "QAUDCH", "2", 0, ",", "OK", 1000, "AT+QAUDCH=2", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIFGCNT?", "QIFGCNT", "1", 0, ",", "OK", 1000, "AT+QIFGCNT=1", "OK", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QICSGP?", "QICSGP", "1", 0, ",", "OK", 1000, "AT+QICSGP=" + _QICSGP, "OK", 5000) End If Me.DisplayFunc() End If While _allowRun While _allowRun If (MessPull.CheckAndSetup(SerialPortA, "AT+CREG?", "CREG", "1", 1) And MessPull.CheckAndSetup(SerialPortA, "AT+CGREG?", "CGREG", "1", 1)) Then Exit While End If Me.DisplayFunc() End While Me.DisplayFunc() Me.WriteToConsole("Modem is registered on the home network at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Modem is registered on the home network at: " + DateTime.Now.ToLongTimeString + "!") '    While (_allowRun And (Not seansOpen = True)) Me.DisplayFunc() Me.WriteToConsole(MessPull.ExecuteAT(SerialPortA, "AT+QISTAT", 2000) + vbCrLf) 'MessPull.WaitAnswer(SerialPortA, 5000, "", False) 'record.WriteLine("Request status at: " + DateTime.Now.TimeOfDay.ToString + "!") sRet = MessPull.GetFuncValue("STATE") Select Case sRet Case "IP INITIAL" MessPull.CheckAndSetup(SerialPortA, "AT+QISDE?", "QISDE", "0", 0, ",", "OK", 1000, "AT+QISDE = 0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIMUX?", "QIMUX", "0", 0, ",", "OK", 1000, "AT+QIMUX = 0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIMODE?", "QIMODE", "0", 0, ",", "OK", 1000, "AT+QIMODE=0", 5000) MessPull.CheckAndSetup(SerialPortA, "AT+QIDNSIP?", "QIDNSIP", "0", 0, ",", "OK", 1000, "AT+QIDNSIP=0", 5000) If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIREGAPP", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can not register application on network! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "IP START" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIACT", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can't Activate GPRS/CSD context! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "IP GPRSACT" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QILOCIP", 2000, "."), ".") > 0 Then Me.WriteToConsole("Can't Get local IP addres!" + vbCrLf) record.WriteLine("Can't Get local IP addres!") End If Case "IP STATUS" If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIOPEN=" + _QIOPEN, 5000, "OK"), "OK") > 0 Then seansOpen = True Else Me.WriteToConsole("Can not estabilish connect!" + vbCrLf) record.WriteLine("Can not estabilish connect!") seansOpen = False End If Case "IP CLOSE" MessPull.ExecuteAT(SerialPortA, "AT+QIDEACT", 5000, "DEACT OK") Me.WriteToConsole("Deactivate GPRS/CSD context!" + vbCrLf) record.WriteLine("Deactivate GPRS/CSD context!") seansOpen = False Case "CONNECT OK" seansOpen = True Me.WriteToConsole("Connection OK!" + vbCrLf) record.WriteLine("Connection OK!") Case "PDP DEACT" Me.WriteToConsole("GPRS/CSD context was deactivated because of unknown reason. Reconnecting!" + vbCrLf) record.WriteLine("GPRS/CSD context was deactivated because of unknown reason. Reconnecting!") If Not InStr(MessPull.ExecuteAT(SerialPortA, "AT+QIACT", 1000, "OK|ERROR"), "OK") > 0 Then Me.WriteToConsole("Can't Activate GPRS/CSD context! Next Attempt!" + vbCrLf) record.WriteLine("Can't Activate GPRS/CSD context! Next Attempt!") End If Case "TCP CONNECTING" Sleep(800) Case Else Me.WriteToConsole("Connection status: " + sRet + vbCrLf) record.WriteLine("Connection status: " + sRet) End Select Me.WriteToConsole("Connection status: " + sRet + vbCrLf) Me.DisplayFunc() End While While (seansOpen And _allowRun) MessPull.ClearMessage() MessPull.ExecuteAT(SerialPortA, "AT+QISTAT") timeSummary = 0 nSendAttemptA += 1 timeStart = Now sRet = Trim(MessPull.ExecuteAT(SerialPortA, "AT+QISEND=8", 3000, ">", False)) 'Me.WriteToConsole("Time execution AT+QISEND=8" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, ">") > 0 Then sRet = MessPull.ExecuteAT(SerialPortA, "balance$", 3000, "SEND OK", False) 'Me.WriteToConsole("Time execution [balance$]" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, "SEND OK") > 0 Then _nCharWait = 40 sRet = MessPull.WaitAnswer(SerialPortA, 10000, "balance>................................", , False) If sRet = "balance>................................" Then Me.WriteToConsole(vbCrLf) timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds timeSummary = tSpan.TotalMilliseconds nMinTimeA = IIf(nMinTimeA = 0, nTime, IIf(nMinTimeA > nTime, nTime, nMinTimeA)) nMaxTimeA = IIf(nMaxTimeA = 0, nTime, IIf(nMaxTimeA < nTime, nTime, nMaxTimeA)) nEvgTimeA = IIf(nEvgTimeA = 0, nTime, (nTime + nEvgTimeA) / 2) nSendSuccA += 1 '     nSendAttemptB += 1 timeStart = Now sRet = Trim(MessPull.ExecuteAT(SerialPortA, "AT+QISEND=440", 3000, ">", False)) 'Me.WriteToConsole("Time execution AT+QISEND=440" + MessPull.LastTimeRun.ToString + vbCrLf) If InStr(sRet, ">") > 0 Then MessPull.ClearMessage() _nCharWait = 4 sRet = MessPull.ExecuteAT(SerialPortA, sBlock440, 5000, "SEND OK", False) If InStr(sRet, "SEND OK") > 0 Then sRet = MessPull.WaitAnswer(SerialPortA, 10000, "done", , False) If InStr(sRet, "done") > 0 Then timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds timeSummary = timeSummary + tSpan.TotalMilliseconds nMinTimeB = IIf(nMinTimeB = 0, nTime, IIf(nMinTimeB > nTime, nTime, nMinTimeB)) nMaxTimeB = IIf(nMaxTimeB = 0, nTime, IIf(nMaxTimeB < nTime, nTime, nMaxTimeB)) nEvgTimeB = IIf(nEvgTimeB = 0, nTime, (nTime + nEvgTimeB) / 2) nSendSuccB += 1 Me.WriteToConsole(vbCrLf) Me.WriteToConsole("Cycle Ok. Time: " + timeSummary.ToString + vbCrLf) record.WriteLine("Cycle Ok. Time: " + timeSummary.ToString) timeSummaryMin = IIf(timeSummaryMin = 0, timeSummary, IIf(timeSummaryMin > timeSummary, timeSummaryMin, timeSummaryMin)) timeSummaryMax = IIf(timeSummaryMax = 0, timeSummary, IIf(timeSummaryMax < timeSummary, timeSummary, timeSummaryMax)) timeSummaryEvg = IIf(timeSummaryEvg = 0, timeSummary, (timeSummary + timeSummaryEvg) / 2) Else nLostPackB += 1 Me.WriteToConsole("Not Answer (440 byte). Time: " + nTime.ToString + vbCrLf) record.WriteLine("Not Answer (440 byte). Time: " + nTime.ToString) End If Else Me.WriteToConsole("Unsuccessfully send Data Pack (440 byte). Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully send Data Pack (440 byte). Time: " + nTime.ToString) End If Else timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds Me.WriteToConsole("Error execute command AT+QISEND=440. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Error execute command AT+QISEND=440. Time: " + timeSummary.ToString) End If Else timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds nLostPackA += 1 Me.WriteToConsole("Unsuccessfully execute command [balance$]. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully execute command [balance$]. Time: " + nTime.ToString) End If Else Me.WriteToConsole("Unsuccessfully send command [balance$]. Time: " + nTime.ToString + vbCrLf) record.WriteLine("Unsuccessfully send command [balance$]. Time: " + nTime.ToString) MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") timeStop = Now tSpan = timeStop.Subtract(timeStart) nTime = tSpan.TotalMilliseconds End If Else MessPull.ExecuteAT(SerialPortA, "AT", 3000, "") Me.WriteToConsole("Error execute command AT+QISEND=8!" + vbCrLf) record.WriteLine("Error execute command AT+QISEND=8!") End If MessPull.SetFuncValue("CounterA", nSendAttemptA.ToString) MessPull.SetFuncValue("CounterB", nSendAttemptB.ToString) MessPull.SetFuncValue("AverageTimeA", nEvgTimeA.ToString) MessPull.SetFuncValue("AverageTimeB", nEvgTimeB.ToString) Me.DisplayFunc() If Not MessPull.GetFuncValue("STATE") = "CONNECT OK" Then nLostConnect += 1 seansOpen = False Me.WriteToConsole("Connection lost at: " + DateTime.Now.ToLongTimeString + vbCrLf) record.WriteLine("Connection lost at: " + DateTime.Now.ToLongTimeString) Me.WriteToConsole("Attempt to reconnect." + vbCrLf) record.WriteLine("Attempt to reconnect.") End If Sleep(2000) End While End While MessPull.ExecuteAT(SerialPortA, "AT+QICLOSE", 5000, "CLOSE OK|ERROR") MessPull.ExecuteAT(SerialPortA, "AT+QIDEACT", 5000, "DEACT OK|ERROR") Me.WriteToConsole("Connection Closed and GPRS/CSD context was deactivated at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Connection Closed and GPRS/CSD context was deactivated at: " + DateTime.Now.ToLongTimeString + "!") Me.WriteToConsole("---------------------------------------------------------------------------------------------" + vbCrLf) record.WriteLine("---------------------------------------------------------------------------------------------") Me.WriteToConsole("Execution repport:" + vbCrLf) record.WriteLine("Execution repport:") Me.WriteToConsole("[balance$] request MIN time (milliseconds): " + nMinTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request MIN time (milliseconds): " + nMinTimeA.ToString) Me.WriteToConsole("[balance$] request MAX time (milliseconds): " + nMaxTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request MAX time (milliseconds): " + nMaxTimeA.ToString) Me.WriteToConsole("[balance$] request AVERAGE time (milliseconds): " + nEvgTimeA.ToString + vbCrLf) record.WriteLine("[balance$] request AVERAGE time (milliseconds): " + nEvgTimeA.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("[440 byte pack] request MIN time (milliseconds): " + nMinTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request MIN time (milliseconds): " + nMinTimeB.ToString) Me.WriteToConsole("[440 byte pack] request MAX time (milliseconds): " + nMaxTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request MAX time (milliseconds): " + nMaxTimeB.ToString) Me.WriteToConsole("[440 byte pack] request AVERAGE time (milliseconds): " + nEvgTimeB.ToString + vbCrLf) record.WriteLine("[440 byte pack] request AVERAGE time (milliseconds): " + nEvgTimeB.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Summary request MIN time (milliseconds): " + timeSummaryMin.ToString + vbCrLf) record.WriteLine("Summary request MIN time (milliseconds): " + timeSummaryMin.ToString) Me.WriteToConsole("Summary request MAX time (milliseconds): " + timeSummaryMax.ToString + vbCrLf) record.WriteLine("Summary request MAX time (milliseconds): " + timeSummaryMax.ToString) Me.WriteToConsole("Summary request AVERAGE time (milliseconds): " + timeSummaryEvg.ToString + vbCrLf) record.WriteLine("Summary request AVERAGE time (milliseconds): " + timeSummaryEvg.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Total send attempt command [balance$]: " + nSendAttemptA.ToString + vbCrLf) record.WriteLine("Total send attempt command [balance$]: " + nSendAttemptA.ToString) Me.WriteToConsole("Total send attempt packet [440 byte]: " + nSendAttemptB.ToString + vbCrLf) record.WriteLine("Total send attempt packet [440 byte]: " + nSendAttemptB.ToString) Me.WriteToConsole("Total send succes [balance$]: " + nSendSuccA.ToString + vbCrLf) record.WriteLine("Total send succes [balance$]: " + nSendSuccA.ToString) Me.WriteToConsole("Total send succes [440 byte]: " + nSendSuccB.ToString + vbCrLf) record.WriteLine("Total send succes [440 byte]: " + nSendSuccB.ToString) Me.WriteToConsole(vbCrLf) record.WriteLine("") Me.WriteToConsole("Lost packet [balanse$]: " + nLostPackA.ToString + vbCrLf) record.WriteLine("Lost packet [balanse$]: " + nLostPackA.ToString) Me.WriteToConsole("Lost packet [440 byte]: " + nLostPackB.ToString + vbCrLf) record.WriteLine("Lost packet [440 byte]: " + nLostPackB.ToString) Me.WriteToConsole("---------------------------------------------------------------------------------------------" + vbCrLf) record.WriteLine("---------------------------------------------------------------------------------------------") Me.WriteToConsole("Script stopped at: " + DateTime.Now.ToLongTimeString + "!" + vbCrLf) record.WriteLine("Script stopped at: " + DateTime.Now.ToLongTimeString + "!") record.Close() '   If Not serialStatus Then SerialPortA.Close() End If '    _allowEcho = True End Sub Private Sub InitialIpSession() Dim sTemp As String ' Select a context as foreground context AT+QIFGCNT=1 sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIFGCNT=1", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIFGCNT=1 Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QICSGP=1,"inet.bwc.ru" sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QICSGP=1,""inet.bwc.ru""", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QICSGP Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QIMUX=0 sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIMUX=0", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIMUX=0 Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QIMODE=0 sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIMUX=0", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIMODE=0 Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QIDNSIP=0 sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIDNSIP=0", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIDNSIP=0 Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QIREGAPP sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIREGAPP", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIREGAPP Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QIACT sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QIACT", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QIACT Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If 'AT+QILOCIP sTemp = MessPull.ExecuteAT(SerialPortA, "AT+QILOCIP", 3000) If sTemp = "OK" Then Me.WriteToConsole(sTemp + vbCrLf) Else Me.WriteToConsole("AT+QILOCIP Returns ERROR. Script stopped at:" + DateTime.Now.ToLongTimeString + "!" + vbCrLf) _allowRun = False 'Exit While End If End Sub '          Private Function GetLastValue(ByVal sParam As String) As Integer Dim aLine As String() = sParam.Split(",".ToCharArray) GetLastValue = Int(aLine(UBound(aLine))) End Function '  ,     AT-     Private Sub DisplayFunc() Dim enumFunc As IDictionaryEnumerator = MessPull.FuncTable.GetEnumerator Me.WriteToRecieved("Function parametr list:" + vbCrLf, True) enumFunc.Reset() While enumFunc.MoveNext Me.WriteToRecieved(enumFunc.Key + "=" + enumFunc.Value.ToString + vbCrLf) End While End Sub ' Parse string Private Function StringParse(ByVal sText As String, Optional ByVal sParser As String = " ") As String() Dim sParam As Char() = sParser.ToCharArray() StringParse = {} If sText.Length > 0 Then StringParse = sText.Split(sParam) End If End Function Private Sub LoadKeyWord() Dim htKeyWord As Hashtable Dim aKeyToken As System.Delegate() 'aKeyToken.A() htKeyWord = aScript(scNames.scKeyWord) htKeyWord.Add("IF", 0) End Sub Private Sub SendToModem(ByVal sText) If SerialPortA.IsOpen Then SerialPortA.WriteLine(sText) Else TextBoxM.AppendText("Serial port: " + SerialPortA.PortName + " Is closed. Script Aborted!") _allowRun = False End If End Sub #End Region #Region "Event Handler's" ' Procedure handler recept any change in TextBoxM. Send command string to COM-port Private Sub TextBoxM_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxM.TextChanged Dim LineNum As Integer LineNum = Me.TextBoxM.Lines.Length If LineNum > 1 Then If (LineNum > _lineCount) Then If _readPort Then If SerialPortA.IsOpen Then _lastLine = Me.TextBoxM.Lines(LineNum - 2) _lastLine = Trim(_lastLine) SerialPortA.WriteLine(_lastLine + vbCrLf) Else _readPort = False Me.TextBoxM.AppendText("Serial port " + SerialPortA.PortName + " serial port is closed, open it first!" + vbCrLf) End If Else _readPort = True End If _lineCount = Me.TextBoxM.Lines.Length End If Else _lineCount = Me.TextBoxM.Lines.Length End If End Sub ' Clear text in TextBoxM on button click Private Sub BtClearText_Click(sender As System.Object, e As System.EventArgs) Handles BtClearText.Click TextBoxM.Clear() TextBoxM.Refresh() _lineCount = 0 End Sub ' Change port Name on ComboBox changes Private Sub ComboBoxCOM_List_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBoxCOM_List.SelectedIndexChanged If _continue Then Call Refresh_COMSetting() TSLabelCOM.Text = ComboBoxCOM_List.Text SerialPortA.PortName = ComboBoxCOM_List.Text End If End Sub ' Change port Parity on ComboBox changes Private Sub ComboBox_ParityList_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox_ParityList.SelectedIndexChanged If _continue Then Try SerialPortA.Parity = ComboBox_ParityList.SelectedIndex Catch ex As Exception 'None MsgBox("Can't set selected parity." + vbCrLf, MsgBoxStyle.Exclamation, AcceptButton) End Try End If End Sub ' Change port Baud Rate on ComboBox changes Private Sub ComboBox_BaudList_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox_BaudList.SelectedIndexChanged If _continue Then SerialPortA.BaudRate = Int(ComboBox_BaudList.Text) TSLabelSpeed.Text = ComboBox_BaudList.Text End If End Sub ' Change port Data Bits on ComboBox changes Private Sub ComboBox_DataBits_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox_DataBits.SelectedIndexChanged If _continue Then SerialPortA.DataBits = Int(ComboBox_DataBits.Text) End If End Sub ' Change port Stop Bits on ComboBox changes Private Sub ComboBox_StopBits_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox_StopBits.SelectedIndexChanged If _continue Then SerialPortA.StopBits = ComboBox_StopBits.SelectedIndex End If End Sub ' Change port Handshake on ComboBox changes Private Sub ComboBox_FlowControl_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox_FlowControl.SelectedIndexChanged If _continue Then SerialPortA.Handshake = ComboBox_FlowControl.SelectedIndex End If End Sub ' Check COM port setting & write text to TextBox Private Sub BTCheck_Click(sender As System.Object, e As System.EventArgs) Handles BTCheck.Click TextBox1.AppendText("Serial port name: " + SerialPortA.PortName + vbCrLf) 'TextBox1.AppendText("Serial port num: " + Str(_serialPort.PortName) + vbCrLf) TextBox1.AppendText("Serial port status: " + IIf(SerialPortA.IsOpen, "Port Open", "Port Closed") + vbCrLf) TextBox1.AppendText("Baud Rate: " + SerialPortA.BaudRate.ToString + vbCrLf) TextBox1.AppendText("Parity: " + SerialPortA.Parity.ToString + vbCrLf) TextBox1.AppendText("Parity Num: " + Str(SerialPortA.Parity) + vbCrLf) TextBox1.AppendText("Data Bits: " + SerialPortA.DataBits.ToString + vbCrLf) TextBox1.AppendText("Stop Bits: " + SerialPortA.StopBits.ToString + vbCrLf) TextBox1.AppendText("Flow Control: " + SerialPortA.Handshake.ToString + vbCrLf) TextBox1.AppendText("Read Timeout: " + SerialPortA.ReadTimeout.ToString + vbCrLf) TextBox1.AppendText("Write Timeout: " + SerialPortA.WriteTimeout.ToString + vbCrLf) TextBox1.AppendText("-------------------------" + vbCrLf + vbCrLf) End Sub ' Clear text recieved in TextBox Private Sub BTClearRecieved_Click(sender As System.Object, e As System.EventArgs) Handles BTClearRecieved.Click TextBox_Recieved.Clear() _lastRead = "" End Sub ' Event handlers on form close. Private Sub CommCare_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed If SerialPortA.IsOpen Then SerialPortA.Close() End Sub ' Open/Close serial port Private Sub BtSerial_Click(sender As System.Object, e As System.EventArgs) Handles BtSerial.Click If SerialPortA.IsOpen Then Try SerialPortA.DiscardInBuffer() SerialPortA.DiscardOutBuffer() SerialPortA.Close() Catch ex As Exception End Try TSLastCommand.Text = "Serial port: " + SerialPortA.PortName.ToString + " closed!" BtSerial.Text = "Open Port" Else Try SerialPortA.Open() SerialPortA.ReadTimeout = 1000 SerialPortA.WriteTimeout = 1000 If SerialPortA.IsOpen Then BtSerial.Text = "Close Port" TSLastCommand.Text = "Serial port: " + SerialPortA.PortName.ToString + " open successfully!" Else BtSerial.Text = "Open Port" TSLastCommand.Text = "Can't open serial port: " + SerialPortA.PortName.ToString End If Catch ex As Exception End Try End If End Sub ' Save COM port setting on menu click Private Sub SaveSettingToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SaveSettingToolStripMenuItem.Click Dim saveDialog As New SaveFileDialog Dim fName As String saveDialog.InitialDirectory = Application.StartupPath saveDialog.Filter = "INI Files (*.ini)|*.ini" saveDialog.FileName = "Setting.ini" If saveDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub fName = saveDialog.InitialDirectory & "\" & saveDialog.FileName Call WriteConfig(fName) End Sub ' Save at-protocol text from TextBox to file Private Sub SaveATProtocolToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SaveATProtocolToolStripMenuItem.Click Dim saveDialog As New SaveFileDialog saveDialog.InitialDirectory = Application.StartupPath saveDialog.Filter = "Log Files (*.log)|*.log|All Files (*.*)|*.*" saveDialog.FileName = "CommCare.log" If saveDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Dim record As New StreamWriter(saveDialog.FileName) record.Write(TextBoxM.Text) record.Close() End Sub ' Load at-protocol text into TextBox from file Private Sub LoapATProtocolToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles LoapATProtocolToolStripMenuItem.Click Dim openDialog As New OpenFileDialog openDialog.InitialDirectory = Application.StartupPath openDialog.Filter = "Log Files (*.log)|*.log|All Files (*.*)|*.*" openDialog.FileName = "CommCare.log" If openDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Dim read As New StreamReader(openDialog.FileName) TextBoxM.Text = read.ReadToEnd.ToString read.Close() End Sub ' Load form Events. Proceed initialisation Private Sub CommCare_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim fName, defParam, retParam As String _lastRead = "" ' Empty _lastRead _allowEcho = True ' Permit echo the received data handler CB_DataRecived.Checked = False ' Set visual data recieved check ' Collect serial port info adn declare it _continue = False ' prevent reactions to fill ComboBox SerialPortA = New SerialPort() ' Create serial port object ' Define handler to recieved data AddHandler SerialPortA.DataReceived, AddressOf DataReceviedHandler 'SerialPortA.ReadTimeout = 1000 ' set Read timeout 1000mS 'SerialPortA.WriteTimeout = 1000 ' set Write timeout 1000mS Call CollectCOMM_List() ' Collect COM port Names ' Set port name first line ComboBox SerialPortA.PortName = ComboBoxCOM_List.Text Call Refresh_COMSetting() ' Collect the remaining serial port settings ' Complete fragments of the status bar TSLabelSpeed.Text = ComboBox_BaudList.Text TSLabelCOM.Text = ComboBoxCOM_List.Text _readPort = True ' Allow the reaction to the emergence of a new line in TextBoxM ' Read default config file fName = Application.StartupPath & "\Default.ini" Call LoadConfig(fName) _continue = True ' Allow the reaction to changes in the ComboBox's WritePrivateProfileString("INTERNAL", "ScriptSaved", "No", fName) WritePrivateProfileString("INTERNAL", "ScriptSaved", "No", fName) ' TextBox_Recieved.ReadOnly = True End Sub ' Close form events. Execute finishing action Private Sub CommCare_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing Dim fName As String fName = Application.StartupPath & "\Default.ini" Call WriteConfig(fName) If Not (ScriptThread.ThreadState = Threading.ThreadState.Unstarted) Then ScriptThread.Abort() ScriptThread.Join(1000) End If End Sub ' Load COM port setting from file Private Sub OpenSettingToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OpenSettingToolStripMenuItem.Click Dim openDialog As New OpenFileDialog Dim fName As String openDialog.InitialDirectory = Application.StartupPath openDialog.Filter = "INI Files (*.ini)|*.ini" openDialog.FileName = "Setting.ini" If openDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub fName = openDialog.InitialDirectory & "\" & openDialog.FileName _continue = False Call LoadConfig(fName) _continue = True End Sub ' Test button Parse click. Go parse testing string Private Sub BT_Parse_Click(sender As System.Object, e As System.EventArgs) Handles BT_Parse.Click Dim words() As String Dim word As String Dim textStr As String Dim delim As Char() Dim parseString As String parseString = TB_InStr.Text textStr = TB_Delimiters.Text delim = textStr.ToCharArray() words = parseString.Split(delim, StringSplitOptions.RemoveEmptyEntries) For Each word In words TB_Console.AppendText(word + vbCrLf) Next End Sub ' Test button Clear click. Clear TextBox text. Private Sub BT_Clear_Click(sender As System.Object, e As System.EventArgs) Handles BT_Clear.Click TB_Console.Clear() End Sub ' CheckBox prevent manually changes Private Sub CB_DataRecived_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CB_DataRecived.CheckedChanged CB_DataRecived.Checked = MessPull.MessageRecieved End Sub ' Load token from file Private Sub LoadTokenToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles LoadTokenToolStripMenuItem.Click Dim openDialog As New OpenFileDialog openDialog.InitialDirectory = Application.StartupPath openDialog.Filter = "Token Files (*.tok)|*.tok|All Files (*.*)|*.*" 'openDialog.FileName = "Default.tok" If openDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Call LoadToken(openDialog.FileName) WritePrivateProfileString("SCRIPT", "TokenFileName", openDialog.FileName, Application.StartupPath & "\Default.ini") End Sub ' Menu File-Exit Private Sub ExitToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ExitToolStripMenuItem.Click Application.Exit() End Sub ' Script Save to file Private Sub SaveTaskScriptToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SaveTaskScriptToolStripMenuItem.Click Dim saveDialog As New SaveFileDialog saveDialog.InitialDirectory = Application.StartupPath saveDialog.Filter = """Go"" Script Files (*.gos)|*.gos|All Files (*.*)|*.*" saveDialog.FileName = "Noname.gos" If saveDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Dim record As New StreamWriter(saveDialog.FileName) record.Write(TextBox_Script.Text) record.Close() WritePrivateProfileString("INTERNAL", "ScriptSaved", "Yes", Application.StartupPath & "\Default.ini") WritePrivateProfileString("INTERNAL", "ScriptFile", saveDialog.FileName, Application.StartupPath & "\Default.ini") End Sub ' Script Load from file Private Sub LoadTaskScriptToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles LoadTaskScriptToolStripMenuItem.Click Dim openDialog As New OpenFileDialog openDialog.InitialDirectory = Application.StartupPath openDialog.Filter = """Go"" Script Files (*.gos)|*.gos|All Files (*.*)|*.*" 'openDialog.FileName = "CommCare.gos" If openDialog.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Dim read As New StreamReader(openDialog.FileName) TextBox_Script.Text = read.ReadToEnd.ToString read.Close() WritePrivateProfileString("INTERNAL", "ScriptLoaded", "Yes", Application.StartupPath & "\Default.ini") WritePrivateProfileString("INTERNAL", "ScriptFile", openDialog.FileName, Application.StartupPath & "\Default.ini") End Sub ' Auto load script check/uncheck Private Sub AutoLoadScriptToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles AutoLoadScriptToolStripMenuItem.Click AutoLoadScriptToolStripMenuItem.Checked = True WritePrivateProfileString("INTERNAL", "ScriptAutoLoad", "Yes", Application.StartupPath & "\Default.ini") End Sub #End Region #Region "COM port Handler's" Private Sub DataReceviedHandler(sender As Object, e As SerialDataReceivedEventArgs) Dim sp As SerialPort = CType(sender, SerialPort) Dim aLine As String() Dim nAt As Integer Dim sParam As Char() Dim sTemp As String Dim indata As String = "" indata = sp.ReadExisting() ' sTemp = vbCrLf sParam = sTemp.ToCharArray() ' _lastRead = _lastRead + indata 'If _lastRead.Length > 1 Then 'If _lastRead = "> " Then 'MessPull.AppendMess(Trim(_lastRead)) '_lastRead = "" 'End If 'End If nAt = InStr(_lastRead, vbCrLf) While nAt > 0 MessPull.AppendMess(Mid(_lastRead, 1, nAt - 1)) _lastRead = Mid(_lastRead, nAt + 2) nAt = InStr(_lastRead, vbCrLf) End While If (_nCharWait > 0) And (_lastRead.Length = _nCharWait) Then MessPull.AppendMess(Trim(_lastRead)) _lastRead = "" _nCharWait = 0 ElseIf _lastRead = "> " Then MessPull.AppendMess(Trim(_lastRead)) _lastRead = "" End If 'If nAt > 0 Then 'aLine = _lastRead.Split(sParam, StringSplitOptions.RemoveEmptyEntries) 'If aLine.Length > 0 Then 'MsPull.AppendLines(aLine) '_lastRead = "" 'End If 'End If ' If _allowEcho Then Call Me.WriteToConsole(indata) End If End Sub #End Region Private Sub BTRunStop_Click(sender As System.Object, e As System.EventArgs) Handles BTRunStop.Click If _allowRun Then _allowRun = False BTRunStop.Text = "Run Script" Else _lastRead = "" CB_DataRecived.Checked = MessPull.MessageRecieved _allowRun = True BTRunStop.Text = "Stop Script" ScriptThread = New Thread(AddressOf RunScript) TimerA.Interval = 10000 TimerA.Enabled = True _timeOut = False ScriptThread.Start() End If End Sub Private Sub TimerA_Tick(sender As System.Object, e As System.EventArgs) Handles TimerA.Tick If Not _timeOut Then _timeOut = True End Sub Private Sub BTTestMsg1_Click(sender As System.Object, e As System.EventArgs) Handles BTTestMsg1.Click Dim nCount As Integer = MessPull.AppendMess(TB_InStr.Text) TSLastCommand.Text = "Message count: " + Str(nCount) End Sub Private Sub BTTestMsg2_Click(sender As System.Object, e As System.EventArgs) Handles BTTestMsg2.Click Dim sText As String = TB_InStr.Text Dim sParam As String = " ,.;:!@#$%&*()-=+|\/?<>" Dim aParam As Char() = sParam.ToCharArray() TSLastCommand.Text = "Message count: " + Str(MessPull.AppendLines(sText.Split(aParam, StringSplitOptions.RemoveEmptyEntries))) End Sub Private Sub BTTestMsg3_Click(sender As System.Object, e As System.EventArgs) Handles BTTestMsg3.Click Dim alines As String() = MessPull.Items() Dim sText As String For Each sText In alines TB_Console.AppendText(sText + vbCrLf) Next End Sub Private Sub BTTestMsg4_Click(sender As System.Object, e As System.EventArgs) Handles BTTestMsg4.Click TB_InStr.Text = MessPull.ExtractMess() TSLastCommand.Text = "Message count: " + Str(MessPull.MsgCount()) End Sub Private Sub BTTestMsgClear_Click(sender As System.Object, e As System.EventArgs) Handles BTTestMsgClear.Click MessPull.ClearMessage() End Sub Private Sub TextBoxBearer_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxBearer.TextChanged _QICSGP = TextBoxBearer.Text End Sub Private Sub TextBoxIP_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxIP.TextChanged _QIOPEN = TextBoxIP.Text End Sub End Class 


рдСрд▓ рдж рдмреЗрд╕реНрдЯ! рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╕реНрдирд┐рдкреЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдП!

Source: https://habr.com/ru/post/In180023/


All Articles