āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻ—āĻ¤ PHDays 9 āĻ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ¯āĻžāĻ¸ āĻĒāĻžāĻŽā§āĻĒāĻŋāĻ‚ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻ¨ā§āĻŸ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ - āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻž āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻž. āĻ¸āĻžāĻ‡āĻŸā§‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻ›āĻŋāĻ˛ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¸āĻš (āĻ•ā§‹āĻ¨ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¨ā§‡āĻ‡, āĻ¨āĻŋāĻŽā§āĻ¨ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž, āĻ‰āĻšā§āĻš āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž), āĻāĻ•āĻ‡ āĻļāĻŋāĻ˛ā§āĻĒ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ…āĻ¨ā§āĻ•āĻ°āĻŖ āĻ•āĻ°ā§‡: āĻšāĻžāĻĒā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦāĻžāĻ¯āĻŧā§ āĻāĻ•āĻŸāĻŋ āĻŦā§‡āĻ˛ā§āĻ¨ā§‡ āĻĒāĻžāĻŽā§āĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ (āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛)āĨ¤

āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§‡āĻ“, āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ°āĻšāĻ¨āĻž āĻāĻ•āĻ‡ āĻ›āĻŋāĻ˛: āĻ¸āĻŋāĻŽā§‡āĻ¨ā§āĻ¸ āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ S7-300 āĻ¸āĻŋāĻ°āĻŋāĻœ; āĻœāĻ°ā§āĻ°ā§€ āĻĄāĻŋāĻĢā§āĻ˛ā§‡āĻļāĻ¨ āĻŦā§‹āĻ¤āĻžāĻŽ āĻāĻŦāĻ‚ āĻšāĻžāĻĒ āĻŽāĻžāĻĒāĻžāĻ° āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ (āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻĄāĻŋāĻœāĻŋāĻŸāĻžāĻ˛ āĻ‡āĻ¨āĻĒā§āĻŸ (āĻĄāĻŋāĻ†āĻ‡) āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤); āĻŦāĻžāĻ¤āĻžāĻ¸ā§‡āĻ° āĻ¸ā§āĻĢā§€āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĢā§āĻ˛ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ­āĻžāĻ˛āĻ­ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ (āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ (āĻĄāĻŋāĻ“) āĻāĻ° āĻĄāĻŋāĻœāĻŋāĻŸāĻžāĻ˛ āĻ†āĻ‰āĻŸāĻĒā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤) - āĻ¨ā§€āĻšā§‡āĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĻā§‡āĻ–ā§āĻ¨āĨ¤

āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ, āĻĒā§āĻ°ā§‡āĻ¸āĻžāĻ° āĻ°āĻŋāĻĄāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ° āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡, āĻŦāĻ˛āĻŸāĻŋāĻ•ā§‡ āĻĄāĻŋāĻĢā§āĻ˛ā§‡āĻŸ āĻŦāĻž āĻ¸ā§āĻĢā§€āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ (āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ­āĻžāĻ˛āĻ­āĻ—ā§āĻ˛āĻŋ āĻ–ā§‹āĻ˛āĻž āĻāĻŦāĻ‚ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡āĻ›ā§‡)āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻŽā§‹āĻĄ āĻ›āĻŋāĻ˛, āĻ¯āĻž āĻ•ā§‹āĻ¨āĻ“ āĻŦāĻŋāĻ§āĻŋāĻ¨āĻŋāĻˇā§‡āĻ§ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ­āĻžāĻ˛āĻ­āĻ—ā§āĻ˛āĻŋāĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋ āĻāĻ‡ āĻŽā§‹āĻĄāĻŸāĻŋ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻžāĻ° āĻœāĻŸāĻŋāĻ˛āĻ¤āĻžāĻ¯āĻŧ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ›āĻŋāĻ˛: āĻ…āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻž āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸āĻšāĻœ āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ‰āĻšā§āĻš āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡ āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒāĻ­āĻžāĻŦā§‡ āĻ†āĻ°āĻ“ āĻ•āĻ āĻŋāĻ¨ āĻ›āĻŋāĻ˛āĨ¤

āĻ›āĻ¯āĻŧāĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻžāĻāĻšāĻŸāĻŋāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻĻā§āĻ‡ āĻĻāĻŋāĻ¨ā§‡; āĻĒā§āĻ°āĻĨāĻŽ āĻ¸ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€ 233 āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡ (āĻ¤āĻŋāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻ•āĻžāĻŸāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨)āĨ¤ āĻ¤āĻŋāĻ¨āĻœāĻ¨ āĻŦāĻŋāĻœāĻ¯āĻŧā§€: āĻ†āĻŽāĻŋ āĻ°āĻžāĻ–āĻŋ - a1exdandy, II - Rubikoid, III - ZeāĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, PHDay-āĻāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•ā§‡āĻ‰āĻ‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻœā§āĻ¨ā§‡āĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻ āĻŋāĻ¨ āĻ•āĻžāĻœāĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻāĻ• āĻŽāĻžāĻ¸ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻžāĻœāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻĒāĻ¤āĻžāĻ•āĻžāĻŸāĻŋ āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻŸāĻŋ āĻŦāĻŋāĻļāĻĻāĻ­āĻžāĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ•āĻžāĻŸā§‡āĻ° āĻ¨ā§€āĻšā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ• āĻŽāĻžāĻ¸ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŋāĻ¤āĻĻā§‡āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻŋ, āĻāĻŸāĻŋ āĻĄāĻŋāĻœāĻŋāĻŸāĻžāĻ˛ āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ°āĻŋāĻŸāĻŋ āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ° āĻ…ā§āĻ¯āĻžāĻ˛ā§‡āĻ•ā§āĻ¸āĻŋ āĻ•ā§‹āĻ­āĻ°āĻŋāĻāĻ¨āĻŋāĻ– (a1exdandy) āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ—ā§‡āĻ›ā§‡, āĻ¯āĻŋāĻ¨āĻŋ PHDays āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ¯āĻŧ XNUMXāĻŽ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤ āĻ¨ā§€āĻšā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¸āĻš āĻ¤āĻžāĻ° āĻĒāĻžāĻ ā§āĻ¯ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ›āĻŋāĨ¤

āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋāĻ¤ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  • block_upload_traffic.pcapng
  • DB100.bin
  • hints.txt

hints.txt āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ•āĻžāĻœāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ‚ āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  1. āĻĒā§‡āĻŸā§āĻ°ā§‹āĻ­āĻŋāĻš āĻ—āĻ¤āĻ•āĻžāĻ˛ āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦāĻ˛ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ PlcSim āĻĨā§‡āĻ•ā§‡ āĻ§āĻžāĻĒ 7 āĻ āĻŦā§āĻ˛āĻ• āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤
  2. āĻ¸āĻŋāĻŽā§‡āĻ¨ā§āĻ¸ āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• S7-300 āĻ¸āĻŋāĻ°āĻŋāĻœā§‡āĻ° PLC āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤
  3. PlcSim āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ PLC āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ° āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ Siemens S7 PLC-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻāĻŦāĻ‚ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

DB100.bin āĻĢāĻžāĻ‡āĻ˛ā§‡ DB100 PLC āĻĄā§‡āĻŸāĻž āĻŦā§āĻ˛āĻ• āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡: 00000000: 0100 0102 6e02 0401 0206 0100 0101 0102 .....n......... 00000010: 1002 0501 0202 2002āĨ¤ ..... ......... 0501: 0206 0100 0102 00000020 0102 7702 0401 0206a0100 ..w............. 0103: 0102 0 02 00000030 0501 0202 ................... 1602 0501............0206. 0100: 0104 0102 00000040 7502 0401 0206 0100 0105 ......... & ..... 0102: 0C02 0501 00000050 0202 1602 0501 0206 0100 āĻāĻ˛ ......... 0106āĨ¤ .. 0102 : 3402 4 00000060 0401 0206a0100 0107 0102 2602 ................ 0501: 0202 00000070 4 02a 0501 0206 0100 0108 .......... 0102a3302: 0401 3b 00000080 0206 0100 0109 0102 0 ......".....F... 02b0501: 0202 1602 00000090c 0501 0206 0100 ... 010 .......... .. 0102c3702: 0401d 0206 7a000000 0 0100 010 0102 2202................ 0501d0202: 4602 0501e 000000 0d0206 0100 010 0102 3302 0401 0206 0100.. .... 3e000000: 0 010 0102 0 02 0501 0202 1602 ........#...... 0501f0206: 000000 0 0100 010 0102 6..... ..... 02: 0401 0206 0100 010 000000 0 0102 1102 ......%......... 0501: 0202 2302 0501 0206 0100 000000..... .....&. 0: 0110 0102 3502c0401 0206 0100 0111 ....L......

āĻ¨āĻžāĻŽ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡, block_upload_traffic.pcapng āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ-āĻ¤ā§‡ āĻŦā§āĻ˛āĻ• āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ•ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŽā§āĻĒ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¯ā§‡ āĻ¸āĻŽā§āĻŽā§‡āĻ˛āĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻāĻ‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ• āĻĄāĻžāĻŽā§āĻĒāĻŸāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ†āĻ°āĻ“ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ•āĻ āĻŋāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, TeslaSCADA2 āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻĢāĻžāĻ‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻŦā§‹āĻāĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻāĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻŦā§‹āĻāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ›āĻŋāĻ˛ āĻ¯ā§‡ RC4 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻĄāĻžāĻŽā§āĻĒāĻŸāĻŋ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§€ āĻ•ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤ āĻ¸āĻžāĻ‡āĻŸā§‡ āĻĄā§‡āĻŸāĻž āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻĄāĻžāĻŽā§āĻĒ S7 āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻŋ Snap7 āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŽā§‹ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻĄāĻžāĻŽā§āĻĒ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ āĻŦā§āĻ˛āĻ• āĻ¨āĻŋāĻˇā§āĻ•āĻžāĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĄāĻžāĻŽā§āĻĒā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĻā§‡āĻ–ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻŦā§āĻāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻ¤ā§‡ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻŦā§āĻ˛āĻ• OB1, FC1, FC2 āĻāĻŦāĻ‚ FC3 āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻāĻ‡ āĻŦā§āĻ˛āĻ• āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•. āĻāĻŸāĻŋ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡, āĻĒā§‚āĻ°ā§āĻŦā§‡ pcapng āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ āĻĨā§‡āĻ•ā§‡ pcap-āĻ āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

#!/usr/bin/env python2

import struct
from scapy.all import *

packets = rdpcap('block_upload_traffic.pcap')
s7_hdr_struct = '>BBHHHHBB'
s7_hdr_sz = struct.calcsize(s7_hdr_struct)
tpkt_cotp_sz = 7
names = iter(['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin'])
buf = ''

for packet in packets:
    if packet.getlayer(IP).src == '10.0.102.11':
        tpkt_cotp_s7 = str(packet.getlayer(TCP).payload)
        if len(tpkt_cotp_s7) < tpkt_cotp_sz + s7_hdr_sz:
            continue
        s7 = tpkt_cotp_s7[tpkt_cotp_sz:]
        s7_hdr = s7[:s7_hdr_sz]
        param_sz = struct.unpack(s7_hdr_struct, s7_hdr)[4]
        s7_param = s7[12:12+param_sz]
        s7_data = s7[12+param_sz:]
        if s7_param in ('x1ex00', 'x1ex01'):  # upload
            buf += s7_data[4:]
        elif s7_param == 'x1f':
            with open(next(names), 'wb') as f:
                f.write(buf)
            buf = ''

āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻŦāĻžāĻ‡āĻŸ 70 70 (āĻĒāĻŋāĻĒāĻŋ) āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻļāĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ…ā§āĻ¯āĻžāĻ¸āĻžāĻ‡āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§‡āĻ¯āĻŧ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ° āĻœāĻ¨ā§āĻ¯ PlcSim āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻŦā§āĻ˛āĻ• āĻĨā§‡āĻ•ā§‡ āĻŽāĻžāĻ¨āĻŦ-āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž

āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻŽā§‚āĻ˛āĻ• āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ (= Q 7) āĻ¸āĻš āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§‡ S0.0-PlcSim āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŽā§āĻ˛ā§‡āĻŸāĻ°ā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ PLC āĻ•ā§‡ example.plc āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĻā§‡āĻ–ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻšāĻœā§‡āĻ‡ 70 70 āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻļā§āĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻ†āĻ—ā§‡ āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻ†āĻ—ā§‡, āĻĻā§ƒāĻļā§āĻ¯āĻ¤, āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻ†āĻ•āĻžāĻ° 4-āĻŦāĻžāĻ‡āĻŸ āĻ˛āĻŋāĻŸāĻ˛-āĻāĻ¨ā§āĻĄāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻ†āĻŽāĻ°āĻž āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ—āĻ āĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°, āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻāĻ¸7 āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĒāĻĄāĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•āĻ°ā§āĻŽ āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

  1. āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž S7-PlcSim-āĻ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻĄāĻžāĻŽā§āĻĒ āĻĨā§‡āĻ•ā§‡ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŽāĻŋāĻ˛āĻ¤ā§‡ āĻšāĻŦā§‡ (āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ) āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€ (OB1, FC1, FC2, FC3)āĨ¤
  2. PLC āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨āĨ¤
  3. āĻ†āĻŽāĻ°āĻž āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻĄāĻžāĻŽā§āĻĒ āĻĨā§‡āĻ•ā§‡ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŋāĨ¤ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻļā§āĻ°ā§ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤
  4. āĻ†āĻŽāĻ°āĻž āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ S7-PlcSim āĻ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ°ā§‡ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻĻā§‡āĻ–āĻŋāĨ¤

āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§‹āĻĄ āĻĻāĻŋāĻ¯āĻŧā§‡:

with open('original.plc', 'rb') as f:
    plc = f.read()
blocks = []
for fname in ['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin']:
    with open(fname, 'rb') as f:
        blocks.append(f.read())

i = plc.find(b'pp')
for block in blocks:
    plc = plc[:i] + block + plc[i+len(block):]
    i = plc.find(b'pp', i + 1)

with open('target.plc', 'wb') as f:
    f.write(plc)

āĻ†āĻ˛ā§‡āĻ•ā§āĻ¸āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻ°āĻ“ āĻ•āĻ āĻŋāĻ¨, āĻ¤āĻŦā§‡ āĻāĻ–āĻ¨āĻ“ āĻ¸āĻ āĻŋāĻ• āĻĒāĻĨ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ°āĻž NetToPlcSim āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡ āĻ¯āĻžāĻ¤ā§‡ PlcSim āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, Snap7 āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ PlcSim-āĻ āĻŦā§āĻ˛āĻ• āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻŦāĻŋāĻ•āĻžāĻļ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ PlcSim āĻĨā§‡āĻ•ā§‡ āĻāĻ‡ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

S7-PlcSim-āĻ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ–ā§‹āĻ˛āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŋāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ“āĻ­āĻžāĻ°āĻ°āĻžāĻ‡āĻŸ āĻ•āĻ°āĻž āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ˛āĻ• FC1 āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻŦāĻŋāĻļā§‡āĻˇāĻ­āĻžāĻŦā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–ā§āĻ¯ āĻšāĻ˛ #TEMP0 āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛, āĻ¯ā§‡āĻŸāĻŋ āĻšāĻžāĻ˛ā§ āĻšāĻ˛ā§‡ M2.2 āĻāĻŦāĻ‚ M2.3 āĻŦāĻŋāĻŸ āĻŽā§‡āĻŽāĻ°āĻŋ āĻŽāĻžāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ PLC āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻ•ā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‹āĻĄā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĨ¤ #TEMP0 āĻŽāĻžāĻ¨āĻŸāĻŋ FC3 āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ‡āĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻĒāĻĻāĻšāĻŋāĻšā§āĻ¨ā§‡: āĻĒāĻœāĻŋāĻŸāĻŋāĻ­ āĻšā§āĻ¯āĻžāĻ• āĻĄā§‡āĻ¸ 9 āĻ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻšā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ FC3 āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻŦā§āĻāĻ¤ā§‡ āĻšāĻŦā§‡ āĻ•ā§€ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ° āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻĒā§āĻ°āĻ¤āĻŋāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§‡ āĻ˛ā§‹ āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ°āĻŋāĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡ āĻĒāĻŋāĻāĻ˛āĻ¸āĻŋ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ āĻ¸āĻžāĻœāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ #TEMP0 āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻŽāĻžāĻ¨ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, DB1 āĻŦā§āĻ˛āĻ•ā§‡ āĻ†āĻŽāĻžāĻ° āĻ¨āĻŋāĻ¨āĻœāĻž āĻ­āĻžāĻŦā§‡ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ˛ā§‡āĻ–āĻžāĻ‡ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›āĻŋāĻ˛ā§ˇ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŽāĻžāĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ¸āĻšāĻœ āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻŦā§āĻ˛āĻ• āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ° āĻ—āĻ­ā§€āĻ° āĻœā§āĻžāĻžāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡, āĻ‰āĻšā§āĻš āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¸ā§āĻ¤āĻ°ā§‡, āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻ…āĻ¨ā§‡āĻ• āĻŦā§‡āĻļāĻŋ āĻ•āĻ āĻŋāĻ¨ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ STL āĻ­āĻžāĻˇāĻžāĻ° āĻœāĻŸāĻŋāĻ˛āĻ¤āĻž āĻŦā§‹āĻāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ (S7 PLC āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ°āĻžāĻ° āĻ‰āĻĒāĻžāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ)āĨ¤

āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻŦā§āĻ˛āĻ• FC3

STL āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ¯āĻŧ FC3 āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§:

      L     B#16#0
      T     #TEMP13
      T     #TEMP15
      L     P#DBX 0.0
      T     #TEMP4
      CLR   
      =     #TEMP14
M015: L     #TEMP4
      LAR1  
      OPN   DB   100
      L     DBLG
      TAR1  
      <=D   
      JC    M016
      L     DW#16#0
      T     #TEMP0
      L     #TEMP6
      L     W#16#0
      <>I   
      JC    M00d
      L     P#DBX 0.0
      LAR1  
M00d: L     B [AR1,P#0.0]
      T     #TEMP5
      L     W#16#1
      ==I   
      JC    M007
      L     #TEMP5
      L     W#16#2
      ==I   
      JC    M008
      L     #TEMP5
      L     W#16#3
      ==I   
      JC    M00f
      L     #TEMP5
      L     W#16#4
      ==I   
      JC    M00e
      L     #TEMP5
      L     W#16#5
      ==I   
      JC    M011
      L     #TEMP5
      L     W#16#6
      ==I   
      JC    M012
      JU    M010
M007: +AR1  P#1.0
      L     P#DBX 0.0
      LAR2  
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      +AR2  
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M003
      JU    M001
      JU    M002
      JU    M004
M003: JU    M005
M001: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP0
      JU    M006
M002: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP1
      JU    M006
M004: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP2
      JU    M006
M00f: +AR1  P#1.0
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      T     #TEMP11
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      TAR1  #TEMP4
      OPN   DB   101
      L     P#DBX 0.0
      LAR1  
      L     #TEMP11
      +AR1  
      LAR2  #TEMP9
      L     B [AR2,P#0.0]
      T     B [AR1,P#0.0]
      L     #TEMP4
      LAR1  
      JU    M006
M008: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP3
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M009
      JU    M00b
      JU    M00a
      JU    M00c
M009: JU    M005
M00b: L     #TEMP3
      T     #TEMP0
      JU    M006
M00a: L     #TEMP3
      T     #TEMP1
      JU    M006
M00c: L     #TEMP3
      T     #TEMP2
      JU    M006
M00e: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      AW    
      INVI  
      T     #TEMP12
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      OW    
      L     #TEMP12
      AW    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M011: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      -I    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M012: L     #TEMP15
      INC   1
      T     #TEMP15
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      ==I   
      JCN   M013
      JU    M014
M013: L     P#DBX 0.0
      LAR1  
      T     #TEMP4
      L     B#16#0
      T     #TEMP6
      JU    M006
M014: L     #TEMP4
      LAR1  
      L     #TEMP13
      L     L#1
      +I    
      T     #TEMP13
      JU    M006
M006: L     #TEMP0
      T     MB   100
      L     #TEMP1
      T     MB   101
      L     #TEMP2
      T     MB   102
      +AR1  P#1.0
      L     #TEMP6
      +     1
      T     #TEMP6
      JU    M005
M010: L     P#DBX 0.0
      LAR1  
      L     0
      T     #TEMP6
      TAR1  #TEMP4
M005: TAR1  #TEMP4
      CLR   
      =     #TEMP16
      L     #TEMP13
      L     L#20
      ==I   
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M017
      L     #TEMP13
      L     L#20
      <I    
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M018
      JU    M019
M017: SET   
      =     #TEMP14
      JU    M016
M018: CLR   
      =     #TEMP14
      JU    M016
M019: CLR   
      O     #TEMP14
      =     #RET_VAL
      JU    M015
M016: CLR   
      O     #TEMP14
      =     #RET_VAL

āĻ•ā§‹āĻĄāĻŸāĻŋ āĻŦā§‡āĻļ āĻĻā§€āĻ°ā§āĻ˜ āĻāĻŦāĻ‚ STL āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ…āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•āĻžāĻ°ā§‹ āĻ•āĻžāĻ›ā§‡ āĻœāĻŸāĻŋāĻ˛ āĻŽāĻ¨ā§‡ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻ•ā§‹āĻ¨ āĻŽāĻžāĻ¨ā§‡ āĻ¨ā§‡āĻ‡; STL āĻ­āĻžāĻˇāĻžāĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻāĻŦāĻ‚ āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡: S7-300 āĻāĻŦāĻ‚ S7-400 āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻŦā§ƒāĻ¤āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž (STL). āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻĒāĻ°ā§‡ āĻāĻ•āĻ‡ āĻ•ā§‹āĻĄ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦ - āĻ˛ā§‡āĻŦā§‡āĻ˛ āĻāĻŦāĻ‚ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻ¨āĻžāĻŽ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ›ā§ STL āĻ­āĻžāĻˇāĻž āĻ—āĻ āĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĨ¤ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ¨ā§‹āĻŸ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡ āĻĨāĻžāĻ•āĻž āĻŦā§āĻ˛āĻ•āĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž DB100 āĻŦā§āĻ˛āĻ•ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ•āĻŋāĻ›ā§ āĻŦāĻžāĻ‡āĻŸāĻ•ā§‹āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻŋāĨ¤ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ•ā§‹āĻĄā§‡āĻ° 1 āĻŦāĻžāĻ‡āĻŸ āĻāĻŦāĻ‚ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻŦāĻžāĻ‡āĻŸ, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻŸ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻŋāĻŦā§‡āĻšāĻŋāĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ†āĻ›ā§‡; āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ X āĻāĻŦāĻ‚ Y āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŽāĻ¨ā§‹āĻ¨ā§€āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻĒāĻ°ā§‡ āĻ•ā§‹āĻĄ]

# ИĐŊиŅ†Đ¸Đ°ĐģиСаŅ†Đ¸Ņ Ņ€Đ°ĐˇĐģиŅ‡ĐŊŅ‹Ņ… ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Ņ…
      L     B#16#0
      T     #CHECK_N        # ĐĄŅ‡ĐĩŅ‚Ņ‡Đ¸Đē ŅƒŅĐŋĐĩŅˆĐŊĐž ĐŋŅ€ĐžĐšĐ´ĐĩĐŊĐŊŅ‹Ņ… ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐžĐē
      T     #COUNTER_N      # ĐĄŅ‡ĐĩŅ‚Ņ‡Đ¸Đē ОйŅ‰ĐĩĐŗĐž ĐēĐžĐģиŅ‡ĐĩŅŅ‚ва ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐžĐē
      L     P#DBX 0.0
      T     #POINTER        # ĐŖĐēаСаŅ‚ĐĩĐģŅŒ ĐŊĐ° Ņ‚ĐĩĐēŅƒŅ‰ŅƒŅŽ иĐŊŅŅ‚Ņ€ŅƒĐēŅ†Đ¸ŅŽ
      CLR   
      =     #PRE_RET_VAL

# ОŅĐŊОвĐŊОК Ņ†Đ¸ĐēĐģ Ņ€Đ°ĐąĐžŅ‚Ņ‹ иĐŊŅ‚ĐĩŅ€ĐŋŅ€ĐĩŅ‚Đ°Ņ‚ĐžŅ€Đ° йаКŅ‚-ĐēОда
LOOP: L     #POINTER
      LAR1  
      OPN   DB   100
      L     DBLG
      TAR1  
      <=D                   # ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° вŅ‹Ņ…Ода ŅƒĐēаСаŅ‚ĐĩĐģŅ Са ĐŋŅ€ĐĩĐ´ĐĩĐģŅ‹ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹
      JC    FINISH
      L     DW#16#0
      T     #REG0
      L     #TEMP6
      L     W#16#0
      <>I   
      JC    M00d
      L     P#DBX 0.0
      LAR1  

# КоĐŊŅŅ‚Ņ€ŅƒĐēŅ†Đ¸Ņ switch - case Đ´ĐģŅ ОйŅ€Đ°ĐąĐžŅ‚Đēи Ņ€Đ°ĐˇĐģиŅ‡ĐŊŅ‹Ņ… ĐžĐŋĐēОдОв
M00d: L     B [AR1,P#0.0]
      T     #OPCODE
      L     W#16#1
      ==I   
      JC    OPCODE_1
      L     #OPCODE
      L     W#16#2
      ==I   
      JC    OPCODE_2
      L     #OPCODE
      L     W#16#3
      ==I   
      JC    OPCODE_3
      L     #OPCODE
      L     W#16#4
      ==I   
      JC    OPCODE_4
      L     #OPCODE
      L     W#16#5
      ==I   
      JC    OPCODE_5
      L     #OPCODE
      L     W#16#6
      ==I   
      JC    OPCODE_6
      JU    OPCODE_OTHER

# ОбŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē ĐžĐŋĐēОда 01: СаĐŗŅ€ŅƒĐˇĐēĐ° СĐŊĐ°Ņ‡ĐĩĐŊиŅ иС DB101[X] в Ņ€ĐĩĐŗиŅŅ‚Ņ€ Y
# OP01(X, Y): REG[Y] = DB101[X]
OPCODE_1: +AR1  P#1.0
      L     P#DBX 0.0
      LAR2  
      L     B [AR1,P#0.0]   # ЗаĐŗŅ€ŅƒĐˇĐēĐ° Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚Đ° X (иĐŊĐ´ĐĩĐēŅ в DB101)
      L     C#8
      *I    
      +AR2  
      +AR1  P#1.0
      L     B [AR1,P#0.0]   # ЗаĐŗŅ€ŅƒĐˇĐēĐ° Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚Đ° Y (иĐŊĐ´ĐĩĐēŅ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°)
      JL    M003            # АĐŊĐ°ĐģĐžĐŗ switch - case ĐŊĐ° ĐžŅĐŊОвĐĩ СĐŊĐ°Ņ‡ĐĩĐŊиŅ Y
      JU    M001            # Đ´ĐģŅ вŅ‹ĐąĐžŅ€Đ° ĐŊĐĩОйŅ…ОдиĐŧĐžĐŗĐž Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ° Đ´ĐģŅ СаĐŋиŅĐ¸.
      JU    M002            # ПодобĐŊŅ‹Đĩ ĐēĐžĐŊŅŅ‚Ņ€ŅƒĐēŅ†Đ¸Đ¸ иŅĐŋĐžĐģŅŒĐˇŅƒŅŽŅ‚ŅŅ и в Đ´Ņ€ŅƒĐŗиŅ…
      JU    M004            # ĐžĐŋĐĩŅ€Đ°Ņ†Đ¸ŅŅ… ĐŊиĐļĐĩ Đ´ĐģŅ Đ°ĐŊĐ°ĐģĐžĐŗиŅ‡ĐŊŅ‹Ņ… Ņ†ĐĩĐģĐĩĐš
M003: JU    LOOPEND
M001: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG0           # ЗаĐŋиŅŅŒ СĐŊĐ°Ņ‡ĐĩĐŊиŅ DB101[X] в REG[0]
      JU    PRE_LOOPEND
M002: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG1           # ЗаĐŋиŅŅŒ СĐŊĐ°Ņ‡ĐĩĐŊиŅ DB101[X] в REG[1]
      JU    PRE_LOOPEND
M004: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG2           # ЗаĐŋиŅŅŒ СĐŊĐ°Ņ‡ĐĩĐŊиŅ DB101[X] в REG[2]
      JU    PRE_LOOPEND

# ОбŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē ĐžĐŋĐēОда 02: СаĐŗŅ€ŅƒĐˇĐēĐ° СĐŊĐ°Ņ‡ĐĩĐŊиŅ X в Ņ€ĐĩĐŗиŅŅ‚Ņ€ Y
# OP02(X, Y): REG[Y] = X
OPCODE_2: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP3
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M009
      JU    M00b
      JU    M00a
      JU    M00c
M009: JU    LOOPEND
M00b: L     #TEMP3
      T     #REG0
      JU    PRE_LOOPEND
M00a: L     #TEMP3
      T     #REG1
      JU    PRE_LOOPEND
M00c: L     #TEMP3
      T     #REG2
      JU    PRE_LOOPEND

# ОĐŋĐēОд 03 ĐŊĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ в ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧĐĩ, ĐŋĐžŅŅ‚ĐžĐŧŅƒ ĐŋŅ€ĐžĐŋŅƒŅŅ‚иĐŧ ĐĩĐŗĐž
...

# ОбŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē ĐžĐŋĐēОда 04: ŅŅ€Đ°Đ˛ĐŊĐĩĐŊиĐĩ Ņ€ĐĩĐŗиŅŅ‚Ņ€ĐžĐ˛ X и Y
# OP04(X, Y): REG[0] = 0; REG[X] = (REG[X] == REG[Y])
OPCODE_4: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7          # ĐŋĐĩŅ€Đ˛Ņ‹Đš Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ - X
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          # REG[X]
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9          # REG[X]
      LAR2  #TEMP10         # REG[Y]
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      AW    
      INVI  
      T     #TEMP12         # ~(REG[Y] & REG[X])
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      OW    
      L     #TEMP12
      AW                    # (~(REG[Y] & REG[X])) & (REG[Y] | REG[X]) - Đ°ĐŊĐ°ĐģĐžĐŗ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи ĐŊĐ° Ņ€Đ°Đ˛ĐĩĐŊŅŅ‚вО
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #REG0
      L     MB   101
      T     #REG1
      L     MB   102
      T     #REG2
      L     #POINTER
      LAR1  
      JU    PRE_LOOPEND

# ОбŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē ĐžĐŋĐēОда 05: вŅ‹Ņ‡Đ¸Ņ‚Đ°ĐŊиĐĩ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ° Y иС X
# OP05(X, Y): REG[0] = 0; REG[X] = REG[X] - REG[Y]
OPCODE_5: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          # REG[X]
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      -I                    # ACCU1 = ACCU2 - ACCU1, REG[X] - REG[Y]
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #REG0
      L     MB   101
      T     #REG1
      L     MB   102
      T     #REG2
      L     #POINTER
      LAR1  
      JU    PRE_LOOPEND

# ОбŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē ĐžĐŋĐēОда 06: иĐŊĐēŅ€ĐĩĐŧĐĩĐŊŅ‚ #CHECK_N ĐŋŅ€Đ¸ Ņ€Đ°Đ˛ĐĩĐŊŅŅ‚вĐĩ Ņ€ĐĩĐŗиŅŅ‚Ņ€ĐžĐ˛ X и Y
# OP06(X, Y): #CHECK_N += (1 if REG[X] == REG[Y] else 0)
OPCODE_6: L     #COUNTER_N
      INC   1
      T     #COUNTER_N
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7          #  REG[X]     
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          #  REG[X]  
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9          # REG[Y]
      LAR2  #TEMP10         # REG[X]
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      ==I   
      JCN   M013
      JU    M014
M013: L     P#DBX 0.0
      LAR1  
      T     #POINTER
      L     B#16#0
      T     #TEMP6
      JU    PRE_LOOPEND
M014: L     #POINTER
      LAR1  
# ИĐŊĐēŅ€ĐĩĐŧĐĩĐŊŅ‚ СĐŊĐ°Ņ‡ĐĩĐŊиŅ #CHECK_N
      L     #CHECK_N
      L     L#1
      +I    
      T     #CHECK_N
      JU    PRE_LOOPEND

PRE_LOOPEND: L     #REG0
      T     MB   100
      L     #REG1
      T     MB   101
      L     #REG2
      T     MB   102
      +AR1  P#1.0
      L     #TEMP6
      +     1
      T     #TEMP6
      JU    LOOPEND

OPCODE_OTHER: L     P#DBX 0.0
      LAR1  
      L     0
      T     #TEMP6
      TAR1  #POINTER

LOOPEND: TAR1  #POINTER
      CLR   
      =     #TEMP16
      L     #CHECK_N
      L     L#20
      ==I   
      S     #TEMP16
      L     #COUNTER_N
      ==I   
      A     #TEMP16
# ВŅĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи ĐŋŅ€ĐžĐšĐ´ĐĩĐŊŅ‹, ĐĩŅĐģи #CHECK_N == #COUNTER_N == 20
      JC    GOOD
      L     #CHECK_N
      L     L#20
      <I    
      S     #TEMP16
      L     #COUNTER_N
      ==I   
      A     #TEMP16
      JC    FAIL
      JU    M019
GOOD: SET   
      =     #PRE_RET_VAL
      JU    FINISH
FAIL: CLR   
      =     #PRE_RET_VAL
      JU    FINISH
M019: CLR   
      O     #PRE_RET_VAL
      =     #RET_VAL
      JU    LOOP
FINISH: CLR   
      O     #PRE_RET_VAL
      =     #RET_VAL

āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ§āĻžāĻ°āĻŖāĻž āĻĒā§‡āĻ¯āĻŧā§‡, āĻ†āĻ¸ā§āĻ¨ DB100 āĻŦā§āĻ˛āĻ•ā§‡ āĻŦāĻžāĻ‡āĻŸāĻ•ā§‹āĻĄ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻĄāĻŋāĻ¸āĻ¸ā§‡āĻŽā§āĻŦāĻ˛āĻžāĻ° āĻ˛āĻŋāĻ–āĻŋ:

import string
alph = string.ascii_letters + string.digits

with open('DB100.bin', 'rb') as f:
    m = f.read()

pc = 0

while pc < len(m):
    op = m[pc]
    if op == 1:
        print('R{} = DB101[{}]'.format(m[pc + 2], m[pc + 1]))
        pc += 3
    elif op == 2:
        c = chr(m[pc + 1])
        c = c if c in alph else '?'
        print('R{} = {:02x} ({})'.format(m[pc + 2], m[pc + 1], c))
        pc += 3
    elif op == 4:
        print('R0 = 0; R{} = (R{} == R{})'.format(
            m[pc + 1], m[pc + 1], m[pc + 2]))
        pc += 3
    elif op == 5:
        print('R0 = 0; R{} = R{} - R{}'.format(
            m[pc + 1], m[pc + 1], m[pc + 2]))
        pc += 3
    elif op == 6:
        print('CHECK (R{} == R{})n'.format(
            m[pc + 1], m[pc + 2]))
        pc += 3
    else:
        print('unk opcode {}'.format(op))
        break

āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ•ā§‹āĻĄ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ:

āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ•ā§‹āĻĄ

R1 = DB101[0]
R2 = 6e (n)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[1]
R2 = 10 (?)
R0 = 0; R1 = R1 - R2
R2 = 20 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[2]
R2 = 77 (w)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[3]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[4]
R2 = 75 (u)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[5]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[6]
R2 = 34 (4)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[7]
R2 = 26 (?)
R0 = 0; R1 = R1 - R2
R2 = 4c (L)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[8]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[9]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[10]
R2 = 37 (7)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[11]
R2 = 22 (?)
R0 = 0; R1 = R1 - R2
R2 = 46 (F)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[12]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[13]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[14]
R2 = 6d (m)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[15]
R2 = 11 (?)
R0 = 0; R1 = R1 - R2
R2 = 23 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[16]
R2 = 35 (5)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[17]
R2 = 12 (?)
R0 = 0; R1 = R1 - R2
R2 = 25 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[18]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[19]
R2 = 26 (?)
R0 = 0; R1 = R1 - R2
R2 = 4c (L)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻāĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŽāĻžāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ DB101 āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ…āĻ•ā§āĻˇāĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻšā§‡āĻ• āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ˛āĻžāĻ‡āĻ¨ āĻšāĻ˛: n0w u 4r3 7h3 m4573rāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻŦā§āĻ˛āĻ• DB101 āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ PLC āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻŦā§‡āĻ˛ā§āĻ¨āĻŸāĻŋ āĻŦāĻŋāĻ¸ā§āĻĢā§‹āĻ°āĻŋāĻ¤ āĻŦāĻž āĻĄāĻŋāĻĢā§āĻ˛ā§‡āĻŸ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡āĨ¤â€¨

āĻāĻ–āĻžāĻ¨ā§‡āĻ‡ āĻļā§‡āĻˇ! āĻ…ā§āĻ¯āĻžāĻ˛ā§‡āĻ•ā§āĻ¸āĻŋ āĻāĻ•āĻŸāĻŋ āĻļāĻŋāĻ˛ā§āĻĒ āĻ¨āĻŋāĻ¨āĻœāĻžāĻ° āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ‰āĻšā§āĻš āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻœā§āĻžāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ :) āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻœāĻ¯āĻŧā§€āĻ•ā§‡ āĻ¸ā§āĻŽāĻ°āĻŖā§€āĻ¯āĻŧ āĻĒā§āĻ°āĻ¸ā§āĻ•āĻžāĻ° āĻĒāĻžāĻ āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ…āĻ¨ā§‡āĻ• āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ!

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨